{"version":3,"sources":["components/form/formComponents/repeatableRoom/RoomCard.module.css","config.js","utils/mock.js","services/apiService.js","redux/modules/listing.js","redux/modules/agent.js","redux/modules/formGeneration.js","redux/modules/office.js","redux/constants/AgentActions.js","redux/constants/CondoActions.js","redux/constants/GeneralActions.js","redux/constants/ListingActions.js","redux/constants/ImpersonationActions.js","redux/constants/SignalRTypes.js","redux/constants/UtilityActions.js","redux/middleware.js","redux/modules/acl.js","redux/modules/audit.js","utils/cookie.js","redux/reducers/application/Authentication.js","redux/reducers/data/Condo.js","helpers/Helpers.js","redux/modules/dataPortal.js","redux/modules/impersonation.js","redux/modules/photo.js","redux/modules/rowLock.js","redux/modules/signalR.js","redux/reducers/data/Team.js","redux/modules/teamsManagement.js","redux/modules/utility.js","utils/index.js","redux/modules/user.js","redux/reducer.js","redux/constants/TeamActions.js","redux/store.js","assets/images/image-not-available.png","redux/selectors/UserSelector.js","redux/selectors/ImpersonationSelector.js","redux/selectors/AclSelector.js","hooks/useAcl.js","components/tracking/GAEventTracking.jsx","components/general/topBar/Settings/FontSettings.jsx","components/general/topBar/Settings/ThemeSettings.jsx","components/general/topBar/Settings/VersionBuild.jsx","components/general/topBar/Settings/SettingsModal.jsx","components/general/topBar/TopBar.jsx","components/general/sideBar/NavToggle.jsx","components/general/header/Header.jsx","components/smartAdminUI/Modal.jsx","redux/selectors/TeamsManagementSelector.js","components/smartAdminUI/Button.jsx","components/table/actionButtons/TeamMemberRowActionButtons.jsx","components/table/TeamLeadersTable.jsx","components/smartAdminUI/Card.jsx","components/table/TeamMembersTable.jsx","components/impersonation/ListingImpersonation/ListingImpersonation.jsx","components/impersonation/ReqImpersonation.jsx","hooks/useObjectState.js","assets/images/covers/cover-7-lg.png","assets/images/covers/cover-8-lg.png","assets/images/logos/P9LogoWhite.png","assets/images/logos/pillars-white.png","components/general/sideBar/Sidebar.jsx","components/routes/RoutesWithCrumbs.jsx","redux/selectors/AuditSelector.js","components/table/AuditSubTable.jsx","components/smartAdminUI/input/TableSearchInputGroup.jsx","components/table/avatar/AgentAvatar.jsx","components/table/AuditTable.jsx","components/smartAdminUI/Panel.jsx","containers/auditLog/AuditLogPage.jsx","redux/actionCreators/CondoCreator.js","redux/constants/GeneralConstants.js","redux/selectors/FormSelector.js","components/form/forms/CondoManagementForm.jsx","containers/condo/CondoManagementPage.jsx","components/form/formComponents/formSearch/FormSearchBar.jsx","components/loaders/FormLoader.jsx","components/form/formHelpers/FieldValidator.jsx","redux/selectors/FormDataSelector.js","components/form/formHelpers/ParentChildEnforcer.js","components/smartAdminUI/input/FormikInputGroup.jsx","redux/selectors/PhotoSelector.js","components/form/formHelpers/FormikFieldUpdater.jsx","redux/selectors/ListingSelector.js","redux/selectors/AgentSelector.js","components/form/formComponents/inputGroups/Address.jsx","components/form/formComponents/inputGroups/agentLookup/AgentLookup.jsx","hooks/usePrevious.js","components/form/formComponents/inputGroups/locationPlotter/LocationPlotterMap.jsx","components/form/formComponents/inputGroups/locationPlotter/MapModal.jsx","components/form/formComponents/inputGroups/locationPlotter/LocationPlotter.jsx","components/form/formComponents/inputGroups/officeLookup/OfficeLookup.jsx","components/form/formComponents/inputGroups/OneDMeasurement.jsx","components/form/formComponents/inputGroups/TwoDMeasurement.jsx","components/form/formComponents/inputGroups/supplements/components/SupplementComboBox.jsx","components/form/formComponents/inputGroups/supplements/components/SupplementDescription.jsx","components/form/formComponents/inputGroups/supplements/components/SupplementLink.jsx","components/form/formComponents/inputGroups/supplements/SupplementCard.jsx","components/form/formComponents/inputGroups/supplements/SupplementGrid.jsx","hooks/usePhotoManager.js","components/form/formComponents/imageCropper/imageDropZone/components/Edit.jsx","components/form/formComponents/imageCropper/imageDropZone/components/Remove.jsx","components/form/formComponents/imageCropper/imageDropZone/components/Photo.jsx","components/form/formComponents/imageCropper/imageDropZone/components/SortableItem.jsx","components/form/formComponents/imageCropper/imageDropZone/components/Grid.jsx","components/form/formComponents/imageCropper/imageDropZone/components/DroppableContainer.jsx","components/form/formComponents/imageCropper/imageDropZone/GridList.jsx","components/form/formComponents/imageCropper/imageDropZone/ImageDropZone.jsx","components/form/formComponents/imageCropper/imageCropperModal/cropperController/CropperController.jsx","components/form/formComponents/imageCropper/imageCropperModal/ImageCropperModal.jsx","components/form/formComponents/imageCropper/ImageCropper.jsx","components/smartAdminUI/Badge.jsx","components/form/formComponents/repeatableRoom/RoomMeasurement.jsx","components/form/formComponents/repeatableRoom/RoomCard.jsx","components/form/formComponents/repeatableRoom/RoomsGridList.jsx","components/form/formComponents/repeatableRoom/RepeatableRoom.jsx","components/form/formikComponents/FormikTextInput.jsx","components/form/formikComponents/FormikBoolean.jsx","components/form/formikComponents/FormikDatePicker.jsx","components/form/formikComponents/FormikNumberFormatInput.jsx","components/form/formikComponents/FormikSelect.jsx","components/form/FormikField.jsx","components/form/formComponents/inputGroups/openHouse/OpenHouseCard.jsx","components/form/formComponents/inputGroups/openHouse/RepeatableOpenHouse.jsx","components/form/formComponents/inputGroups/parcels/ParcelCard.jsx","components/form/formComponents/inputGroups/parcels/RepeatableParcels.jsx","components/form/formComponents/inputGroups/doors/DoorCard.jsx","components/form/formComponents/inputGroups/doors/RepeatableDoors.jsx","components/form/formComponents/inputGroups/units/UnitCard.jsx","components/form/formComponents/inputGroups/units/RepeatableUnits.jsx","components/form/formComponents/inputGroups/history/HistoryCard.jsx","components/form/formComponents/inputGroups/history/RepeatableHistory.jsx","components/form/formComponents/inputGroups/LayoutGroupWrapper.jsx","redux/selectors/OfficeSelector.js","components/table/actionButtons/OfficeLookupActionButtons.jsx","components/table/OfficeLookupTable.jsx","components/form/forms/OfficeSearchForm.jsx","components/form/formComponents/inputGroups/officeLookup/OfficeLookupModal.jsx","components/form/formikComponents/OnSubmitValidationError.jsx","components/smartAdminUI/ErrorMessage.jsx","components/smartAdminUI/ValidationFeedback.jsx","components/smartAdminUI/SectionItem.jsx","components/smartAdminUI/SectionNav.jsx","redux/selectors/RowLockSelector.js","utils/rowLock.js","hooks/useInterval.js","hooks/useRowChecked.js","components/rowLock/RowLockMessage.jsx","components/rowLock/RowLockOwnerMessage.jsx","hooks/useRowLock.js","hooks/useIsMounted.js","components/form/forms/CreateAgentForm.jsx","containers/agent/CreateAgentPage.jsx","components/table/actionButtons/AgentLookupActionButtons.jsx","components/table/AgentLookupTable.jsx","components/form/forms/AgentSearchForm.jsx","components/form/formComponents/inputGroups/agentLookup/AgentLookupModal.jsx","components/form/forms/TaxAutoPopForm.jsx","components/table/actionButtons/TaxActionButtons.jsx","components/table/TaxAutoPopTable.jsx","components/taxAutoPop/AutoPopModal.jsx","components/form/formHelpers/AutoSave.jsx","components/form/formHelpers/SaveAsIncomplete.jsx","components/badges/StatusBadges.jsx","components/table/icons/ListingTypeIcons.jsx","components/form/forms/CreateListingsForm.jsx","containers/listing/CreateListingsPage.jsx","components/form/forms/CreateOfficeForm.jsx","containers/office/CreateOfficePageOG.jsx","containers/agent/EditAgentPage.jsx","containers/office/EditOfficePageOG.jsx","components/loaders/TableLoaderSmall.jsx","components/table/actionButtons/ListingActionButtons.jsx","components/widget/ListingsTableWidget.jsx","assets/images/createListing/residential.jpg","assets/images/createListing/multi.jpg","assets/images/createListing/mobile.jpg","assets/images/createListing/land.jpg","assets/images/createListing/commercial.jpg","assets/images/createListing/farm.jpg","assets/images/createListing/rent.jpg","components/widget/CreateListingWidget.jsx","components/dropdowns/ListingsDropdown.jsx","assets/images/logos/vendor/prospects_white_tr.svg","components/widget/ProspectsWidget.jsx","assets/images/logos/vendor/crea-logo.svg","components/widget/CreaWebformsWidget.jsx","assets/images/logos/vendor/cloudCMA-logo.svg","components/widget/CloudCMAWidget.jsx","components/notifications/NotificationsCarousel.jsx","components/dashboards/MemberDashboard.jsx","redux/selectors/DataPortalSelector.js","components/widget/DataFileSavedSearchesTableWidget.jsx","components/table/actionButtons/DataFileActionButtons.jsx","components/widget/DataFileRequestsTableWidget.jsx","components/widget/AggregateDataChartWidget.jsx","components/dashboards/DataPortalDashboard.jsx","containers/dashboard/Dashboard.jsx","components/rowLock/RowLockPage.jsx","containers/dataPortal/aggregateData/AggregateDataPage.jsx","components/modals/EditSingleValueModal.jsx","components/table/DataFileRequestsTable.jsx","components/table/DataFileSavedSearchesTable.jsx","containers/dataPortal/transactionalData/dataSearch/config/Operators.jsx","containers/dataPortal/transactionalData/dataSearch/config/CustomSelect.jsx","containers/dataPortal/transactionalData/dataSearch/config/CustomDatepicker.jsx","containers/dataPortal/transactionalData/dataSearch/config/Config.jsx","containers/dataPortal/transactionalData/dataSearch/DataSearchPage.jsx","components/form/forms/AgentAdvancedSearch.jsx","components/table/actionButtons/AgentActionButtons.jsx","components/table/AgentsTable.jsx","containers/agent/SearchAgentPage.jsx","components/table/ListingsTable.jsx","components/form/formHelpers/FormikHelper.jsx","components/form/forms/SearchListings.jsx","containers/listing/SearchListingsPage.jsx","components/smartAdminUI/input/InputGroup.jsx","components/office/OfficeAdvancedSearch.jsx","components/table/actionButtons/OfficeActionButtons.jsx","components/table/OfficesTable.jsx","containers/office/SearchOfficePage.jsx","components/loaders/ViewLoader.jsx","containers/agent/ViewAgentPage.jsx","assets/images/logos/vendor/ShowingTime.png","components/widget/ShowingTimeWidget.jsx","containers/listing/ViewListingsPage.jsx","containers/office/ViewOfficePage.jsx","assets/images/logos/vendor/corelogic-icon.svg","components/widget/MatrixWidget.jsx","assets/images/logos/vendor/matrix_logo.png","components/widget/TrainingWidget.jsx","containers/vendorApps/matrix/Matrix.jsx","assets/images/logos/logop9map.png","assets/images/logos/remaplist-placeholder.jpg","components/widget/REMapListWidget.jsx","containers/vendorApps/remaplist/REMapList.jsx","containers/vendorApps/crea/CREAWEBForms.jsx","components/widget/CreaDDFWidget.jsx","containers/vendorApps/crea/CREADDF.jsx","assets/images/logos/vendor/logoprospectscrmwhite2.png","assets/images/logos/applebadge.svg","assets/images/logos/google-play-badge.svg","components/widget/ProspectsMobileWidget.jsx","containers/vendorApps/prospects/Prospects.jsx","components/widget/SpinWidget.jsx","assets/images/logos/vendor/spin_logo.gif","containers/vendorApps/spin/Spin.jsx","assets/images/logos/vendor/spacelist_logo.svg","components/widget/SpacelistWidget.jsx","components/routes/routes.js","containers/vendorApps/spacelist/SpaceList.jsx","containers/vendorApps/cloudcma/CloudCMA.jsx","containers/resources/PostalCodeLookup.jsx","containers/resources/RECA.jsx","containers/resources/Training.jsx","components/general/footer/Footer.jsx","components/general/today/Today.jsx","hooks/useDelayedRender.js","components/auth/AppSessionModal.jsx","hooks/useUserActivityCheck.js","hooks/useHeartBeat.js","redux/selectors/SignalRConnectionSelector.js","hooks/useSignalRConnection.js","assets/images/logos/P9LogoBlack.png","providers/SignalRConnectionProvider.jsx","containers/app/App.jsx","index.jsx"],"names":["module","exports","API","URL","process","asyncTimeout","ms","arguments","length","undefined","Promise","resolve","setTimeout","mockFactory","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","_ref","_ref$ms","_ref$response","response","wrap","_context","prev","next","console","warn","concat","abrupt","stop","_x","_x2","apply","Mock","Get","Put","Del","Post","lastViewedEntity","saveLastViewedEntityToApiService","entity","getRedirectionUrl","currentUrl","window","location","href","indexOf","_lastViewedEntity","baseUrl","origin","type","encodeURI","id","responseBody","body","_yield$superagent$get","loginBody","ClareityUrl","includes","superagent","get","sent","NoTokenRequests","then","tokenPlugin","req","withCredentials","set","Requests","use","responseType","post","put","GetAclDetails","resourceType","requestDetails","GetAuditLog","className","tableName","uniqueID","agentLookup","agentData","_objectSpread","createAgent","getCurrentAgent","searchAgent","agentCriteria","selectAgent","updateAgent","Authenticate","ClareityLogin","Heartbeat","Status","Logout","autoSave","saveData","checkAutoSave","autoSaveCriteria","getAutoSaveData","removeAutoSaveData","updateAutoSaveData","createCondoName","condoData","searchCondoName","searchCriteria","selectCondoName","UniqueID","updateCondoName","condoRecord","createSearchRequest","deleteDataFileRequest","request","deleteDataFileSavedSearch","getAggregateData","downloadAllAggregateData","downloadFilteredAggregateData","data","getSearchResults","getUserDataFiles","logDownloadRequest","requestPresignedLink","updateUserFileName","updateUserCriteriaName","getFormDefinition","formType","GetMockForm","PostToLookupTable","lookupNames","getProfileDefinition","Start","imposterID","Stop","GetStatus","AddAllowedUser","userInfo","RemoveAllowedUser","AddImposter","RemoveImposter","GetImpersonationData","CreateListingV2","listingData","UpdateListing","DeleteListingById","CopyListing","searchListingCriteria","CreateListing","GetMyListings","GetListingById","GetAllListings","TaxAutoPopSearch","taxData","TaxAutoPopSelect","SearchListings","SaveSupplement","form","SaveIncomplete","incompleteListing","UpdateIncomplete","getOfficeDefinition","insertOffice","officeData","officeLookup","searchOffices","selectOffice","officeId","updateOffice","getPreferredPhoto","key","getSingleImage","file","postImage","CheckRowLock","CreateRowLock","PingRowLock","RemoveRowLock","TakeoverRowLock","SearchMember","member","AddMember","RemoveMember","getUserName","getUser","updateUser","newData","CLEAR_REPEATABLE_SECTION_COUNT","DELETE_SUPPLEMENT","LISTING_COORDS_LOADED","LOAD_MY_LISTINGS","LOAD_MY_LISTINGS_FAIL","LOAD_MY_LISTINGS_SUCCESS","LOAD_LISTING","LOAD_LISTING_FAIL","LOAD_LISTING_SUCCESS","LOAD_LISTING_PREFERRED_PHOTO_DETAILS","LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL","LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS","LOAD_LISTING_PHOTO","LOAD_LISTING_PHOTO_FAIL","LOAD_LISTING_PHOTO_SUCCESS","LOAD_UPLOADED_PHOTOS","REORDER_SUPPLEMENTS","SAVE_IMAGES","SAVE_SUPPLEMENT","SAVE_SUPPLEMENT_SUCCESS","SAVE_SUPPLEMENT_FAIL","SEARCH_LISTINGS","SEARCH_LISTINGS_FAIL","SEARCH_LISTINGS_SUCCESS","SEARCH_LISTINGS_CRITERIA","SET_SECTION_COUNT","TAX_AUTO_POP_SEARCH","TAX_AUTO_POP_SEARCH_FAIL","TAX_AUTO_POP_SEARCH_SUCCESS","TAX_AUTO_POP_SELECT","TAX_AUTO_POP_SELECT_FAIL","TAX_AUTO_POP_SELECT_SUCCESS","UPLOAD_IMAGE","UPLOAD_IMAGE_FAIL","VIEW_LISTING_CLICKED","CHECK_AUTOSAVE_LISTING","CHECK_AUTOSAVE_LISTING_FAIL","CHECK_AUTOSAVE_LISTING_SUCCESS","LOAD_AUTOSAVE_LISTING","LOAD_AUTOSAVE_LISTING_FAIL","LOAD_AUTOSAVE_LISTING_SUCCESS","REMOVE_AUTOSAVE_LISTING","REMOVE_AUTOSAVE_LISTING_FAIL","REMOVE_AUTOSAVE_LISTING_SUCCESS","SAVE_AUTOSAVE_LISTING","SAVE_AUTOSAVE_LISTING_FAIL","SAVE_AUTOSAVE_LISTING_SUCCESS","UPDATE_AUTOSAVE_LISTING","UPDATE_AUTOSAVE_LISTING_FAIL","UPDATE_AUTOSAVE_LISTING_SUCCESS","RELOAD_LISTING_CLICKED_SUCCESS","LOAD_LISTING_PHOTO_SORTORDER","CLEAR_LISTING_PHOTO_SORTORDER","DECREMENT_UPLOADS_COUNTER","SET_UPLOADS_COUNTER","SET_IS_BUSY","TOGGLE_SHOW_BROKER_LISTINGS","initialState","allListings","autoPopListings","autoSaveCheckLoading","autoSaveData","autoSaveExists","currentImages","editableListingLoading","loadError","repeatableSectionCount","listingClicked","listingCoordinates","listingPreferredPhotoDetails","listingPhoto","listingPhotoSortOrder","myListings","searchListingsResults","selectedListing","uploadedPhotos","uploadedSupplements","searchLoading","selectLoading","sectionAddClicks","filesToBeUploadedCounter","isBusy","showBrokerListings","reorderSupplements","newSortOrder","payload","setSearchCriteria","values","setRepeatableSectionCount","_callee2","dispatch","sectionCounts","_context2","Rooms","Object","keys","map","IsDeleted","Photos","Supplements","OpenHouses","Doors","Parcels","Units","History","loadListingById","_ref7","_callee7","listingSelected","_context7","apiService","t0","error","_x7","loadListingToCopyById","_ref8","_callee8","_context8","_x8","checkForAutoSave","_ref15","_callee15","result","_context15","listingHasAutosave","_x15","loadAutoSave","_ref16","_callee16","_context16","_x16","removeAutoSave","_ref17","_callee17","_context17","_x17","saveAutoSave","_ref18","_callee18","_context18","_x18","updateAutoSave","_ref19","_callee19","_context19","_x19","toggleShowBrokerListings","value","AGENT_LOOKUP","AGENT_LOOKUP_FAIL","AGENT_LOOKUP_SUCCESS","AGENT_SEARCH","AGENT_SEARCH_FAIL","AGENT_SEARCH_SUCCESS","CLEAR_AGENT","GET_CURRENT_AGENT","GET_CURRENT_AGENT_FAIL","GET_CURRENT_AGENT_SUCCESS","LOAD_AGENT_PHOTO_SUCCESS","SELECT_AGENT","SELECT_AGENT_FAIL","SELECT_AGENT_SUCCESS","SELECT_AGENT_LOOKUP","SELECT_AGENT_LOOKUP_FAIL","SELECT_AGENT_LOOKUP_SUCCESS","agentGroupType","agentPhotos","agentSearchResults","agentSelected","clearAgent","singleAgentPhoto","setCurrentAgent","_ref4","_callee4","selectedAgent","fullAgent","_context4","agent","photos","_x4","_ref5","_callee5","_context5","_x5","CLICK_SECTION_ADD","DELETE_OPEN_HOUSE_VALIDATION_RESULT","DELETE_ROOM_VALIDATION_RESULT","FORM_SUBMITTED","LOAD_CITY_NAMES","LOAD_CITY_NAMES_SUCCESS","LOAD_CITY_NAMES_FAIL","LOAD_COMBO_BOX_OPTIONS","LOAD_COMBO_BOX_OPTIONS_SUCCESS","LOAD_COMBO_BOX_OPTIONS_FAIL","LOAD_FORM_DEFINITION","LOAD_FORM_DEFINITION_SUCCESS","LOAD_FORM_DEFINITION_FAIL","SET_COMBO_DICTIONARY_ENTRY","SET_VALIDATION_RESULT","SET_OPEN_HOUSE_VALIDATION_RESULT","SET_ROOM_VALIDATION_RESULT","SET_FORM_DATA_STATUS","SET_FORM_DATA_COMPLETE","allFields","defaultValues","cityNames","comboBoxOptions","comboIsLoading","comboSetValueDictionary","definitionType","formDefinition","formIsLoading","formDataStatus","isLoading","listingType","openHouseValidationResult","operationType","isCopyOperation","pageStructure","validationResult","roomValidationResult","transformResult","byField","_Object$keys","entityName","_slicedToArray","getSortedDefinition","sort","a","b","x","pageSortOrder","SortOrder","transformDefinition","sortedDefinition","uniqueSections","flags","filter","item","PageName","IsVisible","sectionName","sectionLabel","PageLabel","getUniqueSections","orderedGroups","layoutGroupName","uniqueGroupNames","getUniqueGroupNames","layoutGroupDict","dict","name","matchingFields","field","_toConsumableArray","buildGroupDict","children","push","isGroup","groupName","groupType","layoutGroupType","fields","deriveChildren","structure","sectionChildren","section","child","createRenderStructure","setValidationResult","normalizedResult","setOpenHouseValidationResult","uid","_defineProperty","setFormDataInitialized","loadFormDefinition","aclResourceID","aclResourceType","_formDefinition$Data","_formDefinition$Data2","aclFieldPermissions","aclPagePermissions","aclCriteria","aclDetails","action","formname","uniqueId","fieldPermissions","pagePermissions","Data","_aclPagePermissions","formField","IsDisabled","_aclFieldPermissions","_aclFieldPermissions2","isDisabled","FieldName","reduce","obj","DataType","datatype","InputType","inputType","DefaultValue","t1","loadComboBoxOptions","lookupTableNames","filteredOptions","comboOption","addOption","filteredData","dataPoint","Parents","dataParent","ParentField","ParentCodes","toUpperCase","filterOption","fOpt","find","cbo","opt","d","ParentIsActive","loadCityNames","lookupString","_ref3","_callee3","_context3","city","Code","_x3","formSubmitted","CLEAR_OFFICE","CLEAR_OFFICE_SEARCH","LOAD_OFFICE_DEFINITION","LOAD_OFFICE_DEFINITION_FAIL","LOAD_OFFICE_DEFINITION_SUCCESS","OFFICE_LOOKUP","OFFICE_LOOKUP_FAIL","OFFICE_LOOKUP_SUCCESS","SEARCH_OFFICES","SEARCH_OFFICES_FAIL","SEARCH_OFFICES_SUCCESS","SELECT_OFFICE","SELECT_OFFICE_FAIL","SELECT_OFFICE_SUCCESS","SELECT_OFFICE_LOOKUP","SELECT_OFFICE_LOOKUP_FAIL","SELECT_OFFICE_LOOKUP_SUCCESS","isLoadingDefinitions","initialValues","officeDefinition","searchResults","currentOffice","clearOfficeSearch","setCurrentOffice","officeUid","ApiService","where","clause","SET_GROUP_TYPE","CONDO_INSERT","CONDO_INSERT_FAIL","CONDO_INSERT_SUCCESS","CONDO_SEARCH","CONDO_SEARCH_FAIL","CONDO_SEARCH_SUCCESS","CONDO_SELECT","CONDO_SELECT_FAIL","CONDO_SELECT_SUCCESS","CONDO_UPDATE","CONDO_UPDATE_FAIL","CONDO_UPDATE_SUCCESS","ASYNC_END","CHECK_AUTHENTICATION","CHECK_AUTHENTICATION_SUCCESS","CHECK_AUTHENTICATION_ERROR","CHECK_AUTHENTICATION_EXPIRY","CLAREITY_LOGIN","HOME_BUTTON_CLICKED","HEARTBEAT_REFRESH","LOGOUT","SEARCH_LISTINGS_PAGE_CLICKED","IMPERSONATION_AGENT_LOOKUP","IMPERSONATION_AGENT_LOOKUP_FAIL","IMPERSONATION_AGENT_LOOKUP_SUCCESS","START_IMPERSONATION","START_IMPERSONATION_FAIL","START_IMPERSONATION_SUCCESS","STOP_IMPERSONATION_SUCCESS","STOP_IMPERSONATION_FAIL","GET_IMPERSONATION_DATA","GET_IMPERSONATION_DATA_SUCCESS","GET_IMPERSONATION_DATA_FAIL","GET_STATUS_SUCCESS","GET_STATUS_FAIL","SAVE_SIGNALR_CONNECTION_SUCCESS","CLOSE_ALERT","OPEN_ALERT","promiseMiddleware","store","Boolean","isPromise","subtype","res","promise","catch","localStorageMiddleware","saveLastViewedEntity","ListingID","listingSearchResults","CLEAR_ACL_DETAILS","CLEAR_ACL_ACTION_LOADING_STATUSES","CLEAR_ACL_ACTIONS_COMPLETED","GET_ACL_DETAILS","GET_ACL_DETAILS_FAIL","GET_ACL_DETAILS_SUCCESS","GET_MAIN_ACL_DETAILS","GET_MAIN_ACL_DETAILS_FAIL","GET_MAIN_ACL_DETAILS_SUCCESS","SET_ACL_ACTION_LOADING_STATUS","SET_ACL_ACTIONS_COMPLETED","formActions","aclString","mainActions","formPermissions","loading","actionLoadingStatuses","actionsComplete","clearAclCompleted","getAclDetails","_requestDetails$formN","_requestDetails$actio","aclResource","aclActionType","actionName","aclComplete","aclLoadingActions","formName","Action","GET_AUDIT","GET_AUDIT_FAIL","GET_AUDIT_SUCCESS","EntityID","class","getAuditLog","entityID","table","getCookie","document","cookie","split","total","currentCookie","storedKey","storedValue","decodeURIComponent","errors","inProgress","authChecked","isAuthenticated","isLoadingAuth","isAuthExpiryCookiePresent","isAuthCloseToExpiry","minutesLeftToAuthExpiry","token","checkAuthStatus","authStatus","checkAuthExpiry","authExpiryCookie","authExpiryDate","minutesLeft","Date","Math","floor","now","heartBeat","condoSearchResults","condoSelected","isSearching","updateStatus","getTimeElapsedSinceUTCDate","utcDateString","utcDate","elapsedMilliseconds","getTime","elapsedSeconds","elapsedMinutes","elapsedHours","elapsedDays","getShortTimeToExpiry","expiryDateUtc","recordCount","nowUtc","diffMs","diffDays","diffHours","diffMins","CREATE_DATAFILE_REQUEST_STARTED","CREATE_DATAFILE_REQUEST_FAILED","CREATE_DATAFILE_REQUEST_SUCCEEDED","DELETE_DATAFILE_REQUEST_STARTED","DELETE_DATAFILE_REQUEST_FAILED","DELETE_DATAFILE_REQUEST_SUCCEEDED","DELETE_DATAFILE_SAVED_SEARCH_STARTED","DELETE_DATAFILE_SAVED_SEARCH_FAILED","DELETE_DATAFILE_SAVED_SEARCH_SUCCEEDED","LOAD_AGGREGATE_DATA_STARTED","LOAD_AGGREGATE_DATA_FAILED","LOAD_AGGREGATE_DATA_SUCCEEDED","LOAD_DATAFILE_REQUESTS_STARTED","LOAD_DATAFILE_REQUESTS_FAILED","LOAD_DATAFILE_REQUESTS_SUCCEEDED","LOAD_DATAPORTAL_LOOKUPS_STARTED","LOAD_DATAPORTAL_LOOKUPS_FAILED","LOAD_DATAPORTAL_LOOKUPS_SUCCEEDED","UPDATE_DATAFILE_REQUESTS_STARTED","UPDATE_DATAFILE_REQUESTS_FAILED","UPDATE_DATAFILE_REQUESTS_SUCCEEDED","UPDATE_USER_CRITERIA_NAME_STARTED","UPDATE_USER_CRITERIA_NAME_FAILED","UPDATE_USER_CRITERIA_NAME_SUCCEEDED","UPDATE_USER_FILE_NAME_STARTED","UPDATE_USER_FILE_NAME_FAILED","UPDATE_USER_FILE_NAME_SUCCEEDED","aggregateData","dataFileRequests","dataFileRequestsCount","dataFileSavedSearchesCount","masterDataFileRequests","lookups","createDataFileRequest","dataFile","getState","dataPortal","JSON","parse","call","isEmpty","slice","t2","savedSearch","isSingleDelete","NumberOfRuns","IsSavedSearchDeleted","SqlWhereClause","_x6","handleDataFileRequestDeleted","dataFileRequest","log","returnValue","handleRequestStatusUpdated","DateLinkExpires","DateLinkExpiresString","DateLinkTimeToExpiry","RecordCount","DateCreated","DateCreatedString","DateCreatedTimeElapsed","_x9","_x10","handleSavedCriteriaDeleted","_ref6","_callee6","sqlWhereClause","_context6","_x11","_x12","handleUserCriteriaNameChanged","UserCriteriaName","_x13","_x14","handleUserFileNameChanged","UserFileName","loadAggregateData","_ref9","_callee9","aggregateResult","_context9","Sheet1","mutateLookup","array","mutatedLookup","Description","title","localeCompare","uniqBy","updateDataFileRequests","hubEvent","_ref12","_callee12","_context12","_x20","userCriteriaName","_ref13","_callee13","_context13","_x21","_x22","userFileName","_ref14","_callee14","_context14","_x23","_x24","allowedUsers","impersonationAgentSearchResults","impersonationAgentSelected","impersonationStateChange","impersonationTargets","isImpersonating","status","stopImpersonation","ADD_NEW_CLIENT_PHOTO","ADD_FLEXRULE_PHOTOS","ADD_API_UPLOAD_RESULT","ADD_EDIT_PHOTO","HARD_DELETE_PHOTO","SET_EDIT_PHOTO","SOFT_DELETE_PHOTO","UPDATE_PHOTO_DESCRIPTION","CLEAR_PHOTO_COLLECTION","RESTORE_PHOTO","REMOVE_EDIT_PHOTO","SET_PHOTO_COLLECTION_SORT_ORDER","photoMetaCollection","editPhotoMeta","addApiUploadResult","apiResult","addEditPhotoResult","metaSource","cropperBlob","_originMeta$Descripti","originMeta","cropMeta","newKey","originalURL","srcURL","cropperSrcURL","externalURL","IsUploaded","IsError","thumbailSrcURL","thumbExternalURL","cropPointer","cropperResult","blobURL","dropZoneMeta","apiMeta","assetType","displayName","extension","isError","newName","path","formikMeta","IsLive","IsPreload","MediaType","MediaCategory","flexMeta","ParentID","MediaKeyNumeric","ModificationTimestamp","Order","OriginatingSystemMediaKey","OriginatingSystemName","PreferredPhotoYN","ResourceName","Path","ResourceRecordKeyNumeric","ModifiedDate","LongDescription","ParentType","OriginatingSystemParent","fullSizeURL","InitialSortOrder","uuidv4","fetch","r","blob","blobFile","File","revokeObjectURL","clearPhotoCollection","softDeletePhoto","photoToDelete","deletedPhotoMeta","removeEditPhoto","_ref10","_callee10","_context10","restorePhotoMetaByKey","photoKey","CHECK_ROWLOCK","CHECK_ROWLOCK_FAIL","CHECK_ROWLOCK_SUCCESS","CREATE_ROWLOCK","CREATE_ROWLOCK_FAIL","CREATE_ROWLOCK_SUCCESS","PING_ROWLOCK","PING_ROWLOCK_FAIL","PING_ROWLOCK_SUCCESS","REMOVE_ROWLOCK","REMOVE_ROWLOCK_FAIL","REMOVE_ROWLOCK_SUCCESS","ROWLOCK_CLAREITY","SET_ROWLOCK_CURRENT_USER","SET_ROWLOCK_ENTITY","SET_ROWLOCK_CALLBACK","TAKEOVER_ROWLOCK","TAKEOVER_ROWLOCK_FAIL","TAKEOVER_ROWLOCK_SUCCESS","currentUser","createdLocks","requestType","lastUpdatedOn","lastCheckedOn","requiresCheck","locked","lockedByMe","lockedByUserId","lockedByUserName","message","clareityUrl","callback","checkRowLock","createRowLock","removeRowLock","setRowLockCallback","takeoverRowLock","connection","connectionId","saveSignalRConnection","state","stopSignalRConnection","off","actors","targets","listOfTeam","ADD_TEAM_MEMBER","ADD_TEAM_MEMBER_FAIL","ADD_TEAM_MEMBER_SUCCESS","REMOVE_TEAM_MEMBER","REMOVE_TEAM_MEMBER_FAIL","REMOVE_TEAM_MEMBER_SUCCESS","SEARCH_TEAM_MEMBER","SEARCH_TEAM_MEMBER_FAIL","SEARCH_TEAM_MEMBER_SUCCESS","canBeImpersonatedBy","canImpersonate","addTeamMember","removeTeamMember","searchTeamMember","impersonationDetails","appLoaded","redirectTo","showImpersonation","isSwalOpen","boolToBit","object","newObj","String","Number","LOAD_USER","LOAD_USER_SUCCESS","LOAD_USER_ERROR","EDIT_USER_SUCCESS","SET_USER_IDLE_STATUS","user","userPhoto","isIdle","setUserIdleStatus","combineReducers","acl","agents","audit","authentication","condo","newCondo","formGeneration","OpenHouse","openHouseResults","_state$roomValidation","_action$payload","otherResults","_objectWithoutProperties","_toPropertyKey","impersonation","updatedAgents","listing","insert","placeholder","imageUploads","office","photo","pmc","sorted","sortKV","rowLock","_action$error","_action$error2","_action$error2$respon","_action$error2$respon2","_state$currentUser4","_state$currentUser5","isEqual","_state$currentUser","rowIsLocked","rowIsLockedByUser","userId","some","lockedEntity","userName","_state$currentUser2","_state$currentUser3","isNil","_state$currentUser6","_state$currentUser7","signalR","team","teamsManagement","utility","params","listings","router","RouterMiddleware","routerMiddleware","createBrowserHistory","createStore","reducer","composeWithDevTools","applyMiddleware","thunk","createSelector","getLoadingState","MemberFirstName","MemberLastName","getUserId","getUserMlsId","MemberMlsId","getUserAvatar","_photo$filter","p","preferredImage","getImage","photoPlaceholder","getUserIdleStatus","selectStatus","selectIsImpersonating","getImpersonationStateChange","getImpersonationStatus","impersonationStatus","ImpersonationActive","memberMlsId","ImposterName","memberFullName","memberAOR","memberUniqueID","getFieldPermissions","getFormActions","getAclString","getMainActions","getFormPermissions","getPagePermissions","getError","getMultiLoading","getCompleted","useAcl","_formActions$EDIT","_formActions$COPY","_formActions$AUDITLOG","_formActions$VIEW","_formActions$VIEWTEAM","_formActions$EDITTEAM","_formActions$ADDTEAMM","_formActions$ADDTOTEA","useDispatch","useSelector","isAclError","isMultiLoading","isAclCompleted","_useState","useState","_useState2","aclInitialized","setAclInitialized","clearAcl","clearMultiStatus","aclIsEmpty","useMemo","is3rdPartyDataPortalAggregateUser","is3rdPartyDataPortalTransactionalUser","is3rdPartyDataPortalUser","isAdmin","isBroker","useEffect","canEditForm","EDIT","canCopyForm","COPY","canAuditForm","AUDITLOG","canViewForm","VIEW","canViewTeam","VIEWTEAM","canEditTeam","EDITTEAM","canAddTeamMember","ADDTEAMMEMBER","canAddToTeam","ADDTOTEAM","isAllComplete","completeCalls","isLoadingMultiple","loadingStatus","clearAclCompletedLog","getListingAcl","getAgentAcl","completeStatus","getOfficeAcl","getMainAcl","getMainAclDetails","useAnalyticsEventTracker","category","label","ReactGA","event","FontSettings","radioValue","setRadioValue","gaEventTracker","GAEventTracking","_jsxs","_Fragment","_jsx","ToggleButtonGroup","onChange","selectedValue","documentElement","classList","add","localStorage","setItem","ToggleButton","contains","checked","e","currentTarget","ThemeSettings","size","remove","style","VersionBuild","SettingsModal","isOpen","setIsOpen","hideModal","OverlayTrigger","placement","overlay","Tooltip","margin","onClick","preventDefault","blur","Modal","show","onHide","dialogClassName","Header","Body","Footer","TopBar","history","useHistory","username","userAvatar","logoutClicked","impersonationHeader","Avatar","sx","width","height","color","bgcolor","alt","src","MemberEmail","jsonBody","Settings","NavToggle","menuFlip","setMenuFlip","Icon","icon","flip","role","DynamicModal","modalHeader","modalSubHeader","position","onClickDismiss","generateSizeClass","currClassName","sizeClass","generatePositionClass","positionClass","_document$querySelect","querySelectorAll","forEach","el","_el$remove","generateOuterClassName","tabIndex","generateInnerClassName","defaultProps","selectCanBeImpersonatedBy","selectCanImpersonate","CustomButton","bareButton","disabled","_ref$type","_ref$variant","variant","_ref$className","_ref$tooltipText","tooltipText","_ref$tooltipPlacement","tooltipPlacement","_ref$tooltipTrigger","tooltipTrigger","_ref$onClick","rest","_excluded","button","Button","trigger","TeamMemberRowActionButtons","_ref$showDeleteButton","showDeleteButton","onDeleteRow","_ref$showStartImperso","showStartImpersonationButton","currRow","isImposter","target","_status$ImposterName","TeamLeadMlsId","targetCriteria","TeamMemberFullName","TeamLeadFullName","TeamLeadersTable","_ref$id","displayData","onMemberDelete","_ref$isModal","isModal","row","columns","dataField","text","formatter","cell","Stack","direction","alignItems","gap","headerStyle","options","firstPageText","hidePageListOnlyOnePage","lastPageText","nextPageText","paginationTotalRenderer","from","to","prePageText","showTotal","sizePerPageList","sizePerPage","sizePerPageRenderer","currSizePerPage","onSizePerPageChange","option","isSelect","page","BootstrapTable","defaultSorted","order","wrapperClasses","classes","bordered","striped","hover","keyField","noDataIndication","pagination","paginationFactory","Card","props","customClass","customBodyClass","customHeader","header","footer","TeamMembersTable","ListingImpersonation","isImpersonationStateChange","canImpersonateData","canBeImpersonatedByData","targetMemberkey","ReqImpersonation","useObjectState","localState","_setLocalState","fieldAndValue","appSettings","require","menuInitialState","agentNav","listingNav","createListingNav","officesNav","creaNav","resourcesNav","transactionalNav","Sidebar","useLocation","_useObjectState","analyticsNav","_useObjectState2","_useObjectState2$","setMenuState","_useAcl","handleClicked","_e$currentTarget","_e$currentTarget$data","stopPropagation","clickedItem","dataset","_clickedItem$split","_clickedItem$split2","getSidebarLinkClass","pathname","getSidebarCreateLinkClass","getSidebarSearchLinkClass","getSidebarCreateListingLinkClass","handleHomeClicked","handleMinMenuToggleClick","WhitePillars","SmartSettings","AppCompany","AppProduct","DataPortal","AppFlavorSubscript","P9Logo","P9CoverLargeDP","updateTransactionalNav","rel","Listings","P9CoverLarge","updateListingNav","ListingsCreate","updateCreateNav","ListingsSearch","Agents","updateAgentNav","AgentsCreate","AgentsSearch","Offices","OfficesCreate","OfficesSearch","CondoNameManagement","Badge","RoutesWithCrumbs","Component","_ref$routePathList","routePathList","createCrumbs","useCallback","dictionary","cr","entries","_item","crumbs","Breadcrumb","bsPrefix","as","BreadcrumbItem","active","toString","linkProps","linkAs","Link","getAuditData","selectAuditEntityId","AuditSubTable","enrichedList","UniqueId","hdrSortClasses","_column","sortOrder","ExportCSVButton","CSVExport","hidden","headerSortingClasses","headerAttrs","textFilter","delay","paginationOptions","pageStartIndex","hideSizePerPage","ToolkitProvider","search","exportCSV","toolKit","csvProps","filterFactory","filterPosition","baseProps","TableSearchInputGroup","input","onSearch","htmlFor","onKeyPress","handleSearch","ref","n","autoComplete","AgentAvatar","fullName","showFullName","display","fontFamily","fontWeight","fontSize","words","upperCase","charAt","startCase","camelCase","trim","AuditTable","sortFunc","cellContent","column","RealUser","expandRow","renderer","SubTransaction","subtransactions","flat","showExpandColumn","expandByColumnOnly","expandHeaderColumnRenderer","isAnyExpands","expandColumnRenderer","expanded","searchProps","Panel","panelToolbar","AuditLogPage","auditResults","listingID","searchCondo","listingDict","com","farm","land","mob","mult","rnt","listingRuleDict","chgTerm","chgSold","chgMajor","chgPending","chgLeased","chgWithdrawn","chgActive","chgExp","chgDel","chgOpenHouse","selectPageStructure","selectVisiblePageStructure","_page$children","_page$children3","_page$children2","pageVisible","_page$children4","_child$fields","selectAllFields","selectStatusByName","_formGeneration$valid","_formGeneration$valid2","_formGeneration$valid3","_formGeneration$valid4","repeatableType","repeatableId","selectSectionAddClicksByName","_formGeneration$secti","_formGeneration$secti2","selectValidationResults","selectRoomStatusById","_formGeneration$roomV","selectComboValueDict","selectAllComboBoxOptions","_ref11","comboBoxOption","lookupFieldName","selectedComboBoxValue","selectedComboBoxOption","Active","selectFormDefinition","selectFormDefinitionType","selectListingCode","selectFormDataStatus","selectRoomValidationResults","_ref20","roomID","_ref22","_ref23","isValid","errorMessage","selectOpenHouseValidationResults","fullValidationResults","_ref24","openHouseID","_ref26","_ref27","selectFieldLabelDictionary","fieldLabel","selectFieldDictionary","getVisibleSections","visiblePageNames","entry","Set","getOrderedSections","sortedDef","selectFormStructure","selectInitialValues","selectInitialTouched","initialTouched","IsRequired","selectListingType","selectListingRule","selectEditPageName","pageName","pageValues","selectRequired","required","fieldName","_validationResult$fie","isRequired","isVisible","selectLookupNames","comboBoxLookupName","selectCondoMgmtComboBoxOptions","_","lookupName","allComboBoxOptions","optionGroups","parents","selectComboBoxOptions","__","lookupRequired","optionGroup","getSortedErrors","orderedErrors","orderedSections","valKeys","_validationResult$fie2","RoomDimensions","RoomTypeMinimumRequirements","selectErrorsPerSection","_validationResult$fie3","openHouseResult","errorsPerSection","selectRequiredPerSection","reqPerSection","getVisibleFieldNameAndLabels","flatMap","singleField","transformComboBoxData","tableOptions","comboData","singleOption","formValue","transformFieldOptions","fieldData","selectFormSearchOptions","comboBoxOptionsGroup","fieldOptions","groupedOptions","CondoManagementForm","setSubdivisionSelected","county","setCounty","_useState3","_useState4","setCity","_useState5","_useState6","subdivision","setSubdivision","countyComboValues","cityComboValues","subdivisionComboValues","cityOptions","cityValue","_cityValue$parents","_cityValue$parents$","_cityValue$parents$$P","subdivOptions","subdiv","_subdiv$parents","_subdiv$parents$","_subdiv$parents$$Pare","Select","classNamePrefix","isClearable","Lookup_Property_Listing_CountyOrParish","Lookup_Property_Listing_City","Lookup_Property_Listing_SubdivisionName","CondoManagementPage","editCondoName","setEditCondoName","currCondo","setCurrCondo","newCondoName","setNewCondoName","_useState7","_useState8","subdivisionSelected","_useState9","_useState10","isEditable","setIsEditable","handleSaveEdit","whereClause","buildUpdateWhereClause","CondoData","CondoName","SubdivisionName","updatedCondo","searchClause","handleCancelEdit","handleDelete","onSubmit","CondoForm","newCondoRecord","condoCreated","createCondo","maxHeight","overflow","condoItem","formatGroupLabel","justifyContent","DropdownIndicator","components","borderTopLeftRadius","borderBottomLeftRadius","marginLeft","navigateToField","hash","anchor","querySelector","tabPane","closest","tabLinkID","replace","tabLink","getElementById","click","formcontrol","focus","FormSearchBar","formSearchOptions","memoSearchOptions","cacheOptions","isSearchable","openMenuOnClick","styles","dropdownIndicator","css","padding","clearIndicator","FormLoader","Skeleton","FieldValidator","validationRules","validateFieldName","validateFlag","validationValue","setValidateFlag","setValidationValue","setValidateFieldName","_ref$runValidation","runValidation","useFormikContext","getRepeatableChanged","formikGroup","unmodifiedGroup","hasChanged","umItem","umi","itemkey","descriptions","logics","resourceData","logicName","runWithParameters","_selectedListing$phot","_selectedListing$room","_selectedListing$supp","_selectedListing$open","_selectedListing$parc","_selectedListing$door","unmodifiedListing","unModGroup","umPhotos","umRooms","rooms","umSupplements","supplements","umOpenHouses","openHouses","umParcels","parcels","umDoors","doors","photosGroup","roomsGroup","supplementsGroup","_getChanged","openHousesGroup","getChanged","_getChanged2","photosHaveChanged","supplementsHaveChanged","roomsHaveChanged","openHousesHaveChanged","fieldValidationResult","context","variableContainer","er","selectOperationType","selectDefinitionType","selectDefaultValues","selectListingSelected","selectAgentSelected","selectOfficeSelected","selectListingFormData","_selectedListing$list","formData","defaultValue","selectAgentFormData","selectOfficeFormData","selectedOffice","ComboEnforcer","parentFields","valueBubble","targetComboOptions","aCBO","found","isTargetOption","parent","filteredTargets","tgt","tgtOpt","childOpt","foundChild","tData","newValue","parentValue","fTarg","hasParent","ftPar","pc","FormikInputGroup","comboClear","setComboClear","helpText","_ref$multiselect","multiselect","Precision","maxLength","_ref$showHelpIcon","showHelpIcon","validateFigField","_ref$comboBubbleWrap","comboBubbleWrap","AddComboMutator","setNewComboValue","setNewComboOptions","_useField","useField","_useField2","meta","helpers","localFieldValue","setLocalFieldValue","checkOpt","setCheckOpt","comboValue","setComboValue","characterCount","setCharacterCount","listingFormData","agentFormData","officeFormData","lookUpNames","requiredFields","_formGeneration$valid5","_formGeneration$valid6","selectRequiredStatusByFieldName","staticOptions","_ref28","fieldname","YNfield","requiredOptions","selectYNOptions","fieldIsVisible","fieldIsDisabled","controlRef","useRef","validationBubble","fieldValue","setTouched","comboChange","_opt$map$join","blurValue","join","_opt$value","_opt$value2","setValue","newEntry","updateFIGValues","updatedData","bitValue","multiSelectedOptions","singleSelectOption","val","_lookUpNames$lookupNa","_lookUpNames$lookupNa2","_lookUpNames$lookupNa3","handleBlur","oldValue","handleChange","handleFocus","current","handleKeyPress","isRequiredSymbol","onBlur","TextareaAutosize","maxRows","NumberFormat","decimalScale","displayType","inputMode","isNumericString","thousandSeparator","inputId","onFocus","closeMenuOnSelect","isMulti","menuShouldScrollIntoView","menuPortalTarget","menuPortal","zIndex","multiValue","_data$label","backgroundColor","endsWith","selectPhotoMetaCollection","selectPhotosToUpload","selectPhotosToDisplay","pm","selectValidPhotos","photoMetas","pM","selectPhotoToEdit","selectMaxSortOrder","allPhotos","photoMeta","selectPhotoQueueLength","FormikFieldUpdater","displayPhotos","agentOfficeLookup","currCoords","officeManagerLookup","_useFormikContext","setFieldValue","updateFormikValues","updatedWhiteList","formDefinitionFlatMap","comboBoxFlatMap","currField","currentValue","_bitValue","currComboOptionDirty","currOption","_singleSelectOption$v","currentComboOption","updatedOfficeKeys","officeKeys","officeType","_key$split","_key$split2","officeSuffix","officeUpdatedKey","officeWhiteList","base","updated","updatedAgentKeys","agentKeys","agentGroup","agentUpdatedKey","agentWhiteList","_key$split3","agentSuffix","memberKeys","agentOfficeType","_agentGroupType$split","filteredMemberKeys","filteredOfficeKeys","keyNumericKey","selectRepeatableSectionCount","selectUploadedImages","selectUploadedSupplements","selectCurrentListing","selectListingStdStatus","_listing$listingClick","StandardStatus","selectListingStdStatusVerb","_listing$listingClick2","StandardStatusVerb","selectCurrentListingPreferredPhotoDetails","selectCurrentListingPhoto","selectMyListings","selectListingSelectedPhotos","selectListingSelectedRooms","selectListingSelectedSupplements","selectListingSelectedOpenHouses","selectListingSelectedParcels","selectListingSelectedDoors","selectListingSelectedUnits","_selectedListing$unit","units","selectListingSelectedHistory","_selectedListing$hist","getSelectedListingData","_listing$selectedList","selectListingCodeFromListing","PropertyType","toLowerCase","selectEditListingHeaderInfo","listingInfo","_ref21","unitNumber","isUndefined","UnitNumber","streetNumber","StreetNumber","streetName","StreetName","streetSuffix","StreetSuffix","streetDirSuffix","StreetDirSuffix","unparsedAddress","UnparsedAddress","ListingId","selectSectionsPerRepeatableSection","countListing","countPerSection","_countListing$Photos","_countListing$Rooms","_countListing$Supplem","_countListing$OpenHou","_countListing$Doors","_countListing$Parcels","_countListing$Units","_countListing$History","room","supp","openHouse","door","parcel","unit","hist","getSearchAgentResults","results","getAgentSelected","selectAgentPhotos","selectAgentPreferredPhoto","selectAgentPreferredPhotoDetails","preferredPhoto","_photos","singlePhoto","Address","cityField","setCityField","countyField","setCountyField","postalField","setPostalField","provinceField","setProvinceField","streetDirSufField","setStreetDirSufField","_useState11","_useState12","streetNameField","setStreetNameField","_useState13","_useState14","streetNumField","setStreetNumField","_useState15","_useState16","streetSufField","setStreetSufField","_useState17","_useState18","unitNumField","setUnitNumField","_createElement","RowID","AgentLookup","agentFullNameField","officeNameField","usePrevious","defaultCenter","lat","lng","containerStyles","defaultLibraries","LocationPlotterMap","onCoordsClicked","autocompleteInstance","setAutocompleteInstance","mapInstance","setMapInstance","zoom","setZoom","zoomToLocation","setZoomToLocation","latValue","setLatValue","lngValue","setLngValue","latField","_useField3","lngField","_useField5","streetNoField","_useField7","_useField9","postalCodeField","_useField11","streetSuffixField","_useField13","streetDirSuffixField","_useField15","_useField17","_useField19","streetSuffixOptions","streetDirSuffixOptions","countyOptions","provinceOptions","streetNo","_streetNoField$value","_streetNameField$valu","postalCode","_postalCodeField$valu","_streetSuffixOptions$","_streetSuffixOptions$2","_streetDirSuffixOptio","_streetDirSuffixOptio2","_cityOptions$find$lab","_cityOptions$find","_countyOptions$find$l","_countyOptions$find","province","_provinceOptions$find","_provinceOptions$find2","addressInputValue","setAddressInputValue","formAddress","setFormAddress","cityOrCounty","address","isModalShown","setIsModalShown","previousIsModalShown","onModalShow","onModalHide","jQuery","on","parseLat","parseFloat","parseLng","panTo","onMapLoad","parcelLayer","google","maps","ImageMapType","getTileUrl","c","z","y","maxZoom","minZoom","tileSize","Size","neighbourhoodLayer","municipalityLayer","overlayMapTypes","insertAt","LoadScript","googleMapsApiKey","libraries","Autocomplete","onLoad","autocomplete","onPlaceChanged","place","getPlace","geometry","viewport","fitBounds","setCenter","Latitude","Longitude","formatted_address","onUnmount","restrictions","country","GoogleMap","center","mapContainerStyle","latLng","Marker","MapModal","updatedCords","setUpdatedCords","coords","LocationPlotter","longField","OfficeLookup","OneDMeasurement","currUnit","setCurrUnit","areaField","unitsField","areaFormikField","unitsFormikField","areaValue","convertFieldMeasurements","TwoDMeasurement","lengthField","widthField","lengthFormikField","widthFormikField","lengthValue","widthValue","SupplementComboBox","supplementType","setFieldTouched","supplementTypeOptions","suppType","touched","SupplementDescription","extensionDict","doc","docx","pdf","rtf","txt","xls","xlsx","gif","jpg","jpeg","png","tiff","mov","mp4","mpeg","wmv","quicktime","SupplementLink","fileBlob","setFileBlob","setBlobURL","blobSize","setBlobSize","setIsLoading","currentIcon","substring","lastIndexOf","retrieveFile","awsUrl","finish","megabytes","round","EPSILON","createObjectURL","fileResp","download","DragHandle","SortableHandle","cursor","SupplementCard","sortIndex","setValues","SupplementType","mediaType","SortableCard","SortableElement","Grid","SortableContainer","fileList","otherProps","something","index","k","SupplementGrid","supplementsPayload","statusSupplement","uploadList","maxCount","repeatableMaxCount","supplementsCount","formikSupplements","upload","IsUploading","_formikSupplements$up","_upload$Name","_upload$Name2","uploadFormikRecord","Name","batch","newUploadedSupp","_supp$displayName","_supp$displayName2","_useDropzone","useDropzone","accept","maxFiles","onDrop","acceptedFiles","Swal","fire","html","iconColor","showConfirmButton","timer","fileAsForm","FormData","append","saveSupplement","getRootProps","getInputProps","axis","distance","onSortEnd","oldIndex","newIndex","arrayMoveImmutable","sortedArray","newValues","useDragHandle","usePhotoManager","photosToUpload","maxSort","photoUploadStatus","setPhotoUploadStatus","createThumbNailFile","photoMetaFilePtr","_photoMetaFilePtr$pat","thumbnail","assign","uuidRegexPattern","postFormFiles","formFiles","uploadPhoto","_photoMeta$cropperRes","metaFile","delete","newStatus","toUpload","uploadComplete","reUpload","needToProcess","pU","processKey","targetPM","processedStatuses","element","getPhotoFileFromApi","getFullImageFromMeta","getPhotoToEdit","addNewDropzonePhoto","newClientPhoto","newDzPhoto","addNewFlexRulePhoto","frPhotos","newFrPhoto","externalFullSizeUrl","match","createThumbnailExternalLink","addEditPhotoMeta","dispatchClearPhotoCollection","getThumbFromMeta","removeEditPhotoMeta","markIsDeleted","Edit","onEditClicked","_ref$isDisabled","borderTopRightRadius","borderBottomRightRadius","Remove","onRemove","Photo","forwardRef","listeners","renderItem","dragOverlay","dragging","fadeIn","handle","sorting","transition","transform","wrapperStyle","photoValidCollection","photoMetaInstance","_photoValidCollection","localFieldDescriptionValue","image","listStyle","scaleX","scaleY","photoToEdit","errorFallback","newEditMeta","cropperPhoto","classNames","gridArea","photoWithNewDescription","_callee11","_context11","onKeyDown","code","keyCode","SortableItem","isSelected","onSelect","isDropped","containerId","getIndex","_useSortable","useSortable","setNodeRef","isDragging","isSorting","over","overIndex","mounted","isMounted","setIsMounted","timeout","clearTimeout","useMountStatus","mountedWhileDragging","newlisteners","ctrlKey","_ref$ulStyle","ulStyle","propTypes","PropTypes","shape","arrayOf","string","DroppableContainer","_ref$columns","items","_ref$getStyle","getStyle","_useDroppable","useDroppable","isOver","isOverContainer","defaultContainerStyle","marginTop","VOID_ID","GridList","_ref2$adjustScale","adjustScale","_ref2$collisionDetect","collisionDetection","closestCorners","_ref2$handle","_ref2$ulStyle","_ref2$getItemStyles","getItemStyles","_ref2$getContainerSty","getContainerStyle","_ref2$wrapperStyle","_ref2$strategy","strategy","rectSortingStrategy","propagateItems","validPhotos","setItems","selectedItems","setSelectedItems","selectedItemsDict","setSelectedItemsDict","droppedItems","setDroppedItems","dragOverlaydItems","setClonedItems","activeId","setActiveId","files","setFiles","updateCollectionSortOrder","orderedArray","sortedKeys","sortedKeysPlus1","dph","fileRef","sensors","useSensors","useSensor","PointerSensor","activationConstraint","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","findContainer","container","findIndex","_items$A","A","f1","f2","f","onSelectionChanged","isCtrlClicked","slctItem","clearSelection","_target$parentNode","nodeName","parentNode","err","addEventListener","removeEventListener","DndContext","onDragStart","ret","selectedItem","onDragOver","draggingRect","overId","overContainer","activeContainer","_objectSpread4","activeItems","overItems","activeIndex","isBelowLastItem","offsetTop","rect","onDragEnd","_newItems$overContain","newItems","arrayMove","splice","newOrder","sortable","onDragCancel","SortableContext","drop","createPortal","DragOverlay","isDragOverlay","itemId","ImageDropzone","photosPayload","photoManager","formDefn","_formDefn$find$repeat","_formDefn$find","photosCount","formikPhotos","payloadPhoto","isUploaded","keyName","uploadsCounter","reader","FileReader","onload","dupNo","newFileName","duplicateImageFile","readAsDataURL","CropperController","cropping","onCrop","onReset","onSave","imageURL","ImageCropperModal","_photoToEdit$id","cropperRef","setCropping","cropData","setCropData","cropper","setCropper","descriptionFieldValue","setDescriptionFieldValue","displayImageSrc","setDisplayImageSrc","displaySrc","dragMode","setTransformData","canvasData","getCanvasData","setCropBoxData","getCroppedCanvas","toDataURL","closeClicked","closeModal","setDragMode","reset","clear","Cropper","viewMode","responsive","background","autoCrop","checkOrientation","onInitialized","instance","guides","crop","rotate","getData","ImageCropper","photoCollection","fieldNames","currentFields","newFields","transformFields","_values$Photos","dPhoto","_formikPhotos","_formikPhotos2","_formikPhotos3","formikEntry","_photoMeta$flexMeta$U","_photoMeta$flexMeta$P","_photoMeta$flexMeta$P2","_photoMeta$flexMeta$R","_photoMeta$flexMeta$I","_photoMeta$flexMeta$I2","_photoMeta$flexMeta$M","_photoMeta$flexMeta$M2","createFormikEntry","formikValues","ImageDropZone","DynamicBadge","bg","bw","pill","_props$tooltipText","_props$placeRight","placeRight","_props$marginRight","marginRight","pillClass","positioningClass","marginClass","badgeColor","badgeWidth","null","RoomMeasurement","_formik$values","_roomStatus$RoomLengt","_roomStatus$RoomWidth","formik","didMount","inchesL","setInchesL","feetL","setFeetL","inchesW","setInchesW","feetW","setFeetW","imperialW","setImperialW","imperialL","setImperialL","metricW","setMetricW","metricL","setMetricL","roomStatus","withFeetValueLimit","formattedValue","floatValue","withMeterValueLimit","withInchValueLimit","roomValues","setFormikValue","metricDecimalToImperialInts","metricDecimal","imperialDecimal","feetInt","inchesInt","feet","inches","imperialDecimalToImperialInts","impDecimal","feetInchesToFeetDecimal","imperialIntsToImperialDecimal","imperialDecimalToMetricDecimal","RoomLengthWidthUnits","RoomLength","RoomWidth","roomWidth","imperialInts","dimensionChangeHandler","blurWidthHandler","blurLengthHandler","isAllowed","suffix","roomRules","FlexRule","RuntimeEngine","fromJavaScript","RoomCard","_roomStatus$RoomType","_roomStatus$RoomLevel","attributes","onRemoveRoom","roomLvlOptions","roomTypeOptions","roomLvl","RoomLevel","roomType","RoomType","validateRoomField","run","setRoomValidationResult","Wrapper","Item","withHandle","defaultDropAnimationConfig","defaultDropAnimation","dragSourceOpacity","RoomsGridList","animateLayoutChanges","_ref$adjustScale","_ref$collisionDetecti","closestCenter","_ref$dropAnimation","dropAnimation","_ref$getItemStyles","_ref$handle","measuring","modifiers","_ref$strategy","_ref$useDragOverlay","useDragOverlay","_ref$wrapperStyle","TouchSensor","entryItems","_formik$touched","_formik$touched$Rooms","removedValue","otherValues","sortedOthers","ov","ov1","ov2","sOv","otherDict","sO","_formik$touched$Rooms2","otherTouched","newRooms","startIndex","endIndex","newDict","newArr","spliceDict","SortableRoomCard","RepeatableRoom","roomsPayload","dimension","setDimension","roomDimensionOptions","roomErrorDimension","roomErrorCount","roomErrorLevel","roomErrorType","roomsCount","_roomsPayload$","buildFormikValues","addRoom","roomsArr","roomsValues","isLiveCount","customHandler","changeRoomDimension","Formik","validateOnChange","FieldArray","FormikTextInput","isNull","FormikBoolean","_ref$value","Form","Check","inline","_event$target$checked","_event$target","bitVal","FormikDatePicker","initialValue","dateValue","setDateValue","castByTimezone","date","toLocaleString","timeZone","getFormattedDate","inputDate","year","Intl","DateTimeFormat","format","month","day","getFormattedTime","hour","minute","second","getFormattedDateValue","getFormattedDateTime","receivedDate","seed","iso","toISOString","localeFormatter","timeZoneName","localeDT","localeDate","replaceAll","todayYYMMDD","timeStamp","timeString","getIsoFormat","getFullYear","castValue","dateVal","DateWithAddOnCalendar","React","remaining","func","TimeWithAddOnClock","_excluded2","_useMemo","today","timeSelect","timeSelectOnly","_useMemo2","customInput","dateFormat","todayButton","showTimeSelect","showTimeSelectOnly","DatePicker","closeOnScroll","timeCaption","popperPlacement","fixedHeight","timeIntervals","onChangeRaw","selected","FormikNumberFormatInput","FormikSelect","setOptions","comboVal","getOptions","_yield$apiService$Def","_yield$apiService$Def2","definitions","selectVal","getOptionLabel","getOptionValue","FormikField","_props$validateFigFie","_props$repeatableType","_props$repeatableId","currentComponentInitialValue","CurrentComponent","updateFormikOnBlur","openHouseRules","OpenHouseCard","fieldsList","validateValue","validateOpenHouseField","whiteList","RepeatableOpenHouse","openHousesPayload","statusOpenHouseStatus","statusOpenHouseDate","statusOpenHouseStartTime","statusOpenHouseEndTime","statusOpenHouseType","statusOpenHouseURL","addClickCounter","openHousesCount","OpenHouseDate","OpenHouseEndTime","OpenHouseStartTime","OpenHouseStatus","OpenHouseRemarks","OpenHouseType","Refreshments","OpenHouseLiveURL","addOpenHouse","ParcelCard","RepeatableParcels","parcelsPayload","statusParcels","parcelsCount","TitleType","LandWestMeridian","LandTaxAmount","LandTownship","LandSection","LandRange","LandQuarter","LandLincNumber","LandAcres","addParcel","DoorCard","RepeatableDoors","doorsPayload","statusDoors","doorsCount","DoorDescription","DoorHeight","DoorType","DoorWeight","DoorWidth","NumberDoors","addDoor","UnitCard","RepeatableUnits","unitsPayload","statusUnits","unitsCount","UnitTypeType","UnitTypeTotalRent","UnitTypeDescription","UnitTypeActualRent","UnitTypeUnitsTotal","addUnit","HistoryCard","RepeatableHistory","historyPayload","statusHistory","historyCount","OriginatingSystemTimestamp","EffectiveDate","MlsChangeType","PreviousValue","NewValue","DOM","addHistory","LayoutGroupWrapper","_ref$resourceType","listingPhotos","selectSearchResults","getCurrentOffice","OfficeLookupActionButtons","officeSelected","OfficeLookupTable","onOfficeSelect","OfficeSearchForm","onSubmitClicked","formSubmitting","OfficeName","OfficeCity","handleReset","OfficeLookupModal","_ref$onChange","criteriaList","connect","onSubmissionError","submitCount","anchorID","getAttribute","ErrorMessage","labelName","_fieldName$split","_fieldName$split2","ValidationFeedback","isFormDataLoaded","setIsFormDataLoaded","SectionItem","sectionsPerRepeatableSection","errPerSection","sectionUrl","Nav","eventKey","SectionNav","sections","visibleSections","sortedErrors","open","setOpen","copyToClipboard","navigator","clipboard","writeText","innerText","Collapse","in","vSec","selectLockRequiresCheck","selectLocked","selectLockedBy","selectLockedByMe","selectLastUpdatedOn","selectLastCheckedOn","selectEntity","selectCreatedLocks","selectCreatedWithinSession","selectError","selectClareityUrl","selectCallback","isValidEntity","isNaN","useInterval","savedCallback","setInterval","clearInterval","useRowChecked","setChecked","checkInProgress","setCheckInProgress","previousEntity","isNewEntity","RowLockMessage","rowLockEntity","lockedBy","_ref$checkStatus","checkStatus","_ref$onTakeover","onTakeover","_ref$onDiscard","onDiscard","_ref$displayActions","displayActions","_ref$lastUpdatedOn","_ref$lastCheckedOn","_ref$isAutoSave","isAutoSave","minutesElapsed","setMinutesElapsed","canTakeAction","timeElapsedMessage","hours","minutes","lastUpdate","updateElapsedMinutes","abs","setCallback","holdCallbackFiring","setHoldCallbackFiring","Alert","RowLockOwnerMessage","_ref$onRemoveLock","onRemoveLock","useRowLock","_props$rowLockEntity","_props$isEditOperatio","isEditOperation","_props$enableAutomati","enableAutomation","_props$enableRowLocki","enableRowLocking","_props$redirectOnLock","redirectOnLocked","number","bool","checkPropTypes","validateProps","setEntity","lockCallback","setLockCallback","lockCreatedWithinSession","lockRequiresCheck","isErrorOrUnknownStatus","lockedByMeWithinSession","lockingAuthorized","realUserName","realUserId","rowLockIntervalsEnabled","setRowLockCurrentUser","initializeEntity","newEntity","setRowLockEntity","createLock","created","pingLock","pingRowLock","removeLock","takeoverLock","discardChanges","rowLockingEnabled","LockMessage","LockOwnerMessage","useIsMounted","isMountedRef","CreateAgentForm","formRef","agentRules","photoQueueLength","agentDataSelect","previousOperationType","comboSetValueDict","currentFormDefinition","setFormSubmitting","newComboValue","setRunValidation","progress","setProgress","activeSection","setActiveSection","memoizedInitialValues","photosAreQueued","userMLSID","rollbar","useRollbar","useRollbarPerson","_useRowLock","lockReleasedByCurrentUser","_formRef$current","validateForm","_formRef$current2","resetForm","newComboKeys","comboMutator","mergePhotoData","formikState","mergedPhotos","_image$flexMeta","_formikState$image$ke","deltas","formikPhoto","unmodifiedEntry","getPhotoDeltas","_formikState$image$ke2","p1","p2","getDateValue","_formattedDate","formattedDate","dateUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getBitValue","getStringValue","getNumericValue","getComboBoxValue","valueHasChanged","_allFields$fieldName","_allFields$fieldName2","dataType","handlePreviousClick","tabActive","previous","previousElementSibling","scrollTo","handleNextClick","nextElementSibling","handleSubmit","setSubmitting","postBody","allowEnterKey","allowEscapeKey","allowOutsideClick","buttonsStyling","confirmButton","denyButton","confirmButtonText","denyButtonText","showDenyButton","choice","isConfirmed","figFieldName","figValidationValue","fieldsUpdated","_formRef$current3","handleEnterKeyDown","keyEvent","charCode","getCustomHeader","handleDiscardChanges","iconHtml","tryRegainRowLock","resp","datePickerWhitelist","innerRef","actions","validate","_transformRepeatable","filledValues","existingLogics","newKeyLogic","transformRepeatable","_res$context$variable","agentIsValid","validateOnBlur","_orderedSections","OnSubmitValidationError","LinearProgress","borderRadius","Tab","Container","defaultActiveKey","Row","Col","xl","Content","Pane","childDataType","CreateAgentPage","currentFormDefinitionType","_useQueryParam","useQueryParam","StringParam","_useQueryParam2","urlParamFormType","setUrlParamFormType","alertUser","AgentLookupActionButtons","AgentLookupTable","onAgentSelect","AgentSearchForm","agentSearchLoading","valueKeys","buildWhereClause","AgentLookupModal","_ref$getCurrentImpers","getCurrentImpersonationData","searchAgentResults","list","CustomInput","TaxAutoPopForm","onSearchSubmit","formClear","formEdited","setFormEdited","taxAutoPopSearchLoading","FormikHelper","dirty","Value","validateOnMount","ParcelNumber","TaxRollNumber","_values$ParcelNumber","_values$TaxRollNumber","_values$UnitNumber","_values$StreetNumber","_values$StreetName","TaxActionButtons","TaxAutoPopTable","onListingSelected","_props$isModal","actionsFormatter","generateColumns","TaxAutoPopModal","onListingClicked","clearForm","setClearForm","setListingData","loadTaxSearchResults","AutoSave","autoSaveEnabled","autoSaveTriggered","formValues","listingChanged","isDirty","setIsDirty","previousValues","counter","StateOrProvince","stringify","SaveAsIncomplete","_ref$onSubmit","_ref$buttonText","buttonText","StatusBadges","ListingTypeIcons","CreateListingsForm","listingRules","currLocation","currListing","editPageName","listingCode","listingRule","standardStatus","standardStatusVerb","uploadedImages","editListingInfo","comboLoading","dataLoading","formLoading","currListingType","setCurrListingType","isFormSubmitting","setIsFormSubmitting","isFormSubmitted","setIsFormSubmitted","isFormSavingAsIncomplete","setIsFormSavingAsIncomplete","isFormSavedAsIncomplete","setIsFormSavedAsIncomplete","_useState19","_useState20","_useState21","_useState22","_useState23","_useState24","setRoomsHaveChanged","_useState25","_useState26","setPhotosHaveChanged","_useState27","_useState28","setSupplementsHaveChanged","_useState29","_useState30","setOpenHousesHaveChanged","_useState31","_useState32","setLoadingStatus","_useState33","_useState34","_useState35","_useState36","_useState37","_useState38","incompleteButtonText","setIncompleteButtonText","_useState39","_useState40","autoSaveWorking","setAutoSaveWorking","_useState41","_useState42","preTaxAutoPopListing","setPreTaxAutoPopListing","_useState43","_useState44","setWasTaxAutoPopped","isCreating","isEditing","gaFormSubmitEventTracker","gaAutoSaveEventTracker","gaSaveIncompleteEventTracker","mixin","toast","timerProgressBar","photosQueued","ResourceUnique","autoSaveRecord","record","FormName","AutoSaveKey","_useState45","_useState46","showAvailableAutoSave","setShowAvailableAutoSave","_useState47","_useState48","isAvailableAutoSaveShown","setIsAvailableAutoSaveShown","_useState49","_useState50","isFormAutoSaving","setIsFormAutoSaving","showClass","popup","getPanelString","panelString","listingCodeForPanelString","listingTypeForPanelString","_listing","_listing2","_listing3","_listing4","getDeltas","mergeFormikData","mergedData","entryKey","buildRepeatables","submitValues","fieldExists","_values$Rooms$keyFiel","_values$OpenHouses$ke","_values$Doors$keyFiel","_values$Parcels$keyFi","_values$Units$keyFiel","_values$History$keyFi","buildUpdateValues","oldValues","repeatableValues","buildAutoSaveValues","_allFields$key","generatePostBody","_selectedListing$list2","_selectedListing$list3","_selectedListing$list4","autoSaveValues","nonAutoSaveValues","buildCreateValues","_submitValues","uiState","mergeSupplementData","_mergePhotoData","deltasExist","_mergePhotoData2","openHouseGroup","doorsGroup","unitsGroup","parcelsGroup","historyGroup","submittedPropertyType","currentStandardStatus","propertyType","handleAutoSave","_autoSaveBody$data$ph","_autoSaveBody$data","currForm","autoSaveBody","saved","_autoSaveBody$data2","_autoSaveBody$data2$l","_saveData","ResourceData","ResourceId","_ref25","listingId","messageText","_result$Data","locationString","handleSaveIncomplete","_ref29","_result$Data2","onClickSaveIncomplete","_ref32","AutoPopModal","dispatchData","currentStatus","autoPopSelected","_autoPopSelected","currentListing","_listingRules","_listingRules2","_listingRules3","_listingRules4","_newValues","photosChanged","supplementsChanged","roomsChanged","openHousesChanged","photosChangedBool","supplementsChangedBool","roomsChangedBool","openHousesChangedBool","listingIsValid","_formRef$current4","CreateListingsPage","formCreate","formEdit","_useQueryParams","useQueryParams","_useQueryParams2","urlParams","setUrlParams","_location$pathname","currUrl","pop","_location$pathname2","CreateOfficeForm","officeRules","images","singleImage","_singleImage$displayN","_singleImage$key","currentDisplayName","imageKey","_formikState$imageKey","_formikState$imageKey2","_result$data","officeIsValid","OfficeMlsId","CreateOfficePage","EditAgentPage","currAgent","urlParam","setUrlParam","EditOfficePageOG","currOffice","TableLoaderSmall","animation","marginBottom","ListingActionButtons","viewClicked","copyClicked","auditClicked","isCopiable","isAuditable","sizeSM","ListingsTableWidget","onListingSelect","slicedTableData","setSlicedTableData","listingsLoading","hideAgentFullName","filterByAgentKeys","filterVal","listAgentKey","ListAgentKeyNumeric","coListAgentKey","CoListAgentKeyNumeric","align","rows","searchable","onFilter","CustomToggleList","onColumnToggle","PaginationProvider","paginationTableProps","columnToggle","columnToggleProps","CreateListingWidget","Carousel","fade","ResidentialImage","Caption","MultiImage","RentImage","MobileImage","LandImage","CommercialImage","FarmImage","ListingsDropdown","ProspectsWidget","minHeight","prospectsIcon","CreaWebformsWidget","creaIcon","CloudCMAWidget","cloudCMAIcon","NotificationsCarousel","setIndex","notificationData","setNotificationData","json","notification","expirests","selectedIndex","interval","indicators","controls","critical","Moment","createdts","intro","dangerouslySetInnerHTML","__html","MemberDashboard","lookupCities","lookupnames","displayResults","setDisplayResults","cityString","City","cityItem","_row$PropertyType","_row$PropertyType2","copyRequest","FormCheck","onCopyClick","onAuditClick","buildLabels","totalNumberOfQuarters","currentYear","quarters","yearQuarterArray","_loop","quarter","buildYearLabels","yearArray","quarterlyAverageByYear","yearData","period","salesValue","sales","count","_ref2$","avgSales","totalByYear","yearToSalesMap","selectAggregateData","_dataPortal$aggregate","selectAggregateDataQuarterlyAveragesByYear","labels","tempSales","tempAdjusted","adjusted","selectAggregateDataFilteredQuarterlyAveragesByYear","startDate","endDate","dateRange","startYear","endYear","filteredLabelIndexes","parseInt","selectAggregateDataTotalsByQuarterByYear","selectAggregateDataFilteredTotalsByQuarterByYear","selectAggregateDataTotalsByYear","selectAggregateDataFilteredTotalsByYear","selectMasterDataFileRequests","_dataPortal$masterDat","selectUniqueDataFileRequests","masterDataFiles","uniqueDataFileRequests","df","requestIndex","JsonTree","selectNonDeletedDataFileRequests","selectNonDeletedDataFileSavedSearches","DataFileSavedSearchesTableWidget","nonDeletedSavedSearches","headerSortClasses","onlyOneExpanding","expandColumnPosition","DataFileActionButtons","canEdit","canDownload","canCopy","canDelete","editClicked","downloadClicked","deleteClicked","ReadyForDownload","onDownloadClick","DataFileRequestsTableWidget","FileType","onDownloadClicked","s3Link","link","FileName","UserID","createElement","setAttribute","appendChild","removeChild","Error","AggregateDataChartWidget","ChartJS","register","CategoryScale","LinearScale","PointElement","LineElement","Title","Legend","defaults","elements","line","tension","font","family","showFilteredTotalsByQuarterByYear","setShowFilteredTotalsByQuarterByYear","datasets","borderColor","filteredTotalsByQuarterByYearData","Line","maintainAspectRatio","plugins","datalabels","legend","bsCustomPrefix","DataPortalDashboard","dataFileSavedSearches","aggregateTotalsByQuarterByYear","Dashboard","RowLockPage","useParams","reduxRowLockEntity","reduxRowLockCallback","entityType","entityId","entitiesAreValidAndMatch","AggregateDataPage","setFullYear","setStartDate","setEndDate","showFilteredQuarterlyAveragesByYear","setShowFilteredQuarterlyAveragesByYear","showFilteredTotalsByYear","setShowFilteredTotalsByYear","filteredQuarterlyAveragesByYear","filteredTotalsByQuarterByYear","filteredTotalsByYear","BarElement","quarterlyData","chartTitle","yearlyData","quarterlyAveragesData","filteredQuarterlyAveragesData","filteredTotalsByYearData","handleDownloadAll","fileUrl","Blob","handleDownloadFiltered","i","seasonallyAdjusted","dates","_dates","start","end","minDate","maxDate","showYearPicker","yearItemNumber","selectsRange","DropdownButton","Dropdown","Bar","EditSingleValueModal","oldValueLabel","newValueLabel","showModal","onHideModal","onNewValueChange","onCancelClick","onSaveClick","centered","Group","Label","Control","autoFocus","DataFileRequestsTable","editUserFileNameModalShow","setEditUserFileNameModalShow","currentUniqueId","setCurrentUniqueId","currentUserFileName","setCurrentUserFileName","newUserFileName","setNewUserFileName","handleCloseEditFileNameModal","onEditClick","onDeleteClicked","handleEditUserFileName","FileSize","DataFileRequestsQueueTable","onDeleteClick","editUserCriteriaNameModalShow","setEditUserCriteriaNameModalShow","currentSqlWhereClause","setCurrentSqlWhereClause","currentUserCriteriaName","setCurrentUserCriteriaName","newUserCriteriaName","setNewUserCriteriaName","handleCloseEditCriteriaNameModal","handleEditUserCriteriaName","handleOpenEditCriteriaNameModal","InitialConfig","BootstrapConfig","Operators","operators","equal","not_equal","labelForFormat","cardinality","sqlOp","less","less_or_equal","greater","greater_or_equal","between","not_between","select_equals","select_not_equals","select_any_in","select_not_any_in","CustomSelect","listValues","selectedOption","CustomDatepicker","popperProps","showYearDropdown","dropdownMode","Config","settings","maxNesting","hideConjForOne","showNot","addRuleLabel","addGroupLabel","widgets","sqlFormatValue","select","factory","strictMode","queryValue","QbUtils","uuid","config","DataSearchPage","nonDeletedDataFileRequests","nonDeletedDataFileSavedSearches","setUserFileName","updatedConfig","setUpdatedConfig","tree","checkTree","loadTree","queryBuilderState","setQueryBuilderState","setSqlWhereClause","jsonLogic","setJsonLogic","jsonTree","setJsonTree","queryHasChildren","setQueryHasChildren","setKey","initialTree","valueSources","fieldSettings","OffMarketDate","defaultOperator","County","showSearch","countyNames","Subdivision","subdivisionNames","PropertySubtype","propertySubTypes","YearBuilt","min","max","ListPrice","SoldPrice","types","imTree","cfg","_args","prevState","sqlFormat","jsonLogicFormat","getTree","children1","onRequestSubmitted","jsonRequest","UserEmailAddress","JsonLogic","onClear","renderBuilder","Builder","Query","activeKey","DataFileSavedSearchesTable","showError","copyTree","isValidTree","finally","AgentAdvancedSearch","AgentActionButtons","AgentsTable","SearchAgentPage","ListingsTable","isCopyable","setSubmitFlag","submitFlag","submitTranslation","resetFlag","setResetFlag","Lookup_Property_Listing_PropertyType","Lookup_Property_Listing_StandardStatus","Lookup_Property_Listing_StreetSuffix","SearchCard","listingSearchLoading","multiClause","multiValues","toLocaleLowerCase","resetHandler","formikSubmitClicked","SearchListingsPage","updatedResults","newResults","_currentListing$Prope","_currentListing$Prope2","InputGroup","OfficeManagerMlsId","OfficeManagerFullName","officeName","OfficeStatus","OfficeAdvancedSearch","officeSearchLoading","searchBarState","setSearchBarState","OfficeActionButtons","OfficesTable","SearchOfficePage","ViewLoader","maxWidth","agentAttributesWhiteList","ViewAgents","currentAgentPhotoDetails","currentAgentPhoto","memoizedAgentEntries","memberName","_currAgent$MemberFull","MemberFullName","currentAgentPhotoURL","setCurrentAgentPhotoURL","editButtonClicked","setEditButtonClicked","getCurrentAgentPhoto","photoURL","photoUrlOrFileName","agentPhoto","onEditAgent","isAllAclComplete","onAddMemberToCurrentAgentTeam","targetTeamKey","onAddCurrentAgentToTeam","onRemoveMemberFromCurrentAgentTeam","success","TeamMemberKeyNumeric","onRemoveCurrentAgentFromTeam","TeamLeadKeyNumeric","MemberStatus","MemberDirectPhone","MemberDirectdPhone","sortBy","ShowingTimeWidget","realUserMlsId","userMlsId","getDateTimeNowUTC","getShowingTimeUrl","_currListing$ListPric","encodeURIComponent","ListAgentMlsId","ListOfficeMlsId","_currListing$StreetNu","_currListing$StreetNu2","_currListing$StreetSu","_currListing$StreetSu2","_currListing$StreetDi","_currListing$StreetDi2","getCurrentListingAddress","PostalCode","md5","showingTimeIcon","listingAttributesWhiteList","statusTasks","otherTasks","chgDetails","chgPropertyType","otherTaskConfig","taskCode","iconClass","statusTaskConfig","ViewListings","_currListing$Property","autoSaveButtonClicked","setAutoSaveButtonClicked","otherBtnArr","setOtherBtnArr","taskBtnArr","setTaskBtnArr","currentListingPhotoUrl","setCurrentListingPhotoUrl","deleteButtonClicked","setDeleteButtonClicked","hideButton","setHideButton","inputString","setInputString","isFormLoading","setIsFormLoading","rowLockButtonClicked","setRowLockButtonClicked","canAccessShowingTime","setCanAccessShowingTime","canViewOpenHouses","setCanViewOpenHouses","currentListingPhoto","currentListingPreferredPhotoDetails","memoizedListingEntries","showingTime","_yield$apiService$Lis","_yield$apiService$Lis2","otherButtons","btnCfg","btn","statusButtons","_startCase","loadAutoSaveData","onEditListing","onDeleteListing","_response$Data","getCurrentListingPreferredPhotoDetails","loadListingPreferredPhotoDetails","getCurrentListingPhoto","photoId","onClickTask","taskButtons","Input","typedString","lowerCase","_currListing$Property2","_currListing$Property3","onCopyListing","officeAttributesWhiteList","ViewOffices","memoizedOfficeEntries","onEditOffice","OfficePhone","OfficeAddress1","OfficePostalCode","capitalize","MatrixWidget","corelogicIcon","TrainingWidget","_props$url","Matrix","REMapListWidget","REMapListPlaceholder","REMapListIcon","textShadow","REMapList","CREAWEBForms","CreaDDFWidget","CREADDF","ProspectsMobileWidget","appleIcon","googleIcon","Prospects","SpinWidget","Spin","SpacelistWidget","spacelistIcon","breadcrumbPath","requiredAcl","ViewAgentPage","ViewListingPage","CreateOfficePageOG","ViewOfficePage","showTerms","setShowTerms","okButtonDisabled","setOkButtonDisabled","handleScroll","bottom","scrollHeight","scrollTop","clientHeight","onShow","backdrop","scrollable","onScroll","listStyleType","dateToFormat","Today","useDelayedRender","delayed","setDelayed","fn","AppSessionModal","prevIsAuthExpiryCookiePresent","delayedRender","isSessionRefresh","setIsSessionRefresh","showSessionRefreshModal","setShowSessionRefreshModal","showSessionExpiredModal","setShowSessionExpiredModal","onRefreshSession","onReauthenticate","keyboard","closeButton","useUserActivityCheck","getIdleStatus","useIdleTimer","onIdle","onActive","events","useHeartBeat","prevIsIdle","heartBeatEnabled","selectSignalRConnection","selectSignalRContext","selectSignalRIsConnected","HubConnectionState","Connected","useSignalRConnection","hubContext","hubConnection","isSignalRConnected","dataFileRequestJsonString","hubConnectionId","SignalRConnectionContext","createContext","SignalRConnectionProvider","HubConnectionBuilder","withUrl","build","defineProperty","WebSocket","onreconnecting","onreconnected","onclose","didOpen","showLoading","didClose","close","Provider","initialize","rollbarConfig","accessToken","environment","server","code_version","App","_useSelector","prevIsAuthenticated","isAppInit","setIsAppInit","routePaths","setRoutePaths","pageview","citiesArray","countiesArray","subdivisionsArray","propertySubTypesArray","lookupResults","lookup","requestsResult","loadDataFileRequests","pathDict","routes","ErrorBoundary","P9LogoPrint","AppSession","Switch","Route","exact","Redirect","ReactDOM","render","BrowserRouter","QueryParamProvider","ReactRouterRoute","component"],"mappings":"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BACJmxB,KAAM,eACN0jG,eAAgB,eAChB98G,KAAM,cACN+5B,UAAWk0E,GACX8O,YAAa,OAEf,CACE90H,GAAI,oBACJmxB,KAAM,gBACN0jG,eAAgB,gBAChB98G,KAAM,eACN+5B,UAAWmvD,GACX6zB,YAAa,SAEf,CACE90H,GAAI,kBACJmxB,KAAM,cACN0jG,eAAgB,cAChB98G,KAAM,aACN+5B,UAAWogE,GACX4iB,YAAa,UAEf,CACE90H,GAAI,oBACJmxB,KAAM,gBACN0jG,eAAgB,gBAChB98G,KAAM,gBACN+5B,UAAWg4E,GACXgL,YAAa,SAEf,CACE90H,GAAI,kBACJmxB,KAAM,cACN0jG,eAAgB,cAChB98G,KAAM,aACN+5B,UAAWijF,GACXD,YAAa,UAEf,CACE90H,GAAI,iBACJmxB,KAAM,SACN0jG,eAAgB,SAChB98G,KAAM,YACN+5B,UAAWsF,GACX09E,YAAa,SAEf,CACE90H,GAAI,wBACJmxB,KAAM,SACN0jG,eAAgB,SAChB98G,KAAM,mBACN+5B,UAAWyP,GACXuzE,YAAa,SAEf,CACE90H,GAAI,uBACJmxB,KAAM,gCACN0jG,eAAgB,mBAChB98G,KAAM,iBACN+5B,UAAW0+D,GACXskB,YAAa,UAEf,CACE90H,GAAI,qBACJmxB,KAAM,8BACN0jG,eAAgB,iBAChB98G,KAAM,eACN+5B,UAAW0+D,GACXskB,YAAa,UAEf,CACE90H,GAAI,uBACJmxB,KAAM,mBACN0jG,eAAgB,mBAChB98G,KAAM,kBACN+5B,UAAWk5E,GACX8J,YAAa,UAEf,CACE90H,GAAI,qBACJmxB,KAAM,iBACN0jG,eAAgB,iBAChB98G,KAAM,eACN+5B,UAAWkjF,GACXF,YAAa,UAEf,CACE90H,GAAI,qBACJmxB,KAAM,iBACN0jG,eAAgB,iBAChB98G,KAAM,gBACN+5B,UAAWk6E,GACX8I,YAAa,SAEf,CACE90H,GAAI,qBACJmxB,KAAM,iBACN0jG,eAAgB,iBAChB98G,KAAM,gBACN+5B,UAAWmjF,GACXH,YAAa,SAEf,CACE90H,GAAI,mBACJmxB,KAAM,eACN0jG,eAAgB,eAChB9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","file":"static/js/main.0e179806.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"Wrapper\":\"RoomCard_Wrapper__1TnVs\",\"fadeIn\":\"RoomCard_fadeIn__3VqcS\",\"dragOverlay\":\"RoomCard_dragOverlay__22qG4\",\"Item\":\"RoomCard_Item__1hXpU\",\"withHandle\":\"RoomCard_withHandle__2y5fy\",\"dragging\":\"RoomCard_dragging__-neD7\",\"disabled\":\"RoomCard_disabled__1pdyX\",\"pop\":\"RoomCard_pop__3CTG2\",\"color\":\"RoomCard_color__2PcEc\",\"Remove\":\"RoomCard_Remove__2mpBT\"};","const API = {\r\n URL: process.env.REACT_APP_API_URL,\r\n};\r\n\r\nexport default API;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport API from '../config';\r\n\r\nconst asyncTimeout = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));\r\n\r\nconst mockFactory = async (url, { ms = 350, response = {} }) => {\r\n console.warn(`Mocking: ${API.URL}${url}`);\r\n await asyncTimeout(ms);\r\n console.warn('mock response: ', response);\r\n return response;\r\n};\r\n\r\nconst Mock = {\r\n Get: mockFactory,\r\n Put: mockFactory,\r\n Del: mockFactory,\r\n Post: mockFactory,\r\n};\r\n\r\nexport default Mock;\r\n","import superagent from 'superagent';\r\nimport Mock from '@utils/mock';\r\nimport API from '../config';\r\n\r\n/*\r\n When the client app intercepts a Clareity redirection from the API (see [responseBody] function), we can instruct Clareity to redirect the user to a specific page (by default to the page they last were)\r\n once this finishes processing the auth request, and we are doing this by setting the [returnUrl] query parameter.\r\n\r\n Clareity currently gives an \"Access denied / Error 15\" error when passing the return URL as an absolute URL based on \"localhost\" domain (e.g. ?returnUrl=http://localhost:3000/listings/view?ListingID=A2010754).\r\n Exception is the case where the return URL is actually the base URL (e.g. ?returnUrl=http://localhost:3000/). The redirection is successful in this case.\r\n The Clareity redirection also seems to be successful when using absolute URLs based on \"pillarnine.com\" domain (e.g. ?returnUrl=https://dev-oneplatform.pillarnine.com/listings/view?ListingID=A1061795).\r\n\r\n Given the redirection issues, we can choose to disable the returnUrl, when testing locally, via the [useReturnUrl] parameter - disabling will result in always redirecting to the [AuthSuccessRedirect] URL\r\n defined on the API side (currently set to http://localhost:3000 for dev environment).\r\n*/\r\nconst useReturnUrl = true;\r\n\r\n/*\r\n Use [lastViewedEntity] to keep track in the current module of the last viewed entity, in order to calculate the return URL when session expiration occurs\r\n during the entity edit - the return URL in this case should be set to the View page of the entity being edited.\r\n*/\r\nlet lastViewedEntity = null;\r\nexport const saveLastViewedEntityToApiService = entity => {\r\n lastViewedEntity = entity;\r\n};\r\n\r\nconst getRedirectionUrl = () => {\r\n const currentUrl = window.location.href;\r\n if (currentUrl.indexOf('/edit') > -1) {\r\n // Instruct Clareity to redirect the user to the View page instead.\r\n const baseUrl = window.location.origin;\r\n switch (lastViewedEntity?.type) {\r\n case 'listing':\r\n return encodeURI(`${baseUrl}/listings/view?ListingID=${lastViewedEntity.id}`);\r\n case 'agent':\r\n return encodeURI(`${baseUrl}/agent/view?UniqueID=${lastViewedEntity.id}`);\r\n case 'office':\r\n return encodeURI(`${baseUrl}/office/view?UniqueID=${lastViewedEntity.id}`);\r\n default:\r\n return '';\r\n }\r\n }\r\n return encodeURI(currentUrl);\r\n};\r\n\r\nconst responseBody = async ({ body }) => {\r\n if (body.ClareityUrl) {\r\n if (body.ClareityUrl.includes('logout')) {\r\n window.location.href = body.ClareityUrl;\r\n return null;\r\n }\r\n const { body: loginBody } = await superagent.get(`${API.URL}auth/Clareity${useReturnUrl ? `?returnUrl=${getRedirectionUrl()}` : ''}`);\r\n window.location.href = loginBody?.ClareityUrl;\r\n return null;\r\n }\r\n return body;\r\n};\r\n\r\n/* DO NOT USE THIS REQUEST. ONLY FOR THE CLAREITY LOGIN */\r\nconst NoTokenRequests = {\r\n Get: url => superagent.get(`${API.URL}${url}`).then(responseBody),\r\n};\r\n\r\nconst tokenPlugin = req => {\r\n req.withCredentials()\r\n .set('Accept', 'application/json')\r\n .set('Access-Control-Allow-Origin', API.URL)\r\n .set('Access-Control-Allow-Credentials', true);\r\n};\r\n\r\nconst Requests = {\r\n Delete: url => superagent.del(`${API.URL}${url}`).use(tokenPlugin).then(responseBody),\r\n Get: url => superagent.get(`${API.URL}${url}`).use(tokenPlugin).then(responseBody),\r\n GetBlob: url => superagent.get(`${API.URL}${url}`).use(tokenPlugin).responseType('blob').then(responseBody),\r\n Post: (url, body) => superagent.post(`${API.URL}${url}`, body).use(tokenPlugin).then(responseBody),\r\n PostBlob: (url, body) => superagent.post(`${API.URL}${url}`, body).use(tokenPlugin).responseType('blob').then(responseBody),\r\n Put: (url, body) => superagent.put(`${API.URL}${url}`, body).use(tokenPlugin).then(responseBody),\r\n};\r\n\r\nconst Acl = {\r\n GetAclDetails: (resourceType, requestDetails) => Requests.Post(`acl/${resourceType}`, requestDetails),\r\n};\r\n\r\nconst Agent = {\r\n agentLookup: agentData => Requests.Post('agents/AgentLookup', { ...agentData }),\r\n createAgent: agentData => Requests.Post('agents/insert', { ...agentData }),\r\n getCurrentAgent: () => Requests.Get('agents/userFill'),\r\n searchAgent: agentCriteria => Requests.Post('agents/search', { ...agentCriteria }),\r\n selectAgent: agentData => Requests.Post('agents/select', { ...agentData }),\r\n updateAgent: agentData => Requests.Post('agents/update', { ...agentData }),\r\n};\r\n\r\nconst AuditLog = {\r\n GetAuditLog: (className, tableName, uniqueID) => Requests.Post('AuditLog/query', className, tableName, uniqueID),\r\n};\r\n\r\nconst Auth = {\r\n Authenticate: () => Requests.Get('noauth'),\r\n ClareityLogin: () => NoTokenRequests.Get('auth/Clareity'),\r\n Heartbeat: () => Requests.Get('auth/heartbeat'),\r\n Status: () => Requests.Get('auth/Status'),\r\n Logout: () => Requests.Get('auth/Logout'),\r\n};\r\n\r\nconst AutoSave = {\r\n autoSave: saveData => Requests.Post('autosave/create', { ...saveData }),\r\n checkAutoSave: autoSaveCriteria => Requests.Post('autosave/check', { ...autoSaveCriteria }),\r\n getAutoSaveData: autoSaveCriteria => Requests.Post('autosave/retrieve', { ...autoSaveCriteria }),\r\n removeAutoSaveData: autoSaveCriteria => Requests.Post('autosave/remove', { ...autoSaveCriteria }),\r\n updateAutoSaveData: saveData => Requests.Post('autosave/updateData', { ...saveData }),\r\n};\r\n\r\nconst Condo = {\r\n createCondoName: condoData => Requests.Post('CondoName/insert', { ...condoData }),\r\n searchCondoName: searchCriteria => Requests.Post('CondoName/search', { ...searchCriteria }),\r\n selectCondoName: UniqueID => Requests.Post('CondoName/select', { ...UniqueID }), // unused at the moment\r\n updateCondoName: condoRecord => Requests.Post('CondoName/update', { ...condoRecord }),\r\n};\r\n\r\nconst DataPortal = {\r\n createSearchRequest: searchCriteria => Requests.Post('Product/DataPortal/request/create', { ...searchCriteria }),\r\n deleteDataFileRequest: request => Requests.Post('Product/DataPortal/request/delete', { ...request }),\r\n deleteDataFileSavedSearch: request => Requests.Post('Product/DataPortal/request/search/delete', { ...request }),\r\n getAggregateData: () => Requests.Post('Product/DataPortal/aggregates'),\r\n downloadAllAggregateData: () => Requests.GetBlob('Product/DataPortal/aggregates/download'),\r\n downloadFilteredAggregateData: data => Requests.PostBlob('Product/DataPortal/aggregates/download/filtered', data),\r\n getSearchResults: searchCriteria => Requests.Post('Product/DataPortal/search', { ...searchCriteria }),\r\n getUserDataFiles: request => Requests.Post('Product/DataPortal/requests', { ...request }),\r\n logDownloadRequest: data => Requests.Post('Product/DataPortal/requests/logDownload', { ...data }),\r\n requestPresignedLink: data => Requests.Post('Product/DataPortal/requests/requestPresignedLink', { ...data }),\r\n updateUserFileName: data => Requests.Post('Product/DataPortal/request/update/UserFileName', { ...data }),\r\n updateUserCriteriaName: data => Requests.Post('Product/DataPortal/request/update/UserCriteriaName', { ...data }),\r\n};\r\n\r\nconst Definitions = {\r\n getFormDefinition: formType => Requests.Get(`definition/${formType}`),\r\n GetMockForm: () => Requests.Get('Definition/LayoutMock'),\r\n PostToLookupTable: lookupNames => Requests.Post('definition/lookup', { ...lookupNames }),\r\n getProfileDefinition: () => Mock.Get('definition/profile', { response: { id: 1 } }),\r\n};\r\n\r\nconst Impersonation = {\r\n Start: imposterID => Requests.Post('Impersonation/Start', { ...imposterID }),\r\n Stop: imposterID => Requests.Get('Impersonation/Stop', { ...imposterID }),\r\n GetStatus: () => Requests.Get('Impersonation/Status'),\r\n AddAllowedUser: userInfo => Requests.Post('Impersonation/AddAllowedUser', { ...userInfo }),\r\n RemoveAllowedUser: userInfo => Requests.Post('Impersonation/RemoveAllowedUser', { ...userInfo }),\r\n AddImposter: userInfo => Requests.Post('Impersonation/AddImposter', { ...userInfo }),\r\n RemoveImposter: userInfo => Requests.Post('Impersonation/RemoveImposter', { ...userInfo }),\r\n GetImpersonationData: () => Requests.Get('Impersonation/GetImpersonationData '),\r\n};\r\n\r\nconst Listing = {\r\n CreateListingV2: listingData => Requests.Post('Product/Listings/save', { ...listingData }),\r\n UpdateListing: listingData => Requests.Post('Product/Listings/update', { ...listingData }),\r\n DeleteListingById: listingData => Requests.Post('Product/Listings/delete', { ...listingData }),\r\n CopyListing: searchListingCriteria => Requests.Post('Product/Listings/copy', { ...searchListingCriteria }),\r\n CreateListing: listingData => Requests.Post('Product/Listings/ci', { ...listingData }),\r\n GetMyListings: () => Requests.Get('Product/Listings/myeditablelistings'),\r\n GetListingById: searchListingCriteria => Requests.Post('Product/Listings/record', { ...searchListingCriteria }),\r\n GetAllListings: () => Requests.Get('Product/Listings'),\r\n TaxAutoPopSearch: taxData => Requests.Post('taxpop/search/2', { ...taxData }),\r\n TaxAutoPopSelect: taxData => Requests.Post('taxpop/select/2', { ...taxData }),\r\n SearchListings: searchListingCriteria => Requests.Post('Product/Listings/f', { ...searchListingCriteria }),\r\n SaveSupplement: form => Requests.Post('Supplement', form),\r\n SaveIncomplete: incompleteListing => Requests.Post('Product/Listings/save/inc', { ...incompleteListing }),\r\n UpdateIncomplete: incompleteListing => Requests.Post('Product/Listings/update/incomplete', { ...incompleteListing }),\r\n};\r\n\r\nconst Office = {\r\n getOfficeDefinition: () => Requests.Get('definition/offices'),\r\n insertOffice: officeData => Requests.Post('profile/offices/insert', { ...officeData }),\r\n officeLookup: searchCriteria => Requests.Post('profile/offices/OfficeLookup', { ...searchCriteria }),\r\n searchOffices: searchCriteria => Requests.Post('profile/offices/search', { ...searchCriteria }),\r\n selectOffice: officeId => Requests.Post('profile/offices/select', { ...officeId }),\r\n updateOffice: officeData => Requests.Post('profile/offices/update', { ...officeData }),\r\n};\r\n\r\nconst Photos = {\r\n getPreferredPhoto: uniqueID => Requests.Post('Image/GetPreferredPhoto', { key: uniqueID }),\r\n getSingleImage: file => Requests.GetBlob(`Image/GetAwsFile?file=${file}`),\r\n postImage: form => Requests.Post('image', form),\r\n};\r\n\r\nconst RowLock = {\r\n CheckRowLock: entity => Requests.Post('RowLock/check', entity),\r\n CreateRowLock: entity => Requests.Post('RowLock/create', entity),\r\n PingRowLock: entity => Requests.Post('RowLock/ping', entity),\r\n RemoveRowLock: entity => Requests.Post('RowLock/remove', entity),\r\n TakeoverRowLock: entity => Requests.Post('RowLock/takeover', entity),\r\n};\r\n\r\nconst Team = {\r\n getActors: () => Requests.Get('authdemo/actors'),\r\n getTargets: () => Requests.Get('authdemo/targets'),\r\n getListOfTeam: () => Requests.Get('authdemo'),\r\n};\r\n\r\nconst TeamsManagement = {\r\n SearchMember: member => Requests.Post('teams/teamMemberSearch', { ...member }),\r\n AddMember: member => Requests.Post('teams/addToTeam', { ...member }),\r\n RemoveMember: member => Requests.Post('teams/removeFromTeam', { ...member }),\r\n};\r\n\r\nconst User = {\r\n getUserName: () => Requests.Get('user/name'),\r\n getUser: () => Requests.Get('user'),\r\n updateUser: newData => Requests.Put('user', { data: { ...newData } }),\r\n};\r\n\r\nexport default {\r\n Acl,\r\n AuditLog,\r\n Agent,\r\n Auth,\r\n AutoSave,\r\n Condo,\r\n DataPortal,\r\n Definitions,\r\n Impersonation,\r\n Listing,\r\n Office,\r\n Photos,\r\n RowLock,\r\n Team,\r\n TeamsManagement,\r\n User,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\n\r\n// const CREATE_DISCARD_CHANGES_CLICKED = 'CREATE_DISCARD_CHANGES_CLICKED';\r\n// const EDIT_DISCARD_CHANGES_CLICKED = 'EDIT_DISCARD_CHANGES_CLICKED';\r\nconst CLEAR_REPEATABLE_SECTION_COUNT = 'CLEAR_REPEATABLE_SECTION_COUNT';\r\nconst DELETE_SUPPLEMENT = 'DELETE_SUPPLEMENT';\r\nconst FORM_SUBMITTED = 'FORM_SUBMITTED';\r\nconst GET_ALL_LISTINGS = 'GET_ALL_LISTINGS';\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst LISTING_COORDS_CLEARED = 'LISTING_COORDS_CLEARED';\r\nconst LISTING_COORDS_LOADED = 'LISTING_COORDS_LOADED';\r\nconst LOAD_FORM_DEFINITION = 'LOAD_FORM_DEFINITION';\r\nconst LOAD_MY_LISTINGS = 'LOAD_MY_LISTINGS';\r\nconst LOAD_MY_LISTINGS_FAIL = 'LOAD_MY_LISTINGS_FAIL';\r\nconst LOAD_MY_LISTINGS_SUCCESS = 'LOAD_MY_LISTINGS_SUCCESS';\r\nconst LOAD_LISTING = 'LOAD_LISTING';\r\nconst LOAD_LISTING_FAIL = 'LOAD_LISTING_FAIL';\r\nconst LOAD_LISTING_SUCCESS = 'LOAD_LISTING_SUCCESS';\r\nconst LOAD_LISTING_PREFERRED_PHOTO_DETAILS = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS';\r\nconst LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL';\r\nconst LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS';\r\nconst LOAD_LISTING_PHOTO = 'LOAD_LISTING_PHOTO';\r\nconst LOAD_LISTING_PHOTO_FAIL = 'LOAD_LISTING_PHOTO_FAIL';\r\nconst LOAD_LISTING_PHOTO_SUCCESS = 'LOAD_LISTING_PHOTO_SUCCESS';\r\nconst LOAD_UPLOADED_PHOTOS = 'LOAD_UPLOADED_PHOTOS';\r\nconst REORDER_SUPPLEMENTS = 'REORDER_SUPPLEMENTS';\r\nconst SAVE_IMAGES = 'SAVE_IMAGES';\r\nconst SAVE_SUPPLEMENT = 'SAVE_SUPPLEMENT';\r\nconst SAVE_SUPPLEMENT_SUCCESS = 'SAVE_SUPPLEMENT_SUCCESS';\r\nconst SAVE_SUPPLEMENT_FAIL = 'SAVE_SUPPLEMENT_FAIL';\r\nconst SEARCH_LISTINGS = 'SEARCH_LISTINGS';\r\nconst SEARCH_LISTINGS_FAIL = 'SEARCH_LISTINGS_FAIL';\r\nconst SEARCH_LISTINGS_SUCCESS = 'SEARCH_LISTINGS_SUCCESS';\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\nconst SEARCH_LISTINGS_CRITERIA = 'SEARCH_LISTINGS_CRITERIA';\r\nconst SET_SECTION_COUNT = 'SET_SECTION_COUNT';\r\nconst TAX_AUTO_POP_SEARCH = 'TAX_AUTO_POP_SEARCH';\r\nconst TAX_AUTO_POP_SEARCH_FAIL = 'TAX_AUTO_POP_SEARCH_FAIL';\r\nconst TAX_AUTO_POP_SEARCH_SUCCESS = 'TAX_AUTO_POP_SEARCH_SUCCESS';\r\nconst TAX_AUTO_POP_SELECT = 'TAX_AUTO_POP_SELECT';\r\nconst TAX_AUTO_POP_SELECT_FAIL = 'TAX_AUTO_POP_SELECT_FAIL';\r\nconst TAX_AUTO_POP_SELECT_SUCCESS = 'TAX_AUTO_POP_SELECT_SUCCESS';\r\nconst UPLOAD_IMAGE = 'UPLOAD_IMAGE';\r\nconst UPLOAD_IMAGE_FAIL = 'UPLOAD_IMAGE_FAIL';\r\nconst VIEW_LISTING_CLICKED = 'VIEW_LISTING_CLICKED';\r\n\r\nconst CHECK_AUTOSAVE_LISTING = 'p9/listing/CHECK_AUTOSAVE_LISTING';\r\nconst CHECK_AUTOSAVE_LISTING_FAIL = 'p9/listing/CHECK_AUTOSAVE_LISTING_FAIL';\r\nconst CHECK_AUTOSAVE_LISTING_SUCCESS = 'p9/listing/CHECK_AUTOSAVE_LISTING_SUCCESS';\r\n\r\nconst LOAD_AUTOSAVE_LISTING = 'p9/listing/LOAD_AUTOSAVE_LISTING';\r\nconst LOAD_AUTOSAVE_LISTING_FAIL = 'p9/listing/LOAD_AUTOSAVE_LISTING_FAIL';\r\nconst LOAD_AUTOSAVE_LISTING_SUCCESS = 'p9/listing/LOAD_AUTOSAVE_LISTING_SUCCESS';\r\n\r\nconst REMOVE_AUTOSAVE_LISTING = 'p9/listing/REMOVE_AUTOSAVE_LISTING';\r\nconst REMOVE_AUTOSAVE_LISTING_FAIL = 'p9/listing/REMOVE_AUTOSAVE_LISTING_FAIL';\r\nconst REMOVE_AUTOSAVE_LISTING_SUCCESS = 'p9/listing/REMOVE_AUTOSAVE_LISTING_SUCCESS';\r\n\r\nconst SAVE_AUTOSAVE_LISTING = 'p9/listing/SAVE_AUTOSAVE_LISTING';\r\nconst SAVE_AUTOSAVE_LISTING_FAIL = 'p9/listing/SAVE_AUTOSAVE_LISTING_FAIL';\r\nconst SAVE_AUTOSAVE_LISTING_SUCCESS = 'p9/listing/SAVE_AUTOSAVE_LISTING_SUCCESS';\r\n\r\nconst UPDATE_AUTOSAVE_LISTING = 'p9/listing/UPDATE_AUTOSAVE_LISTING';\r\nconst UPDATE_AUTOSAVE_LISTING_FAIL = 'p9/listing/UPDATE_AUTOSAVE_LISTING_FAIL';\r\nconst UPDATE_AUTOSAVE_LISTING_SUCCESS = 'p9/listing/UPDATE_AUTOSAVE_LISTING_SUCCESS';\r\n\r\nconst RELOAD_LISTING_CLICKED = 'p9/listing/RELOAD_LISTING_CLICKED';\r\nconst RELOAD_LISTING_CLICKED_FAIL = 'p9/listing/RELOAD_LISTING_CLICKED_FAIL';\r\nconst RELOAD_LISTING_CLICKED_SUCCESS = 'p9/listing/RELOAD_LISTING_CLICKED_SUCCESS';\r\n\r\nconst LOAD_LISTING_PHOTO_SORTORDER = 'p9/listing/LOAD_LISTING_PHOTO_SORTORDER';\r\nconst CLEAR_LISTING_PHOTO_SORTORDER = 'p9/listing/CLEAR_LISTING_PHOTO_SORTORDER';\r\n\r\nconst DECREMENT_UPLOADS_COUNTER = 'p9/listing/DECREMENT_UPLOADS_COUNTER';\r\nconst SET_UPLOADS_COUNTER = 'p9/listing/SET_UPLOADS_COUNTER';\r\n\r\nconst SET_IS_BUSY = 'p9/listing/SET_IS_BUSY';\r\n\r\nconst TOGGLE_SHOW_BROKER_LISTINGS = 'TOGGLE_SHOW_BROKER_LISTINGS';\r\n\r\n// TODO: Break images and supplements into their own reducers?\r\n\r\nconst initialState = {\r\n allListings: null,\r\n autoPopListings: null,\r\n autoSaveCheckLoading: false,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n currentImages: [],\r\n editableListingLoading: true,\r\n loadError: null,\r\n repeatableSectionCount: {},\r\n listingClicked: null,\r\n listingCoordinates: null,\r\n listingPreferredPhotoDetails: null,\r\n listingPhoto: null,\r\n listingPhotoSortOrder: [],\r\n myListings: null,\r\n searchCriteria: null,\r\n searchListingsResults: null,\r\n selectedListing: null,\r\n uploadedPhotos: [],\r\n uploadedSupplements: [],\r\n searchLoading: false,\r\n selectLoading: false,\r\n sectionAddClicks: {},\r\n filesToBeUploadedCounter: 0,\r\n isBusy: false,\r\n showBrokerListings: false,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CHECK_AUTOSAVE_LISTING:\r\n return {\r\n ...state,\r\n autoSaveCheckLoading: true,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n };\r\n case CHECK_AUTOSAVE_LISTING_FAIL:\r\n return {\r\n ...state,\r\n autoSaveCheckLoading: false,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n };\r\n case CHECK_AUTOSAVE_LISTING_SUCCESS:\r\n return {\r\n ...state,\r\n autoSaveCheckLoading: false,\r\n autoSaveData: action.payload.autoSaveData,\r\n autoSaveExists: action.payload.autoSaveExists,\r\n };\r\n case CLEAR_REPEATABLE_SECTION_COUNT:\r\n return {\r\n ...state,\r\n repeatableSectionCount: {},\r\n };\r\n case DELETE_SUPPLEMENT: {\r\n // find entry with matching uid and flip IsDeleted flag to true\r\n const insert = state.uploadedSupplements.map(file => {\r\n if (file.uid === action.payload) {\r\n return {\r\n ...file,\r\n IsDeleted: true,\r\n };\r\n }\r\n return file;\r\n });\r\n return {\r\n ...state,\r\n uploadedSupplements: [\r\n ...insert,\r\n ],\r\n };\r\n }\r\n case FORM_SUBMITTED:\r\n return {\r\n ...state,\r\n listingClicked: null,\r\n listingPreferredPhotoDetails: null,\r\n listingPhoto: null,\r\n };\r\n case LISTING_COORDS_CLEARED:\r\n return {\r\n ...state,\r\n listingCoordinates: null,\r\n };\r\n case LISTING_COORDS_LOADED:\r\n return {\r\n ...state,\r\n listingCoordinates: action.payload,\r\n };\r\n case GET_ALL_LISTINGS:\r\n return {\r\n ...state,\r\n allListings: action.error ? null : action.payload,\r\n };\r\n case HOME_BUTTON_CLICKED:\r\n return {\r\n ...initialState,\r\n myListings: state.myListings,\r\n };\r\n case LOAD_AUTOSAVE_LISTING:\r\n case REMOVE_AUTOSAVE_LISTING:\r\n case SAVE_AUTOSAVE_LISTING:\r\n case UPDATE_AUTOSAVE_LISTING:\r\n case LOAD_LISTING:\r\n case LOAD_LISTING_PREFERRED_PHOTO_DETAILS:\r\n case LOAD_LISTING_PHOTO:\r\n case TAX_AUTO_POP_SELECT:\r\n return {\r\n ...state,\r\n selectLoading: true,\r\n };\r\n case LOAD_AUTOSAVE_LISTING_FAIL:\r\n case REMOVE_AUTOSAVE_LISTING_FAIL:\r\n case SAVE_AUTOSAVE_LISTING_FAIL:\r\n case UPDATE_AUTOSAVE_LISTING_FAIL:\r\n case LOAD_LISTING_FAIL:\r\n case LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL:\r\n case LOAD_LISTING_PHOTO_FAIL:\r\n case TAX_AUTO_POP_SELECT_FAIL:\r\n return {\r\n ...state,\r\n selectLoading: false,\r\n };\r\n case LOAD_MY_LISTINGS:\r\n return {\r\n ...state,\r\n editableListingLoading: true,\r\n };\r\n case LOAD_MY_LISTINGS_SUCCESS:\r\n return {\r\n ...state,\r\n myListings: action.payload.myListings,\r\n editableListingLoading: false,\r\n };\r\n case LOAD_MY_LISTINGS_FAIL:\r\n return {\r\n ...state,\r\n editableListingLoading: true,\r\n };\r\n case LOAD_LISTING_SUCCESS:\r\n case TAX_AUTO_POP_SELECT_SUCCESS:\r\n return {\r\n ...state,\r\n selectedListing: action.payload.listingSelected,\r\n selectLoading: false,\r\n };\r\n case LOAD_AUTOSAVE_LISTING_SUCCESS:\r\n return {\r\n ...state,\r\n selectedListing: action.payload.listingSelected,\r\n autoSaveExists: true,\r\n selectLoading: false,\r\n };\r\n case LOAD_FORM_DEFINITION:\r\n return {\r\n ...state,\r\n autoPopListings: null,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n currentImages: [],\r\n repeatableSectionCount: {},\r\n loadError: null,\r\n listingCoordinates: null,\r\n listingPhoto: null,\r\n listingPreferredPhotoDetails: null,\r\n searchCriteria: null,\r\n searchListingsResults: null,\r\n searchLoading: false,\r\n selectedListing: null,\r\n selectLoading: false,\r\n uploadedPhotos: [],\r\n uploadedSupplements: [],\r\n };\r\n case LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n listingPreferredPhotoDetails: action.payload,\r\n selectLoading: false,\r\n };\r\n case LOAD_LISTING_PHOTO_SUCCESS:\r\n return {\r\n ...state,\r\n listingPhoto: action.payload,\r\n selectLoading: false,\r\n };\r\n case LOAD_UPLOADED_PHOTOS:\r\n return {\r\n ...state,\r\n uploadedPhotos: [...action.payload],\r\n };\r\n case LOAD_LISTING_PHOTO_SORTORDER:\r\n return {\r\n ...state,\r\n listingPhotoSortOrder: action.payload,\r\n };\r\n case CLEAR_LISTING_PHOTO_SORTORDER:\r\n return {\r\n ...state,\r\n listingPhotoSortOrder: [],\r\n };\r\n case RELOAD_LISTING_CLICKED_SUCCESS:\r\n return {\r\n ...state,\r\n listingClicked: action.payload.listingSearchResults,\r\n listingPreferredPhotoDetails: null,\r\n listingPhoto: null,\r\n };\r\n case REMOVE_AUTOSAVE_LISTING_SUCCESS:\r\n return {\r\n ...state,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n selectLoading: false,\r\n };\r\n case REORDER_SUPPLEMENTS:\r\n return {\r\n ...state,\r\n uploadedSupplements: [\r\n ...action.payload,\r\n ],\r\n };\r\n case SAVE_AUTOSAVE_LISTING_SUCCESS:\r\n case UPDATE_AUTOSAVE_LISTING_SUCCESS:\r\n return {\r\n ...state,\r\n autoSaveExists: true,\r\n selectLoading: false,\r\n };\r\n case SAVE_IMAGES:\r\n return {\r\n ...state,\r\n currentImages: action.error ? null : action.currentImages,\r\n };\r\n case SAVE_SUPPLEMENT:\r\n return {\r\n ...state,\r\n // insert placeholder\r\n uploadedSupplements: [\r\n ...state.uploadedSupplements,\r\n action.payload,\r\n ],\r\n loadError: null,\r\n };\r\n case SAVE_SUPPLEMENT_FAIL:\r\n return {\r\n ...state,\r\n loadError: action.payload,\r\n };\r\n case SAVE_SUPPLEMENT_SUCCESS: {\r\n // replace placeholder data with async result\r\n const insert = state.uploadedSupplements.map(placeholder => ((placeholder.uid === action.payload.uid) ? action.payload : placeholder));\r\n return {\r\n ...state,\r\n uploadedSupplements: [\r\n ...insert,\r\n ],\r\n };\r\n }\r\n case SEARCH_LISTINGS:\r\n return {\r\n ...state,\r\n searchLoading: true,\r\n };\r\n case SEARCH_LISTINGS_FAIL:\r\n return {\r\n ...state,\r\n searchLoading: false,\r\n };\r\n case SEARCH_LISTINGS_SUCCESS:\r\n return {\r\n ...state,\r\n searchListingsResults: action.error ? null : action.payload.listingSearchResults,\r\n searchLoading: false,\r\n };\r\n case SEARCH_LISTINGS_CRITERIA:\r\n return {\r\n ...state,\r\n searchCriteria: action.error ? null : action.payload,\r\n };\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n autoPopListings: null,\r\n autoSaveData: null,\r\n autoSaveExists: false,\r\n repeatableSectionCount: {},\r\n selectedListing: null,\r\n searchListingsResults: null,\r\n };\r\n case SET_SECTION_COUNT:\r\n return {\r\n ...state,\r\n repeatableSectionCount: action.error ? null : action.payload,\r\n };\r\n case TAX_AUTO_POP_SEARCH:\r\n return {\r\n ...state,\r\n searchLoading: true,\r\n };\r\n case TAX_AUTO_POP_SEARCH_FAIL:\r\n return {\r\n ...state,\r\n searchLoading: false,\r\n };\r\n case TAX_AUTO_POP_SEARCH_SUCCESS:\r\n return {\r\n ...state,\r\n autoPopListings: action.payload.autoPopListings,\r\n searchLoading: false,\r\n };\r\n case VIEW_LISTING_CLICKED:\r\n return {\r\n ...state,\r\n listingClicked: action.error ? null : action.data,\r\n listingPreferredPhotoDetails: null,\r\n listingPhoto: null,\r\n };\r\n case UPLOAD_IMAGE: {\r\n const imageUploads = state.uploadedPhotos\r\n ? [...state.uploadedPhotos, action.payload] : [action.payload];\r\n return {\r\n ...state,\r\n uploadedPhotos: imageUploads,\r\n };\r\n }\r\n case UPLOAD_IMAGE_FAIL: {\r\n return {\r\n ...state,\r\n loadError: action.error,\r\n };\r\n }\r\n case DECREMENT_UPLOADS_COUNTER: {\r\n return {\r\n ...state,\r\n filesToBeUploadedCounter: state.filesToBeUploadedCounter - 1,\r\n };\r\n }\r\n case SET_UPLOADS_COUNTER: {\r\n return {\r\n ...state,\r\n filesToBeUploadedCounter: action.payload,\r\n };\r\n }\r\n case SET_IS_BUSY: {\r\n return {\r\n ...state,\r\n isBusy: action.payload,\r\n };\r\n }\r\n case TOGGLE_SHOW_BROKER_LISTINGS:\r\n return {\r\n ...state,\r\n showBrokerListings: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst saveCurrentCoordinates = currCords => ({\r\n type: LISTING_COORDS_LOADED,\r\n payload: currCords,\r\n});\r\n\r\nconst saveCurrentImages = images => ({\r\n type: SAVE_IMAGES,\r\n currentImages: images,\r\n});\r\n\r\n// consumes a single file: uses a placeholder to maintain upload/dnd order, then inserts S3 response upon resolution\r\nconst saveSupplement = (file, id) => async dispatch => {\r\n // dispatch placeholder in case async promises resolve out of order\r\n dispatch({\r\n type: SAVE_SUPPLEMENT,\r\n // object shape must be consistent between placeholder and S3 response, for rendering purposes\r\n payload: {\r\n Path: null,\r\n MediaType: null,\r\n URL: null,\r\n IsError: false,\r\n IsDeleted: false, // necessary for posting supplement in listing form\r\n IsUploading: true, // for user feedback (spinner)\r\n uid: id,\r\n },\r\n });\r\n try {\r\n // API requires formData object\r\n const fileAsForm = new FormData();\r\n fileAsForm.append('file', file);\r\n\r\n // POST to S3\r\n const result = await apiService.Listing.SaveSupplement(fileAsForm);\r\n dispatch({\r\n type: SAVE_SUPPLEMENT_SUCCESS,\r\n payload: {\r\n Path: result.displayName,\r\n MediaType: result.extension,\r\n URL: result.newName,\r\n Description: result.displayName,\r\n IsError: result.isError,\r\n IsDeleted: false,\r\n IsUploading: false,\r\n uid: id,\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing fileAsForm', error);\r\n dispatch({\r\n type: SAVE_SUPPLEMENT_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nconst reorderSupplements = newSortOrder => ({\r\n type: REORDER_SUPPLEMENTS,\r\n payload: newSortOrder,\r\n});\r\n\r\nconst deleteSupplement = uid => ({\r\n type: DELETE_SUPPLEMENT,\r\n payload: uid,\r\n});\r\n\r\nconst setSearchCriteria = values => ({\r\n type: SEARCH_LISTINGS_CRITERIA,\r\n payload: values,\r\n});\r\n\r\nconst setRepeatableSectionCount = values => async dispatch => {\r\n const sectionCounts = {};\r\n if (values.Rooms) {\r\n sectionCounts.Rooms = Object.keys(values.Rooms).map(key => values.Rooms[key].IsDeleted);\r\n }\r\n if (values.Photos) {\r\n sectionCounts.Photos = Object.keys(values.Photos).map(key => values.Photos[key].IsDeleted);\r\n }\r\n if (values.Supplements) {\r\n sectionCounts.Supplements = Object.keys(values.Supplements).map(key => values.Supplements[key].IsDeleted);\r\n }\r\n if (values.OpenHouses) {\r\n sectionCounts.OpenHouses = Object.keys(values.OpenHouses).map(key => values.OpenHouses[key].IsDeleted);\r\n }\r\n if (values.Doors) {\r\n sectionCounts.Doors = Object.keys(values.Doors).map(key => values.Doors[key].IsDeleted);\r\n }\r\n if (values.Parcels) {\r\n sectionCounts.Parcels = Object.keys(values.Parcels).map(key => values.Parcels[key].IsDeleted);\r\n }\r\n if (values.Units) {\r\n sectionCounts.Units = Object.keys(values.Units).map(key => values.Units[key].IsDeleted);\r\n }\r\n if (values.History) {\r\n sectionCounts.History = Object.keys(values.History).map(key => values.History[key].IsDeleted);\r\n }\r\n dispatch({\r\n type: SET_SECTION_COUNT,\r\n payload: sectionCounts,\r\n });\r\n};\r\n\r\nconst clearRepeatableSectionCount = () => async dispatch => {\r\n dispatch({\r\n type: CLEAR_REPEATABLE_SECTION_COUNT,\r\n });\r\n};\r\n\r\nconst saveListingImages = uploadedPhotos => async dispatch => {\r\n const newUploadedPhotos = uploadedPhotos.map(photo => [photo]);\r\n\r\n dispatch({\r\n type: LOAD_UPLOADED_PHOTOS,\r\n payload: newUploadedPhotos,\r\n });\r\n};\r\n\r\nconst setUploadsCounter = uploadsCounter => ({\r\n type: SET_UPLOADS_COUNTER,\r\n payload: uploadsCounter,\r\n});\r\n\r\nconst setIsBusy = value => ({\r\n type: SET_IS_BUSY,\r\n payload: value,\r\n});\r\n\r\n// imageKey added as a parameter to unify frontennd state with backend status\r\n// sortOrder is used to maintain list placement for modified images after saving\r\nconst postCurrentImages = (form, imageKey, sortOrder) => async dispatch => {\r\n try {\r\n const result = await apiService.Photos.postImage(form);\r\n result.forEach(res => {\r\n if (res.path.includes('_thumbnail')) return;\r\n res.key = imageKey;\r\n if (sortOrder) res.SortOrder = sortOrder;\r\n });\r\n\r\n dispatch({\r\n type: UPLOAD_IMAGE,\r\n payload: result,\r\n });\r\n dispatch({\r\n type: DECREMENT_UPLOADS_COUNTER,\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing postCurrentImages', error);\r\n dispatch({\r\n type: UPLOAD_IMAGE_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nconst viewListing = displayListing => ({\r\n type: VIEW_LISTING_CLICKED,\r\n data: displayListing,\r\n});\r\n\r\nconst loadMyListings = () => async dispatch => {\r\n dispatch({ type: LOAD_MY_LISTINGS });\r\n try {\r\n const myListings = await apiService.Listing.GetMyListings();\r\n dispatch({\r\n type: LOAD_MY_LISTINGS_SUCCESS,\r\n payload: { myListings },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing viewListing', error);\r\n dispatch({ type: LOAD_MY_LISTINGS_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n Dispatch to retrieve listing by its UniqueID value\r\n*/\r\nconst loadListingById = uniqueID => async dispatch => {\r\n dispatch({ type: LOAD_LISTING });\r\n try {\r\n const listingSelected = await apiService.Listing.GetListingById(uniqueID);\r\n dispatch({\r\n type: LOAD_LISTING_SUCCESS,\r\n payload: { listingSelected },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadListingById', error);\r\n dispatch({ type: LOAD_LISTING_FAIL });\r\n }\r\n};\r\n\r\nconst loadListingToCopyById = uniqueID => async dispatch => {\r\n dispatch({ type: LOAD_LISTING });\r\n try {\r\n const listingSelected = await apiService.Listing.CopyListing(uniqueID);\r\n dispatch({\r\n type: LOAD_LISTING_SUCCESS,\r\n payload: { listingSelected },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadListingToCopyById', error);\r\n dispatch({ type: LOAD_LISTING_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n Retrieves the listing preferred photo details by using the listing UniqueID\r\n*/\r\nconst loadListingPreferredPhotoDetails = uniqueID => async dispatch => {\r\n dispatch({ type: LOAD_LISTING_PREFERRED_PHOTO_DETAILS });\r\n try {\r\n const listingPreferredPhotoDetails = await apiService.Photos.getPreferredPhoto(uniqueID);\r\n dispatch({\r\n type: LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS,\r\n payload: listingPreferredPhotoDetails,\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadListingPreferredPhotoDetails', error);\r\n dispatch({ type: LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n Retrieves the listing photo by using a photo identifier which can be either\r\n a file URL of form: https://[bucket-name].s3.[s3-region].amazonaws.com/[file-name],\r\n or a file name\r\n*/\r\nconst loadListingPhoto = photoUrlOrFileName => async dispatch => {\r\n dispatch({ type: LOAD_LISTING_PHOTO });\r\n try {\r\n const listingPhoto = await apiService.Photos.getSingleImage(photoUrlOrFileName);\r\n dispatch({\r\n type: LOAD_LISTING_PHOTO_SUCCESS,\r\n payload: listingPhoto,\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadListingPhoto', error);\r\n dispatch({ type: LOAD_LISTING_PHOTO_FAIL });\r\n }\r\n};\r\n\r\nconst loadListingPhotoSortOrder = arrayOfKeys => ({\r\n type: LOAD_LISTING_PHOTO_SORTORDER,\r\n payload: arrayOfKeys,\r\n});\r\n\r\nconst clearListingPhotoSortOrder = () => ({\r\n type: CLEAR_LISTING_PHOTO_SORTORDER,\r\n});\r\n/*\r\n Dispatch to load results from a tax auto pop search\r\n On success, results are stored in redux as autoPopListings\r\n*/\r\nconst loadTaxSearchResults = taxData => async dispatch => {\r\n dispatch({ type: TAX_AUTO_POP_SEARCH });\r\n try {\r\n const autoPopListings = await apiService.Listing.TaxAutoPopSearch(taxData);\r\n dispatch({ type: TAX_AUTO_POP_SEARCH_SUCCESS, payload: { autoPopListings } });\r\n } catch (error) {\r\n console.error('Error: Listing loadTaxSearchResults', error);\r\n dispatch({ type: TAX_AUTO_POP_SEARCH_FAIL });\r\n }\r\n};\r\n\r\nconst loadListingSearchResults = listingData => async dispatch => {\r\n dispatch({ type: SEARCH_LISTINGS });\r\n try {\r\n const listingSearchResults = await apiService.Listing.SearchListings(listingData);\r\n dispatch({ type: SEARCH_LISTINGS_SUCCESS, payload: { listingSearchResults } });\r\n } catch (error) {\r\n console.error('Error: Listing loadListingSearchResults', error);\r\n dispatch({ type: SEARCH_LISTINGS_FAIL });\r\n }\r\n};\r\n\r\nconst reloadListingClicked = listingData => async dispatch => {\r\n dispatch({ type: RELOAD_LISTING_CLICKED });\r\n try {\r\n const [listingSearchResults] = await apiService.Listing.SearchListings(listingData);\r\n dispatch({\r\n type: RELOAD_LISTING_CLICKED_SUCCESS,\r\n payload: { listingSearchResults },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing reloadListingClicked', error);\r\n dispatch({ type: RELOAD_LISTING_CLICKED_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n Dispatch for a selected listing from tax auto pop table\r\n On success, the listing is stored in redux as autoPopSelected\r\n*/\r\nconst loadTaxAutoPopSelected = listingData => async dispatch => {\r\n dispatch({ type: TAX_AUTO_POP_SELECT });\r\n try {\r\n const autoPopSelected = await apiService.Listing.TaxAutoPopSelect(listingData);\r\n // This is needed to transform the data to the same as loadListingById\r\n const listingSelected = {};\r\n if (autoPopSelected.length > 0) {\r\n const [currentListing] = autoPopSelected;\r\n listingSelected.listing = { ...currentListing };\r\n }\r\n dispatch({\r\n type: TAX_AUTO_POP_SELECT_SUCCESS,\r\n payload: { listingSelected },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadTaxAutoPopSelected', error);\r\n dispatch({ type: TAX_AUTO_POP_SELECT_FAIL });\r\n }\r\n};\r\n\r\nconst checkForAutoSave = autoSaveCriteria => async dispatch => {\r\n dispatch({ type: CHECK_AUTOSAVE_LISTING });\r\n try {\r\n const result = await apiService.AutoSave.checkAutoSave(autoSaveCriteria);\r\n dispatch({\r\n type: CHECK_AUTOSAVE_LISTING_SUCCESS,\r\n payload: { autoSaveExists: result.listingHasAutosave, autoSaveData: result.data },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing checkForAutoSave', error);\r\n dispatch({ type: CHECK_AUTOSAVE_LISTING_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n This may potentially overwrite the listing data of an edited listing\r\n*/\r\nconst loadAutoSave = autoSaveCriteria => async dispatch => {\r\n dispatch({ type: LOAD_AUTOSAVE_LISTING });\r\n try {\r\n const result = await apiService.AutoSave.getAutoSaveData(autoSaveCriteria);\r\n dispatch({\r\n type: LOAD_AUTOSAVE_LISTING_SUCCESS,\r\n payload: { listingSelected: result },\r\n });\r\n } catch (error) {\r\n console.error('Error: Listing loadAutoSave', error);\r\n dispatch({ type: LOAD_AUTOSAVE_LISTING_FAIL });\r\n }\r\n};\r\n\r\nconst removeAutoSave = autoSaveCriteria => async dispatch => {\r\n dispatch({ type: REMOVE_AUTOSAVE_LISTING });\r\n try {\r\n await apiService.AutoSave.removeAutoSaveData(autoSaveCriteria);\r\n dispatch({ type: REMOVE_AUTOSAVE_LISTING_SUCCESS });\r\n } catch (error) {\r\n console.error('Error: Listing removeAutoSave', error);\r\n dispatch({ type: REMOVE_AUTOSAVE_LISTING_FAIL });\r\n }\r\n};\r\n\r\nconst saveAutoSave = autoSaveData => async dispatch => {\r\n dispatch({ type: SAVE_AUTOSAVE_LISTING });\r\n try {\r\n await apiService.AutoSave.autoSave(autoSaveData);\r\n dispatch({ type: SAVE_AUTOSAVE_LISTING_SUCCESS });\r\n return true;\r\n } catch (error) {\r\n console.error('Error: Listing saveAutoSave', error);\r\n dispatch({ type: SAVE_AUTOSAVE_LISTING_FAIL });\r\n return false;\r\n }\r\n};\r\n\r\nconst updateAutoSave = autoSaveData => async dispatch => {\r\n dispatch({ type: UPDATE_AUTOSAVE_LISTING });\r\n try {\r\n await apiService.AutoSave.updateAutoSaveData(autoSaveData);\r\n dispatch({ type: UPDATE_AUTOSAVE_LISTING_SUCCESS });\r\n return true;\r\n } catch (error) {\r\n console.error('Error: Listing updateAutoSave', error);\r\n dispatch({ type: UPDATE_AUTOSAVE_LISTING_FAIL });\r\n return false;\r\n }\r\n};\r\n\r\nconst toggleShowBrokerListings = value => ({\r\n type: TOGGLE_SHOW_BROKER_LISTINGS,\r\n payload: value,\r\n});\r\n\r\nexport {\r\n checkForAutoSave,\r\n clearRepeatableSectionCount,\r\n clearListingPhotoSortOrder,\r\n deleteSupplement,\r\n loadAutoSave,\r\n removeAutoSave,\r\n saveAutoSave,\r\n updateAutoSave,\r\n loadMyListings,\r\n loadListingById,\r\n loadListingToCopyById,\r\n loadListingPhoto,\r\n loadListingPreferredPhotoDetails,\r\n loadListingPhotoSortOrder,\r\n loadListingSearchResults,\r\n loadTaxAutoPopSelected,\r\n loadTaxSearchResults,\r\n postCurrentImages,\r\n reloadListingClicked,\r\n reorderSupplements,\r\n saveCurrentCoordinates,\r\n saveCurrentImages,\r\n saveListingImages,\r\n saveSupplement,\r\n setRepeatableSectionCount,\r\n setSearchCriteria,\r\n viewListing,\r\n setUploadsCounter,\r\n setIsBusy,\r\n toggleShowBrokerListings,\r\n RELOAD_LISTING_CLICKED_SUCCESS,\r\n VIEW_LISTING_CLICKED,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\n\r\nconst AGENT_LOOKUP = 'AGENT_LOOKUP';\r\nconst AGENT_LOOKUP_FAIL = 'AGENT_LOOKUP_FAIL';\r\nconst AGENT_LOOKUP_SUCCESS = 'AGENT_LOOKUP_SUCCESS';\r\n\r\nconst AGENT_SEARCH = 'AGENT_SEARCH';\r\nconst AGENT_SEARCH_FAIL = 'AGENT_SEARCH_FAIL';\r\nconst AGENT_SEARCH_SUCCESS = 'AGENT_SEARCH_SUCCESS';\r\n\r\nconst CLEAR_AGENT = 'p9/agent/CLEAR_AGENT';\r\n\r\nconst FORM_SUBMITTED = 'FORM_SUBMITTED';\r\n\r\nconst GET_CURRENT_AGENT = 'GET_CURRENT_AGENT';\r\nconst GET_CURRENT_AGENT_FAIL = 'GET_CURRENT_AGENT_FAIL';\r\nconst GET_CURRENT_AGENT_SUCCESS = 'GET_CURRENT_AGENT_SUCCESS';\r\n\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst LOAD_FORM_DEFINITION = 'LOAD_FORM_DEFINITION';\r\n\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\nconst SET_GROUP_TYPE = 'SET_GROUP_TYPE';\r\n\r\nconst LOAD_AGENT_PHOTO = 'p9/agent/LOAD_AGENT_PHOTO';\r\nconst LOAD_AGENT_PHOTO_SUCCESS = 'p9/agent/LOAD_AGENT_PHOTO_SUCCESS';\r\nconst LOAD_AGENT_PHOTO_FAIL = 'p9/agent/LOAD_AGENT_PHOTO_FAIL';\r\n\r\nconst SEARCH_AGENTS_PAGE_CLICKED = 'SEARCH_AGENTS_PAGE_CLICKED';\r\n\r\nconst SELECT_AGENT = 'p9/agent/SELECT_AGENT';\r\nconst SELECT_AGENT_FAIL = 'p9/agent/SELECT_AGENT_FAIL';\r\nconst SELECT_AGENT_SUCCESS = 'p9/agent/SELECT_AGENT_SUCCESS';\r\n\r\nconst SELECT_AGENT_LOOKUP = 'p9/agent/SELECT_AGENT_LOOKUP';\r\nconst SELECT_AGENT_LOOKUP_FAIL = 'p9/agent/SELECT_AGENT_LOOKUP_FAIL';\r\nconst SELECT_AGENT_LOOKUP_SUCCESS = 'p9/agent/SELECT_AGENT_LOOKUP_SUCCESS';\r\n\r\nconst initialState = {\r\n agentGroupType: null,\r\n agentLookup: null,\r\n agentPhotos: [],\r\n agentSearchResults: null,\r\n agentSelected: null,\r\n clearAgent: false,\r\n searchLoading: false,\r\n selectLoading: false,\r\n singleAgentPhoto: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CLEAR_AGENT:\r\n case HOME_BUTTON_CLICKED:\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return initialState;\r\n case SEARCH_AGENTS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n agentSearchResults: null,\r\n agentSelected: null,\r\n };\r\n case LOAD_FORM_DEFINITION:\r\n return {\r\n ...state,\r\n agentGroupType: null,\r\n agentLookup: null,\r\n agentSearchResults: null,\r\n };\r\n case SET_GROUP_TYPE:\r\n return {\r\n ...state,\r\n agentGroupType: action.groupType,\r\n };\r\n case AGENT_LOOKUP:\r\n case AGENT_SEARCH:\r\n return {\r\n ...state,\r\n agentPhotos: [],\r\n searchLoading: true,\r\n singleAgentPhoto: null,\r\n };\r\n case GET_CURRENT_AGENT:\r\n case SELECT_AGENT:\r\n case SELECT_AGENT_LOOKUP:\r\n return {\r\n ...state,\r\n agentPhotos: [],\r\n selectLoading: true,\r\n singleAgentPhoto: null,\r\n };\r\n case AGENT_LOOKUP_FAIL:\r\n case AGENT_SEARCH_FAIL:\r\n return {\r\n ...state,\r\n searchLoading: false,\r\n };\r\n case GET_CURRENT_AGENT_FAIL:\r\n case SELECT_AGENT_FAIL:\r\n case SELECT_AGENT_LOOKUP_FAIL:\r\n return {\r\n ...state,\r\n selectLoading: false,\r\n /* Error handling */\r\n };\r\n case AGENT_LOOKUP_SUCCESS:\r\n case AGENT_SEARCH_SUCCESS:\r\n return {\r\n ...state,\r\n agentSearchResults: action.payload.agents,\r\n searchLoading: false,\r\n };\r\n case GET_CURRENT_AGENT_SUCCESS:\r\n case SELECT_AGENT_LOOKUP_SUCCESS:\r\n return {\r\n ...state,\r\n agentLookup: action.payload.fullAgent,\r\n agentSearchResults: null,\r\n selectLoading: false,\r\n };\r\n case SELECT_AGENT_SUCCESS:\r\n return {\r\n ...state,\r\n agentPhotos: action.payload.agentPhotos,\r\n agentSelected: action.payload.fullAgent,\r\n agentSearchResults: null,\r\n selectLoading: false,\r\n };\r\n case FORM_SUBMITTED:\r\n return {\r\n ...state,\r\n agentSelected: null,\r\n agentPhotos: [],\r\n singleAgentPhoto: null,\r\n };\r\n case LOAD_AGENT_PHOTO_SUCCESS:\r\n return {\r\n ...state,\r\n singleAgentPhoto: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// Searches for agents\r\nconst agentSearch = agentCriteria => async dispatch => {\r\n dispatch({ type: AGENT_SEARCH });\r\n try {\r\n const agents = await apiService.Agent.searchAgent(agentCriteria);\r\n dispatch({\r\n type: AGENT_SEARCH_SUCCESS,\r\n payload: { agents },\r\n });\r\n } catch (err) {\r\n console.error('Error: Agent agentSearch', err);\r\n dispatch({ type: AGENT_SEARCH_FAIL });\r\n }\r\n};\r\n\r\nconst agentLookup = agentCriteria => async dispatch => {\r\n dispatch({ type: AGENT_LOOKUP });\r\n try {\r\n const agents = await apiService.Agent.agentLookup(agentCriteria);\r\n dispatch({\r\n type: AGENT_LOOKUP_SUCCESS,\r\n payload: { agents },\r\n });\r\n } catch (err) {\r\n console.error('Error: Agent agentLookup', err);\r\n dispatch({ type: AGENT_LOOKUP_FAIL });\r\n }\r\n};\r\n\r\nconst clearAgent = () => ({ type: CLEAR_AGENT });\r\n\r\nconst setAgentLookup = agentData => async dispatch => {\r\n dispatch({ type: SELECT_AGENT_LOOKUP });\r\n try {\r\n const selectedAgent = await apiService.Agent.selectAgent(agentData);\r\n const fullAgent = selectedAgent.agent;\r\n dispatch({\r\n type: SELECT_AGENT_LOOKUP_SUCCESS,\r\n payload: { fullAgent },\r\n });\r\n } catch (err) {\r\n console.error('Error: Agent setAgentLookup', err);\r\n dispatch({ type: SELECT_AGENT_LOOKUP_FAIL });\r\n }\r\n};\r\n\r\nconst setCurrentAgent = agentData => async dispatch => {\r\n dispatch({ type: SELECT_AGENT });\r\n try {\r\n const selectedAgent = await apiService.Agent.selectAgent(agentData);\r\n const fullAgent = selectedAgent.agent;\r\n const agentPhotos = selectedAgent.photos;\r\n\r\n dispatch({\r\n type: SELECT_AGENT_SUCCESS,\r\n payload: { fullAgent, agentPhotos },\r\n });\r\n } catch (err) {\r\n console.error('Error: Agent setCurrentAgent', err);\r\n dispatch({ type: SELECT_AGENT_FAIL });\r\n }\r\n};\r\n\r\nconst getCurrentAgent = () => async dispatch => {\r\n dispatch({ type: GET_CURRENT_AGENT });\r\n try {\r\n const selectedAgent = await apiService.Agent.getCurrentAgent();\r\n const fullAgent = selectedAgent[0];\r\n\r\n dispatch({\r\n type: GET_CURRENT_AGENT_SUCCESS,\r\n payload: { fullAgent },\r\n });\r\n } catch (err) {\r\n console.error('Error: Agent getCurrentAgent', err);\r\n dispatch({ type: GET_CURRENT_AGENT_FAIL });\r\n }\r\n};\r\n\r\n/*\r\n Retrieves the listing photo by using a photo identifier which can be either\r\n a file URL of form: https://[bucket-name].s3.[s3-region].amazonaws.com/[file-name],\r\n or a file name\r\n*/\r\nconst loadAgentPhoto = photoUrlOrFileName => async dispatch => {\r\n dispatch({ type: LOAD_AGENT_PHOTO });\r\n try {\r\n const agentPhoto = await apiService.Photos.getSingleImage(photoUrlOrFileName);\r\n dispatch({\r\n type: LOAD_AGENT_PHOTO_SUCCESS,\r\n payload: agentPhoto,\r\n });\r\n } catch (error) {\r\n console.error('Error: Agent loadAgentPhoto', error);\r\n dispatch({ type: LOAD_AGENT_PHOTO_FAIL });\r\n }\r\n};\r\n\r\nexport {\r\n agentLookup,\r\n agentSearch,\r\n clearAgent,\r\n getCurrentAgent,\r\n loadAgentPhoto,\r\n setAgentLookup,\r\n setCurrentAgent,\r\n SELECT_AGENT_SUCCESS,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\n\r\nconst CLICK_SECTION_ADD = 'CLICK_SECTION_ADD';\r\nconst DELETE_OPEN_HOUSE_VALIDATION_RESULT = 'DELETE_OPEN_HOUSE_VALIDATION_RESULT';\r\nconst DELETE_ROOM_VALIDATION_RESULT = 'DELETE_ROOM_VALIDATION_RESULT';\r\nconst FORM_SUBMITTED = 'FORM_SUBMITTED';\r\nconst LOAD_CITY_NAMES = 'LOAD_CITY_NAMES';\r\nconst LOAD_CITY_NAMES_SUCCESS = 'LOAD_CITY_NAMES_SUCCESS';\r\nconst LOAD_CITY_NAMES_FAIL = 'LOAD_CITY_NAMES_FAIL';\r\nconst LOAD_COMBO_BOX_OPTIONS = 'LOAD_COMBO_BOX_OPTIONS';\r\nconst LOAD_COMBO_BOX_OPTIONS_SUCCESS = 'LOAD_COMBO_BOX_OPTIONS_SUCCESS';\r\nconst LOAD_COMBO_BOX_OPTIONS_FAIL = 'LOAD_COMBO_BOX_OPTIONS_FAIL';\r\nconst LOAD_FORM_DEFINITION = 'LOAD_FORM_DEFINITION';\r\nconst LOAD_FORM_DEFINITION_SUCCESS = 'LOAD_FORM_DEFINITION_SUCCESS';\r\nconst LOAD_FORM_DEFINITION_FAIL = 'LOAD_FORM_DEFINITION_FAIL';\r\nconst LOAD_LISTING = 'LOAD_LISTING';\r\nconst SET_COMBO_DICTIONARY_ENTRY = 'SET_COMBO_DICTIONARY_ENTRY';\r\nconst SET_VALIDATION_RESULT = 'SET_VALIDATION_RESULT';\r\nconst SET_OPEN_HOUSE_VALIDATION_RESULT = 'SET_OPEN_HOUSE_VALIDATION_RESULT';\r\nconst SET_ROOM_VALIDATION_RESULT = 'SET_ROOM_VALIDATION_RESULT';\r\nconst SET_FORM_DATA_STATUS = 'SET_FORM_DATA_STATUS';\r\nconst SET_FORM_DATA_COMPLETE = 'SET_FORM_DATA_COMPLETE';\r\n\r\n// These actions are used in multiple places of our application. Should we define them here or somewhere else?\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\n\r\nconst initialState = {\r\n allFields: {},\r\n defaultValues: {},\r\n cityNames: [],\r\n comboBoxOptions: [],\r\n comboIsLoading: false,\r\n comboSetValueDictionary: {},\r\n error: false,\r\n definitionType: null,\r\n formDefinition: [], // raw def'n returned by service call\r\n formIsLoading: false,\r\n formDataStatus: '',\r\n isLoading: false,\r\n listingType: null,\r\n openHouseValidationResult: {},\r\n operationType: null,\r\n isCopyOperation: null,\r\n pageStructure: [], // sorted and structured def'n for rendering\r\n validationResult: {},\r\n roomValidationResult: {},\r\n sectionAddClicks: {},\r\n};\r\n\r\nexport default function formReducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case HOME_BUTTON_CLICKED:\r\n case FORM_SUBMITTED:\r\n return initialState;\r\n case LOAD_CITY_NAMES_SUCCESS:\r\n return {\r\n ...state,\r\n cityNames: action.payload.cityNames,\r\n isLoading: false,\r\n };\r\n case LOAD_CITY_NAMES:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case LOAD_COMBO_BOX_OPTIONS:\r\n return {\r\n ...state,\r\n comboIsLoading: true,\r\n };\r\n case LOAD_COMBO_BOX_OPTIONS_FAIL:\r\n return {\r\n ...state,\r\n comboIsLoading: false,\r\n };\r\n case LOAD_COMBO_BOX_OPTIONS_SUCCESS: {\r\n return {\r\n ...state,\r\n comboBoxOptions: action.payload.comboBoxOptions,\r\n comboIsLoading: false,\r\n };\r\n }\r\n case LOAD_FORM_DEFINITION: {\r\n return {\r\n ...state,\r\n operationType: action.payload.operationType,\r\n isCopyOperation: action.payload.isCopyOperation,\r\n formIsLoading: true,\r\n formDataStatus: '',\r\n validationResult: {},\r\n roomValidationResult: {},\r\n sectionAddClicks: {},\r\n };\r\n }\r\n case LOAD_FORM_DEFINITION_SUCCESS: {\r\n return {\r\n ...state,\r\n allFields: action.payload.allFields,\r\n defaultValues: action.payload.defaultValues,\r\n comboBoxOptions: [],\r\n definitionType: action.payload.definitionType,\r\n formDefinition: action.payload.formDefinition.Data,\r\n formIsLoading: false,\r\n listingType: action.payload.listingType,\r\n pageStructure: action.payload.pageStructure,\r\n };\r\n }\r\n case LOAD_CITY_NAMES_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n /* Error handling */\r\n };\r\n case LOAD_FORM_DEFINITION_FAIL:\r\n return {\r\n ...state,\r\n formIsLoading: false,\r\n /* Error handling */\r\n };\r\n case LOAD_LISTING:\r\n return {\r\n ...state,\r\n formType: 'edit',\r\n };\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return initialState;\r\n case SET_COMBO_DICTIONARY_ENTRY:\r\n return {\r\n ...state,\r\n comboSetValueDictionary: { ...state.comboSetValueDictionary, ...action.payload },\r\n };\r\n case SET_VALIDATION_RESULT: {\r\n return {\r\n ...state,\r\n validationResult: {\r\n ...state.validationResult,\r\n ...action.payload,\r\n },\r\n };\r\n }\r\n case SET_OPEN_HOUSE_VALIDATION_RESULT: {\r\n return {\r\n ...state,\r\n validationResult: {\r\n ...state.validationResult,\r\n OpenHouse: {\r\n ...state.validationResult.OpenHouse,\r\n ...action.payload,\r\n },\r\n },\r\n };\r\n }\r\n case DELETE_OPEN_HOUSE_VALIDATION_RESULT: {\r\n const openHouseResults = state.validationResult.OpenHouse;\r\n delete openHouseResults[action.payload];\r\n return {\r\n ...state,\r\n validationResult: {\r\n ...state.validationResult,\r\n OpenHouse: {\r\n ...openHouseResults,\r\n },\r\n },\r\n };\r\n }\r\n case SET_ROOM_VALIDATION_RESULT: {\r\n return {\r\n ...state,\r\n roomValidationResult: {\r\n ...state.roomValidationResult,\r\n ...action.payload,\r\n },\r\n };\r\n }\r\n case DELETE_ROOM_VALIDATION_RESULT: {\r\n const {\r\n [action.payload]: removedResult,\r\n ...otherResults\r\n } = state.roomValidationResult;\r\n return {\r\n ...state,\r\n roomValidationResult: {\r\n ...otherResults,\r\n },\r\n };\r\n }\r\n case CLICK_SECTION_ADD: {\r\n const { sectionAddClicks } = state;\r\n sectionAddClicks[action.payload.section] = action.payload.section in sectionAddClicks ? sectionAddClicks[action.payload.section] + 1 : 1;\r\n return {\r\n ...state,\r\n sectionAddClicks,\r\n };\r\n }\r\n case SET_FORM_DATA_STATUS: {\r\n return {\r\n ...state,\r\n formDataStatus: action.payload,\r\n };\r\n }\r\n case SET_FORM_DATA_COMPLETE: {\r\n return {\r\n ...state,\r\n formDataStatus: 'initialized',\r\n };\r\n }\r\n default: return state;\r\n }\r\n}\r\n\r\nconst updateSectionAddClicks = section => ({\r\n type: CLICK_SECTION_ADD,\r\n payload: { section },\r\n});\r\n\r\n// Helper functions\r\nconst transformResult = (result = []) => {\r\n const byField = {};\r\n\r\n result.map(entity => {\r\n const [entityName] = Object.keys(entity);\r\n byField[entityName] = { ...entity[entityName], id: entityName };\r\n return null;\r\n });\r\n return byField;\r\n};\r\n\r\nexport const getSortedDefinition = (definition = []) => {\r\n const sorted = definition.sort((a, b) => {\r\n const x = (a.pageSortOrder - b.pageSortOrder);\r\n if (x === 0) {\r\n return (a.SortOrder - b.SortOrder);\r\n }\r\n return x;\r\n });\r\n return sorted;\r\n};\r\n\r\nconst getUniqueSections = (definition = []) => {\r\n const flags = {};\r\n const unique = definition.filter(item => {\r\n if (flags[item.PageName]) {\r\n return false;\r\n }\r\n if (!item.IsVisible) {\r\n return false;\r\n }\r\n flags[item.PageName] = true;\r\n return true;\r\n });\r\n return unique.map(item => ({ sectionName: item.PageName, sectionLabel: item.PageLabel }));\r\n};\r\n\r\nconst getUniqueGroupNames = (definition = []) => {\r\n const flags = {};\r\n const unique = definition.filter(item => {\r\n if (flags[item.layoutGroupName]) {\r\n return false;\r\n }\r\n flags[item.layoutGroupName] = true;\r\n return true;\r\n });\r\n return unique.map(item => item.layoutGroupName);\r\n};\r\n\r\nconst buildGroupDict = (uniqueGroupNames, orderedGroups) => {\r\n const dict = {};\r\n uniqueGroupNames.map(name => {\r\n // grab all fields that match name\r\n const matchingFields = orderedGroups.filter(field => field.layoutGroupName === name);\r\n // insert into dict\r\n dict[name] = [...matchingFields];\r\n return null;\r\n });\r\n return dict;\r\n};\r\n\r\nconst deriveChildren = (sortedDefinition, layoutGroupDict) => {\r\n const flags = {};\r\n const children = [];\r\n sortedDefinition.map(item => {\r\n if ((item.layoutGroupName) && (!flags[item.layoutGroupName])) {\r\n flags[item.layoutGroupName] = true;\r\n children.push({\r\n isGroup: true,\r\n groupName: item.layoutGroupName,\r\n groupType: item.layoutGroupType,\r\n fields: [...layoutGroupDict[item.layoutGroupName]],\r\n PageName: item.PageName, // necessary for next step\r\n });\r\n } else if (!flags[item.layoutGroupName]) {\r\n children.push({\r\n isGroup: false,\r\n ...item,\r\n });\r\n }\r\n return null;\r\n });\r\n return children;\r\n};\r\n\r\nconst createRenderStructure = (uniqueSections, sectionChildren) => {\r\n const structure = [];\r\n uniqueSections.map(section => {\r\n structure.push({\r\n sectionName: section.sectionName,\r\n sectionLabel: section.sectionLabel,\r\n children: sectionChildren.filter(child => child.PageName === section.sectionName),\r\n });\r\n return null;\r\n });\r\n return structure;\r\n};\r\n\r\n// Consumes form definition from service call, then transforms it into a page structure that can be rendered easily\r\nconst transformDefinition = (definition = []) => {\r\n // sort definition\r\n const sortedDefinition = getSortedDefinition(definition);\r\n\r\n // get (ordered) unique list of all sections\r\n const uniqueSections = getUniqueSections(sortedDefinition);\r\n\r\n // get (ordered) list of all items w/ groupName field\r\n const orderedGroups = sortedDefinition.filter(item => item.layoutGroupName);\r\n\r\n // get list of all unique group names\r\n const uniqueGroupNames = getUniqueGroupNames(orderedGroups);\r\n\r\n // build associative array of ordered groupName: [{item},...]\r\n const layoutGroupDict = buildGroupDict(uniqueGroupNames, orderedGroups);\r\n\r\n // derive children\r\n const children = deriveChildren(sortedDefinition, layoutGroupDict);\r\n\r\n // merges results into a final, renderable data structure\r\n const structure = createRenderStructure(uniqueSections, children);\r\n\r\n return structure;\r\n};\r\n\r\n// Action Creators & Thunks\r\nconst setValidationResult = validationResult => {\r\n const normalizedResult = transformResult(validationResult);\r\n return {\r\n type: SET_VALIDATION_RESULT,\r\n payload: normalizedResult,\r\n };\r\n};\r\n\r\nconst setOpenHouseValidationResult = (uid, validationResult) => {\r\n const normalizedResult = transformResult(validationResult);\r\n return {\r\n type: SET_OPEN_HOUSE_VALIDATION_RESULT,\r\n payload: { [uid]: { ...normalizedResult } },\r\n };\r\n};\r\n\r\nconst deleteOpenHouseValidationResult = uid => ({\r\n type: DELETE_OPEN_HOUSE_VALIDATION_RESULT,\r\n payload: uid,\r\n});\r\n\r\n// Dispatches room validation result to the reducer by UID\r\nconst setRoomValidationResult = (uid, validationResult) => {\r\n const normalizedResult = transformResult(validationResult);\r\n return {\r\n type: SET_ROOM_VALIDATION_RESULT,\r\n payload: { [uid]: { ...normalizedResult } },\r\n };\r\n};\r\n\r\n// Dispatches room UID to the reducer for deletion\r\nconst deleteRoomValidationResult = uid => ({\r\n type: DELETE_ROOM_VALIDATION_RESULT,\r\n payload: uid,\r\n});\r\n\r\nconst setFormDataInitialized = () => ({\r\n type: SET_FORM_DATA_COMPLETE,\r\n});\r\n\r\nconst setFormDataStatus = dataStatus => ({\r\n type: SET_FORM_DATA_STATUS,\r\n payload: dataStatus,\r\n});\r\n\r\n/*\r\n Loads form definition from api defined in apiService.js\r\n definitionType: Agent, Listing, Offices, etc\r\n operationType: Create, Edit, etc\r\n listingType: Optional parameter for when the listings form is being used - com, res, rnt, etc\r\n*/\r\nconst loadFormDefinition = (operationType, definitionType, listingType, aclResourceID, aclResourceType, isCopyOperation = false) => async dispatch => {\r\n dispatch({ type: LOAD_FORM_DEFINITION, payload: { operationType, isCopyOperation } });\r\n\r\n try {\r\n let formType = definitionType;\r\n\r\n if (listingType) formType = listingType;\r\n\r\n let aclFieldPermissions = {};\r\n let aclPagePermissions = {};\r\n try {\r\n // Retrieve the ACL fields permissions for current resource.\r\n const aclCriteria = { action: operationType, formname: formType, uniqueId: aclResourceID ?? null };\r\n const aclDetails = await apiService.Acl.GetAclDetails(aclResourceType, aclCriteria);\r\n aclFieldPermissions = aclDetails.fieldPermissions;\r\n aclPagePermissions = aclDetails.pagePermissions;\r\n } catch (er) {\r\n console.error('Error: formGeneration getAclDetails', er);\r\n }\r\n\r\n const formDefinition = await apiService.Definitions.getFormDefinition(formType);\r\n formDefinition.Data = formDefinition.Data.map(field => {\r\n let formField = {};\r\n if (aclPagePermissions !== undefined && aclPagePermissions?.[field.PageName] === false) {\r\n formField = { ...field, IsVisible: false, IsDisabled: false };\r\n } else {\r\n let isDisabled = false;\r\n if (aclFieldPermissions?.[field.FieldName] !== undefined) {\r\n isDisabled = !aclFieldPermissions?.[field.FieldName];\r\n }\r\n formField = { ...field, IsVisible: true, IsDisabled: isDisabled };\r\n }\r\n return formField;\r\n });\r\n\r\n // get all the fields along with the properties we might need throughout the application\r\n const allFields = formDefinition.Data?.reduce((obj, item) => ({\r\n ...obj,\r\n [item.FieldName]: {\r\n DataType: item.datatype,\r\n InputType: item.inputType,\r\n },\r\n }), {});\r\n\r\n const defaultValues = formDefinition.Data?.filter(item => !!item.DefaultValue).reduce((obj, item) => ({\r\n ...obj,\r\n [item.FieldName]: item.DefaultValue,\r\n }), {});\r\n\r\n // transform form definition into data structure\r\n const pageStructure = transformDefinition(formDefinition.Data);\r\n\r\n dispatch({\r\n type: LOAD_FORM_DEFINITION_SUCCESS,\r\n payload: {\r\n formDefinition, allFields, defaultValues, listingType, pageStructure, operationType, definitionType,\r\n },\r\n });\r\n } catch (er) {\r\n console.error('Error: formGeneration loadFormDefinition', er);\r\n dispatch({ type: LOAD_FORM_DEFINITION_FAIL });\r\n }\r\n};\r\n\r\nconst setComboSetValueDictionary = newEntry => ({\r\n type: SET_COMBO_DICTIONARY_ENTRY,\r\n payload: newEntry,\r\n});\r\n\r\n/*\r\n Starts dispatch to retrieve the data from the API response\r\n When there is a response, the data array is sent to payload for successful action\r\n If there is no response returned then a failed action with be dispatched\r\n*/\r\nconst loadComboBoxOptions = (lookupTableNames, formType) => async dispatch => {\r\n dispatch({ type: LOAD_COMBO_BOX_OPTIONS });\r\n try {\r\n const comboBoxOptions = await apiService.Definitions.PostToLookupTable(lookupTableNames);\r\n // include everything that isn't governed by by propertyType\r\n const filteredOptions = [];\r\n comboBoxOptions.map(comboOption => { // single optionobject\r\n let addOption; // flag for adding to filter\r\n const filteredData = [];\r\n comboOption.data.map(dataPoint => { // this is single dataoption.\r\n if (dataPoint?.Parents) {\r\n dataPoint.Parents.map(dataParent => { // datapoint can have multiple parents.\r\n if (dataParent.ParentField === 'PropertyType') { // has listingParent //parameter 1\r\n if (dataParent.ParentCodes.includes(formType.toUpperCase())) { // force case parity.\r\n addOption = true;\r\n filteredData.push(dataPoint);\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n return null;\r\n });\r\n\r\n if (addOption) {\r\n const filterOption = comboOption;\r\n filterOption.data = filteredData;\r\n filteredOptions.push(filterOption);\r\n }\r\n return null;\r\n });\r\n\r\n filteredOptions.map(fOpt => {\r\n const found = comboBoxOptions.find(cbo => cbo.tableName === fOpt.tableName);\r\n found.data = fOpt.data;\r\n return null;\r\n });\r\n\r\n comboBoxOptions.map(opt => { // could not get ParentIsActive onto a datapoint any other way.\r\n opt.data.map(d => {\r\n // eslint-disable-next-line no-param-reassign\r\n d.ParentIsActive = true;\r\n return null;\r\n });\r\n return null;\r\n });\r\n\r\n dispatch({\r\n type: LOAD_COMBO_BOX_OPTIONS_SUCCESS,\r\n payload: { comboBoxOptions },\r\n });\r\n } catch (error) {\r\n console.error('Error: formGeneration loadComboBoxOptions', error);\r\n dispatch({ type: LOAD_COMBO_BOX_OPTIONS_FAIL });\r\n }\r\n};\r\n\r\n/* Dispatches city codes to lookup table to retrieve the city name from it\r\nIf a city name is found then the values are stored in redux\r\nOtherwise an error is shown in console\r\ncityNames is a dictionary that holds key: code, value: { code, description, active, sortOrder }\r\n*/\r\nconst loadCityNames = lookupString => async dispatch => {\r\n dispatch({ type: LOAD_CITY_NAMES });\r\n try {\r\n const dict = {};\r\n const cityNames = await apiService.Definitions.PostToLookupTable(lookupString);\r\n cityNames.map(item => {\r\n (item.data).map(city => {\r\n dict[city.Code] = { ...city };\r\n return null;\r\n });\r\n return null;\r\n });\r\n dispatch({\r\n type: LOAD_CITY_NAMES_SUCCESS,\r\n payload: { cityNames: dict },\r\n });\r\n } catch (error) {\r\n console.error('Error: formGeneration loadCityNames', error);\r\n dispatch({ type: LOAD_CITY_NAMES_FAIL });\r\n }\r\n};\r\n\r\nconst formSubmitted = () => ({ type: FORM_SUBMITTED });\r\n\r\nexport {\r\n deleteOpenHouseValidationResult,\r\n deleteRoomValidationResult,\r\n formSubmitted,\r\n loadCityNames,\r\n loadComboBoxOptions,\r\n loadFormDefinition,\r\n setComboSetValueDictionary,\r\n setFormDataInitialized,\r\n setFormDataStatus,\r\n setOpenHouseValidationResult,\r\n setRoomValidationResult,\r\n setValidationResult,\r\n transformDefinition,\r\n updateSectionAddClicks,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport ApiService from '@services/apiService';\r\n\r\nimport {\r\n getSortedDefinition,\r\n transformDefinition,\r\n} from '@redux/modules/formGeneration';\r\n\r\nconst CLEAR_OFFICE = 'p9/office/CLEAR_OFFICE';\r\nconst CLEAR_OFFICE_SEARCH = 'p9/office/CLEAR_OFFICE_SEARCH';\r\n\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst LOAD_FORM_DEFINITION = 'LOAD_FORM_DEFINITION';\r\n\r\nconst LOAD_OFFICE_DEFINITION = 'p9/office/LOAD_OFFICE_DEFINITION';\r\nconst LOAD_OFFICE_DEFINITION_FAIL = 'p9/office/LOAD_OFFICE_DEFINITION_FAIL';\r\nconst LOAD_OFFICE_DEFINITION_SUCCESS = 'pr/office/LOAD_OFFICE_DEFINITION_SUCCESS';\r\n\r\nconst FORM_SUBMITTED = 'FORM_SUBMITTED';\r\n\r\nconst OFFICE_LOOKUP = 'OFFICE_LOOKUP';\r\nconst OFFICE_LOOKUP_FAIL = 'OFFICE_LOOKUP_FAIL';\r\nconst OFFICE_LOOKUP_SUCCESS = 'OFFICE_LOOKUP_SUCCESS';\r\n\r\nconst OFFICE_PAGE_CLICKED = 'OFFICE_PAGE_CLICKED';\r\n\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\n\r\nconst SEARCH_OFFICES = 'p9/office/SEARCH_OFFICES';\r\nconst SEARCH_OFFICES_FAIL = 'p9/office/SEARCH_OFFICES_FAIL';\r\nconst SEARCH_OFFICES_SUCCESS = 'p9/office/SEARCH_OFFICES_SUCCESS';\r\n\r\nconst SELECT_OFFICE = 'p9/office/SELECT_OFFICE';\r\nconst SELECT_OFFICE_FAIL = 'p9/office/SELECT_OFFICE_FAIL';\r\nconst SELECT_OFFICE_SUCCESS = 'p9/office/SELECT_OFFICE_SUCCESS';\r\n\r\nconst SELECT_OFFICE_LOOKUP = 'p9/office/SELECT_OFFICE_LOOKUP';\r\nconst SELECT_OFFICE_LOOKUP_FAIL = 'p9/office/SELECT_OFFICE_LOOKUP_FAIL';\r\nconst SELECT_OFFICE_LOOKUP_SUCCESS = 'p9/office/SELECT_OFFICE_LOOKUP_SUCCESS';\r\n\r\nconst UPDATE_OFFICE = 'p9/office/UPDATE_OFFICE';\r\nconst UPDATE_OFFICE_FAIL = 'p9/office/UPDATE_OFFICE_FAIL';\r\nconst UPDATE_OFFICE_SUCCESS = 'p9/office/UPDATE_OFFICE_SUCCESS';\r\n\r\nconst initialState = {\r\n isLoading: false,\r\n isLoadingDefinitions: false,\r\n error: false,\r\n initialValues: {},\r\n officeDefinition: [],\r\n searchResults: null,\r\n currentOffice: null,\r\n officeLookup: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CLEAR_OFFICE:\r\n case HOME_BUTTON_CLICKED:\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return initialState;\r\n case OFFICE_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n currentOffice: null,\r\n searchResults: null,\r\n };\r\n case CLEAR_OFFICE_SEARCH:\r\n return {\r\n ...state,\r\n searchResults: null,\r\n };\r\n case FORM_SUBMITTED:\r\n return {\r\n ...state,\r\n currentOffice: null,\r\n };\r\n case LOAD_FORM_DEFINITION:\r\n return {\r\n ...state,\r\n officeLookup: null,\r\n searchResults: null,\r\n };\r\n case LOAD_OFFICE_DEFINITION:\r\n return {\r\n ...state,\r\n isLoadingDefinitions: true,\r\n };\r\n case LOAD_OFFICE_DEFINITION_FAIL:\r\n return {\r\n ...state,\r\n isLoadingDefinitions: false,\r\n error: action.payload,\r\n };\r\n case LOAD_OFFICE_DEFINITION_SUCCESS:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n isLoadingDefinitions: false,\r\n };\r\n case OFFICE_LOOKUP:\r\n case SEARCH_OFFICES:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case OFFICE_LOOKUP_FAIL:\r\n case SEARCH_OFFICES_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload,\r\n };\r\n case OFFICE_LOOKUP_SUCCESS:\r\n case SEARCH_OFFICES_SUCCESS:\r\n return {\r\n ...state,\r\n searchResults: action.payload,\r\n isLoading: false,\r\n };\r\n case SELECT_OFFICE:\r\n case SELECT_OFFICE_LOOKUP:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case SELECT_OFFICE_FAIL:\r\n case SELECT_OFFICE_LOOKUP_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload,\r\n };\r\n case SELECT_OFFICE_LOOKUP_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n officeLookup: action.payload,\r\n };\r\n case SELECT_OFFICE_SUCCESS:\r\n return {\r\n ...state,\r\n currentOffice: action.payload,\r\n isLoading: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst clearOffice = () => ({ type: CLEAR_OFFICE });\r\n\r\nconst clearOfficeSearch = () => ({ type: CLEAR_OFFICE_SEARCH });\r\n\r\n// Derives initialValues object from form definition: [{},...] => {}\r\nconst deriveInitialValues = definition => {\r\n const values = {};\r\n const sorted = getSortedDefinition(definition);\r\n sorted.map(field => {\r\n // exclude office data from initial values\r\n if (field.layoutGroupType !== 'Photos') {\r\n values[field.FieldName] = '';\r\n }\r\n return null;\r\n });\r\n return values;\r\n};\r\n\r\n// retrieves office form definition via service call, then stashes results in Redux\r\nconst loadOfficeDefinition = () => async dispatch => {\r\n dispatch({ type: LOAD_OFFICE_DEFINITION });\r\n try {\r\n const { Data } = await ApiService.Office.getOfficeDefinition();\r\n const initialValues = deriveInitialValues(Data);\r\n const definition = transformDefinition(Data);\r\n dispatch({\r\n type: LOAD_OFFICE_DEFINITION_SUCCESS,\r\n payload: {\r\n initialValues,\r\n officeDefinition: definition,\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error: Office loadOfficeDefinition', error);\r\n dispatch({\r\n type: LOAD_OFFICE_DEFINITION_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\n// Preps search criteria for service call, stashes search results in Redux\r\nconst searchOffices = searchCriteria => async dispatch => {\r\n dispatch({ type: SEARCH_OFFICES });\r\n try {\r\n const criteriaList = [];\r\n Object.entries(searchCriteria).forEach(([name, value]) => {\r\n if (value !== '') {\r\n criteriaList.push({ name, value });\r\n }\r\n });\r\n\r\n // BE requires request body of this shape:\r\n const searchResults = await ApiService.Office.searchOffices({\r\n where: {\r\n clause: criteriaList,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: SEARCH_OFFICES_SUCCESS,\r\n payload: searchResults,\r\n });\r\n } catch (error) {\r\n console.error('Error: Office searchOffices', error);\r\n dispatch({\r\n type: SEARCH_OFFICES_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nconst lookupOffices = searchCriteria => async dispatch => {\r\n dispatch({ type: OFFICE_LOOKUP });\r\n try {\r\n const criteriaList = [];\r\n Object.entries(searchCriteria).forEach(([name, value]) => {\r\n if (value !== '') {\r\n criteriaList.push({ name, value });\r\n }\r\n });\r\n\r\n // BE requires request body of this shape:\r\n const searchResults = await ApiService.Office.officeLookup({\r\n where: {\r\n clause: criteriaList,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: OFFICE_LOOKUP_SUCCESS,\r\n payload: searchResults,\r\n });\r\n } catch (error) {\r\n console.error('Error: Office lookupOffices', error);\r\n dispatch({\r\n type: OFFICE_LOOKUP_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\n// Consumes office UID, preps for service call, retrieves selected office information & stashes in Redux\r\nconst setCurrentOffice = officeUid => async dispatch => {\r\n dispatch({ type: SELECT_OFFICE });\r\n try {\r\n const response = await ApiService.Office.selectOffice({\r\n where: {\r\n clause: [{ name: 'UniqueID', value: officeUid }],\r\n },\r\n });\r\n dispatch({\r\n type: SELECT_OFFICE_SUCCESS,\r\n payload: response.data[0],\r\n });\r\n } catch (error) {\r\n console.error('Error: Office setCurrentOffice', error);\r\n dispatch({\r\n type: SELECT_OFFICE_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\n// Consumes office UID, preps for service call, retrieves selected office information & stashes in Redux\r\nconst setOfficeLookup = officeUid => async dispatch => {\r\n dispatch({ type: SELECT_OFFICE_LOOKUP });\r\n try {\r\n const response = await ApiService.Office.selectOffice({\r\n where: {\r\n clause: [{ name: 'UniqueID', value: officeUid }],\r\n },\r\n });\r\n dispatch({\r\n type: SELECT_OFFICE_LOOKUP_SUCCESS,\r\n payload: response.data[0],\r\n });\r\n } catch (error) {\r\n console.error('Error: Office setOfficeLookup', error);\r\n dispatch({\r\n type: SELECT_OFFICE_LOOKUP_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\n// TODO: remove if no longer in use\r\nconst updateOffice = newOfficeData => async dispatch => {\r\n dispatch({ type: UPDATE_OFFICE });\r\n try {\r\n const response = await ApiService.Office.updateOffice(newOfficeData);\r\n dispatch({\r\n type: UPDATE_OFFICE_SUCCESS,\r\n payload: response,\r\n });\r\n } catch (error) {\r\n console.error('Error: Office updateOffice', error);\r\n dispatch({\r\n type: UPDATE_OFFICE_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport {\r\n clearOffice,\r\n clearOfficeSearch,\r\n loadOfficeDefinition,\r\n lookupOffices,\r\n searchOffices,\r\n setCurrentOffice,\r\n setOfficeLookup,\r\n updateOffice,\r\n SELECT_OFFICE_SUCCESS,\r\n};\r\n","/* A */\r\nexport const AGENT_LOOKUP = 'AGENT_LOOKUP';\r\nexport const AGENT_LOOKUP_FAIL = 'AGENT_LOOKUP_FAIL';\r\nexport const AGENT_LOOKUP_SUCCESS = 'AGENT_LOOKUP_SUCCESS';\r\n\r\nexport const SELECT_AGENT = 'SELECT_AGENT';\r\nexport const SELECT_AGENT_FAIL = 'SELECT_AGENT_FAIL';\r\nexport const SELECT_AGENT_SUCCESS = 'SELECT_AGENT_SUCCESS';\r\n\r\n/* G */\r\nexport const GET_CURRENT_AGENT = 'GET_CURRENT_AGENT';\r\nexport const GET_CURRENT_AGENT_FAIL = 'GET_CURRENT_AGENT_FAIL';\r\nexport const GET_CURRENT_AGENT_SUCCESS = 'GET_CURRENT_AGENT_SUCCESS';\r\n\r\n/* S */\r\nexport const SET_GROUP_TYPE = 'SET_GROUP_TYPE';\r\n","/* C */\r\nexport const CONDO_INSERT = 'CONDO_INSERT';\r\nexport const CONDO_INSERT_FAIL = 'CONDO_INSERT_FAIL';\r\nexport const CONDO_INSERT_SUCCESS = 'CONDO_INSERT_SUCCESS';\r\nexport const CONDO_SEARCH = 'CONDO_SEARCH';\r\nexport const CONDO_SEARCH_FAIL = 'CONDO_SEARCH_FAIL';\r\nexport const CONDO_SEARCH_SUCCESS = 'CONDO_SEARCH_SUCCESS';\r\nexport const CONDO_SELECT = 'CONDO_SELECT';\r\nexport const CONDO_SELECT_FAIL = 'CONDO_SELECT_FAIL';\r\nexport const CONDO_SELECT_SUCCESS = 'CONDO_SELECT_SUCCESS';\r\nexport const CONDO_UPDATE = 'CONDO_UPDATE';\r\nexport const CONDO_UPDATE_FAIL = 'CONDO_UPDATE_FAIL';\r\nexport const CONDO_UPDATE_SUCCESS = 'CONDO_UPDATE_SUCCESS';\r\n","/* A */\r\nexport const AGGREGATE_DATA_BUTTON_CLICKED = 'AGGREGATE_DATA_BUTTON_CLICKED';\r\nexport const APP_LOAD = 'APP_LOAD';\r\nexport const APP_UNLOAD = 'APP_UNLOAD';\r\nexport const ASYNC_START = 'ASYNC_START';\r\nexport const ASYNC_END = 'ASYNC_END';\r\n\r\n/* C */\r\nexport const CHECK_AUTHENTICATION = 'CHECK_AUTHENTICATION';\r\nexport const CHECK_AUTHENTICATION_SUCCESS = 'CHECK_AUTHENTICATION_SUCCESS';\r\nexport const CHECK_AUTHENTICATION_ERROR = 'CHECK_AUTHENTICATION_ERROR';\r\nexport const CHECK_AUTHENTICATION_EXPIRY = 'CHECK_AUTHENTICATION_EXPIRY';\r\nexport const CLAREITY_LOGIN = 'CLAREITY_LOGIN';\r\nexport const CLEAR_ERROR = 'CLEAR_ERROR';\r\nexport const CLEAR_SUCCESS = 'CLEAR_SUCCESS';\r\nexport const CLOUDCMA_PAGE_CLICKED = 'CLOUDCMA_PAGE_CLICKED';\r\nexport const CREAWEBFORMS_PAGE_CLICKED = 'CREAWEBFORMS_PAGE_CLICKED';\r\nexport const CREADDF_PAGE_CLICKED = 'CREADDF_PAGE_CLICKED';\r\n\r\n/* D */\r\nexport const DATA_SEARCH_BUTTON_CLICKED = 'DATA_SEARCH_BUTTON_CLICKED';\r\nexport const DOMAIN_AUTHENTICATION = 'DOMAIN_AUTHENTICATION';\r\n\r\n/* H */\r\nexport const HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nexport const HEARTBEAT_REFRESH = 'HEARTBEAT_REFRESH';\r\n\r\n/* I */\r\nexport const IMPERSONATION_PAGE_CLICKED = 'IMPERSONATION_PAGE_CLICKED';\r\n\r\n/* L */\r\nexport const LISTINGS_PAGE_CLICKED = 'LISTINGS_PAGE_CLICKED';\r\nexport const LOGIN = 'LOGIN';\r\nexport const LOGOUT = 'LOGOUT';\r\n\r\n/* M */\r\nexport const MATRIX_PAGE_CLICKED = 'MATRIX_PAGE_CLICKED';\r\n\r\n/* O */\r\nexport const OFFICE_PAGE_CLICKED = 'OFFICE_PAGE_CLICKED';\r\n\r\n/* P */\r\nexport const POSTALCODELOOKUP_PAGE_CLICKED = 'POSTALCODELOOKUP_PAGE_CLICKED';\r\nexport const PROFILE_PAGE_CLICKED = 'PROFILE_PAGE_CLICKED';\r\nexport const PROSPECTS_PAGE_CLICKED = 'PROSPECTS_PAGE_CLICKED';\r\n\r\n/* R */\r\nexport const RECA_PAGE_CLICKED = 'RECA_PAGE_CLICKED';\r\nexport const REDIRECT = 'REDIRECT';\r\nexport const REMAPLIST_PAGE_CLICKED = 'REMAPLIST_PAGE_CLICKED';\r\n\r\n/* S */\r\nexport const SET_ERRORS = 'SET_ERRORS';\r\nexport const SET_TOKEN = 'SET_TOKEN';\r\nexport const SEARCH_AGENTS_PAGE_CLICKED = 'SEARCH_AGENTS_PAGE_CLICKED';\r\nexport const SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\nexport const SPACELIST_PAGE_CLICKED = 'SPACELIST_PAGE_CLICKED';\r\nexport const SPIN_PAGE_CLICKED = 'SPIN_PAGE_CLICKED';\r\n\r\n/* T */\r\nexport const TRAINING_PAGE_CLICKED = 'TRAINING_PAGE_CLICKED';\r\n\r\n/* U */\r\nexport const UPLOAD_IMAGE = 'UPLOAD_IMAGE';\r\nexport const UPLOAD_IMAGE_FAIL = 'UPLOAD_IMAGE_FAIL';\r\n","/* C */\r\nexport const CONDO_MANAGEMENT_PAGE_CLICKED = 'CONDO_MANAGEMENT_PAGE_CLICKED';\r\n\r\n/* D */\r\nexport const DELETE_SUPPLEMENT = 'DELETE_SUPPLEMENT';\r\n\r\n/* F */\r\nexport const FORM_VALUES = 'FORM_VALUES';\r\n\r\n/* G */\r\nexport const GET_ALL_LISTINGS = 'GET_ALL_LISTINGS';\r\nexport const GET_ALL_LISTINGS_FAIL = 'GET_ALL_LISTINGS_FAIL';\r\nexport const GET_ALL_LISTINGS_SUCCESS = 'GET_ALL_LISTINGS_SUCCESS';\r\n\r\n/* L */\r\nexport const LOAD_SUBFORM_DATA = 'LOAD_SUBFORM_DATA';\r\nexport const LISTING_SEARCH_CLICKED = 'LISTING_SEARCH_CLICKED';\r\nexport const LOAD_LISTING = 'LOAD_LISTING';\r\nexport const LOAD_LISTING_FAIL = 'LOAD_LISTING_FAIL';\r\nexport const LOAD_LISTING_SUCCESS = 'LOAD_LISTING_SUCCESS';\r\nexport const LOAD_LISTING_PREFERRED_PHOTO_DETAILS = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS';\r\nexport const LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS_FAIL';\r\nexport const LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS = 'LOAD_LISTING_PREFERRED_PHOTO_DETAILS_SUCCESS';\r\nexport const LOAD_LISTING_PHOTO = 'LOAD_LISTING_PHOTO';\r\nexport const LOAD_LISTING_PHOTO_FAIL = 'LOAD_LISTING_PHOTO_FAIL';\r\nexport const LOAD_LISTING_PHOTO_SUCCESS = 'LOAD_LISTING_PHOTO_SUCCESS';\r\nexport const LOAD_UPLOADED_PHOTOS = 'LOAD_UPLOADED_PHOTOS';\r\n\r\n/* R */\r\nexport const REORDER_SUPPLEMENTS = 'REORDER_SUPPLEMENTS';\r\n\r\n/* S */\r\nexport const SAVE_IMAGES = 'SAVE_IMAGES';\r\nexport const SAVE_SUPPLEMENT = 'SAVE_SUPPLEMENT';\r\nexport const SAVE_SUPPLEMENT_SUCCESS = 'SAVE_SUPPLEMENT_SUCCESS';\r\nexport const SAVE_SUPPLEMENT_FAIL = 'SAVE_SUPPLEMENT_FAIL';\r\nexport const SEARCH_LISTINGS = 'SEARCH_LISTINGS';\r\nexport const SEARCH_LISTINGS_CRITERIA = 'SEARCH_LISTINGS_CRITERIA';\r\n\r\n/* T */\r\nexport const TAX_AUTO_POP_SEARCH = 'TAX_AUTO_POP_SEARCH';\r\nexport const TAX_AUTO_POP_SEARCH_FAIL = 'TAX_AUTO_POP_SEARCH_FAIL';\r\nexport const TAX_AUTO_POP_SEARCH_SUCCESS = 'TAX_AUTO_POP_SEARCH_SUCCESS';\r\nexport const TAX_AUTO_POP_SELECT = 'TAX_AUTO_POP_SELECT';\r\nexport const TAX_AUTO_POP_SELECT_FAIL = 'TAX_AUTO_POP_SELECT_FAIL';\r\nexport const TAX_AUTO_POP_SELECT_SUCCESS = 'TAX_AUTO_POP_SELECT_SUCCESS';\r\n\r\n/* V */\r\nexport const VIEW_LISTING_CLICKED = 'VIEW_LISTING_CLICKED';\r\n","export const IMPERSONATION_AGENT_LOOKUP = 'IMPERSONATION_AGENT_LOOKUP';\r\nexport const IMPERSONATION_AGENT_LOOKUP_FAIL = 'IMPERSONATION_AGENT_LOOKUP_FAIL';\r\nexport const IMPERSONATION_AGENT_LOOKUP_SUCCESS = 'IMPERSONATION_AGENT_LOOKUP_SUCCESS';\r\nexport const START_IMPERSONATION = 'START_IMPERSONATION';\r\nexport const START_IMPERSONATION_FAIL = 'START_IMPERSONATION_FAIL';\r\nexport const START_IMPERSONATION_SUCCESS = 'START_IMPERSONATION_SUCCESS';\r\nexport const STOP_IMPERSONATION = 'STOP_IMPERSONATION';\r\nexport const STOP_IMPERSONATION_SUCCESS = 'STOP_IMPERSONATION_SUCCESS';\r\nexport const STOP_IMPERSONATION_FAIL = 'STOP_IMPERSONATION_FAIL';\r\nexport const GET_IMPERSONATION_DATA = 'GET_IMPERSONATION_DATA';\r\nexport const GET_IMPERSONATION_DATA_SUCCESS = 'GET_IMPERSONATION_DATA_SUCCESS';\r\nexport const GET_IMPERSONATION_DATA_FAIL = 'GET_IMPERSONATION_DATA_FAIL';\r\nexport const GET_STATUS = 'GET_STATUS';\r\nexport const GET_STATUS_SUCCESS = 'GET_STATUS_SUCCESS';\r\nexport const GET_STATUS_FAIL = 'GET_STATUS_FAIL';\r\n","/* S */\r\nexport const SAVE_SIGNALR_CONNECTION = 'SAVE_SIGNALR_CONNECTION';\r\nexport const SAVE_SIGNALR_CONNECTION_SUCCESS = 'SAVE_SIGNALR_CONNECTION_SUCCESS';\r\nexport const SAVE_SIGNALR_CONNECTION_FAIL = 'SAVE_SIGNALR_CONNECTION_FAIL';\r\nexport const SAVE_SIGNALR_CONNECTION_ID = 'SAVE_SIGNALR_CONNECTION_ID';\r\nexport const SIGNALR_FAILED = 'SIGNALR_FAILED';\r\nexport const SIGNALR_STARTED = 'SIGNALR_STARTED';\r\nexport const SIGNALR_STARTING = 'SIGNALR_STARTING';\r\nexport const SIGNALR_STOPPED = 'SIGNALR_STOPPED';\r\n","/* C */\r\nexport const CLOSE_ALERT = 'CLOSE_ALERT';\r\n/* O */\r\nexport const OPEN_ALERT = 'OPEN_ALERT';\r\n","import { saveLastViewedEntityToApiService } from '@services/apiService';\r\nimport { RELOAD_LISTING_CLICKED_SUCCESS, VIEW_LISTING_CLICKED } from '@redux/modules/listing';\r\nimport { SELECT_AGENT_SUCCESS } from '@redux/modules/agent';\r\nimport { SELECT_OFFICE_SUCCESS } from '@redux/modules/office';\r\nimport {\r\n ASYNC_START,\r\n ASYNC_END,\r\n DOMAIN_AUTHENTICATION,\r\n SET_ERRORS,\r\n LOGIN,\r\n} from './constants/ActionTypes';\r\n\r\nconst isPromise = value => Boolean(value && typeof value.then === 'function');\r\n\r\nconst promiseMiddleware = store => next => action => {\r\n if (!isPromise(action.payload)) return next(action);\r\n\r\n store.dispatch({\r\n type: ASYNC_START,\r\n subtype: action.type,\r\n });\r\n\r\n return action.payload.then(res => {\r\n store.dispatch({\r\n type: ASYNC_END,\r\n promise: res,\r\n });\r\n store.dispatch({ ...action, payload: res });\r\n }).catch(error => {\r\n store.dispatch({ type: ASYNC_END, promise: error });\r\n store.dispatch({\r\n ...action,\r\n error: true,\r\n payload: error,\r\n type: SET_ERRORS,\r\n });\r\n });\r\n};\r\n\r\nconst localStorageMiddleware = () => next => action => {\r\n const storageWhiteList = [DOMAIN_AUTHENTICATION, LOGIN];\r\n if (!storageWhiteList.includes(action.type)) return next(action);\r\n\r\n // agent.setToken(action.error ? null : action.payload.access_token); // not implemented\r\n return next(action);\r\n};\r\n\r\n/*\r\n Use [saveLastViewedEntity] middleware to keep track of the last viewed entity, and to save this to various modules where this data is required.\r\n This method represent a workaround for modules where accessing the redux store directly is not possible/recommended due to cyclic dependencies (e.g. apiService).\r\n*/\r\nconst saveLastViewedEntity = () => next => action => {\r\n let entity;\r\n switch (action.type) {\r\n case VIEW_LISTING_CLICKED:\r\n entity = {\r\n type: 'listing',\r\n id: action.data.ListingID,\r\n };\r\n saveLastViewedEntityToApiService(entity);\r\n break;\r\n\r\n case RELOAD_LISTING_CLICKED_SUCCESS:\r\n entity = {\r\n type: 'listing',\r\n id: action.payload.listingSearchResults.ListingID,\r\n };\r\n saveLastViewedEntityToApiService(entity);\r\n break;\r\n\r\n case SELECT_AGENT_SUCCESS:\r\n entity = {\r\n type: 'agent',\r\n id: action.payload.fullAgent.UniqueID,\r\n };\r\n saveLastViewedEntityToApiService(entity);\r\n break;\r\n\r\n case SELECT_OFFICE_SUCCESS:\r\n entity = {\r\n type: 'office',\r\n id: action.payload.UniqueID,\r\n };\r\n saveLastViewedEntityToApiService(entity);\r\n break;\r\n\r\n default: break;\r\n }\r\n return next(action);\r\n};\r\n\r\nexport { promiseMiddleware, localStorageMiddleware, saveLastViewedEntity };\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\n\r\nconst CLEAR_ACL_DETAILS = 'CLEAR_ACL_DETAILS';\r\nconst CLEAR_ACL_ACTION_LOADING_STATUSES = 'CLEAR_ACL_ACTION_LOADING_STATUSES';\r\nconst CLEAR_ACL_ACTIONS_COMPLETED = 'CLEAR_ACL_ACTIONS_COMPLETED';\r\n\r\nconst GET_ACL_DETAILS = 'GET_ACL_DETAILS';\r\nconst GET_ACL_DETAILS_FAIL = 'GET_ACL_DETAILS_FAIL';\r\nconst GET_ACL_DETAILS_SUCCESS = 'GET_ACL_DETAILS_SUCCESS';\r\n\r\nconst GET_MAIN_ACL_DETAILS = 'GET_MAIN_ACL_DETAILS';\r\nconst GET_MAIN_ACL_DETAILS_FAIL = 'GET_MAIN_ACL_DETAILS_FAIL';\r\nconst GET_MAIN_ACL_DETAILS_SUCCESS = 'GET_MAIN_ACL_DETAILS_SUCCESS';\r\n\r\nconst FORM_SUBMITTED = 'FORM_SUBMITTED';\r\n\r\nconst SET_ACL_ACTION_LOADING_STATUS = 'SET_ACL_ACTION_LOADING';\r\nconst SET_ACL_ACTIONS_COMPLETED = ' SET_ACL_ACTIONS_COMPLETED';\r\n\r\nconst initialState = {\r\n fieldPermissions: {},\r\n formActions: {},\r\n aclString: '',\r\n mainActions: {},\r\n formPermissions: {},\r\n pagePermissions: {},\r\n error: false,\r\n loading: false,\r\n actionLoadingStatuses: {},\r\n actionsComplete: {},\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CLEAR_ACL_DETAILS:\r\n case FORM_SUBMITTED:\r\n return {\r\n // reset all except mainActions and aclString since they need to stay active at all times\r\n ...initialState,\r\n aclString: state.aclString,\r\n mainActions: state.mainActions,\r\n };\r\n case CLEAR_ACL_ACTION_LOADING_STATUSES: // clearAll should not be used, in favor of targeted manip\r\n return {\r\n ...state,\r\n actionLoadingStatuses: {},\r\n };\r\n case CLEAR_ACL_ACTIONS_COMPLETED:\r\n return {\r\n ...state,\r\n actionsComplete: {},\r\n };\r\n case GET_ACL_DETAILS:\r\n case GET_MAIN_ACL_DETAILS:\r\n return {\r\n ...state,\r\n error: false,\r\n loading: true,\r\n };\r\n case GET_ACL_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n ...action.payload.aclDetails,\r\n error: false,\r\n loading: false,\r\n };\r\n case GET_MAIN_ACL_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n mainActions: action.payload.aclDetails.formActions,\r\n aclString: action.payload.aclDetails.aclString,\r\n error: false,\r\n loading: false,\r\n };\r\n case GET_ACL_DETAILS_FAIL:\r\n case GET_MAIN_ACL_DETAILS_FAIL:\r\n return {\r\n ...state,\r\n error: true,\r\n loading: false,\r\n };\r\n case SET_ACL_ACTION_LOADING_STATUS:\r\n return {\r\n ...state,\r\n actionLoadingStatuses: { ...state.actionLoadingStatuses, ...action.payload.aclLoadingActions },\r\n };\r\n case SET_ACL_ACTIONS_COMPLETED:\r\n return {\r\n ...state,\r\n actionsComplete: { ...state.actionsComplete, ...action.payload.aclComplete },\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst clearAclDetails = () => async dispatch => {\r\n dispatch({ type: CLEAR_ACL_DETAILS });\r\n};\r\n\r\nconst clearAclLoadingStatuses = () => async dispatch => {\r\n dispatch({ type: CLEAR_ACL_ACTION_LOADING_STATUSES });\r\n};\r\n\r\nconst clearAclCompleted = () => async dispatch => {\r\n dispatch({ type: CLEAR_ACL_ACTIONS_COMPLETED });\r\n};\r\n\r\nconst getAclDetails = (resourceType, requestDetails) => async dispatch => {\r\n dispatch({ type: GET_ACL_DETAILS });\r\n try {\r\n const aclDetails = await apiService.Acl.GetAclDetails(resourceType, requestDetails);\r\n const aclResource = requestDetails.formName ?? requestDetails.formname;\r\n const aclActionType = requestDetails.action ?? requestDetails.Action;\r\n const actionName = `${aclResource}${aclActionType}`;\r\n const aclComplete = { [actionName]: true };\r\n const aclLoadingActions = { [actionName]: false };\r\n dispatch({\r\n type: GET_ACL_DETAILS_SUCCESS,\r\n payload: { aclDetails },\r\n });\r\n dispatch({\r\n type: SET_ACL_ACTIONS_COMPLETED,\r\n payload: { aclComplete },\r\n });\r\n dispatch({\r\n type: SET_ACL_ACTION_LOADING_STATUS,\r\n payload: { aclLoadingActions },\r\n });\r\n } catch (err) {\r\n console.error('Error: ACL getAclDetails: ', err);\r\n dispatch({ type: GET_ACL_DETAILS_FAIL });\r\n }\r\n};\r\n\r\nconst getMainAclDetails = (resourceType, requestDetails) => async dispatch => {\r\n dispatch({ type: GET_MAIN_ACL_DETAILS });\r\n try {\r\n const aclDetails = await apiService.Acl.GetAclDetails(resourceType, requestDetails);\r\n dispatch({\r\n type: GET_MAIN_ACL_DETAILS_SUCCESS,\r\n payload: { aclDetails },\r\n });\r\n } catch (err) {\r\n console.error('Error: ACL getMainAclDetails: ', err);\r\n dispatch({ type: GET_MAIN_ACL_DETAILS_FAIL });\r\n }\r\n};\r\n\r\nconst setMultiLoadingStatus = aclLoadingActions => async dispatch => {\r\n dispatch({\r\n type: SET_ACL_ACTION_LOADING_STATUS,\r\n payload: { aclLoadingActions },\r\n });\r\n};\r\n\r\nconst setActionCompleted = aclComplete => async dispatch => {\r\n dispatch({\r\n type: SET_ACL_ACTIONS_COMPLETED,\r\n payload: { aclComplete },\r\n });\r\n};\r\n\r\nexport {\r\n clearAclDetails,\r\n clearAclLoadingStatuses,\r\n clearAclCompleted,\r\n getAclDetails,\r\n getMainAclDetails,\r\n setActionCompleted,\r\n setMultiLoadingStatus,\r\n};\r\n","import apiService from '@services/apiService';\r\n\r\nconst GET_AUDIT = 'GET_AUDIT';\r\nconst GET_AUDIT_FAIL = 'GET_AUDIT_FAIL';\r\nconst GET_AUDIT_SUCCESS = 'GET_AUDIT_SUCCESS';\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst OFFICE_PAGE_CLICKED = 'OFFICE_PAGE_CLICKED';\r\nconst SEARCH_AGENTS_PAGE_CLICKED = 'SEARCH_AGENTS_PAGE_CLICKED';\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\n\r\nconst initialState = {\r\n EntityID: '',\r\n tableName: null,\r\n class: null,\r\n UniqueID: '',\r\n data: [],\r\n loading: false,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case GET_AUDIT:\r\n return {\r\n ...state,\r\n loading: true,\r\n };\r\n case GET_AUDIT_SUCCESS:\r\n return {\r\n ...state,\r\n EntityID: action.payload.EntityID,\r\n tableName: action.payload.data.tableName,\r\n class: action.payload.data.class,\r\n UniqueID: action.payload.data.UniqueID,\r\n data: action.payload.data.data,\r\n loading: false,\r\n };\r\n case GET_AUDIT_FAIL:\r\n return {\r\n ...state,\r\n loading: false,\r\n };\r\n case HOME_BUTTON_CLICKED:\r\n case OFFICE_PAGE_CLICKED:\r\n case SEARCH_AGENTS_PAGE_CLICKED:\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const getAuditLog = ({ tableName, uniqueID, entityID }) => async dispatch => {\r\n const payload = {};\r\n payload.EntityID = entityID;\r\n dispatch({ type: GET_AUDIT });\r\n try {\r\n payload.data = await apiService.AuditLog.GetAuditLog({ table: tableName, id: uniqueID });\r\n dispatch({\r\n type: GET_AUDIT_SUCCESS,\r\n payload,\r\n });\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Audit getAuditLog', err);\r\n dispatch({ type: GET_AUDIT_FAIL });\r\n }\r\n return dispatch;\r\n};\r\n","/* eslint-disable import/prefer-default-export */\r\n\r\n/* Gets cookie by name. */\r\nconst getCookie = key => document.cookie.split('; ').reduce((total, currentCookie) => {\r\n const item = currentCookie.split('=');\r\n const storedKey = item[0];\r\n const storedValue = item[1];\r\n return key === storedKey\r\n ? decodeURIComponent(storedValue)\r\n : total;\r\n}, '');\r\n\r\nexport {\r\n getCookie,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport ApiService from '@services/apiService';\r\nimport { getCookie } from '@utils/cookie';\r\n\r\nimport {\r\n APP_LOAD,\r\n CHECK_AUTHENTICATION,\r\n CHECK_AUTHENTICATION_SUCCESS,\r\n CHECK_AUTHENTICATION_ERROR,\r\n CHECK_AUTHENTICATION_EXPIRY,\r\n HEARTBEAT_REFRESH,\r\n LOGOUT,\r\n} from '../../constants/ActionTypes';\r\n\r\nconst CLOSE_TO_AUTH_EXPIRY_THRESHOLD_MINUTES = 30;\r\n\r\nconst initialState = {\r\n errors: null,\r\n inProgress: false,\r\n authChecked: false,\r\n isAuthenticated: null,\r\n isLoadingAuth: false,\r\n isAuthExpiryCookiePresent: false,\r\n isAuthCloseToExpiry: false,\r\n minutesLeftToAuthExpiry: null,\r\n token: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case APP_LOAD:\r\n return {\r\n ...state,\r\n token: action.token || null,\r\n };\r\n case CHECK_AUTHENTICATION:\r\n return {\r\n ...state,\r\n authChecked: true,\r\n isLoadingAuth: true,\r\n };\r\n case CHECK_AUTHENTICATION_SUCCESS:\r\n return {\r\n ...state,\r\n isAuthenticated: action.payload,\r\n isLoadingAuth: false,\r\n };\r\n case CHECK_AUTHENTICATION_ERROR:\r\n return {\r\n ...state,\r\n isAuthenticated: false,\r\n isLoadingAuth: false,\r\n };\r\n case CHECK_AUTHENTICATION_EXPIRY:\r\n return {\r\n ...state,\r\n isAuthExpiryCookiePresent: action.payload.isAuthExpiryCookiePresent,\r\n isAuthCloseToExpiry: action.payload.isAuthCloseToExpiry,\r\n minutesLeftToAuthExpiry: action.payload.minutesLeftToAuthExpiry,\r\n };\r\n case HEARTBEAT_REFRESH:\r\n return {\r\n ...state,\r\n };\r\n case LOGOUT:\r\n return {\r\n ...state,\r\n token: null,\r\n clareityUrl: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst checkAuthStatus = () => async dispatch => {\r\n dispatch({ type: CHECK_AUTHENTICATION });\r\n try {\r\n const authStatus = await ApiService.Auth.Status();\r\n return dispatch({ type: CHECK_AUTHENTICATION_SUCCESS, payload: authStatus });\r\n } catch (err) {\r\n console.error('Error: Authentication checkAuthStatus', err);\r\n return dispatch({ type: CHECK_AUTHENTICATION_ERROR });\r\n }\r\n};\r\n\r\nconst checkAuthExpiry = () => async dispatch => {\r\n const authExpiryCookie = getCookie('AuthExpiry');\r\n if (!authExpiryCookie) {\r\n return dispatch({\r\n type: CHECK_AUTHENTICATION_EXPIRY,\r\n payload: {\r\n isAuthExpiryCookiePresent: false,\r\n isAuthCloseToExpiry: false,\r\n minutesLeftToAuthExpiry: null,\r\n },\r\n });\r\n }\r\n const authExpiryDate = new Date(authExpiryCookie);\r\n const minutesLeft = Math.floor((authExpiryDate - Date.now()) / 1000 / 60);\r\n return dispatch({\r\n type: CHECK_AUTHENTICATION_EXPIRY,\r\n payload: {\r\n isAuthExpiryCookiePresent: true,\r\n isAuthCloseToExpiry: minutesLeft < CLOSE_TO_AUTH_EXPIRY_THRESHOLD_MINUTES,\r\n minutesLeftToAuthExpiry: minutesLeft < 0 ? -1 : minutesLeft,\r\n },\r\n });\r\n};\r\n\r\nconst heartBeat = () => async dispatch => {\r\n try {\r\n await ApiService.Auth.Heartbeat();\r\n return dispatch({ type: HEARTBEAT_REFRESH });\r\n } catch (err) {\r\n console.error('Error: Authentication heartBeat', err);\r\n return null;\r\n }\r\n};\r\n\r\nexport {\r\n checkAuthStatus,\r\n checkAuthExpiry,\r\n heartBeat,\r\n};\r\n","import {\r\n CONDO_INSERT,\r\n CONDO_INSERT_FAIL,\r\n CONDO_INSERT_SUCCESS,\r\n CONDO_SEARCH,\r\n CONDO_SEARCH_FAIL,\r\n CONDO_SEARCH_SUCCESS,\r\n CONDO_SELECT,\r\n CONDO_SELECT_FAIL,\r\n CONDO_SELECT_SUCCESS,\r\n CONDO_UPDATE,\r\n CONDO_UPDATE_FAIL,\r\n CONDO_UPDATE_SUCCESS,\r\n HOME_BUTTON_CLICKED,\r\n} from '../../constants/ActionTypes';\r\n\r\nconst initialState = {\r\n condoSearchResults: null,\r\n condoSelected: null, // unused for now\r\n isLoading: false,\r\n isSearching: false,\r\n updateStatus: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CONDO_INSERT:\r\n case CONDO_SELECT:\r\n case CONDO_UPDATE:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case CONDO_SEARCH:\r\n return {\r\n ...state,\r\n isSearching: true,\r\n };\r\n case CONDO_INSERT_FAIL:\r\n case CONDO_SELECT_FAIL:\r\n case CONDO_UPDATE_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case CONDO_SEARCH_FAIL:\r\n return {\r\n ...state,\r\n isSearching: false,\r\n };\r\n case CONDO_INSERT_SUCCESS: {\r\n return {\r\n ...state,\r\n condoSearchResults: [...state.condoSearchResults, action.payload.newCondo],\r\n isLoading: false,\r\n };\r\n }\r\n case CONDO_SEARCH_SUCCESS:\r\n return {\r\n ...state,\r\n condoSearchResults: action.payload.condoSearchResults,\r\n isSearching: false,\r\n };\r\n case CONDO_SELECT_SUCCESS:\r\n return {\r\n ...state,\r\n condoSelected: action.payload.condoSelected,\r\n isLoading: false,\r\n };\r\n case CONDO_UPDATE_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n updateStatus: action.payload.updateStatus,\r\n };\r\n case HOME_BUTTON_CLICKED:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n","// Function to output the elapsed time since a given UTC timestamp string\r\nexport const getTimeElapsedSinceUTCDate = utcDateString => {\r\n const utcDate = new Date(utcDateString);\r\n const now = new Date();\r\n\r\n const elapsedMilliseconds = now.getTime() - utcDate.getTime();\r\n const elapsedSeconds = Math.floor(elapsedMilliseconds / 1000);\r\n const elapsedMinutes = Math.floor(elapsedSeconds / 60);\r\n const elapsedHours = Math.floor(elapsedMinutes / 60);\r\n const elapsedDays = Math.floor(elapsedHours / 24);\r\n\r\n if (elapsedDays > 0) {\r\n return `${elapsedDays} day${elapsedDays > 1 ? 's' : ''} ago`;\r\n }\r\n if (elapsedHours > 0) {\r\n return `${elapsedHours} hour${elapsedHours > 1 ? 's' : ''} ago`;\r\n }\r\n if (elapsedMinutes > 0) {\r\n return `${elapsedMinutes} minute${elapsedMinutes > 1 ? 's' : ''} ago`;\r\n }\r\n return `${elapsedSeconds}s ago`;\r\n};\r\n\r\n// Function to output a \"long\" time to Expiry given a UTC timestamp string\r\nexport const getLongTimeToExpiry = expiryDateUtc => {\r\n const nowUtc = new Date();\r\n const expiryUtc = new Date(expiryDateUtc);\r\n\r\n if (nowUtc >= expiryUtc) {\r\n return 'Expired';\r\n }\r\n\r\n const diffMs = expiryUtc - nowUtc;\r\n const diffSecs = Math.floor(diffMs / 1000);\r\n const diffMins = Math.floor(diffSecs / 60);\r\n const diffHours = Math.floor(diffMins / 60);\r\n const diffDays = Math.floor(diffHours / 24);\r\n\r\n const output = [];\r\n if (diffDays > 0) {\r\n output.push(`${diffDays}day${diffDays > 1 ? 's' : ''}`);\r\n }\r\n if (diffHours % 24 > 0) {\r\n output.push(`${diffHours % 24}hr${diffHours % 24 > 1 ? 's' : ''}`);\r\n }\r\n if (diffMins % 60 > 0) {\r\n output.push(`${diffMins % 60}min${diffMins % 60 > 1 ? 's' : ''}`);\r\n }\r\n if (diffSecs % 60 > 0) {\r\n output.push(`${diffSecs % 60}s`);\r\n }\r\n\r\n return `${output.join(':')}`;\r\n};\r\n\r\n// Function to output a \"short\" time to Expiry given a UTC timestamp string\r\nexport const getShortTimeToExpiry = (expiryDateUtc, recordCount) => {\r\n const nowUtc = new Date().getTime();\r\n const expiryTimeUtc = new Date(expiryDateUtc).getTime();\r\n const diffMs = expiryTimeUtc - nowUtc;\r\n\r\n if (diffMs <= 0) {\r\n if (recordCount === 0 || recordCount === undefined) return 'N/A';\r\n return 'Expired';\r\n }\r\n\r\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\r\n if (diffDays < 7 && diffDays > 0) {\r\n return `${diffDays} day${diffDays === 1 ? '' : 's'}`;\r\n }\r\n\r\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\r\n if (diffHours < 24 && diffHours > 1) {\r\n return `${diffHours} hour${diffHours === 1 ? '' : 's'}`;\r\n }\r\n\r\n const diffMins = Math.floor(diffMs / (1000 * 60));\r\n return `${diffMins} minute${diffMins === 1 ? '' : 's'}`;\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\nimport { isEmpty, uniqBy } from 'lodash';\r\nimport { getShortTimeToExpiry, getTimeElapsedSinceUTCDate } from '../../helpers/Helpers';\r\n\r\nconst CREATE_DATAFILE_REQUEST_STARTED = 'CREATE_DATAFILE_REQUEST_STARTED';\r\nconst CREATE_DATAFILE_REQUEST_FAILED = 'CREATE_DATAFILE_REQUEST_FAILED';\r\nconst CREATE_DATAFILE_REQUEST_SUCCEEDED = 'CREATE_DATAFILE_REQUEST_SUCCEEDED';\r\nconst DATAFILE_REQUEST_COUNT_SET = 'DATAFILE_REQUEST_COUNT_SET';\r\nconst DATAFILE_SAVED_SEARCH_COUNT_SET = 'DATAFILE_SAVED_SEARCH_COUNT_SET';\r\nconst DELETE_DATAFILE_REQUEST_STARTED = 'DELETE_DATAFILE_REQUEST_STARTED';\r\nconst DELETE_DATAFILE_REQUEST_FAILED = 'DELETE_DATAFILE_REQUEST_FAILED';\r\nconst DELETE_DATAFILE_REQUEST_SUCCEEDED = 'DELETE_DATAFILE_REQUEST_SUCCEEDED';\r\nconst DELETE_DATAFILE_SAVED_SEARCH_STARTED = 'DELETE_DATAFILE_SAVED_SEARCH_STARTED';\r\nconst DELETE_DATAFILE_SAVED_SEARCH_FAILED = 'DELETE_DATAFILE_SAVED_SEARCH_FAILED';\r\nconst DELETE_DATAFILE_SAVED_SEARCH_SUCCEEDED = 'DELETE_DATAFILE_SAVED_SEARCH_SUCCEEDED';\r\nconst LOAD_AGGREGATE_DATA_STARTED = 'LOAD_AGGREGATE_DATA_STARTED';\r\nconst LOAD_AGGREGATE_DATA_FAILED = 'LOAD_AGGREGATE_DATA_FAILED';\r\nconst LOAD_AGGREGATE_DATA_SUCCEEDED = 'LOAD_AGGREGATE_DATA_SUCCEEDED';\r\nconst LOAD_DATAFILE_REQUESTS_STARTED = 'LOAD_DATAFILE_REQUESTS_STARTED';\r\nconst LOAD_DATAFILE_REQUESTS_FAILED = 'LOAD_DATAFILE_REQUESTS_FAILED';\r\nconst LOAD_DATAFILE_REQUESTS_SUCCEEDED = 'LOAD_DATAFILE_REQUESTS_SUCCEEDED';\r\nconst LOAD_DATAPORTAL_LOOKUPS_STARTED = 'LOAD_DATAPORTAL_LOOKUPS_STARTED';\r\nconst LOAD_DATAPORTAL_LOOKUPS_FAILED = 'LOAD_DATAPORTAL_LOOKUPS_FAILED';\r\nconst LOAD_DATAPORTAL_LOOKUPS_SUCCEEDED = 'LOAD_DATAPORTAL_LOOKUPS_SUCCEEDED';\r\nconst UPDATE_DATAFILE_REQUESTS_STARTED = 'UPDATE_DATAFILE_REQUESTS_STARTED';\r\nconst UPDATE_DATAFILE_REQUESTS_FAILED = 'UPDATE_DATAFILE_REQUESTS_FAILED';\r\nconst UPDATE_DATAFILE_REQUESTS_SUCCEEDED = 'UPDATE_DATAFILE_REQUESTS_SUCCEEDED';\r\nconst UPDATE_USER_CRITERIA_NAME_STARTED = 'UPDATE_USER_CRITERIA_NAME_STARTED';\r\nconst UPDATE_USER_CRITERIA_NAME_FAILED = 'UPDATE_USER_CRITERIA_NAME_FAILED';\r\nconst UPDATE_USER_CRITERIA_NAME_SUCCEEDED = 'UPDATE_USER_CRITERIA_NAME_SUCCEEDED';\r\nconst UPDATE_USER_FILE_NAME_STARTED = 'UPDATE_USER_FILE_NAME_STARTED';\r\nconst UPDATE_USER_FILE_NAME_FAILED = 'UPDATE_USER_FILE_NAME_FAILED';\r\nconst UPDATE_USER_FILE_NAME_SUCCEEDED = 'UPDATE_USER_FILE_NAME_SUCCEEDED';\r\n\r\nconst initialState = {\r\n aggregateData: null,\r\n dataFileRequests: null,\r\n dataFileRequestsCount: 0,\r\n isBusy: false,\r\n dataFileSavedSearchesCount: 0,\r\n masterDataFileRequests: null,\r\n lookups: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CREATE_DATAFILE_REQUEST_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case CREATE_DATAFILE_REQUEST_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case CREATE_DATAFILE_REQUEST_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case DELETE_DATAFILE_REQUEST_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case DELETE_DATAFILE_REQUEST_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case DELETE_DATAFILE_REQUEST_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case DELETE_DATAFILE_SAVED_SEARCH_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case DELETE_DATAFILE_SAVED_SEARCH_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case DELETE_DATAFILE_SAVED_SEARCH_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case LOAD_AGGREGATE_DATA_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case LOAD_AGGREGATE_DATA_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case LOAD_AGGREGATE_DATA_SUCCEEDED:\r\n return {\r\n ...state,\r\n aggregateData: action.error ? null : action.payload.aggregateData,\r\n isBusy: false,\r\n };\r\n case LOAD_DATAFILE_REQUESTS_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case LOAD_DATAFILE_REQUESTS_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case LOAD_DATAFILE_REQUESTS_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.error ? null : action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case LOAD_DATAPORTAL_LOOKUPS_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case LOAD_DATAPORTAL_LOOKUPS_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case LOAD_DATAPORTAL_LOOKUPS_SUCCEEDED:\r\n return {\r\n ...state,\r\n lookups: action.error ? null : action.payload.lookups,\r\n isBusy: false,\r\n };\r\n case DATAFILE_REQUEST_COUNT_SET:\r\n return {\r\n ...state,\r\n dataFileRequestsCount: action.payload,\r\n };\r\n case DATAFILE_SAVED_SEARCH_COUNT_SET:\r\n return {\r\n ...state,\r\n dataFileSavedSearchesCount: action.payload,\r\n };\r\n case UPDATE_DATAFILE_REQUESTS_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case UPDATE_DATAFILE_REQUESTS_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case UPDATE_DATAFILE_REQUESTS_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case UPDATE_USER_CRITERIA_NAME_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case UPDATE_USER_CRITERIA_NAME_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case UPDATE_USER_CRITERIA_NAME_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n case UPDATE_USER_FILE_NAME_STARTED:\r\n return {\r\n ...state,\r\n isBusy: true,\r\n };\r\n case UPDATE_USER_FILE_NAME_FAILED:\r\n return {\r\n ...state,\r\n isBusy: false,\r\n };\r\n case UPDATE_USER_FILE_NAME_SUCCEEDED:\r\n return {\r\n ...state,\r\n masterDataFileRequests: action.payload.dataFileRequests,\r\n isBusy: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst createDataFileRequest = dataFile => async (dispatch, getState) => {\r\n dispatch({ type: CREATE_DATAFILE_REQUEST_STARTED });\r\n try {\r\n let dataFileRequests = [];\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const result = JSON.parse(await apiService.DataPortal.createSearchRequest(dataFile));\r\n if (!isEmpty(result)) {\r\n dataFileRequests = masterDataFileRequests.slice();\r\n dataFileRequests.push(result.response.data);\r\n } else {\r\n // TODO: Throw error\r\n }\r\n dispatch({\r\n type: CREATE_DATAFILE_REQUEST_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal createDataFileRequest', error);\r\n // TODO: Respond with error payload\r\n dispatch({ type: CREATE_DATAFILE_REQUEST_FAILED });\r\n }\r\n};\r\n\r\nconst deleteDataFileRequest = request => async (dispatch, getState) => {\r\n dispatch({ type: DELETE_DATAFILE_REQUEST_STARTED });\r\n try {\r\n let dataFileRequests = [];\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const deleted = JSON.parse(await apiService.DataPortal.deleteDataFileRequest(request));\r\n if (deleted) {\r\n dataFileRequests = masterDataFileRequests.slice();\r\n dataFileRequests.find(file => file.UniqueID === request.UniqueID).IsDeleted = true;\r\n } else {\r\n // TODO: Throw error\r\n }\r\n dispatch({\r\n type: DELETE_DATAFILE_REQUEST_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal deleteDataFileRequest', error);\r\n // TODO: Respond with error payload\r\n dispatch({ type: DELETE_DATAFILE_REQUEST_FAILED });\r\n }\r\n};\r\n\r\nconst deleteDataFileSavedSearch = savedSearch => async (dispatch, getState) => {\r\n dispatch({ type: DELETE_DATAFILE_SAVED_SEARCH_STARTED });\r\n try {\r\n let dataFileRequests = [];\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const deleted = JSON.parse(await apiService.DataPortal.deleteDataFileSavedSearch(savedSearch));\r\n if (deleted) {\r\n const isSingleDelete = savedSearch.NumberOfRuns === 1;\r\n dataFileRequests = masterDataFileRequests.slice();\r\n if (isSingleDelete) {\r\n dataFileRequests.find(file => file.UniqueID === savedSearch.UniqueID).IsSavedSearchDeleted = true;\r\n } else {\r\n dataFileRequests = dataFileRequests.map(file => {\r\n if (file.SqlWhereClause === savedSearch.SqlWhereClause) {\r\n return {\r\n ...file,\r\n IsSavedSearchDeleted: true,\r\n };\r\n }\r\n return file;\r\n });\r\n }\r\n } else {\r\n // TODO: Throw error\r\n }\r\n dispatch({\r\n type: DELETE_DATAFILE_SAVED_SEARCH_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal deleteDataFileSavedSearch', error);\r\n // TODO: Respond with error payload\r\n dispatch({ type: DELETE_DATAFILE_SAVED_SEARCH_FAILED });\r\n }\r\n};\r\n\r\nconst handleDataFileRequestDeleted = dataFileRequest => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n // eslint-disable-next-line no-console\r\n console.log('dataFileRequest', dataFileRequest);\r\n const uniqueId = dataFileRequest.UniqueID;\r\n let dataFileRequests = [];\r\n dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.UniqueID === uniqueId) {\r\n returnValue = {\r\n ...returnValue,\r\n ...dataFileRequest,\r\n };\r\n // eslint-disable-next-line no-console\r\n console.log('returnValue', returnValue);\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateDataFileRequests - handleDataFileRequestDeleted', error);\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst handleRequestStatusUpdated = dataFileRequest => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const uniqueId = dataFileRequest.UniqueID;\r\n const uniqueIdFound = masterDataFileRequests.find(a => a.UniqueID === uniqueId);\r\n if (!uniqueIdFound) {\r\n masterDataFileRequests.push(dataFileRequest);\r\n }\r\n const dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.UniqueID === uniqueId) {\r\n returnValue = {\r\n ...a,\r\n ...dataFileRequest,\r\n DateLinkExpires: new Date(dataFileRequest.DateLinkExpires),\r\n DateLinkExpiresString: dataFileRequest.DateLinkExpires,\r\n DateLinkTimeToExpiry: getShortTimeToExpiry(`${dataFileRequest.DateLinkExpires}Z`, dataFileRequest.RecordCount),\r\n DateCreated: new Date(dataFileRequest.DateCreated),\r\n DateCreatedString: dataFileRequest.DateCreated,\r\n DateCreatedTimeElapsed: getTimeElapsedSinceUTCDate(`${dataFileRequest.DateCreated}Z`),\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateDataFileRequests - handleRequestStatusUpdated', error);\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst handleSavedCriteriaDeleted = dataFileRequest => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const uniqueId = dataFileRequest.UniqueID;\r\n const sqlWhereClause = dataFileRequest.SqlWhereClause;\r\n let dataFileRequests = [];\r\n dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.UniqueID === uniqueId || a.SqlWhereClause === sqlWhereClause) {\r\n returnValue = {\r\n ...a,\r\n ...dataFileRequest,\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateDataFileRequests - handleSavedCriteriaDeleted', error);\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst handleUserCriteriaNameChanged = dataFileRequest => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const sqlWhereClause = dataFileRequest.SqlWhereClause;\r\n const sqlWhereClauseFound = masterDataFileRequests.find(a => a.SqlWhereClause === sqlWhereClause);\r\n if (!sqlWhereClauseFound) {\r\n masterDataFileRequests.push(dataFileRequest);\r\n }\r\n let dataFileRequests = [];\r\n dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.SqlWhereClause === sqlWhereClause) {\r\n // eslint-disable-next-line no-console\r\n console.log('usercriteria found', a, dataFileRequest);\r\n returnValue = {\r\n ...a,\r\n UserCriteriaName: dataFileRequest.UserCriteriaName,\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateDataFileRequests - handleUserCriteriaNameChanged', error);\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst handleUserFileNameChanged = dataFileRequest => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const uniqueId = dataFileRequest.UniqueID;\r\n const uniqueIdFound = masterDataFileRequests.find(a => a.UniqueID === uniqueId);\r\n if (!uniqueIdFound) {\r\n masterDataFileRequests.push(dataFileRequest);\r\n }\r\n let dataFileRequests = [];\r\n dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.UniqueID === uniqueId) {\r\n // eslint-disable-next-line no-console\r\n console.log('usercriteria found', a, dataFileRequest);\r\n returnValue = {\r\n ...a,\r\n UserFileName: dataFileRequest.UserFileName,\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateDataFileRequests - handleUserFileNameChanged', error);\r\n dispatch({ type: UPDATE_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst loadAggregateData = () => async dispatch => {\r\n let aggregateData = [];\r\n dispatch({ type: LOAD_AGGREGATE_DATA_STARTED });\r\n try {\r\n const aggregateResult = await apiService.DataPortal.getAggregateData();\r\n if (!isEmpty(aggregateResult)) {\r\n aggregateData = aggregateResult.Sheet1;\r\n } else {\r\n // TODO: Throw error\r\n }\r\n dispatch({\r\n type: LOAD_AGGREGATE_DATA_SUCCEEDED,\r\n payload: { aggregateData },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal loadAggregateData', error);\r\n // TODO: Respond with error payload\r\n dispatch({ type: LOAD_AGGREGATE_DATA_FAILED });\r\n }\r\n};\r\n\r\nconst loadDataFileRequests = jsonRequest => async dispatch => {\r\n dispatch({ type: LOAD_DATAFILE_REQUESTS_STARTED });\r\n try {\r\n const dataFileRequests = [];\r\n const requestsResult = await apiService.DataPortal.getUserDataFiles(jsonRequest);\r\n if (!isEmpty(requestsResult)) {\r\n requestsResult.forEach(request => {\r\n dataFileRequests.push({\r\n ...request,\r\n DateLinkExpires: new Date(request.DateLinkExpires),\r\n DateLinkExpiresString: request.DateLinkExpires,\r\n DateLinkTimeToExpiry: getShortTimeToExpiry(`${request.DateLinkExpires}Z`, request.RecordCount),\r\n DateCreated: new Date(request.DateCreated),\r\n DateCreatedString: request.DateCreated,\r\n DateCreatedTimeElapsed: getTimeElapsedSinceUTCDate(`${request.DateCreated}Z`),\r\n });\r\n });\r\n } else {\r\n // TODO: Throw error\r\n }\r\n dispatch({\r\n type: LOAD_DATAFILE_REQUESTS_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal loadDataFileRequests', error);\r\n // TODO: Respond with error payload\r\n dispatch({ type: LOAD_DATAFILE_REQUESTS_FAILED });\r\n }\r\n};\r\n\r\nconst mutateLookup = array => {\r\n const mutatedLookup = Object.values(array).map(obj => {\r\n const value = obj.Description;\r\n const title = value;\r\n return { value, title };\r\n }).sort((a, b) => a.value.localeCompare(b.value));\r\n return uniqBy(mutatedLookup, 'value');\r\n};\r\n\r\nconst loadDataPortalLookups = () => async dispatch => {\r\n dispatch({ type: LOAD_DATAPORTAL_LOOKUPS_STARTED });\r\n try {\r\n const citiesArray = {};\r\n const countiesArray = {};\r\n const subdivisionsArray = {};\r\n const propertySubTypesArray = {};\r\n\r\n const lookupResults = await apiService.Definitions.PostToLookupTable({\r\n lookupNames: [\r\n 'Lookup_Property_Listing_City',\r\n 'Lookup_Property_Listing_CountyOrParish',\r\n 'Lookup_Property_Listing_PropertySubtype',\r\n 'Lookup_Property_Listing_SubdivisionName',\r\n ],\r\n });\r\n if (lookupResults) {\r\n lookupResults.map(lookup => {\r\n if (lookup.lookupFieldName === 'City') {\r\n (lookup.data).map(item => {\r\n citiesArray[item.Code] = { ...item };\r\n return null;\r\n });\r\n } else if (lookup.lookupFieldName === 'CountyOrParish') {\r\n (lookup.data).map(item => {\r\n countiesArray[item.Code] = { ...item };\r\n return null;\r\n });\r\n } else if (lookup.lookupFieldName === 'PropertySubtype') {\r\n (lookup.data).map(item => {\r\n propertySubTypesArray[item.Code] = { ...item };\r\n return null;\r\n });\r\n } else if (lookup.lookupFieldName === 'SubdivisionName') {\r\n (lookup.data).map(item => {\r\n subdivisionsArray[item.Code] = { ...item };\r\n return null;\r\n });\r\n }\r\n return null;\r\n });\r\n if (isEmpty(citiesArray) || isEmpty(countiesArray) || isEmpty(propertySubTypesArray) || isEmpty(subdivisionsArray)) return;\r\n const cityNames = mutateLookup(citiesArray);\r\n const countyNames = mutateLookup(countiesArray);\r\n const propertySubTypes = mutateLookup(propertySubTypesArray);\r\n const subdivisionNames = mutateLookup(subdivisionsArray);\r\n const lookups = {\r\n cityNames,\r\n countyNames,\r\n propertySubTypes,\r\n subdivisionNames,\r\n };\r\n dispatch({\r\n type: LOAD_DATAPORTAL_LOOKUPS_SUCCEEDED,\r\n payload: { lookups },\r\n });\r\n } else {\r\n throw Error('Error: DataPortal loadDataPortalLookups - no data returned');\r\n }\r\n } catch (error) {\r\n console.error('Error: DataPortal loadDataPortalLookups', error);\r\n dispatch({ type: LOAD_DATAPORTAL_LOOKUPS_FAILED });\r\n }\r\n};\r\n\r\nconst updateDataFileRequests = (dataFileRequest, hubEvent = '') => async dispatch => {\r\n switch (hubEvent) {\r\n case 'DataFileRequestDeleted':\r\n dispatch(handleDataFileRequestDeleted(dataFileRequest));\r\n break;\r\n case 'RequestStatusUpdated':\r\n dispatch(handleRequestStatusUpdated(dataFileRequest));\r\n break;\r\n case 'SavedCriteriaDeleted':\r\n dispatch(handleSavedCriteriaDeleted(dataFileRequest));\r\n break;\r\n case 'UserCriteriaNameChanged':\r\n dispatch(handleUserCriteriaNameChanged(dataFileRequest));\r\n break;\r\n case 'UserFileNameChanged':\r\n dispatch(handleUserFileNameChanged(dataFileRequest));\r\n break;\r\n default:\r\n break;\r\n }\r\n};\r\n\r\nconst updateUserCriteriaName = (sqlWhereClause, userCriteriaName) => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_USER_CRITERIA_NAME_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.SqlWhereClause === sqlWhereClause) {\r\n returnValue = {\r\n ...a,\r\n UserCriteriaName: userCriteriaName,\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_USER_CRITERIA_NAME_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateUserCriteriaName', error);\r\n dispatch({ type: UPDATE_USER_CRITERIA_NAME_FAILED });\r\n }\r\n};\r\n\r\nconst updateUserFileName = (uniqueId, userFileName) => async (dispatch, getState) => {\r\n dispatch({ type: UPDATE_USER_FILE_NAME_STARTED });\r\n try {\r\n const { masterDataFileRequests } = getState().dataPortal;\r\n const dataFileRequests = masterDataFileRequests.map(a => {\r\n let returnValue = { ...a };\r\n if (a.UniqueID === uniqueId) {\r\n returnValue = {\r\n ...a,\r\n UserFileName: userFileName,\r\n };\r\n }\r\n return returnValue;\r\n });\r\n dispatch({\r\n type: UPDATE_USER_FILE_NAME_SUCCEEDED,\r\n payload: { dataFileRequests },\r\n });\r\n } catch (error) {\r\n console.error('Error: DataPortal updateUserFileName', error);\r\n dispatch({ type: UPDATE_USER_FILE_NAME_FAILED });\r\n }\r\n};\r\n\r\nexport {\r\n createDataFileRequest,\r\n deleteDataFileRequest,\r\n deleteDataFileSavedSearch,\r\n loadAggregateData,\r\n loadDataFileRequests,\r\n loadDataPortalLookups,\r\n updateDataFileRequests,\r\n updateUserCriteriaName,\r\n updateUserFileName,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport agent from '@services/apiService';\r\n\r\nimport {\r\n SELECT_AGENT,\r\n SELECT_AGENT_FAIL,\r\n SELECT_AGENT_SUCCESS,\r\n GET_IMPERSONATION_DATA,\r\n GET_IMPERSONATION_DATA_SUCCESS,\r\n GET_IMPERSONATION_DATA_FAIL,\r\n GET_STATUS,\r\n GET_STATUS_SUCCESS,\r\n GET_STATUS_FAIL,\r\n HOME_BUTTON_CLICKED,\r\n IMPERSONATION_AGENT_LOOKUP,\r\n IMPERSONATION_AGENT_LOOKUP_FAIL,\r\n IMPERSONATION_AGENT_LOOKUP_SUCCESS,\r\n SEARCH_LISTINGS_PAGE_CLICKED,\r\n SET_GROUP_TYPE,\r\n START_IMPERSONATION,\r\n START_IMPERSONATION_SUCCESS,\r\n START_IMPERSONATION_FAIL,\r\n STOP_IMPERSONATION,\r\n STOP_IMPERSONATION_SUCCESS,\r\n STOP_IMPERSONATION_FAIL,\r\n} from '../constants/ActionTypes';\r\n\r\nconst initialState = {\r\n agentGroupType: null,\r\n allowedUsers: [],\r\n clearAgent: false,\r\n impersonationAgentSearchResults: null,\r\n impersonationAgentSelected: null,\r\n impersonationStateChange: false,\r\n impersonationTargets: [],\r\n isImpersonating: null,\r\n isLoading: false,\r\n status: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case GET_IMPERSONATION_DATA_SUCCESS:\r\n return {\r\n ...state,\r\n allowedUsers: action.payload.allowedUsers,\r\n impersonationTargets: action.payload.impersonationTargets,\r\n };\r\n case GET_IMPERSONATION_DATA_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload,\r\n };\r\n case GET_STATUS_SUCCESS:\r\n return {\r\n ...state,\r\n status: action.payload,\r\n };\r\n case GET_STATUS_FAIL:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n case HOME_BUTTON_CLICKED:\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n };\r\n case SET_GROUP_TYPE:\r\n return {\r\n ...state,\r\n agentGroupType: action.groupType,\r\n };\r\n case GET_IMPERSONATION_DATA:\r\n case START_IMPERSONATION:\r\n case IMPERSONATION_AGENT_LOOKUP:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case IMPERSONATION_AGENT_LOOKUP_FAIL:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n /* Error handling */\r\n };\r\n case IMPERSONATION_AGENT_LOOKUP_SUCCESS: {\r\n return {\r\n ...state,\r\n impersonationAgentSearchResults: action.payload.updatedAgents,\r\n isLoading: false,\r\n };\r\n }\r\n case START_IMPERSONATION_SUCCESS:\r\n return {\r\n ...state,\r\n isImpersonating: action.payload,\r\n impersonationStateChange: true,\r\n };\r\n case STOP_IMPERSONATION_SUCCESS:\r\n return {\r\n ...state,\r\n isImpersonating: false,\r\n impersonationStateChange: true,\r\n };\r\n case STOP_IMPERSONATION_FAIL:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n case START_IMPERSONATION_FAIL:\r\n return {\r\n ...state,\r\n isImpersonating: false,\r\n error: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst startImpersonation = targetCriteria => async dispatch => {\r\n dispatch({ type: START_IMPERSONATION });\r\n try {\r\n await agent.Impersonation.Start({ userName: targetCriteria.memberMlsId });\r\n dispatch({\r\n type: START_IMPERSONATION_SUCCESS,\r\n payload: targetCriteria,\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation startImpersonation', err);\r\n dispatch({ type: START_IMPERSONATION_FAIL, payload: err });\r\n }\r\n};\r\n\r\nconst stopImpersonation = () => async dispatch => {\r\n dispatch({ type: STOP_IMPERSONATION });\r\n try {\r\n const status = await agent.Impersonation.Stop();\r\n dispatch({\r\n type: STOP_IMPERSONATION_SUCCESS,\r\n payload: { status },\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation stopImpersonation', err);\r\n dispatch({ type: STOP_IMPERSONATION_FAIL, payload: err });\r\n }\r\n};\r\nconst getStatus = () => async dispatch => {\r\n dispatch({ type: GET_STATUS });\r\n try {\r\n const result = await agent.Impersonation.GetStatus();\r\n dispatch({\r\n type: GET_STATUS_SUCCESS,\r\n payload: { ...result },\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation getStatus', err);\r\n dispatch({ type: GET_STATUS_FAIL, payload: err });\r\n }\r\n};\r\nconst getImpersonationData = () => async dispatch => {\r\n dispatch({ type: GET_IMPERSONATION_DATA });\r\n try {\r\n const list = await agent.Impersonation.GetImpersonationData();\r\n dispatch({\r\n type: GET_IMPERSONATION_DATA_SUCCESS,\r\n payload: { ...list },\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation getImpersonationData', err);\r\n dispatch({ type: GET_IMPERSONATION_DATA_FAIL, payload: err });\r\n }\r\n};\r\nconst separateAgentName = agents => agents.map(singleAgent => {\r\n const currentAgent = { ...singleAgent };\r\n // Split the name\r\n const splitName = currentAgent.MemberFullName.split(' ');\r\n if (splitName.length === 3) {\r\n currentAgent.MemberFirstName = splitName.slice(0, -1).join(' ');\r\n currentAgent.MemberLastName = splitName.slice(-1).join(' ');\r\n } else {\r\n const [firstName, lastName] = splitName;\r\n currentAgent.MemberFirstName = firstName;\r\n currentAgent.MemberLastName = lastName;\r\n }\r\n return currentAgent;\r\n});\r\n// Searches for agents\r\nconst agentSearch = agentCriteria => async dispatch => {\r\n dispatch({ type: IMPERSONATION_AGENT_LOOKUP });\r\n try {\r\n const agents = await agent.Agent.searchAgent(agentCriteria);\r\n const updatedAgents = separateAgentName(agents);\r\n dispatch({\r\n type: IMPERSONATION_AGENT_LOOKUP_SUCCESS,\r\n payload: { updatedAgents },\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation agentSearch', err);\r\n dispatch({ type: IMPERSONATION_AGENT_LOOKUP_FAIL });\r\n }\r\n};\r\nconst buildJson = row => {\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [\r\n {\r\n name: 'MemberMlsId',\r\n value: row.memberMlsId,\r\n },\r\n ],\r\n },\r\n };\r\n return jsonBody;\r\n};\r\n// Selects agent\r\nconst getTargetAgentData = agentData => async dispatch => {\r\n dispatch({ type: SELECT_AGENT });\r\n try {\r\n const agentBody = buildJson(agentData);\r\n const selectedAgent = await agent.Agent.selectAgent(agentBody);\r\n const fullAgent = { ...selectedAgent.agent };\r\n dispatch({\r\n type: SELECT_AGENT_SUCCESS,\r\n payload: { fullAgent },\r\n });\r\n } catch (err) {\r\n console.error('Error: Impersonation getTargetAgentData', err);\r\n dispatch({ type: SELECT_AGENT_FAIL });\r\n }\r\n};\r\n\r\nexport {\r\n agentSearch,\r\n getImpersonationData,\r\n getStatus,\r\n getTargetAgentData,\r\n stopImpersonation,\r\n startImpersonation,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-return-assign */\r\n\r\nimport apiService from '@services/apiService';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst ADD_NEW_CLIENT_PHOTO = 'ADD_NEW_CLIENT_PHOTO';\r\nconst ADD_FLEXRULE_PHOTOS = 'ADD_FLEXRULE_PHOTOS';\r\nconst ADD_API_UPLOAD_RESULT = 'ADD_API_UPLOAD_RESULT';\r\nconst ADD_EDIT_PHOTO = 'ADD_EDIT_PHOTO';\r\nconst HARD_DELETE_PHOTO = 'HARD_DELETE_PHOTO';\r\nconst SET_EDIT_PHOTO = 'SET_EDIT_PHOTO';\r\nconst SOFT_DELETE_PHOTO = 'SOFT_DELETE_PHOTO';\r\nconst UPDATE_PHOTO_DESCRIPTION = 'UPDATE_PHOTO_DESCRIPTION';\r\nconst CLEAR_PHOTO_COLLECTION = 'CLEAR_PHOTO_COLLECTION';\r\nconst RESTORE_PHOTO = 'RESTORE_PHOTO';\r\nconst REMOVE_EDIT_PHOTO = 'REMOVE_EDIT_PHOTO';\r\nconst SET_PHOTO_COLLECTION_SORT_ORDER = 'SET_PHOTO_COLLECTION_SORT_ORDER';\r\n\r\nconst initialState = {\r\n photoMetaCollection: [],\r\n editPhotoMeta: null,\r\n};\r\n\r\nconst getPhotoMetaObject = () => ({\r\n key: null,\r\n id: null,\r\n originalURL: null,\r\n srcURL: null,\r\n cropperSrcURL: null,\r\n externalURL: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n IsUploaded: false,\r\n IsError: false,\r\n Description: null,\r\n thumbailSrcURL: null,\r\n thumbExternalURL: null,\r\n cropPointer: null,\r\n cropperResult: {\r\n file: null,\r\n blobURL: null,\r\n },\r\n dropZoneMeta: {\r\n file: null,\r\n blobURL: null,\r\n },\r\n apiMeta: {\r\n assetType: null,\r\n displayName: null,\r\n extension: null,\r\n isError: null,\r\n newName: null,\r\n path: null,\r\n url: null,\r\n },\r\n formikMeta: {\r\n URL: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n IsLive: null,\r\n IsPreload: null,\r\n Description: null,\r\n MediaType: null,\r\n MediaCategory: null,\r\n },\r\n flexMeta: {\r\n UniqueID: null,\r\n ParentID: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n Description: null,\r\n MediaCategory: null,\r\n MediaKeyNumeric: null,\r\n MediaType: null,\r\n ModificationTimestamp: null,\r\n Order: null,\r\n OriginatingSystemMediaKey: null,\r\n OriginatingSystemName: null,\r\n PreferredPhotoYN: null,\r\n ResourceName: null,\r\n Path: null,\r\n URL: null,\r\n ResourceRecordKeyNumeric: null,\r\n ModifiedDate: null,\r\n IsLive: null,\r\n LongDescription: null,\r\n ParentType: null,\r\n OriginatingSystemParent: null,\r\n IsPreload: null,\r\n fullSizeURL: null,\r\n InitialSortOrder: null,\r\n },\r\n});\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case ADD_NEW_CLIENT_PHOTO: return { ...state, photoMetaCollection: [...state.photoMetaCollection, action.payload] };\r\n case ADD_FLEXRULE_PHOTOS: return { ...state, photoMetaCollection: [...state?.photoMetaCollection, ...action.payload] };\r\n case ADD_API_UPLOAD_RESULT: return { ...state, photoMetaCollection: state.photoMetaCollection.map(pmc => ((pmc.key === action.payload.key) ? action.payload : pmc)) };\r\n case ADD_EDIT_PHOTO: return { ...state, photoMetaCollection: [...state.photoMetaCollection, action.payload] };\r\n case SET_PHOTO_COLLECTION_SORT_ORDER: return {\r\n ...state,\r\n photoMetaCollection: state.photoMetaCollection.map(pmc => {\r\n const sorted = action.payload.find(sortKV => sortKV.key === pmc.key);\r\n if (sorted) pmc.SortOrder = sorted.SortOrder;\r\n return pmc;\r\n }),\r\n };\r\n case SET_EDIT_PHOTO: return { ...state, editPhotoMeta: action.payload };\r\n case SOFT_DELETE_PHOTO: return { ...state, photoMetaCollection: state.photoMetaCollection.map(pmc => ((pmc.key === action.payload.key) ? action.payload : pmc)) };\r\n case RESTORE_PHOTO: return { ...state, photoMetaCollection: state.photoMetaCollection.map(pmc => ((pmc.key === action.payload) ? { ...pmc, IsDeleted: false } : pmc)) };\r\n case REMOVE_EDIT_PHOTO: return { ...state, editPhotoMeta: null };\r\n case HARD_DELETE_PHOTO: return { ...state, photoMetaCollection: state.photoMetaCollection.map(pmc => ((pmc.key === action.payload.key) ? action.payload : pmc)) };\r\n case UPDATE_PHOTO_DESCRIPTION: return { ...state, photoMetaCollection: state.photoMetaCollection.map(pmc => ((pmc.key === action.payload.key) ? action.payload : pmc)) };\r\n case CLEAR_PHOTO_COLLECTION: return { ...initialState };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst addNewClientPhoto = newClientPhoto => async dispatch => {\r\n dispatch({\r\n type: ADD_NEW_CLIENT_PHOTO,\r\n payload: { ...newClientPhoto },\r\n });\r\n};\r\n\r\nconst addFlexRulePhoto = frPhotos => async dispatch => {\r\n if (frPhotos?.length) {\r\n dispatch({\r\n type: ADD_FLEXRULE_PHOTOS,\r\n payload: frPhotos,\r\n });\r\n } else {\r\n dispatch({\r\n type: ADD_FLEXRULE_PHOTOS,\r\n payload: [frPhotos],\r\n });\r\n }\r\n};\r\n\r\nconst addApiUploadResult = apiResult => async dispatch => {\r\n dispatch({\r\n type: ADD_API_UPLOAD_RESULT,\r\n payload: apiResult,\r\n });\r\n};\r\n\r\nconst addEditPhotoResult = (metaSource, cropperBlob) => async dispatch => {\r\n const originMeta = metaSource;\r\n const cropMeta = getPhotoMetaObject();\r\n // const originMeta = photoMeta;\r\n const newKey = uuidv4(); // create new key to hold original photo;\r\n cropMeta.key = newKey;\r\n cropMeta.id = newKey;\r\n cropMeta.SortOrder = originMeta.SortOrder;\r\n cropMeta.IsDeleted = originMeta.IsDeleted;\r\n cropMeta.Description = originMeta.Description;\r\n cropMeta.cropPointer = originMeta.key; // point to original to use on reset\r\n\r\n originMeta.IsDeleted = true;\r\n const name = originMeta.Description ?? originMeta.key;\r\n cropMeta.cropperResult.blobURL = cropperBlob;\r\n\r\n cropMeta.cropperResult.file = await fetch(cropMeta.cropperResult.blobURL).then(r => r.blob()).then(blobFile => new File([blobFile], `${name}.png`, { type: blobFile.type })); // return file from cropperResult\r\n URL.revokeObjectURL(cropMeta.cropperResult.blobURL); // revoke blob after it has been written to file;\r\n URL.revokeObjectURL(cropperBlob);\r\n dispatch({\r\n type: ADD_EDIT_PHOTO,\r\n payload: cropMeta,\r\n });\r\n};\r\n\r\nconst clearPhotoCollection = () => async dispatch => {\r\n dispatch({\r\n type: CLEAR_PHOTO_COLLECTION,\r\n\r\n });\r\n};\r\n\r\nconst hardDeletePhoto = photoToDelete => async dispatch => {\r\n dispatch({\r\n type: HARD_DELETE_PHOTO,\r\n payload: photoToDelete,\r\n });\r\n};\r\n\r\nconst setEditPhoto = (photoToEdit, errorFallback) => async dispatch => {\r\n const newEditMeta = photoToEdit;\r\n if (photoToEdit?.externalURL) {\r\n try {\r\n const response = await apiService.Photos.getSingleImage(newEditMeta.externalURL);\r\n newEditMeta.cropperPhoto = response;\r\n } catch (er) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Photo setEditPhoto', er);\r\n }\r\n } else newEditMeta.cropperPhoto = errorFallback;\r\n\r\n dispatch({\r\n type: SET_EDIT_PHOTO,\r\n payload: newEditMeta,\r\n });\r\n};\r\n\r\nconst setPhotoCollectionSortOrder = sortedKeys => async dispatch => {\r\n const sortedKeysPlus1 = sortedKeys.map((key, index) => ({ key, SortOrder: index + 1 }));\r\n dispatch({\r\n type: SET_PHOTO_COLLECTION_SORT_ORDER,\r\n payload: sortedKeysPlus1,\r\n });\r\n};\r\n\r\nconst softDeletePhoto = photoToDelete => async dispatch => {\r\n const deletedPhotoMeta = photoToDelete;\r\n deletedPhotoMeta.IsDeleted = true;\r\n dispatch({\r\n type: SOFT_DELETE_PHOTO,\r\n payload: deletedPhotoMeta,\r\n });\r\n};\r\n\r\nconst removeEditPhoto = () => async dispatch => {\r\n dispatch({\r\n type: REMOVE_EDIT_PHOTO,\r\n });\r\n};\r\n\r\nconst updatePhotoDescription = photoWithNewDescription => async dispatch => {\r\n dispatch({\r\n type: UPDATE_PHOTO_DESCRIPTION,\r\n payload: photoWithNewDescription,\r\n });\r\n};\r\n\r\nconst restorePhotoMetaByKey = photoKey => async dispatch => {\r\n dispatch({\r\n type: RESTORE_PHOTO,\r\n payload: photoKey,\r\n });\r\n};\r\n\r\nexport {\r\n addNewClientPhoto,\r\n addFlexRulePhoto,\r\n addEditPhotoResult,\r\n addApiUploadResult,\r\n hardDeletePhoto,\r\n setEditPhoto,\r\n setPhotoCollectionSortOrder,\r\n softDeletePhoto,\r\n removeEditPhoto,\r\n restorePhotoMetaByKey,\r\n clearPhotoCollection,\r\n updatePhotoDescription,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport ApiService from '@services/apiService';\r\n\r\nimport isEqual from 'lodash/isEqual';\r\nimport isNil from 'lodash/isNil';\r\nimport filter from 'lodash/filter';\r\nimport some from 'lodash/some';\r\n\r\nconst CHECK_ROWLOCK = 'p9/rowLock/CHECK_ROWLOCK';\r\nconst CHECK_ROWLOCK_FAIL = 'p9/rowLock/CHECK_ROWLOCK_FAIL';\r\nconst CHECK_ROWLOCK_SUCCESS = 'p9/rowLock/CHECK_ROWLOCK_SUCCESS';\r\nconst CREATE_ROWLOCK = 'p9/rowLock/CREATE_ROWLOCK';\r\nconst CREATE_ROWLOCK_FAIL = 'p9/rowLock/CREATE_ROWLOCK_FAIL';\r\nconst CREATE_ROWLOCK_SUCCESS = 'p9/rowLock/CREATE_ROWLOCK_SUCCESS';\r\n\r\nconst PING_ROWLOCK = 'p9/rowLock/PING_ROWLOCK';\r\nconst PING_ROWLOCK_FAIL = 'p9/rowLock/PING_ROWLOCK_FAIL';\r\nconst PING_ROWLOCK_SUCCESS = 'p9/rowLock/PING_ROWLOCK_SUCCESS';\r\n\r\nconst REMOVE_ROWLOCK = 'p9/rowLock/REMOVE_ROWLOCK';\r\nconst REMOVE_ROWLOCK_FAIL = 'p9/rowLock/REMOVE_ROWLOCK_FAIL';\r\nconst REMOVE_ROWLOCK_SUCCESS = 'p9/rowLock/REMOVE_ROWLOCK_SUCCESS';\r\nconst ROWLOCK_CLAREITY = 'p9/rowLock/ROWLOCK_CLAREITY';\r\n\r\nconst SET_ROWLOCK_CURRENT_USER = 'p9/rowLock/SET_ROWLOCK_CURRENT_USER';\r\nconst SET_ROWLOCK_ENTITY = 'p9/rowLock/SET_ROWLOCK_ENTITY';\r\nconst SET_ROWLOCK_CALLBACK = 'p9/rowLock/SET_ROWLOCK_CALLBACK';\r\n\r\nconst TAKEOVER_ROWLOCK = 'p9/rowLock/TAKEOVER_ROWLOCK';\r\nconst TAKEOVER_ROWLOCK_FAIL = 'p9/rowLock/TAKEOVER_ROWLOCK_FAIL';\r\nconst TAKEOVER_ROWLOCK_SUCCESS = 'p9/rowLock/TAKEOVER_ROWLOCK_SUCCESS';\r\n\r\nconst initialState = {\r\n currentUser: {},\r\n createdLocks: [],\r\n requestType: null,\r\n entity: {},\r\n lastUpdatedOn: null,\r\n lastCheckedOn: null,\r\n requiresCheck: false,\r\n locked: false,\r\n lockedByMe: false,\r\n lockedByUserId: null,\r\n lockedByUserName: null,\r\n message: null,\r\n error: false,\r\n loading: false,\r\n clareityUrl: null,\r\n callback: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_ROWLOCK_CURRENT_USER:\r\n return {\r\n ...state,\r\n currentUser: action.payload.currentUser,\r\n requiresCheck: !isEqual(action.payload.currentUser, state.currentUser) && state.locked,\r\n };\r\n case SET_ROWLOCK_ENTITY:\r\n return {\r\n ...(isEqual(state.entity, action.payload.entity) ? state : initialState),\r\n currentUser: state.currentUser, // preserve current user\r\n createdLocks: state.createdLocks, // preserve created locks\r\n entity: isEqual(state.entity, action.payload.entity) ? state.entity : action.payload.entity,\r\n };\r\n case SET_ROWLOCK_CALLBACK:\r\n return {\r\n ...state,\r\n callback: action.payload.callback,\r\n };\r\n case CHECK_ROWLOCK:\r\n case CREATE_ROWLOCK:\r\n case PING_ROWLOCK:\r\n case REMOVE_ROWLOCK:\r\n case TAKEOVER_ROWLOCK:\r\n return {\r\n ...(isEqual(state.entity, action.payload.entity) ? state : initialState),\r\n currentUser: state.currentUser, // preserve current user\r\n createdLocks: state.createdLocks, // preserve created locks\r\n requestType: action.payload.requestType,\r\n entity: action.payload.entity,\r\n message: null,\r\n error: false,\r\n loading: true,\r\n clareityUrl: null,\r\n };\r\n case CHECK_ROWLOCK_FAIL:\r\n case CREATE_ROWLOCK_FAIL:\r\n case PING_ROWLOCK_FAIL:\r\n case REMOVE_ROWLOCK_FAIL:\r\n case TAKEOVER_ROWLOCK_FAIL:\r\n return {\r\n ...state,\r\n message: `Error encountered on ${action.type} action: ${action.error?.message} (${action.error?.response?.error?.message})`,\r\n error: true,\r\n loading: false,\r\n };\r\n case CHECK_ROWLOCK_SUCCESS: {\r\n const lockedByMe = action.payload.rowIsLocked && action.payload.rowIsLockedByUser === state.currentUser?.userId;\r\n let { createdLocks } = state;\r\n if (!lockedByMe && some(createdLocks, lockedEntity => isEqual(lockedEntity, state.entity))) {\r\n // Remove entity from created locks - no longer owner by me.\r\n createdLocks = filter(createdLocks, lockedEntity => !isEqual(lockedEntity, state.entity));\r\n }\r\n return {\r\n ...state,\r\n createdLocks,\r\n lastUpdatedOn: action.payload.lastUpdatedOn,\r\n lastCheckedOn: Date.now(),\r\n locked: action.payload.rowIsLocked,\r\n lockedByMe,\r\n lockedByUserId: action.payload.rowIsLockedByUser,\r\n lockedByUserName: action.payload.userName,\r\n requiresCheck: false,\r\n loading: false,\r\n };\r\n }\r\n case CREATE_ROWLOCK_SUCCESS: {\r\n let { createdLocks } = state;\r\n if (action.payload.type === 'SUCCESS' && action.payload.message === 'Row Lock created' && !some(createdLocks, lockedEntity => isEqual(lockedEntity, state.entity))) {\r\n // Add entity to created locks.\r\n createdLocks = [...createdLocks, state.entity];\r\n }\r\n return {\r\n ...state,\r\n createdLocks,\r\n locked: action.payload.type === 'SUCCESS' || !isNil(action.payload.rowIsLockedByUser) ? true : state.locked,\r\n lockedByMe: action.payload.type === 'SUCCESS' ? true : state.lockedByMe,\r\n lockedByUserId: action.payload.type === 'SUCCESS' ? state.currentUser?.userId : action.payload.rowIsLockedByUser,\r\n lockedByUserName: action.payload.type === 'SUCCESS' ? state.currentUser?.userName : action.payload.userName,\r\n requiresCheck: isNil(action.payload.type) || (action.payload.type === 'SUCCESS' && action.payload.message === 'Row Lock updated successfully' && !some(createdLocks, lockedEntity => isEqual(lockedEntity, state.entity))),\r\n message: action.payload.message,\r\n loading: false,\r\n };\r\n }\r\n case PING_ROWLOCK_SUCCESS:\r\n return {\r\n ...state,\r\n locked: action.payload.type === 'SUCCESS' ? true : state.locked,\r\n lockedByMe: action.payload.type === 'SUCCESS' ? true : state.lockedByMe,\r\n lockedByUserId: action.payload.type === 'SUCCESS' ? state.currentUser?.userId : state.lockedByUserId,\r\n lockedByUserName: action.payload.type === 'SUCCESS' ? state.currentUser?.userName : state.lockedByUserName,\r\n requiresCheck: action.payload.type === 'FAILURE',\r\n message: action.payload.message,\r\n loading: false,\r\n };\r\n case REMOVE_ROWLOCK_SUCCESS: {\r\n let { createdLocks } = state;\r\n if (action.payload.type === 'SUCCESS' && some(createdLocks, lockedEntity => isEqual(lockedEntity, state.entity))) {\r\n // Remove entity from created locks.\r\n createdLocks = filter(createdLocks, lockedEntity => !isEqual(lockedEntity, state.entity));\r\n }\r\n return {\r\n ...state,\r\n createdLocks,\r\n locked: action.payload.type === 'SUCCESS' ? false : state.locked,\r\n lockedByMe: action.payload.type === 'SUCCESS' ? false : state.lockedByMe,\r\n lockedByUserId: action.payload.type === 'SUCCESS' ? null : state.lockedByUserId,\r\n lockedByUserName: action.payload.type === 'SUCCESS' ? null : state.lockedByUserName,\r\n requiresCheck: action.payload.type === 'FAILURE',\r\n message: action.payload.message,\r\n loading: false,\r\n };\r\n }\r\n case TAKEOVER_ROWLOCK_SUCCESS: {\r\n let { createdLocks } = state;\r\n if (action.payload.type === 'SUCCESS' && !some(createdLocks, lockedEntity => isEqual(lockedEntity, state.entity))) {\r\n // Add entity to created locks.\r\n createdLocks = [...createdLocks, state.entity];\r\n }\r\n return {\r\n ...state,\r\n createdLocks,\r\n locked: action.payload.type === 'SUCCESS' ? true : state.locked,\r\n lockedByMe: action.payload.type === 'SUCCESS' ? true : state.lockedByMe,\r\n lockedByUserId: action.payload.type === 'SUCCESS' ? state.currentUser?.userId : state.lockedByUserId,\r\n lockedByUserName: action.payload.type === 'SUCCESS' ? state.currentUser?.userName : state.lockedByUserName,\r\n requiresCheck: action.payload.type === 'FAILURE',\r\n message: action.payload.message,\r\n loading: false,\r\n };\r\n }\r\n case ROWLOCK_CLAREITY:\r\n return {\r\n ...state,\r\n clareityUrl: action.payload.clareityUrl,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst checkRowLock = entity => async dispatch => {\r\n dispatch({\r\n type: CHECK_ROWLOCK,\r\n payload: { requestType: 'check', entity },\r\n });\r\n try {\r\n const result = await ApiService.RowLock.CheckRowLock(entity);\r\n if (result.ClareityUrl) {\r\n dispatch({ type: ROWLOCK_CLAREITY, payload: { clareityUrl: result.ClareityUrl } });\r\n return null;\r\n }\r\n return dispatch({\r\n type: CHECK_ROWLOCK_SUCCESS,\r\n payload: result,\r\n });\r\n } catch (err) {\r\n console.error('Error: RowLock checkRowLock', err);\r\n return dispatch({ type: CHECK_ROWLOCK_FAIL, error: err });\r\n }\r\n};\r\n\r\nconst createRowLock = entity => async dispatch => {\r\n dispatch({\r\n type: CREATE_ROWLOCK,\r\n payload: { requestType: 'create', entity },\r\n });\r\n try {\r\n const result = await ApiService.RowLock.CreateRowLock(entity);\r\n if (result.ClareityUrl) {\r\n await dispatch({ type: ROWLOCK_CLAREITY, payload: { clareityUrl: result.ClareityUrl } });\r\n return false;\r\n }\r\n await dispatch({\r\n type: CREATE_ROWLOCK_SUCCESS,\r\n payload: result,\r\n });\r\n return true;\r\n } catch (err) {\r\n console.error('Error: RowLock createRowLock', err);\r\n await dispatch({ type: CREATE_ROWLOCK_FAIL, error: err });\r\n return false;\r\n }\r\n};\r\n\r\nconst pingRowLock = entity => async dispatch => {\r\n dispatch({\r\n type: PING_ROWLOCK,\r\n payload: { requestType: 'ping', entity },\r\n });\r\n try {\r\n const result = await ApiService.RowLock.PingRowLock(entity);\r\n if (result.ClareityUrl) {\r\n dispatch({ type: ROWLOCK_CLAREITY, payload: { clareityUrl: result.ClareityUrl } });\r\n return null;\r\n }\r\n return dispatch({\r\n type: PING_ROWLOCK_SUCCESS,\r\n payload: result,\r\n });\r\n } catch (err) {\r\n console.error('Error: RowLock pingRowLock', err);\r\n return dispatch({ type: PING_ROWLOCK_FAIL, error: err });\r\n }\r\n};\r\n\r\nconst removeRowLock = entity => async dispatch => {\r\n dispatch({\r\n type: REMOVE_ROWLOCK,\r\n payload: { requestType: 'remove', entity },\r\n });\r\n try {\r\n const result = await ApiService.RowLock.RemoveRowLock(entity);\r\n if (result.ClareityUrl) {\r\n dispatch({ type: ROWLOCK_CLAREITY, payload: { clareityUrl: result.ClareityUrl } });\r\n return null;\r\n }\r\n return dispatch({\r\n type: REMOVE_ROWLOCK_SUCCESS,\r\n payload: result,\r\n });\r\n } catch (err) {\r\n console.error('Error: RowLock removeRowLock', err);\r\n return dispatch({ type: REMOVE_ROWLOCK_FAIL, error: err });\r\n }\r\n};\r\n\r\nconst setRowLockCurrentUser = currentUser => async dispatch => dispatch({\r\n type: SET_ROWLOCK_CURRENT_USER,\r\n payload: { currentUser },\r\n});\r\n\r\nconst setRowLockEntity = entity => async dispatch => dispatch({\r\n type: SET_ROWLOCK_ENTITY,\r\n payload: { entity },\r\n});\r\n\r\nconst setRowLockCallback = callback => async dispatch => dispatch({\r\n type: SET_ROWLOCK_CALLBACK,\r\n payload: { callback },\r\n});\r\n\r\nconst takeoverRowLock = entity => async dispatch => {\r\n dispatch({\r\n type: TAKEOVER_ROWLOCK,\r\n payload: { requestType: 'takeover', entity },\r\n });\r\n try {\r\n const result = await ApiService.RowLock.TakeoverRowLock(entity);\r\n if (result.ClareityUrl) {\r\n dispatch({ type: ROWLOCK_CLAREITY, payload: { clareityUrl: result.ClareityUrl } });\r\n return null;\r\n }\r\n return dispatch({\r\n type: TAKEOVER_ROWLOCK_SUCCESS,\r\n payload: result,\r\n });\r\n } catch (err) {\r\n console.error('Error: RowLock takeoverRowLock', err);\r\n return dispatch({ type: TAKEOVER_ROWLOCK_FAIL, error: err });\r\n }\r\n};\r\n\r\nexport {\r\n checkRowLock,\r\n createRowLock,\r\n pingRowLock,\r\n removeRowLock,\r\n setRowLockCurrentUser,\r\n setRowLockEntity,\r\n setRowLockCallback,\r\n takeoverRowLock,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\", \"log\"] }] */\r\nimport { HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr';\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport ApiService from '@services/apiService';\r\nimport {\r\n // LOGOUT,\r\n CLOSE_ALERT,\r\n CLAREITY_LOGIN,\r\n OPEN_ALERT,\r\n SAVE_SIGNALR_CONNECTION,\r\n SAVE_SIGNALR_CONNECTION_SUCCESS,\r\n SAVE_SIGNALR_CONNECTION_FAIL,\r\n SAVE_SIGNALR_CONNECTION_ID,\r\n SIGNALR_STARTING,\r\n SIGNALR_STARTED,\r\n SIGNALR_STOPPED,\r\n SIGNALR_FAILED,\r\n} from '@redux/constants/ActionTypes';\r\n\r\nconst initialState = {\r\n connection: null,\r\n connectionId: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case SAVE_SIGNALR_CONNECTION_SUCCESS:\r\n return {\r\n ...state,\r\n connection: action.connection,\r\n connectionId: action.connection.connectionId,\r\n state: action.state,\r\n };\r\n case SAVE_SIGNALR_CONNECTION_ID:\r\n return {\r\n ...state,\r\n connectionId: action.connectionId,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst buildHubConnection = () => new HubConnectionBuilder()\r\n .withUrl(process.env.REACT_APP_API_URL)\r\n .build();\r\n\r\nconst saveSignalRConnection = (connection, state) => async dispatch => {\r\n dispatch({ type: SAVE_SIGNALR_CONNECTION });\r\n try {\r\n dispatch({\r\n type: SAVE_SIGNALR_CONNECTION_SUCCESS,\r\n connection,\r\n state,\r\n });\r\n } catch (error) {\r\n // TODO: Add RollBar here\r\n console.error('Error: saveSignalRConnection', error);\r\n dispatch({\r\n type: SAVE_SIGNALR_CONNECTION_FAIL,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nconst stopSignalRConnection = connection => async dispatch => {\r\n connection.off('Connected');\r\n connection.stop();\r\n dispatch({ type: SIGNALR_STOPPED });\r\n};\r\n\r\nconst startSignalRConnection = () => async (dispatch, getState) => {\r\n const connection = buildHubConnection();\r\n const { isSwalOpen } = getState().utility;\r\n dispatch({ type: SIGNALR_STARTING });\r\n // Following line added as a workaround as per: https://github.com/aspnet/SignalR/issues/2389#issuecomment-393760284\r\n Object.defineProperty(WebSocket, 'OPEN', { value: 1 });\r\n connection.start()\r\n .then(() => {\r\n dispatch({ type: SIGNALR_STARTED });\r\n })\r\n .then(() => {\r\n connection.onreconnecting(error => console.log(`Connection lost due to error \"${error}\". Reconnecting.`));\r\n connection.onreconnected(connectionId => console.log(`Connection reestablished. Connected with connectionId \"${connectionId}\".`));\r\n connection.onclose(() => {\r\n if (!isSwalOpen) {\r\n dispatch({ type: OPEN_ALERT });\r\n\r\n Swal.fire({\r\n backdrop: true,\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'warning',\r\n iconColor: 'var(--theme-warning)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2',\r\n },\r\n showConfirmButton: true,\r\n showDenyButton: false,\r\n title: 'Disconnected from Server',\r\n text: 'You have been disconnected from the Server due to a Network Error. Once your connection has been reestablished, you may be asked to Login once more if your session has expired.',\r\n })\r\n .then(choice => {\r\n if (choice.isConfirmed) {\r\n // TODO: Figure out if we are in the middle of editing something and save to LocalStorage\r\n // If the above is true, make sure that the user does not get locked out of their listing if it's not a net new one\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'warning',\r\n iconColor: 'var(--theme-warning)',\r\n showConfirmButton: false,\r\n showDenyButton: false,\r\n title: 'Reconnecting',\r\n text: 'Please wait while we attempt to reconnect you...',\r\n didOpen: () => {\r\n Swal.showLoading();\r\n },\r\n didClose: () => {\r\n dispatch({ type: CLOSE_ALERT });\r\n },\r\n });\r\n dispatch(stopSignalRConnection(connection));\r\n const interval = setInterval(async () => {\r\n try {\r\n const response = await ApiService.Auth.Heartbeat();\r\n if (response) {\r\n clearInterval(interval);\r\n Swal.close();\r\n // dispatch({ type: LOGOUT, payload: ApiService.Auth.Logout() });\r\n dispatch({\r\n type: CLAREITY_LOGIN,\r\n payload: ApiService.Auth.ClareityLogin(),\r\n });\r\n }\r\n } catch (e) {\r\n // TODO: Add RollBar here\r\n console.log(e.toString());\r\n }\r\n }, 5000);\r\n }\r\n });\r\n }\r\n });\r\n })\r\n .then(() => {\r\n if (connection.state === HubConnectionState.Connected) {\r\n dispatch(saveSignalRConnection(connection, connection.state));\r\n }\r\n })\r\n .catch(err => {\r\n // TODO: Add RollBar here\r\n console.error('err=>', err);\r\n dispatch({\r\n type: SIGNALR_FAILED,\r\n payload: err,\r\n });\r\n });\r\n};\r\n\r\nexport {\r\n saveSignalRConnection,\r\n startSignalRConnection,\r\n stopSignalRConnection,\r\n};\r\n","import {\r\n GET_ACTORS,\r\n GET_LIST_OF_TEAM,\r\n GET_TARGETS,\r\n} from '../../constants/ActionTypes';\r\n\r\nconst initialState = {\r\n actors: null,\r\n targets: null,\r\n listOfTeam: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case GET_ACTORS:\r\n return {\r\n ...state,\r\n actors: action.error ? null : action.payload,\r\n };\r\n case GET_LIST_OF_TEAM:\r\n return {\r\n ...state,\r\n listOfTeam: action.error ? null : action.payload,\r\n };\r\n case GET_TARGETS:\r\n return {\r\n ...state,\r\n targets: action.error ? null : action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\n\r\nconst ADD_TEAM_MEMBER = 'ADD_TEAM_MEMBER';\r\nconst ADD_TEAM_MEMBER_FAIL = 'ADD_TEAM_MEMBER_FAIL';\r\nconst ADD_TEAM_MEMBER_SUCCESS = 'ADD_TEAM_MEMBER_SUCCESS';\r\n\r\nconst REMOVE_TEAM_MEMBER = 'REMOVE_TEAM_MEMBER';\r\nconst REMOVE_TEAM_MEMBER_FAIL = 'REMOVE_TEAM_MEMBER_FAIL';\r\nconst REMOVE_TEAM_MEMBER_SUCCESS = 'REMOVE_TEAM_MEMBER_SUCCESS';\r\n\r\nconst SEARCH_TEAM_MEMBER = 'SEARCH_TEAM_MEMBER';\r\nconst SEARCH_TEAM_MEMBER_FAIL = 'SEARCH_TEAM_MEMBER_FAIL';\r\nconst SEARCH_TEAM_MEMBER_SUCCESS = 'SEARCH_TEAM_MEMBER_SUCCESS';\r\n\r\nconst initialState = {\r\n error: false,\r\n loading: false,\r\n canBeImpersonatedBy: [],\r\n canImpersonate: [],\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case ADD_TEAM_MEMBER:\r\n case REMOVE_TEAM_MEMBER:\r\n case SEARCH_TEAM_MEMBER:\r\n return {\r\n ...state,\r\n error: false,\r\n loading: true,\r\n };\r\n case ADD_TEAM_MEMBER_SUCCESS:\r\n case REMOVE_TEAM_MEMBER_SUCCESS:\r\n return {\r\n ...state,\r\n error: false,\r\n loading: false,\r\n };\r\n case SEARCH_TEAM_MEMBER_SUCCESS:\r\n return {\r\n ...state,\r\n canBeImpersonatedBy: action.payload.canBeImpersonatedBy,\r\n canImpersonate: action.payload.canImpersonate,\r\n error: false,\r\n loading: false,\r\n };\r\n case ADD_TEAM_MEMBER_FAIL:\r\n case REMOVE_TEAM_MEMBER_FAIL:\r\n case SEARCH_TEAM_MEMBER_FAIL:\r\n return {\r\n ...state,\r\n error: true,\r\n loading: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst addTeamMember = member => async dispatch => {\r\n dispatch({ type: ADD_TEAM_MEMBER });\r\n try {\r\n await apiService.TeamsManagement.AddMember(member);\r\n dispatch({ type: ADD_TEAM_MEMBER_SUCCESS });\r\n return true;\r\n } catch (err) {\r\n console.error('Error: TeamsManagement addTeamMember', err);\r\n dispatch({ type: ADD_TEAM_MEMBER_FAIL });\r\n return false;\r\n }\r\n};\r\n\r\nconst removeTeamMember = member => async dispatch => {\r\n dispatch({ type: REMOVE_TEAM_MEMBER });\r\n try {\r\n await apiService.TeamsManagement.RemoveMember(member);\r\n dispatch({ type: REMOVE_TEAM_MEMBER_SUCCESS });\r\n return true;\r\n } catch (err) {\r\n console.error('Error: TeamsManagement removeTeamMember', err);\r\n dispatch({ type: REMOVE_TEAM_MEMBER_FAIL });\r\n return false;\r\n }\r\n};\r\n\r\nconst searchTeamMember = member => async dispatch => {\r\n dispatch({ type: SEARCH_TEAM_MEMBER });\r\n try {\r\n const impersonationDetails = await apiService.TeamsManagement.SearchMember(member);\r\n dispatch({\r\n type: SEARCH_TEAM_MEMBER_SUCCESS,\r\n payload: { ...impersonationDetails },\r\n });\r\n } catch (err) {\r\n console.error('Error: TeamsManagement searchTeamMember', err);\r\n dispatch({ type: SEARCH_TEAM_MEMBER_FAIL });\r\n }\r\n};\r\n\r\nexport {\r\n addTeamMember,\r\n removeTeamMember,\r\n searchTeamMember,\r\n};\r\n","import { SELECT_AGENT_SUCCESS } from '@redux/modules/agent';\r\nimport { SELECT_OFFICE_SUCCESS } from '@redux/modules/office';\r\nimport { CLOSE_ALERT, OPEN_ALERT } from '@redux/constants/ActionTypes';\r\n\r\nconst APP_LOAD = 'APP_LOAD';\r\nconst CLAREITY_LOGIN = 'CLAREITY_LOGIN';\r\nconst CONDO_MANAGEMENT_PAGE_CLICKED = 'CONDO_MANAGEMENT_PAGE_CLICKED';\r\nconst DOMAIN_AUTHENTICATION = 'DOMAIN_AUTHENTICATION';\r\nconst HOME_BUTTON_CLICKED = 'HOME_BUTTON_CLICKED';\r\nconst AGGREGATE_DATA_BUTTON_CLICKED = 'AGGREGATE_DATA_BUTTON_CLICKED';\r\nconst DATA_SEARCH_BUTTON_CLICKED = 'DATA_SEARCH_BUTTON_CLICKED';\r\nconst LISTINGS_PAGE_CLICKED = 'LISTINGS_PAGE_CLICKED';\r\nconst LOAD_FORM_DEFINITION_SUCCESS = 'LOAD_FORM_DEFINITION_SUCCESS';\r\nconst LOGIN = 'LOGIN';\r\nconst LOGOUT = 'LOGOUT';\r\nconst IMPERSONATION_PAGE_CLICKED = 'IMPERSONATION_PAGE_CLICKED';\r\nconst OFFICE_PAGE_CLICKED = 'OFFICE_PAGE_CLICKED';\r\nconst PROFILE_PAGE_CLICKED = 'PROFILE_PAGE_CLICKED';\r\nconst REDIRECT = 'REDIRECT';\r\nconst SEARCH_AGENTS_PAGE_CLICKED = 'SEARCH_AGENTS_PAGE_CLICKED';\r\nconst SEARCH_LISTINGS_PAGE_CLICKED = 'SEARCH_LISTINGS_PAGE_CLICKED';\r\nconst MATRIX_PAGE_CLICKED = 'MATRIX_PAGE_CLICKED';\r\nconst REMAPLIST_PAGE_CLICKED = 'REMAPLIST_PAGE_CLICKED';\r\nconst CREAWEBFORMS_PAGE_CLICKED = 'CREAWEBFORMS_PAGE_CLICKED';\r\nconst CREADDF_PAGE_CLICKED = 'CREADDF_PAGE_CLICKED';\r\nconst VIEW_LISTING_CLICKED = 'VIEW_LISTING_CLICKED';\r\nconst PROSPECTS_PAGE_CLICKED = 'PROSPECTS_PAGE_CLICKED';\r\nconst SPIN_PAGE_CLICKED = 'SPIN_PAGE_CLICKED';\r\nconst SPACELIST_PAGE_CLICKED = 'SPACELIST_PAGE_CLICKED';\r\nconst CLOUDCMA_PAGE_CLICKED = 'CLOUDCMA_PAGE_CLICKED';\r\nconst POSTALCODELOOKUP_PAGE_CLICKED = 'POSTALCODELOOKUP_PAGE_CLICKED';\r\nconst RECA_PAGE_CLICKED = 'RECA_PAGE_CLICKED';\r\nconst TRAINING_PAGE_CLICKED = 'TRAINING_PAGE_CLICKED';\r\n\r\nconst initialState = {\r\n appLoaded: false,\r\n redirectTo: null,\r\n showImpersonation: false,\r\n isSwalOpen: false,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case APP_LOAD:\r\n return {\r\n ...state,\r\n appLoaded: true,\r\n };\r\n case CLAREITY_LOGIN:\r\n case LOGOUT:\r\n return {\r\n ...state,\r\n clareityUrl: action.payload.ClareityUrl,\r\n };\r\n case CONDO_MANAGEMENT_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/condo',\r\n };\r\n case DOMAIN_AUTHENTICATION:\r\n case LOGIN:\r\n return {\r\n ...state,\r\n redirectTo: action.error ? null : '/',\r\n };\r\n case HOME_BUTTON_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/',\r\n };\r\n case AGGREGATE_DATA_BUTTON_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/data/aggregate',\r\n };\r\n case DATA_SEARCH_BUTTON_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/data/search',\r\n };\r\n case IMPERSONATION_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n showImpersonation: !state.showImpersonation,\r\n };\r\n case LISTINGS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/listings',\r\n };\r\n case LOAD_FORM_DEFINITION_SUCCESS: {\r\n const { payload } = action;\r\n const paramDict = {\r\n listings: 'listingType',\r\n agent: 'formType',\r\n office: 'formType',\r\n };\r\n\r\n const params = `?${paramDict[payload.definitionType]}=${payload.listingType || payload.definitionType}`;\r\n const url = `/${payload.definitionType}/${payload.operationType}${payload.listingType ? `/${payload.listingType}` : ''}`;\r\n if (window.location.href.includes(url)) return state;\r\n\r\n return {\r\n ...state,\r\n redirectTo: `${url}${params}`,\r\n };\r\n }\r\n case OFFICE_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/office/search',\r\n };\r\n case PROFILE_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/agent/view',\r\n };\r\n case REDIRECT:\r\n return {\r\n ...state,\r\n redirectTo: null,\r\n clareityUrl: null,\r\n };\r\n case SEARCH_AGENTS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/agent/search',\r\n };\r\n case SEARCH_LISTINGS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/listings/search',\r\n };\r\n case SELECT_AGENT_SUCCESS:\r\n return {\r\n ...state,\r\n redirectTo: '/agent/view',\r\n };\r\n case SELECT_OFFICE_SUCCESS:\r\n return {\r\n ...state,\r\n redirectTo: '/office/view',\r\n };\r\n case VIEW_LISTING_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/listings/view',\r\n };\r\n case MATRIX_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/matrix',\r\n };\r\n case REMAPLIST_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/remaplist',\r\n };\r\n case CREAWEBFORMS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/crea/webforms',\r\n };\r\n case CREADDF_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/crea/ddf',\r\n };\r\n case PROSPECTS_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/prospects',\r\n };\r\n case SPIN_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/spin',\r\n };\r\n case SPACELIST_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/spacelist',\r\n };\r\n case CLOUDCMA_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/cloudcma',\r\n };\r\n case POSTALCODELOOKUP_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/resources/postalcodelookup',\r\n };\r\n case RECA_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/resources/reca',\r\n };\r\n case TRAINING_PAGE_CLICKED:\r\n return {\r\n ...state,\r\n redirectTo: '/resources/training',\r\n };\r\n case OPEN_ALERT:\r\n return {\r\n ...state,\r\n isSwalOpen: true,\r\n };\r\n case CLOSE_ALERT:\r\n return {\r\n ...state,\r\n isSwalOpen: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import transform from 'lodash/transform';\r\nimport isEqual from 'lodash/isEqual';\r\nimport isObject from 'lodash/isObject';\r\nimport API from '../config';\r\n\r\nconst objectCollide = (object, base) => {\r\n const changes = (target, ogObj) => transform(target, (result, value, key) => {\r\n if (!isEqual(value, ogObj[key])) {\r\n // eslint-disable-next-line no-param-reassign\r\n result[key] = (isObject(value) && isObject(ogObj[key])) ? changes(value, ogObj[key]) : value;\r\n }\r\n });\r\n\r\n return changes(object, base);\r\n};\r\n\r\nconst boolToBit = object => {\r\n const newObj = {};\r\n Object.keys(object).map(key => {\r\n if (typeof object[key] === 'boolean') {\r\n newObj[key] = String(Number(object[key]));\r\n } else {\r\n newObj[key] = object[key];\r\n }\r\n return key;\r\n });\r\n return newObj;\r\n};\r\n\r\nconst getImage = (url = '') => `${API.URL}image/getAwsFile?file=${url}`;\r\n\r\nconst getFileFromUrl = (url = '') => {\r\n const urlParts = url.split('/');\r\n return urlParts[urlParts.length - 1 ?? 0];\r\n};\r\n\r\nconst sortFormDefinition = formDefinition => formDefinition.sort((a, b) => {\r\n const x = (a.pageSortOrder - b.pageSortOrder);\r\n if (x === 0) {\r\n return (a.SortOrder - b.SortOrder);\r\n }\r\n return x;\r\n});\r\n\r\nconst getOrderedFormDefinition = formDefinition => {\r\n const sortedDef = sortFormDefinition(formDefinition);\r\n const flags = {};\r\n const unique = sortedDef.filter(item => {\r\n if (flags[item.PageName]) return false;\r\n flags[item.PageName] = true;\r\n return true;\r\n });\r\n return unique.map(item => ({ sectionName: item.PageName, sectionLabel: item.PageLabel }));\r\n};\r\n\r\nconst selectSectionsPerRepeatableSection = (values = {}) => {\r\n const sectionCounts = {};\r\n const countPerSection = {};\r\n\r\n if (values.Rooms) {\r\n sectionCounts.Rooms = Object.keys(values.Rooms).map(key => values.Rooms[key].IsDeleted);\r\n }\r\n if (values.Photos) {\r\n sectionCounts.Photos = Object.keys(values.Photos).map(key => values.Photos[key].IsDeleted);\r\n }\r\n if (values.Supplements) {\r\n sectionCounts.Supplements = Object.keys(values.Supplements).map(key => values.Supplements[key].IsDeleted);\r\n }\r\n\r\n const { Photos = [], Rooms = [], Supplements = [] } = sectionCounts;\r\n\r\n countPerSection.Photos = Photos.filter(photo => !photo);\r\n countPerSection.Rooms = Rooms.filter(room => !room);\r\n countPerSection.Supplements = Supplements.filter(supp => !supp);\r\n return countPerSection;\r\n};\r\n\r\nexport const selectErrors = validationResult => {\r\n const errors = [];\r\n Object.keys(validationResult).map(fieldName => {\r\n const {\r\n id,\r\n isValid,\r\n errorMessage = null,\r\n } = validationResult[fieldName];\r\n\r\n if (!isValid && errorMessage) (errors.push({ [id]: errorMessage }));\r\n return null;\r\n });\r\n return errors;\r\n};\r\n\r\nexport const selectFieldDictionary = formDefinition => {\r\n const dictionary = {};\r\n formDefinition.map(item => {\r\n dictionary[item?.FieldName] = item?.PageName;\r\n return null;\r\n });\r\n return dictionary;\r\n};\r\n\r\nexport const selectErrorsPerSection = (formDefinition, validationResult) => {\r\n const dictionary = selectFieldDictionary(formDefinition);\r\n const errors = selectErrors(validationResult);\r\n\r\n const errorsPerSection = {};\r\n errors.map(error => {\r\n const [fieldName] = Object.keys(error);\r\n const section = dictionary[fieldName];\r\n\r\n if (!errorsPerSection[section]) {\r\n errorsPerSection[section] = [fieldName];\r\n }\r\n // might be replace with else, includes is useless?\r\n if (errorsPerSection[section] && !errorsPerSection[section].includes(fieldName)) {\r\n errorsPerSection[section] = [...errorsPerSection[section], fieldName];\r\n }\r\n return null;\r\n });\r\n return errorsPerSection;\r\n};\r\n\r\nexport const selectRequired = validationResult => {\r\n const required = [];\r\n Object.keys(validationResult).map(fieldName => {\r\n const { id, isRequired } = validationResult[fieldName];\r\n if (isRequired) (required.push(id));\r\n return null;\r\n });\r\n return required;\r\n};\r\n\r\nexport const selectRequiredPerSection = (formDefinition, validationResult) => {\r\n const dictionary = selectFieldDictionary(formDefinition);\r\n const required = selectRequired(validationResult);\r\n const reqPerSection = {};\r\n required.map(req => {\r\n const section = dictionary[req];\r\n\r\n if (!reqPerSection[section]) (reqPerSection[section] = [req]);\r\n if (reqPerSection[section] && !reqPerSection[section].includes(req)) {\r\n reqPerSection[section] = [...reqPerSection[section], req];\r\n }\r\n return null;\r\n });\r\n return reqPerSection;\r\n};\r\n\r\nexport const selectFormStructure = formDefinition => {\r\n const sortedDef = sortFormDefinition(formDefinition);\r\n const structure = {};\r\n sortedDef.map(item => {\r\n if (!structure[item.PageName]) {\r\n structure[item.PageName] = [];\r\n }\r\n structure[item.PageName] = [\r\n ...structure[item.PageName],\r\n { ...item },\r\n ];\r\n return null;\r\n });\r\n return structure;\r\n};\r\n\r\nexport const selectOrderedFields = formDefinition => {\r\n const fieldOrdering = selectFormStructure(formDefinition);\r\n const orderedList = [];\r\n const baseKeys = Object.keys(fieldOrdering);\r\n\r\n baseKeys.map(section => {\r\n // sorting by field's SortOrder\r\n const tempResults = fieldOrdering[section].sort((a, b) => a.SortOrder - b.SortOrder);\r\n orderedList.push(...tempResults);\r\n return null;\r\n });\r\n return orderedList;\r\n};\r\n\r\nexport const getSortedErrors = (formDefinition, validationResult) => {\r\n const orderedErrors = [];\r\n\r\n if (validationResult !== null) {\r\n const orderedFields = selectOrderedFields(formDefinition);\r\n const valKeys = validationResult.map(item => Object.keys(item)[0]);\r\n\r\n if (valKeys.length > 0) {\r\n orderedFields.map(field => {\r\n if (valKeys.includes(field.FieldName)) {\r\n let itemTitle;\r\n const searchableItem = validationResult.find(item => {\r\n [itemTitle] = Object.keys(item);\r\n return field.FieldName === itemTitle;\r\n });\r\n\r\n const { isValid, errorMessage } = searchableItem[itemTitle];\r\n if (!isValid && errorMessage) {\r\n orderedErrors.push({ [itemTitle]: errorMessage });\r\n }\r\n }\r\n return null;\r\n });\r\n if (valKeys.includes('Photos') && validationResult.Photos.errorMessage) {\r\n orderedErrors.push({ Photos: validationResult.Photos.errorMessage });\r\n }\r\n }\r\n }\r\n return orderedErrors;\r\n};\r\n\r\nexport {\r\n objectCollide,\r\n boolToBit,\r\n getImage,\r\n getFileFromUrl,\r\n getOrderedFormDefinition,\r\n selectSectionsPerRepeatableSection,\r\n};\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport ApiService from '@services/apiService';\r\nimport { boolToBit } from '@utils';\r\n\r\nconst LOAD_USER = 'p9/user/LOAD_USER';\r\nconst LOAD_USER_SUCCESS = 'p9/user/LOAD_USER_SUCCESS';\r\nconst LOAD_USER_ERROR = 'p9/user/LOAD_USER_ERROR';\r\n\r\nconst EDIT_USER = 'p9/user/EDIT_USER';\r\nconst EDIT_USER_SUCCESS = 'p9/user/EDIT_USER_SUCCESS';\r\nconst EDIT_USER_ERROR = 'p9/user/EDIT_USER_ERROR';\r\n\r\nconst SET_USER_IDLE_STATUS = 'SET_USER_IDLE_STATUS';\r\n\r\nconst initialState = {\r\n user: null,\r\n userPhoto: null,\r\n loading: true,\r\n error: null,\r\n isIdle: false,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case LOAD_USER:\r\n return {\r\n ...state,\r\n error: false,\r\n loading: true,\r\n };\r\n case LOAD_USER_SUCCESS:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n error: false,\r\n loading: false,\r\n };\r\n case EDIT_USER_SUCCESS:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n ...action.payload.user,\r\n },\r\n userPhoto: [\r\n ...state.userPhoto,\r\n ...action.payload.userPhoto,\r\n ],\r\n };\r\n case LOAD_USER_ERROR:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true,\r\n };\r\n case SET_USER_IDLE_STATUS:\r\n return {\r\n ...state,\r\n isIdle: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst loadUser = () => dispatch => {\r\n dispatch({ type: LOAD_USER });\r\n return ApiService.User.getUser()\r\n .then(result => {\r\n dispatch({\r\n type: LOAD_USER_SUCCESS,\r\n payload: {\r\n user: boolToBit(result.data.agent),\r\n userPhoto: result.data.photos,\r\n },\r\n });\r\n })\r\n .catch(er => {\r\n console.error('Error: User loadUser', er);\r\n dispatch({ type: LOAD_USER_ERROR });\r\n });\r\n};\r\n\r\nconst updateUser = newUserData => dispatch => {\r\n dispatch({ type: EDIT_USER });\r\n return ApiService.User.updateUser(newUserData)\r\n .then(() => {\r\n dispatch({\r\n type: EDIT_USER_SUCCESS,\r\n payload: {\r\n user: newUserData?.agent,\r\n userPhoto: newUserData?.photos || [],\r\n },\r\n });\r\n })\r\n .catch(er => {\r\n console.error('Error: User updateUser', er);\r\n dispatch({ type: EDIT_USER_ERROR });\r\n });\r\n};\r\n\r\nconst setUserIdleStatus = status => dispatch => dispatch({\r\n type: SET_USER_IDLE_STATUS,\r\n payload: status,\r\n});\r\n\r\nexport {\r\n loadUser,\r\n updateUser,\r\n setUserIdleStatus,\r\n};\r\n","import { combineReducers } from 'redux';\r\nimport { routerReducer as router } from 'react-router-redux';\r\n\r\nimport acl from './modules/acl';\r\nimport agent from './modules/agent';\r\nimport audit from './modules/audit';\r\nimport authentication from './reducers/application/Authentication';\r\nimport condo from './reducers/data/Condo';\r\nimport dataPortal from './modules/dataPortal';\r\nimport formGeneration from './modules/formGeneration';\r\nimport listing from './modules/listing';\r\nimport impersonation from './modules/impersonation';\r\nimport office from './modules/office';\r\nimport photo from './modules/photo';\r\nimport rowLock from './modules/rowLock';\r\nimport signalR from './modules/signalR';\r\nimport team from './reducers/data/Team';\r\nimport teamsManagement from './modules/teamsManagement';\r\nimport utility from './modules/utility';\r\nimport user from './modules/user';\r\n\r\nexport default combineReducers({\r\n acl,\r\n agent,\r\n audit,\r\n authentication,\r\n condo,\r\n dataPortal,\r\n formGeneration,\r\n impersonation,\r\n listing,\r\n office,\r\n photo,\r\n rowLock,\r\n signalR,\r\n team,\r\n teamsManagement,\r\n utility,\r\n user,\r\n router,\r\n});\r\n","/* G */\r\nexport const GET_TARGETS = 'GET_TARGETS';\r\nexport const GET_LIST_OF_TEAM = 'GET_LIST_OF_TEAM';\r\nexport const GET_ACTORS = 'GET_ACTORS';\r\n","import { applyMiddleware, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport { routerMiddleware } from 'react-router-redux';\r\nimport { createBrowserHistory } from 'history';\r\nimport { promiseMiddleware, localStorageMiddleware, saveLastViewedEntity } from './middleware';\r\nimport reducer from './reducer';\r\n\r\nconst RouterMiddleware = routerMiddleware(createBrowserHistory());\r\n\r\nconst getMiddleware = () => applyMiddleware(RouterMiddleware, promiseMiddleware, localStorageMiddleware, saveLastViewedEntity, thunk);\r\n\r\nconst store = createStore(\r\n reducer,\r\n composeWithDevTools(getMiddleware()),\r\n);\r\n\r\nexport default store;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACACAIAAADBMbHIAAAACXBIWXMAAAnYAAAJ2AHHoLmtAAALmklEQVR42u2d62/a1hvHbYwxF9MEGjAkhLCQdMlCm6ZRtU2btr7a/7R/rZqUTV1VbUlz1WhQLjhgwFwCMcHmZuzfi6NZHrm03ZL+kvL9vALj2MR8eJ7jc55zoBtnioOmKQBuDsM0nTRFwStws9Am5cBVALeBw+FAvAI3bhWNiAVuxy1cAgCxAMQCEAsAiAUgFoBYAEAsALEAxAIAYgGIBSAWABALQCwAsQCAWABiAYgFAMQCEAtALAAgFoBYAGIB8F9wjux/riiKJEn9fv+Wju9yuaanp/1+/2heXrrZbI7gv10sFnd2dkzTvN104HCsrq6GQiGkwpHAMIx0On3bVpET/fXXX5/gREiFd4JWq9Xr9chjr9fLcdyNn6LT6bTbbYqiNE3rdrtutxtiff7YQ8jKysrY2NiNn6Jara6vr188HVIhAIhYN0S3263VagzDhEIhhmFwQSDWDVCv1zc2NnRdpyjK5/N98803t9H2QiocOd69e0esoihKVdXj4+Prb/cqlYphGLhuiFjvQVXVa54OWbW9vS3LsiAIKysrDge+nIhYV/PgwYNrntqt2trakmWZoqhyuby1tYW4BbGuI5VKeTwe8jgYDM7Ozl5lVblctrbALaTC98Dz/I8//qgoCsMwl4ari1bZ3UJORMS6+lo4HIFA4KOsQtyCWB/K8fHx0dHRh1tlubW5uQm3kAovJ5PJEKt6vd7i4uIHWkWoVCrValUQBFxGiPUP9vf3re6rbDZrmubCwsLm5malUsHFgVj/ElmWhzpFRVEsl8ukSAGgjfUvubSUFFZBLIBUeCdxu93/vYbY5XLhSkKsfxAKhUazOB2pEECs+8MtdWmOZjnyqKdC+6De+vr6bRSLWqVdQ6eDWJ8zPM97PB7SlaDrul2CG8fv949mJeoofploml5eXnY6b/1L5XK5lpeXRzMVjuhMaIqiut2uLMvWBMMbh+O4SCQysh0QoysWQCoEEAsAiAUgFoBYAEAsALEAxAIQC5cAQCxwb7jf1Q2yLKuqmkwmKYoql8uKokSj0aEVsI+Pj3Vdn5ubs5ev5HK5brebTCaHaloGg4Esy2SYy+/3C4LAsixFUa1Wq1gsDp19enraWu6Boqjz8/NSqRSJROxzqY+OjnietyYbkvWPzs7ODMPw+XzRaJQMJpZKpfPz86Hj+/3+aDQKsf4PVCqVSqViiSVJkqIoz58/t3ao1Wr7+/sURc3OzloOaZpGFjP2+XyTk5PWzqenp9vb271ej+d5iqJEUXz37t2zZ88ePnyoqurh4aHb7baLKAjCkFiHh4fFYvG7774jOpKDCIJAxFJV9e3bt61Wy+v1MgyTy+UymUwqlZqcnKzX69VqlaKoTqdDURRZDDcUCkGsOwFN09Vq9ezsbHx8nGw5PDykaXqonlMURY7j3G53Npu1xFJVdWNjg6zl5/P5yGd8dHRkX/p2ZWUlEAhc/x40Tdvb23v27NnQdl3X//zzT8Mwvv7664cPH5Lj7+zs7OzsuN3upaUlstubN28oivr222/RxrpD+Hw+v99/cHBgRaB6vT70pe/3+5IkxePxRCKhKEqj0bAypmmaq6urxCoSNpaWlj62bCsSiciyLIri0PZCodBut588eUKsIsdfXV1lWfbw8BBtrLsesebm5ra2tkjQOjg4GB8fn5iYsDeP8vm8YRjxeNzpdJKgRYJQo9EIBAL21HaRTCZj1Vc9ePBgbm7u4j7JZFLX9f39/UAgYI92jUaDZdmhiUBOpzMUCpFl3HBXeKeJRCI8zx8cHJBwNT8/b3/VNM2TkxPSZHY4HPF43D6JnqbpoaO9efPGHntM0zT+5qrpEqQ8lWXZra2todnVF49vHRYR634Ere3tbVVVx8fHQ6GQJEnWq6VSqd1un56evnr1itwDmqYpiuLi4uLY2Jgsy91u116i3u127RXxCwsL721jURTFcdzKysoff/yxu7trSTM2NlYsFuv1ejAYtN+E1mo1q0WIiHWniUajPM9rmnYxVYmiyPP81NRUOBwOh8PRaDQQCEiSpOv67OysaZqbm5vkvoy0xgaDwb97D8FgcH5+vlwuW6XPsViM47idnR2rZLff729vb3e73UtTKiLWXQxai4uL1Wo1HA7bE1Cj0Tg7O1teXp6amrJ2VhTl9evXkiQlEomnT5/u7u7++uuvJIQoimKaJul6IOzt7dnb8slk8prVsJLJZL1er9Vq5CnLss+fP9/Y2Hj9+vXY2BjDMIqiGIaRSqUmJiY+v0+B+fnnn+/vu9d1neM40iLWdd3tdpNE4/P5rGayYRg0TYfD4bOzM47jvvjiC3tbx+12m6ZJ03QgEOB5PhaLuVyuwWDAsuzk5OSTJ0+IZCSjeTwezsZQY38wGNA0HQqFiHzksa7rwWCQ9NlyHEf6VA3DcDgcgiA8fvx4yKp+v8/z/Ick3Lv+9cZkCoA2FoBYAGIBALEAxAIjzOfTj3VycpJOp+PxOKkU6Pf7a2tr0Wj08ePH1j7dbndtbW12dvbRo0cURXU6nd9++41l2RcvXlj1MIZhvHz5kuwzGAxevnw5Pz9/aR+mJEl7e3uTk5P2lT/Ir1RYT1mWDYfDi4uLTqez0+msra0tLi4mEgl7/8Ivv/wydOQvv/zy0h/zgVifGjIywzCMJEmPHj1iWZZlWUEQSqUS+VDJboVCwTTN6elpy0WiV6lUsnpNTdO0D94NPbVDzlgqlRYWFqyBIDKeODc35/V6TdNsNpsnJyc0TadSKeqKYUHTNAVBsI9PfwaDPJ9JKqxUKqqqLi8vG4aRz+fJxng8ruu6vXZAkqSJiQnSqzkYDPL5fCKRCAaD2Wz2Y894enrabDZJrCKC2gmHw7FYbHp6emlpyefzXfPrh5ZJcRtX/agdxPrUZLPZYDBIajVFUSSBgXSmW541Go1WqxWPx63o1e/3Z2ZmZmZmms1mvV7/2DOOjY0JghCNRnO53NCoYqvVUhRFUZSTkxNN0+yDSJfS6/XUv9E0DW2sO4GiKPV6nRRtzszMyLJcKpVIaWg8Hk+n06qq+ny+fD7vdrvJAKJpmtlsVhAEt9sdiURIYZa97uB6Wq1WtVolrbdEIlEoFIrFopVhKYra3d21HgeDwfeux5zNZq2o6XQ6f/rpJ4h1J8IVwzA0TZMfvXG5XKIoErGmpqYymYwkSclkUpZla6CwWq2qqhqNRsmfjI+Pl8tlTdO8Xu+HnFEURZqmnU4n+XO32y2Kol2sp0+fknSmaVo6nV5fX//++++vOWA8HreKpK8q24JYn5ROpyPLsmEYb9++tWcWUhHKsmwkEikUCh6PZzAYWJ89CQ9DNcGiKH711VfvPWOv1ysUCoZhbG5u2t9GrVazRpS9Xi8pi+B5vtFoHB0dXb90oMfj+fB4CbE+US8DRVEvXrywJsYYhvHq1StRFEmNQDweLxQKmUyGJD6KoprN5unp6dLSkn2KTjqdJneUFwOGpmlW9YvP5yNW/fDDD/Y7wd9//z2bzVpinZ+fk3aeqqqSJHEcx7Jst9sladQ6Gs/zZM3mdrttb+RxHGeV3kOs/wODwSCXy0Wj0aEUFovFstlsu932eDyBQMDv95+fn1vNdlEUWZaNxWL2hbhJUymfz1u7WRQKhUKhQB7Pz8/n83lBEOx1WkTfg4ODVqtFnu7t7Vkv+f3+VCpl+ZrL5XK5HHmcSqXIXA/7RpLB7/uquPe7bMYwjE6n43K5hubSDAYDUmRM1On1erquW/K1222Hw3FxlWxN0xiG4ThO0zTSE0Y2/uOL6HTqun7VGV0uF03T9qzHMIw1/8I0zaGfE3O5XAzDXPyNMafTed9XxUU9FkA/FoBYAGIBALEAxAIQCwCIBSAWgFgAQCwAsQDEAgBiAYgFIBYAEAtALACxAIBYAGIBiAUAxAIQC0AsACAWgFgAYgEAsQDEAiMhlmGYuArgZjEMExEL3ApOwzQpA9cB3GjEMs3/AR2qreeQTZ43AAAAAElFTkSuQmCC\"","import { createSelector } from 'reselect';\r\nimport { getImage } from '@utils';\r\nimport photoPlaceholder from '@images/image-not-available.png';\r\n\r\nexport const getUser = createSelector(({ user }) => user.user, result => result);\r\nexport const getLoadingState = createSelector(({ user }) => user.loading, result => result);\r\nexport const getUserName = createSelector(getUser, getLoadingState, (user, loading) => {\r\n if (loading) return null;\r\n return `${user?.MemberFirstName} ${user?.MemberLastName}`;\r\n});\r\n\r\nexport const getUserId = createSelector(getUser, getLoadingState, (user, loading) => {\r\n if (loading) return null;\r\n return user?.UniqueID;\r\n});\r\n\r\nexport const getUserMlsId = createSelector(getUser, getLoadingState, (user, loading) => {\r\n if (loading) return null;\r\n return user?.MemberMlsId;\r\n});\r\n\r\nexport const getUserAvatar = createSelector(({ user }) => user.userPhoto, getLoadingState, (photo, loading) => {\r\n if (loading) return null;\r\n const [preferredImage] = photo?.filter(p => p?.PreferredPhotoYN) ?? [];\r\n if (!preferredImage) return photoPlaceholder;\r\n return getImage(preferredImage?.URL);\r\n});\r\n\r\nexport const getUserIdleStatus = createSelector(({ user }) => user.isIdle, result => result);\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const getSearchImpersonationResults = ({ impersonation }) => impersonation.impersonationAgentSearchResults;\r\n\r\nexport const getAgentSelected = ({ agent }) => agent.agentSelected;\r\n\r\nexport const getAllowedUsers = ({ impersonation }) => impersonation?.allowedUsers;\r\n\r\nexport const selectStatus = ({ impersonation }) => impersonation?.status;\r\n\r\nexport const selectIsImpersonating = ({ impersonation }) => impersonation?.isImpersonating;\r\n\r\nexport const getImpersonationTargets = ({ impersonation }) => impersonation?.impersonationTargets;\r\n\r\nexport const getImpersonationStateChange = ({ impersonation }) => impersonation?.impersonationStateChange;\r\n\r\nexport const getImpersonationStatus = createSelector(\r\n selectStatus,\r\n impersonationStatus => {\r\n const structure = {};\r\n\r\n if (impersonationStatus?.ImpersonationActive) {\r\n structure.memberMlsId = impersonationStatus?.ImposterName;\r\n structure.memberFullName = impersonationStatus?.memberFullName;\r\n structure.memberAOR = impersonationStatus?.memberAOR;\r\n structure.memberUniqueID = impersonationStatus?.memberUniqueID;\r\n }\r\n structure.ImpersonationActive = impersonationStatus?.ImpersonationActive;\r\n return structure;\r\n },\r\n);\r\n\r\n// retrieves impersonated user by check that impersonation is active and status ID matches the selected user\r\n// export const getImpersonatedUser = createSelector(\r\n// selectStatus,\r\n// selectIsImpersonating,\r\n// (status, target) => {\r\n// const structure = {};\r\n// if (status?.ImpersonationActive && target\r\n// && target?.memberMlsId.toUpperCase() === status.ImposterName) {\r\n\r\n// }\r\n// },\r\n// );\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const getFieldPermissions = createSelector(({ acl }) => acl.fieldPermissions, result => result);\r\n\r\nexport const getFormActions = createSelector(({ acl }) => acl.formActions, result => result);\r\n\r\nexport const getAclString = createSelector(({ acl }) => acl.aclString, result => result);\r\n\r\nexport const getMainActions = createSelector(({ acl }) => acl.mainActions, result => result);\r\n\r\nexport const getFormPermissions = createSelector(({ acl }) => acl.formPermissions, result => result);\r\n\r\nexport const getPagePermissions = createSelector(({ acl }) => acl.pagePermissions, result => result);\r\n\r\nexport const getError = createSelector(({ acl }) => acl.error, result => result);\r\n\r\nexport const getLoading = createSelector(({ acl }) => acl.loading, result => result);\r\n\r\nexport const getMultiLoading = createSelector(({ acl }) => acl.actionLoadingStatuses, result => result);\r\n\r\nexport const getCompleted = createSelector(({ acl }) => acl.actionsComplete, result => result);\r\n","import { useEffect, useState, useMemo } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport {\r\n clearAclDetails,\r\n clearAclLoadingStatuses,\r\n clearAclCompleted,\r\n getAclDetails,\r\n getMainAclDetails,\r\n setMultiLoadingStatus,\r\n setActionCompleted,\r\n} from '@redux/modules/acl';\r\n\r\nimport {\r\n getCompleted,\r\n getFieldPermissions,\r\n getFormActions,\r\n getAclString,\r\n getFormPermissions,\r\n getMainActions,\r\n getPagePermissions,\r\n getError,\r\n getMultiLoading,\r\n} from '@redux/selectors/AclSelector';\r\n\r\nconst useAcl = () => {\r\n const dispatch = useDispatch();\r\n const fieldPermissions = useSelector(getFieldPermissions);\r\n const formActions = useSelector(getFormActions);\r\n const aclString = useSelector(getAclString);\r\n const formPermissions = useSelector(getFormPermissions);\r\n const mainActions = useSelector(getMainActions);\r\n const pagePermissions = useSelector(getPagePermissions);\r\n const isAclError = useSelector(getError);\r\n\r\n const isMultiLoading = useSelector(getMultiLoading);\r\n const isAclCompleted = useSelector(getCompleted);\r\n const [aclInitialized, setAclInitialized] = useState(true);\r\n\r\n const getListingAcl = requestDetails => {\r\n dispatch(getAclDetails('listing', requestDetails));\r\n };\r\n\r\n const getAgentAcl = requestDetails => {\r\n const actionName = `${requestDetails.formname}${requestDetails.action}`;\r\n const loadingStatus = { [actionName]: true };\r\n const completeStatus = { [actionName]: false };\r\n dispatch(getAclDetails('agentACL', requestDetails));\r\n dispatch(setMultiLoadingStatus(loadingStatus));\r\n dispatch(setActionCompleted(completeStatus));\r\n };\r\n\r\n const getOfficeAcl = requestDetails => {\r\n dispatch(getAclDetails('officeACL', requestDetails));\r\n };\r\n\r\n const getMainAcl = requestDetails => {\r\n dispatch(getMainAclDetails('mainACL', requestDetails));\r\n };\r\n\r\n const clearAcl = () => {\r\n dispatch(clearAclDetails());\r\n };\r\n\r\n const clearMultiStatus = () => {\r\n dispatch(clearAclLoadingStatuses());\r\n };\r\n\r\n const clearAclCompletedLog = () => {\r\n dispatch(clearAclCompleted());\r\n };\r\n\r\n const aclIsEmpty = useMemo(() => aclString === '', [aclString]);\r\n\r\n const is3rdPartyDataPortalAggregateUser = useMemo(() => aclString.includes('DPA') && !aclString.includes('DPT'), [aclString]);\r\n\r\n const is3rdPartyDataPortalTransactionalUser = useMemo(() => aclString.includes('DPT'), [aclString]);\r\n\r\n const is3rdPartyDataPortalUser = useMemo(() => is3rdPartyDataPortalAggregateUser || is3rdPartyDataPortalTransactionalUser, [is3rdPartyDataPortalAggregateUser, is3rdPartyDataPortalTransactionalUser]);\r\n\r\n const isAdmin = useMemo(() => aclString.includes('ADMIN'), [aclString]);\r\n\r\n const isAllComplete = () => {\r\n const completeCalls = isAclCompleted;\r\n if (Object.keys(completeCalls).length === 0) return false;\r\n const completeStatus = !(Object.values(completeCalls).includes(false));\r\n return completeStatus;\r\n };\r\n\r\n const isBroker = useMemo(() => aclString.includes('BROKER'), [aclString]);\r\n\r\n const isLoadingMultiple = () => {\r\n const loadingStatus = isMultiLoading;\r\n const loadingValues = Object.values(loadingStatus);\r\n const isLoadingTrueFound = loadingValues.includes(true);\r\n return isLoadingTrueFound;\r\n };\r\n\r\n /* Clear ACL details on un-mount. */\r\n useEffect(() => {\r\n clearAcl();\r\n clearAclCompleted();\r\n clearMultiStatus();\r\n }, []);\r\n\r\n useEffect(() => {\r\n setAclInitialized(true);\r\n }, []);\r\n\r\n return {\r\n aclInitialized,\r\n canEditForm: formActions?.EDIT ?? false,\r\n canCopyForm: formActions?.COPY ?? false, // listings only\r\n canAuditForm: formActions?.AUDITLOG ?? false, // listings only\r\n canViewForm: formActions?.VIEW ?? false,\r\n canViewTeam: formActions?.VIEWTEAM ?? false, // agents only\r\n canEditTeam: formActions?.EDITTEAM ?? false, // agents only\r\n canAddTeamMember: formActions?.ADDTEAMMEMBER ?? false, // agents only\r\n canAddToTeam: formActions?.ADDTOTEAM ?? false, // agents only\r\n fieldPermissions,\r\n formActions,\r\n aclString,\r\n formPermissions,\r\n mainActions, // homepage only\r\n pagePermissions,\r\n aclIsEmpty,\r\n is3rdPartyDataPortalAggregateUser,\r\n is3rdPartyDataPortalTransactionalUser,\r\n is3rdPartyDataPortalUser,\r\n isAdmin,\r\n isAclError,\r\n isAllComplete,\r\n isBroker,\r\n isLoadingMultiple,\r\n clearMultiStatus,\r\n clearAclCompletedLog,\r\n getListingAcl,\r\n getAgentAcl,\r\n getOfficeAcl,\r\n getMainAcl,\r\n };\r\n};\r\n\r\nexport default useAcl;\r\n","import ReactGA from 'react-ga';\r\n\r\nconst useAnalyticsEventTracker = (category = 'general') => {\r\n const eventTracker = (action = 'test action', label = 'test label') => {\r\n ReactGA.event({ category, action, label });\r\n };\r\n return eventTracker;\r\n};\r\n\r\nexport default useAnalyticsEventTracker;\r\n","import React, { useState } from 'react';\r\nimport { ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nfunction FontSettings() {\r\n const [radioValue, setRadioValue] = useState(false);\r\n const gaEventTracker = GAEventTracking('Settings');\r\n\r\n const changeFont = selectedValue => {\r\n document.documentElement.className = '';\r\n if (selectedValue === 'small') {\r\n document.documentElement.classList.add('root-text-sm');\r\n localStorage.setItem('font', 'small');\r\n gaEventTracker('Change Font Size', 'Font Size Small');\r\n }\r\n if (selectedValue === 'medium') {\r\n document.documentElement.classList.add('root-text-md');\r\n localStorage.setItem('font', 'medium');\r\n gaEventTracker('Change Font Size', 'Font Size Medium');\r\n }\r\n if (selectedValue === 'large') {\r\n document.documentElement.classList.add('root-text-lg');\r\n localStorage.setItem('font', 'large');\r\n gaEventTracker('Change Font Size', 'Font Size Large');\r\n }\r\n };\r\n return (\r\n <>\r\n
Font Size
\r\n
\r\n \r\n {\r\n setRadioValue(e.currentTarget.value);\r\n }}\r\n >\r\n \r\n \r\n {\r\n setRadioValue(e.currentTarget.value);\r\n }}\r\n >\r\n \r\n \r\n {\r\n setRadioValue(e.currentTarget.value);\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default FontSettings;\r\n","import React, { useState } from 'react';\r\nimport { ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nfunction ThemeSettings() {\r\n const [radioValue, setRadioValue] = useState(false);\r\n const gaEventTracker = GAEventTracking('Settings');\r\n\r\n const changeTheme = () => {\r\n if (document.body.classList.contains('mod-skin-dark')) {\r\n document.body.classList.add('mod-skin-light');\r\n document.body.classList.remove('mod-skin-dark');\r\n localStorage.setItem('theme', 'light');\r\n gaEventTracker('Change Theme', 'Theme Light Mode');\r\n } else {\r\n document.body.classList.add('mod-skin-dark');\r\n document.body.classList.remove('mod-skin-light');\r\n localStorage.setItem('theme', 'dark');\r\n gaEventTracker('Change Theme', 'Theme Dark Mode');\r\n }\r\n };\r\n const lightStyle = {\r\n '--fa-primary-color': 'var(--theme-secondary)',\r\n '--fa-secondary-color': 'var(--lightBackground-2)',\r\n '--fa-primary-opacity': 1,\r\n '--fa-secondary-opacity': 1,\r\n };\r\n const darkStyle = {\r\n '--fa-primary-color': 'var(--darkBackground-3)',\r\n '--fa-secondary-color': 'var(--darkBackground-1)',\r\n '--fa-primary-opacity': 1,\r\n '--fa-secondary-opacity': 1,\r\n };\r\n return (\r\n <>\r\n
Theme
\r\n
\r\n \r\n {\r\n setRadioValue(e.currentTarget.value);\r\n }}\r\n >\r\n \r\n \r\n {\r\n setRadioValue(e.currentTarget.value);\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default ThemeSettings;\r\n","import React from 'react';\r\n\r\nfunction VersionBuild() {\r\n return (\r\n

\r\n {`Version ${process.env.REACT_APP_VERSION} Build ${process.env.REACT_APP_BUILD}`}\r\n

\r\n );\r\n}\r\n\r\nexport default VersionBuild;\r\n","import React, { useState } from 'react';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nimport FontSettings from './FontSettings';\r\nimport ThemeSettings from './ThemeSettings';\r\nimport VersionBuild from './VersionBuild';\r\n\r\nconst SettingsModal = () => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const gaEventTracker = GAEventTracking('Settings');\r\n\r\n const showModal = e => {\r\n e.preventDefault();\r\n e.currentTarget.blur();\r\n setIsOpen(true);\r\n gaEventTracker('Open Settings', 'Open settings modal');\r\n };\r\n\r\n const hideModal = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n Settings}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n

\r\n Layout Settings\r\n User Interface Settings\r\n

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SettingsModal;\r\n","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { getImpersonationStatus } from '@redux/selectors/ImpersonationSelector';\r\nimport { stopImpersonation } from '@redux/modules/impersonation';\r\nimport { LOGOUT } from '@redux/constants/ActionTypes';\r\nimport { setCurrentAgent } from '@redux/modules/agent';\r\nimport {\r\n getUserAvatar,\r\n getUserName,\r\n getUser,\r\n getLoadingState,\r\n} from '@redux/selectors/UserSelector';\r\n\r\nimport agent from '@services/apiService';\r\n\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Settings from './Settings/SettingsModal';\r\n\r\nconst TopBar = () => {\r\n const { is3rdPartyDataPortalUser } = useAcl();\r\n const dispatch = useDispatch();\r\n const history = useHistory(); // use for redirection\r\n const isLoading = useSelector(getLoadingState);\r\n const status = useSelector(getImpersonationStatus);\r\n const username = useSelector(getUserName);\r\n const user = useSelector(getUser);\r\n const userAvatar = useSelector(getUserAvatar);\r\n\r\n // const isAdmin = useMemo(() => aclString.includes('ADMIN'), [aclString]);\r\n const logoutClicked = () => dispatch({ type: LOGOUT, payload: agent.Auth.Logout() });\r\n const profilePageClicked = () => {\r\n if (user) {\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [\r\n {\r\n name: 'UniqueID',\r\n value: user.UniqueID,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n dispatch(setCurrentAgent(jsonBody)); // set agent to the current user/agent uniqueID\r\n history.push('/agent/view'); // redirect user to agent view page\r\n }\r\n };\r\n\r\n const impersonationHeader = (\r\n \r\n {username}\r\n , logged in as\r\n {' '}\r\n \r\n {status.memberFullName}\r\n {' '}\r\n (\r\n {status.memberMlsId}\r\n )\r\n \r\n \r\n );\r\n\r\n const handleStopClick = () => dispatch(stopImpersonation());\r\n\r\n if (isLoading) return null;\r\n return (\r\n
\r\n
\r\n {status.ImpersonationActive ? (\r\n <>{impersonationHeader}\r\n ) : (\r\n {username}\r\n )}\r\n
\r\n {status.ImpersonationActive && (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Stop Impersonating\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {username}\r\n
\r\n \r\n {user?.MemberEmail}\r\n \r\n
\r\n
\r\n
\r\n {!is3rdPartyDataPortalUser && (\r\n <>\r\n
\r\n
\r\n \r\n Profile\r\n
\r\n \r\n \r\n Impersonate\r\n
\r\n \r\n )}\r\n
\r\n
\r\n \r\n Logout\r\n
\r\n
\r\n
\r\n \r\n Logout}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default TopBar;\r\n","import React, { useState } from 'react';\r\nimport { Icon } from '@iconify/react';\r\n\r\nconst NavToggle = () => {\r\n const [menuFlip, setMenuFlip] = useState(false);\r\n const minifySidebar = e => {\r\n e.preventDefault();\r\n if (document.body.classList.contains('nav-function-minify')) {\r\n document.body.classList.remove('nav-function-minify');\r\n document.body.classList.remove('mod-hide-info-card');\r\n setMenuFlip(false);\r\n } else {\r\n document.body.classList.add('nav-function-minify');\r\n document.body.classList.add('mod-hide-info-card');\r\n setMenuFlip(true);\r\n }\r\n };\r\n const mobileNavOn = e => {\r\n e.preventDefault();\r\n if (document.body.classList.contains('mobile-nav-on')) {\r\n document.body.classList.remove('mobile-nav-on');\r\n } else {\r\n document.body.classList.add('mobile-nav-on');\r\n }\r\n };\r\n return (\r\n <>\r\n
\r\n \r\n { menuFlip ? : }\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default NavToggle;\r\n","import React from 'react';\r\n\r\nimport TopBar from '@components/general/topBar/TopBar';\r\nimport NavToggle from '@components/general/sideBar/NavToggle';\r\n\r\nconst Header = () => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\nexport default Header;\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n// import Button from './Button';\r\n\r\n/*\r\n Modal Types:\r\n - Basic\r\n - default (small, normal, large)\r\n - centered (small, normal, large)\r\n - Side\r\n - right (small, normal, large)\r\n - left (small, normal, large)\r\n - top side\r\n - bottom side\r\n - Modifications\r\n - full screen\r\n - alert\r\n - transparent backdrop\r\n - Transparent (tinted)\r\n - Default (normal, centered)\r\n - Left & Right (left, right)\r\n - top\r\n - bottom\r\n*/\r\n/*\r\n Modal toggle is controlled by data-target and data-toggle=\"modal\" attributes\r\n i.e no booleans are required since js controls this behavior as well as closing when click outside of modal\r\n\r\n \r\n\r\n onClick/onBlur/etc events are part of {..props} and don't need to be included as individual props\r\n If styling attributes are not included, the button type is set to 'button' with \"primary\" styling\r\n Spacing of mr-1 (margin right 1px) set for better visual appeal\r\n\r\n Optional: Additional styling rules can be added to variant\r\n ie. variant=\"primary btn-block\" to set 100% width button\r\n*/\r\nconst CustomButton = ({\r\n bareButton,\r\n children,\r\n disabled,\r\n type = 'button',\r\n variant = 'primary',\r\n className = '',\r\n tooltipText = null,\r\n tooltipPlacement = 'top',\r\n tooltipTrigger = ['hover', 'focus'],\r\n onClick = () => null,\r\n ...rest\r\n}) => {\r\n const button = (\r\n \r\n {children}\r\n \r\n );\r\n\r\n return (\r\n tooltipText\r\n ? (\r\n {tooltipText}}\r\n >\r\n {button}\r\n \r\n )\r\n : button\r\n );\r\n};\r\n\r\nCustomButton.propTypes = {\r\n bareButton: PropTypes.bool,\r\n children: PropTypes.node,\r\n disabled: PropTypes.bool,\r\n type: PropTypes.oneOf(['button', 'submit']),\r\n className: PropTypes.string,\r\n variant: PropTypes.string,\r\n tooltipText: PropTypes.string,\r\n tooltipPlacement: PropTypes.string,\r\n tooltipTrigger: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.array,\r\n ]),\r\n onClick: PropTypes.func,\r\n};\r\n\r\nexport default CustomButton;\r\n","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nimport {\r\n startImpersonation,\r\n stopImpersonation,\r\n} from '@redux/modules/impersonation';\r\nimport {\r\n selectStatus,\r\n} from '@redux/selectors/ImpersonationSelector';\r\n\r\nconst TeamMemberRowActionButtons = ({\r\n showDeleteButton = true,\r\n onDeleteRow,\r\n showStartImpersonationButton = false,\r\n currRow,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const status = useSelector(selectStatus);\r\n const isImposter = target => status?.ImposterName?.toUpperCase() === target.memberMlsId.toUpperCase();\r\n\r\n const gaEventTracker = GAEventTracking('Impersonate');\r\n\r\n const handleDelete = () => onDeleteRow(currRow);\r\n const handleStartImpersonation = () => {\r\n dispatch(startImpersonation({ memberMlsId: currRow.TeamLeadMlsId }));\r\n gaEventTracker('Start Impersonate', `${currRow.TeamMemberFullName} Impersonating ${currRow.TeamLeadFullName} (${currRow.TeamLeadMlsId})`);\r\n };\r\n const handleStopImpersonation = () => {\r\n dispatch(stopImpersonation());\r\n };\r\n\r\n return (\r\n <>\r\n {showDeleteButton && (\r\n \r\n \r\n \r\n )}\r\n {showStartImpersonationButton && !isImposter({ memberMlsId: currRow.TeamLeadMlsId }) && (\r\n \r\n \r\n \r\n )}\r\n {isImposter({ memberMlsId: currRow.TeamLeadMlsId }) && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTeamMemberRowActionButtons.propTypes = {\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteRow: PropTypes.func,\r\n showStartImpersonationButton: PropTypes.bool,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n TeamLeadMlsId: PropTypes.string,\r\n TeamLeadFullName: PropTypes.string,\r\n TeamMemberFullName: PropTypes.string,\r\n }),\r\n};\r\n\r\nexport default TeamMemberRowActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport TeamMemberRowActionButtons from '@components/table/actionButtons/TeamMemberRowActionButtons';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Stack from '@mui/material/Stack';\r\n\r\nconst TeamLeadersTable = ({\r\n id = 'teamLeadersTable',\r\n displayData,\r\n showDeleteButton = true,\r\n onMemberDelete,\r\n showStartImpersonationButton = false,\r\n isModal = false,\r\n}) => {\r\n const onDeleteRow = row => onMemberDelete(row);\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const columns = [\r\n {\r\n dataField: 'TeamLeadFullName',\r\n text: 'Name',\r\n formatter: cell => (\r\n \r\n \r\n {cell}\r\n \r\n ),\r\n sort: true,\r\n headerStyle: { width: '175px' },\r\n },\r\n {\r\n dataField: 'TeamLeadMlsId',\r\n text: 'MLS ID',\r\n sort: true,\r\n headerStyle: { width: '65px' },\r\n },\r\n {\r\n dataField: 'TeamLeadOfficeName',\r\n text: 'Office',\r\n sort: true,\r\n },\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '30px' },\r\n },\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'TeamLeadFullName',\r\n order: 'desc',\r\n }];\r\n\r\n /*\r\n Buttons on the bottom left of the table that allow the user to\r\n decide on how many rows per page should be shown at one time.\r\n */\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
\r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n 10 ? paginationFactory(options) : null}\r\n />\r\n );\r\n};\r\n\r\nTeamLeadersTable.propTypes = {\r\n id: PropTypes.string,\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n showDeleteButton: PropTypes.bool,\r\n onMemberDelete: PropTypes.func,\r\n showStartImpersonationButton: PropTypes.bool,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default TeamLeadersTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\n/*\r\ncard is a lightweight version of 'panel'\r\ncard header, title and footer are optional fields and won't render if empty / missing\r\n\r\ncard src: adds an image at the top of the card\r\nNOTE: the width of the card will match the image width\r\ncard alt: description of the image\r\n\r\ncard header: section at the top of the card\r\ncard title: header inside card body; if missing then only the card body will render\r\ncard body: main content\r\ncard footer: section at the bottom of the card\r\n\r\ncustomClass: Allows a custom class styling for the card component, if provided as a prop\r\ncustomHeader: Allows custom class styling for the header, if provided as a prop\r\n*/\r\n\r\nconst Card = props => {\r\n const {\r\n children, customClass, customBodyClass, customHeader, header, footer, title,\r\n alt, src, id,\r\n } = props;\r\n return (\r\n
\r\n {!isEmpty(src) ? {alt} : null}\r\n {!isEmpty(header) ?
{header}
: null}\r\n {!isEmpty(title)\r\n ? (\r\n
\r\n
\r\n {title}\r\n
\r\n
{children}
\r\n
\r\n )\r\n : (\r\n
\r\n
{children}
\r\n
\r\n )}\r\n {!isEmpty(footer) && footer !== null\r\n ?
{footer}
: null}\r\n
\r\n );\r\n};\r\n\r\nCard.propTypes = {\r\n alt: PropTypes.string,\r\n children: PropTypes.node,\r\n customClass: PropTypes.string,\r\n customBodyClass: PropTypes.string,\r\n customHeader: PropTypes.string,\r\n header: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.shape(),\r\n ]),\r\n footer: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.node,\r\n ]),\r\n src: PropTypes.string,\r\n title: PropTypes.string,\r\n id: PropTypes.string,\r\n};\r\n\r\nCard.defaultProps = {\r\n alt: null,\r\n customClass: '',\r\n customHeader: '',\r\n customBodyClass: '',\r\n header: null,\r\n footer: null,\r\n src: null,\r\n title: null,\r\n id: null,\r\n};\r\n\r\nexport default Card;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport TeamMemberRowActionButtons from '@components/table/actionButtons/TeamMemberRowActionButtons';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Stack from '@mui/material/Stack';\r\n\r\nconst TeamMembersTable = ({\r\n id = 'teamMembersTable',\r\n displayData,\r\n onMemberDelete,\r\n showDeleteButton = true,\r\n isModal = false,\r\n}) => {\r\n const onDeleteRow = row => onMemberDelete(row);\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const columns = [\r\n {\r\n dataField: 'TeamMemberFullName',\r\n text: 'Name',\r\n formatter: cell => (\r\n \r\n \r\n {cell}\r\n \r\n ),\r\n sort: true,\r\n headerStyle: { width: '175px' },\r\n },\r\n {\r\n dataField: 'TeamMemberMlsId',\r\n text: 'MLS ID',\r\n sort: true,\r\n headerStyle: { width: '65px' },\r\n },\r\n {\r\n dataField: 'TeamMemberOfficeName',\r\n text: 'Office',\r\n sort: true,\r\n },\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '30px' },\r\n },\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'TeamMemberMlsId',\r\n order: 'desc',\r\n }];\r\n\r\n /*\r\n Buttons on the bottom left of the table that allow the user to\r\n decide on how many rows per page should be shown at one time.\r\n */\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
\r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n 10 ? paginationFactory(options) : null}\r\n />\r\n );\r\n};\r\n\r\nTeamMembersTable.propTypes = {\r\n id: PropTypes.string,\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onMemberDelete: PropTypes.func,\r\n showDeleteButton: PropTypes.bool,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default TeamMembersTable;\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { getStatus } from '@redux/modules/impersonation';\r\nimport {\r\n selectIsImpersonating,\r\n getImpersonationStateChange,\r\n} from '@redux/selectors/ImpersonationSelector';\r\n\r\nimport {\r\n selectCanImpersonate,\r\n selectCanBeImpersonatedBy,\r\n} from '@redux/selectors/TeamsManagementSelector';\r\nimport { getUser } from '@redux/selectors/UserSelector';\r\nimport { searchTeamMember } from '@redux/modules/teamsManagement';\r\n\r\nimport TeamLeadersTable from '@components/table/TeamLeadersTable';\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport TeamMembersTable from '../../table/TeamMembersTable';\r\n\r\nconst ListingImpersonation = () => {\r\n const isImpersonationStateChange = useSelector(getImpersonationStateChange);\r\n const isImpersonating = useSelector(selectIsImpersonating);\r\n const canImpersonateData = useSelector(selectCanImpersonate);\r\n const canBeImpersonatedByData = useSelector(selectCanBeImpersonatedBy);\r\n const user = useSelector(getUser);\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (user?.UniqueID) {\r\n // Retrieve the teams details for current agent.\r\n dispatch(searchTeamMember({ targetMemberkey: user.UniqueID }));\r\n }\r\n }, [user]);\r\n\r\n useEffect(() => {\r\n dispatch(getStatus());\r\n }, [isImpersonating]);\r\n\r\n useEffect(() => {\r\n if (isImpersonationStateChange) window.location.href = '/';\r\n }, [isImpersonationStateChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nListingImpersonation.propTypes = {\r\n};\r\n\r\nexport default ListingImpersonation;\r\n","import React from 'react';\r\nimport Modal from '../smartAdminUI/Modal';\r\nimport ListingImpersonation from './ListingImpersonation/ListingImpersonation';\r\n\r\nconst ReqImpersonation = () => (\r\n \r\n
\r\n \r\n
\r\n \r\n);\r\n\r\nexport default ReqImpersonation;\r\n","import { useState } from 'react';\r\n\r\nconst useObjectState = (initialState = {}) => {\r\n const [localState, _setLocalState] = useState(initialState);\r\n const setLocalState = fieldAndValue => _setLocalState({ ...localState, ...fieldAndValue });\r\n\r\n return [localState, setLocalState];\r\n};\r\n\r\nexport default useObjectState;\r\n","export default __webpack_public_path__ + \"static/media/cover-7-lg.d2b95e3a.png\";","export default __webpack_public_path__ + \"static/media/cover-8-lg.a56323c9.png\";","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport Badge from 'react-bootstrap/Badge';\r\n\r\nimport {\r\n CLOUDCMA_PAGE_CLICKED,\r\n CONDO_MANAGEMENT_PAGE_CLICKED,\r\n CREAWEBFORMS_PAGE_CLICKED,\r\n CREADDF_PAGE_CLICKED,\r\n AGGREGATE_DATA_BUTTON_CLICKED,\r\n DATA_SEARCH_BUTTON_CLICKED,\r\n HOME_BUTTON_CLICKED,\r\n REMAPLIST_PAGE_CLICKED,\r\n SEARCH_AGENTS_PAGE_CLICKED,\r\n SEARCH_LISTINGS_PAGE_CLICKED,\r\n MATRIX_PAGE_CLICKED,\r\n OFFICE_PAGE_CLICKED,\r\n PROSPECTS_PAGE_CLICKED,\r\n SPACELIST_PAGE_CLICKED,\r\n SPIN_PAGE_CLICKED,\r\n} from '@redux/constants/ActionTypes';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { clearPhotoCollection } from '@redux/modules/photo';\r\nimport { clearRepeatableSectionCount } from '@redux/modules/listing';\r\nimport { clearAgent } from '@redux/modules/agent';\r\nimport useObjectState from '@hooks/useObjectState';\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport { includes } from 'lodash';\r\n\r\nimport P9CoverLarge from '@images/covers/cover-7-lg.png';\r\nimport P9CoverLargeDP from '@images/covers/cover-8-lg.png';\r\nimport P9Logo from '@images/logos/P9LogoWhite.png';\r\nimport WhitePillars from '@images/logos/pillars-white.png';\r\n\r\nconst appSettings = require('../../../appsettings.json');\r\n\r\nconst menuInitialState = {\r\n agentNav: false,\r\n listingNav: false,\r\n createListingNav: false,\r\n officesNav: false,\r\n creaNav: false,\r\n resourcesNav: false,\r\n transactionalNav: false,\r\n};\r\n\r\nconst Sidebar = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const [{\r\n agentNav,\r\n listingNav,\r\n createListingNav,\r\n officesNav,\r\n creaNav,\r\n transactionalNav,\r\n }, setMenuState] = useObjectState({\r\n agentNav: false,\r\n listingNav: false,\r\n createListingNav: false,\r\n officesNav: false,\r\n creaNav: false,\r\n analyticsNav: false,\r\n });\r\n\r\n // TODO: add isAdmin to the list once we are ready to use it\r\n const {\r\n mainActions,\r\n aclIsEmpty,\r\n is3rdPartyDataPortalUser,\r\n is3rdPartyDataPortalTransactionalUser,\r\n } = useAcl();\r\n\r\n const updateAgentNav = e => {\r\n e.stopPropagation();\r\n setMenuState({ ...menuInitialState, agentNav: !agentNav });\r\n };\r\n\r\n // toggles listings menu\r\n const updateListingNav = e => {\r\n e.stopPropagation();\r\n setMenuState({ ...menuInitialState, listingNav: !listingNav });\r\n };\r\n\r\n // toggles create listings submenu\r\n const updateCreateNav = e => {\r\n e.stopPropagation(); // to prevent submenu click from closing the menu\r\n setMenuState({ createListingNav: !createListingNav });\r\n };\r\n\r\n // toggles office menu\r\n const updateOfficesNav = e => {\r\n e.stopPropagation();\r\n setMenuState({ ...menuInitialState, officesNav: !officesNav });\r\n };\r\n\r\n // toggles crea menu\r\n const updateCreaNav = e => {\r\n e.stopPropagation();\r\n setMenuState({ ...menuInitialState, creaNav: !creaNav });\r\n };\r\n\r\n // loads form definitions based on the data attribute of the
  • that was clicked\r\n const handleClicked = e => {\r\n e.stopPropagation();\r\n const clickedItem = e?.currentTarget?.dataset?.id;\r\n if (clickedItem) {\r\n const [operationType, definitionType, listingType] = clickedItem.split('-');\r\n /*\r\n operationType: CRUD operation\r\n definitionType: Agent, Listing, Offices, etc\r\n listingType: rest, rnt, farm, etc. Only available when the definitionType is listing\r\n */\r\n if (definitionType === 'listings') {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingType, null, 'listing'));\r\n } else if (definitionType !== 'listings' && clickedItem === 'create-office') {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingType, null, 'officeACL'));\r\n } else if (definitionType !== 'listings' && clickedItem === 'create-agent') {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingType, null, 'agentACL'));\r\n } else {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingType));\r\n }\r\n dispatch(clearPhotoCollection()); // resets photos\r\n dispatch(clearRepeatableSectionCount()); // resets Section Nav badge counters.\r\n dispatch(clearAgent());\r\n }\r\n };\r\n\r\n const getSidebarLinkClass = path => (\r\n location.pathname === `/${path}` ? 'nav-menu-link active' : 'nav-menu-link'\r\n );\r\n\r\n const getSidebarCreateLinkClass = entity => (\r\n location.pathname === `/${entity}/create` ? 'nav-sub-header nav-menu-link active' : 'nav-sub-header nav-menu-link'\r\n );\r\n\r\n const getSidebarAggregateDataLinkClass = entity => (\r\n location.pathname === `/${entity}/aggregate` ? 'nav-sub-header nav-menu-link active' : 'nav-sub-header nav-menu-link'\r\n );\r\n\r\n const getSidebarSearchLinkClass = entity => (\r\n location.pathname === `/${entity}/search` ? 'nav-sub-header nav-menu-link active' : 'nav-sub-header nav-menu-link'\r\n );\r\n\r\n // sets class to active if current url has a listing type that matches the
  • data-id type\r\n const getSidebarCreateListingLinkClass = path => (\r\n location.pathname === `/listings/create/${path}` ? 'nav-menu-link active' : 'nav-menu-link'\r\n );\r\n\r\n const handleHomeClicked = () => { dispatch({ type: HOME_BUTTON_CLICKED }); };\r\n\r\n const handleAggregateDataClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: AGGREGATE_DATA_BUTTON_CLICKED });\r\n };\r\n\r\n const handleDataSearchClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: DATA_SEARCH_BUTTON_CLICKED });\r\n };\r\n\r\n const handleSearchListingsClicked = e => {\r\n e.stopPropagation(); // to prevent submenu click from closing the menu\r\n dispatch({ type: SEARCH_LISTINGS_PAGE_CLICKED });\r\n };\r\n\r\n const handleSearchAgentClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: SEARCH_AGENTS_PAGE_CLICKED });\r\n };\r\n\r\n const handleCondoManagementClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: CONDO_MANAGEMENT_PAGE_CLICKED });\r\n };\r\n\r\n const handleOfficePageClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: OFFICE_PAGE_CLICKED });\r\n };\r\n\r\n const handleMatrixClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: MATRIX_PAGE_CLICKED });\r\n };\r\n\r\n const handleREMapListClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: REMAPLIST_PAGE_CLICKED });\r\n };\r\n\r\n const handleCREAWEBFormsClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: CREAWEBFORMS_PAGE_CLICKED });\r\n };\r\n\r\n const handleCREADDFClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: CREADDF_PAGE_CLICKED });\r\n };\r\n\r\n const handleProspectsClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: PROSPECTS_PAGE_CLICKED });\r\n };\r\n\r\n const handleSpinClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: SPIN_PAGE_CLICKED });\r\n };\r\n\r\n const handleSpaceListClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: SPACELIST_PAGE_CLICKED });\r\n };\r\n\r\n const handleCloudCMAClicked = e => {\r\n e.stopPropagation();\r\n dispatch({ type: CLOUDCMA_PAGE_CLICKED });\r\n };\r\n\r\n const updateTransactionalNav = e => {\r\n e.stopPropagation();\r\n setMenuState({ ...menuInitialState, transactionalNav: !transactionalNav });\r\n };\r\n\r\n const handleMinMenuToggleClick = e => {\r\n e.stopPropagation();\r\n if (document.body.classList.contains('nav-function-minify')) {\r\n document.body.classList.remove('nav-function-minify');\r\n document.body.classList.remove('mod-hide-info-card');\r\n } else {\r\n document.body.classList.add('nav-function-minify');\r\n document.body.classList.add('mod-hide-info-card');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {is3rdPartyDataPortalUser && (\r\n
  • \r\n
    \r\n \"Pillar\r\n
    \r\n \"cover\"\r\n
    \r\n \r\n
      \r\n
    • \r\n \r\n \r\n Dashboard\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n Aggregate Data\r\n \r\n
    • \r\n {is3rdPartyDataPortalTransactionalUser && (\r\n updateTransactionalNav(e)}\r\n >\r\n \r\n \r\n Transactional Data\r\n \r\n \r\n \r\n \r\n
        \r\n
      • \r\n \r\n Search Data\r\n \r\n
      • \r\n
      \r\n \r\n )}\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
      \r\n
    • \r\n \r\n Pillar 9™ Website\r\n
      \r\n www.pillarnine.com\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    • \r\n \r\n Pillar 9™ Help Desk\r\n
      \r\n Email: helpdesk@pillarnine.com\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    • \r\n \r\n Pillar 9™ Help Desk\r\n
      \r\n Phone: 587-430-2991\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    \r\n
    \r\n \r\n )}\r\n {!aclIsEmpty && !is3rdPartyDataPortalUser && (\r\n
    \r\n
    \r\n \"Pillar\r\n
    \r\n \"cover\"\r\n
    \r\n \r\n
      \r\n
    • \r\n \r\n \r\n Dashboard\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n Matrix™\r\n \r\n
    • \r\n {mainActions.Listings && (\r\n <>\r\n updateListingNav(e)}\r\n >\r\n \r\n \r\n Listings\r\n \r\n \r\n \r\n \r\n
        \r\n {mainActions.ListingsCreate && (\r\n updateCreateNav(e)}\r\n >\r\n \r\n Create Listing\r\n \r\n \r\n \r\n \r\n e.stopPropagation()}\r\n >\r\n
      • \r\n \r\n \r\n Residential\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Multi-family\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Rental\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Mobile\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Land\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Commercial\r\n \r\n
      • \r\n
      • \r\n \r\n \r\n Agribusiness\r\n \r\n
      • \r\n
      \r\n \r\n )}\r\n {mainActions.ListingsSearch && (\r\n
    • \r\n \r\n Search Listing\r\n \r\n
    • \r\n )}\r\n
    \r\n \r\n \r\n )}\r\n {mainActions.Agents && (\r\n updateAgentNav(e)}\r\n >\r\n \r\n \r\n Agents\r\n \r\n \r\n \r\n \r\n
      \r\n {mainActions.AgentsCreate && (\r\n
    • \r\n \r\n Create Agent\r\n \r\n
    • \r\n )}\r\n {mainActions.AgentsSearch && (\r\n
    • \r\n \r\n Search Agents\r\n \r\n
    • \r\n )}\r\n
    \r\n \r\n )}\r\n {mainActions.Offices && (\r\n \r\n \r\n \r\n Offices\r\n \r\n \r\n \r\n \r\n
      \r\n {mainActions.OfficesCreate && (\r\n
    • \r\n \r\n Create Office\r\n \r\n
    • \r\n )}\r\n {mainActions.OfficesSearch && (\r\n
    • \r\n \r\n Search Offices\r\n \r\n
    • \r\n )}\r\n
    \r\n \r\n )}\r\n {mainActions.CondoNameManagement && (\r\n
  • \r\n \r\n \r\n Condo Management\r\n \r\n
  • \r\n )}\r\n
  • \r\n \r\n \r\n REMapList™\r\n \r\n
  • \r\n \r\n \r\n \r\n CREA\r\n \r\n \r\n \r\n \r\n
      \r\n
    • \r\n \r\n CREA WEBForms®\r\n \r\n
    • \r\n
    • \r\n \r\n CREA DDF®\r\n \r\n
    • \r\n
    \r\n \r\n
  • \r\n \r\n \r\n Prospects\r\n \r\n
  • \r\n
  • \r\n \r\n \r\n Spin2\r\n \r\n
  • \r\n
  • \r\n \r\n \r\n Spacelist\r\n \r\n
  • \r\n
  • \r\n \r\n \r\n \r\n Cloud CMA\r\n \r\n NEW\r\n \r\n \r\n \r\n
  • \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
      \r\n
    • \r\n \r\n Pillar 9™ Website\r\n
      \r\n www.pillarnine.com\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    • \r\n \r\n Pillar 9™ Help Desk\r\n
      \r\n Email: helpdesk@pillarnine.com\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    • \r\n \r\n Pillar 9™ Help Desk\r\n
      \r\n Phone: 587-430-2991\r\n \r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
    • \r\n
    \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Sidebar;\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Breadcrumb, BreadcrumbItem } from 'react-bootstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst RoutesWithCrumbs = ({ Component, routePathList = {} }) => {\r\n const createCrumbs = useCallback(dictionary => {\r\n const cr = [];\r\n\r\n if (dictionary) {\r\n Object.entries(dictionary).forEach(item => {\r\n const [key, value] = item;\r\n\r\n if (!window.location.pathname.includes(key)) {\r\n return;\r\n }\r\n\r\n cr.push({ path: key, name: value });\r\n });\r\n }\r\n\r\n return cr;\r\n }, [routePathList]);\r\n\r\n const crumbs = useMemo(() => createCrumbs(routePathList), [routePathList]);\r\n\r\n return crumbs.length <= 1 ? ( // Don't display single crumbs\r\n \r\n ) : (\r\n <>\r\n \r\n {/* Link back up the breadcrumb trail */}\r\n {crumbs.map(({ name, path }, key) => (key + 1 === crumbs.length ? (\r\n {name}\r\n ) : (\r\n \r\n {name}\r\n \r\n )))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nRoutesWithCrumbs.propTypes = {\r\n routePathList: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n path: PropTypes.string,\r\n breadcrumbPath: PropTypes.string,\r\n }),\r\n Component: PropTypes.elementType.isRequired,\r\n matchUrl: PropTypes.shape({\r\n includes: PropTypes.func,\r\n }),\r\n};\r\n\r\nexport default RoutesWithCrumbs;\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const getAuditData = createSelector(({ audit }) => audit?.data, result => result);\r\n\r\nexport const selectAuditID = createSelector(({ audit }) => audit?.UniqueID, result => result);\r\n\r\nexport const selectAuditEntityId = createSelector(({ audit }) => audit?.EntityID, result => result);\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider, { CSVExport } from 'react-bootstrap-table2-toolkit';\r\nimport filterFactory, { textFilter } from 'react-bootstrap-table2-filter';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst AuditSubTable = ({ displayData }) => {\r\n const enrichedList = useMemo(() => displayData.map(item => ({ ...item, UniqueId: uuidv4() })), [displayData]);\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n const { ExportCSVButton } = CSVExport;\r\n\r\n const columns = [\r\n {\r\n dataField: 'TransactionID',\r\n text: 'ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ChangeTimeStamp',\r\n text: 'Date',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'TransactionType',\r\n text: 'Type',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'RealUser',\r\n text: 'Changed By',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ImpersonatedUser',\r\n text: 'Impersonating',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'RecordUniqueID',\r\n text: 'ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '10%' },\r\n filter: textFilter({ delay: 100, placeholder: 'Search...' }),\r\n },\r\n {\r\n dataField: 'ClassName',\r\n text: 'Field Type',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '15%' },\r\n filter: textFilter({ delay: 100, placeholder: 'Search...' }),\r\n },\r\n {\r\n dataField: 'FieldName',\r\n text: 'Field Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '25%' },\r\n filter: textFilter({ delay: 100, placeholder: 'Search...' }),\r\n },\r\n {\r\n dataField: 'OldValue',\r\n text: 'Changed From',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '25%' },\r\n classes: 'text-danger',\r\n filter: textFilter({ delay: 100, placeholder: 'Search...' }),\r\n },\r\n {\r\n dataField: 'NewValue',\r\n text: 'Changed To',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '25%' },\r\n classes: 'text-success',\r\n filter: textFilter({ delay: 100, placeholder: 'Search...' }),\r\n },\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'RecordUniqueID',\r\n order: 'desc',\r\n }];\r\n\r\n const paginationOptions = {\r\n sizePerPage: enrichedList.length,\r\n pageStartIndex: 1,\r\n hideSizePerPage: true, // Hide the sizePerPage dropdown always\r\n hidePageListOnlyOnePage: true, // Hide the pagination list when only one page\r\n showTotal: true,\r\n };\r\n\r\n return (\r\n \r\n { toolKit => (\r\n
    \r\n {\r\n enrichedList && (\r\n <>\r\n \r\n \r\n Export Transaction CSV\r\n \r\n 1 ? paginationFactory(paginationOptions) : null}\r\n {...toolKit.baseProps}\r\n />\r\n \r\n )\r\n }\r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nAuditSubTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n};\r\n\r\nexport default AuditSubTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n/*\r\nCould potentially be integrated with inputGroup,\r\nexcept InputGroup uses Formik specifically and that\r\nis not needed here.\r\n*/\r\n\r\nconst TableSearchInputGroup = props => {\r\n const { onSearch } = props;\r\n let input;\r\n\r\n const handleSearch = e => {\r\n if (e.key === 'Enter') {\r\n onSearch(input.value);\r\n }\r\n };\r\n\r\n const handleChange = () => {\r\n onSearch(input.value);\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTableSearchInputGroup.propTypes = {\r\n onSearch: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableSearchInputGroup;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n trim,\r\n words,\r\n upperCase,\r\n startCase,\r\n camelCase,\r\n isEmpty,\r\n} from 'lodash';\r\n\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Stack from '@mui/material/Stack';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst AgentAvatar = ({ fullName, showFullName }) => (\r\n showFullName ? (\r\n \r\n \r\n {(!isEmpty(fullName) && words(fullName).length > 1) && upperCase(words(fullName)[0].charAt(0))}\r\n {(!isEmpty(fullName) && words(fullName).length > 1) && upperCase(words(fullName)[1].charAt(0))}\r\n \r\n {startCase(camelCase(trim(fullName)))}\r\n \r\n ) : (\r\n \r\n {fullName}}\r\n >\r\n \r\n {(!isEmpty(fullName) && words(fullName).length > 1) && upperCase(words(fullName)[0].charAt(0))}\r\n {(!isEmpty(fullName) && words(fullName).length > 1) && upperCase(words(fullName)[1].charAt(0))}\r\n \r\n \r\n {startCase(camelCase(trim(fullName)))}\r\n \r\n )\r\n);\r\n\r\nAgentAvatar.propTypes = {\r\n fullName: PropTypes.string.isRequired,\r\n showFullName: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default AgentAvatar;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport AuditSubTable from '@components/table/AuditSubTable';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport AgentAvatar from '@components/table/avatar/AgentAvatar';\r\n\r\nconst AuditTable = ({ displayData }) => {\r\n const enrichedList = useMemo(() => displayData.map(item => ({ ...item, UniqueId: uuidv4() })), [displayData]);\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'TransactionID',\r\n text: 'ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'ChangeTimeStamp',\r\n text: 'Date',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n sortFunc: (a, b, order) => (order === 'asc' ? Date.parse(a) - Date.parse(b) : Date.parse(b) - Date.parse(a)),\r\n },\r\n {\r\n dataField: 'TransactionType',\r\n text: 'Type',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '100px' },\r\n },\r\n {\r\n dataField: 'RealUser',\r\n text: 'Changed By',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '100px' },\r\n classes: 'text-center',\r\n formatter: cellContent => ,\r\n },\r\n {\r\n dataField: 'ImpersonatedUser',\r\n text: 'Impersonating',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '100px' },\r\n classes: 'text-center',\r\n formatter: (cellContent, column) => (column.RealUser === cellContent ? '' : ),\r\n },\r\n ];\r\n\r\n const expandRow = {\r\n renderer: row => (\r\n ({ ...row, ...subtransactions })).flat()}\r\n />\r\n ),\r\n showExpandColumn: true,\r\n expandByColumnOnly: true,\r\n classes: 'text-center',\r\n expandHeaderColumnRenderer: ({ isAnyExpands }) => {\r\n if (isAnyExpands) {\r\n return (\r\n Collapse All}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand All}\r\n >\r\n \r\n \r\n );\r\n },\r\n expandColumnRenderer: ({ expanded }) => {\r\n if (expanded) {\r\n return (\r\n Collapse}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand}\r\n >\r\n \r\n \r\n );\r\n },\r\n };\r\n\r\n const defaultSorted = [{\r\n dataField: 'ChangeTimeStamp',\r\n order: 'desc',\r\n }];\r\n\r\n const paginationOptions = {\r\n sizePerPage: 20,\r\n pageStartIndex: 1,\r\n hideSizePerPage: true, // Hide the sizePerPage dropdown always\r\n hidePageListOnlyOnePage: true, // Hide the pagination list when only one page\r\n showTotal: true,\r\n };\r\n\r\n return (\r\n \r\n { toolKit => (\r\n
    \r\n {\r\n enrichedList && (\r\n <>\r\n \r\n 1 ? paginationFactory(paginationOptions) : null}\r\n {...toolKit.baseProps}\r\n />\r\n \r\n )\r\n }\r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nAuditTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n};\r\n\r\nexport default AuditTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\nimport './Panel.styles.css';\r\n\r\n/*\r\npanel is used to wrap everything in a container\r\npanels can be collapsible and have plenty of customization options, such as buttons, tabs, badges..\r\nto close a panel, add the class .PanelCollapsed to .PanelWrapper and .Collapse to .PanelContainer\r\nNOTE: collapsible functionality is active\r\n\r\npanel header: section at the top of the panel; only thing showing when panel is collapsed\r\npanel content: main content ie children; wrapped by PanelContainer which as a predefined padding\r\n\r\ncustomClass: if provided, adds a custom class to the panel\r\n*/\r\n\r\nconst Panel = props => {\r\n const {\r\n header, footer, panelToolbar, children, customClass, customBodyClass, disabled,\r\n } = props;\r\n\r\n return (\r\n
    \r\n {\r\n (header || panelToolbar)\r\n && (\r\n
    \r\n {!isEmpty(header) ? (\r\n <>\r\n

    \r\n {header}\r\n

    \r\n \r\n ) : null}\r\n {!isEmpty(panelToolbar) ?
    {panelToolbar}
    : null}\r\n
    \r\n )\r\n }\r\n {children && (\r\n
    \r\n
    \r\n {children}\r\n
    \r\n
    \r\n )}\r\n {!isEmpty(footer) && footer !== null ?
    {footer}
    : null}\r\n
    \r\n );\r\n};\r\n\r\nPanel.propTypes = {\r\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.shape(), PropTypes.func]),\r\n footer: PropTypes.oneOfType([PropTypes.string, PropTypes.shape(), PropTypes.func]),\r\n children: PropTypes.node,\r\n panelToolbar: PropTypes.node,\r\n customClass: PropTypes.string,\r\n customBodyClass: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n // leave commented in case its needed again\r\n // children: PropTypes.oneOfType([\r\n // PropTypes.arrayOf(PropTypes.node),\r\n // PropTypes.node,\r\n // ]).isRequired,\r\n};\r\n\r\nPanel.defaultProps = {\r\n children: null,\r\n header: '',\r\n footer: '',\r\n panelToolbar: null,\r\n customClass: '',\r\n customBodyClass: '',\r\n disabled: false,\r\n};\r\n\r\nexport default Panel;\r\n","import React from 'react';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n getAuditData,\r\n selectAuditEntityId,\r\n} from '@redux/selectors/AuditSelector';\r\n\r\nimport AuditTable from '@components/table/AuditTable';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\n\r\nconst AuditLogPage = () => {\r\n const auditResults = useSelector(getAuditData);\r\n const listingID = useSelector(selectAuditEntityId);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Audit Log\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n {auditResults ? (\r\n \r\n ) : (\r\n

    No data found.

    \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default AuditLogPage;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport apiService from '@services/apiService';\r\nimport {\r\n CONDO_INSERT,\r\n CONDO_INSERT_FAIL,\r\n CONDO_INSERT_SUCCESS,\r\n CONDO_SEARCH,\r\n CONDO_SEARCH_FAIL,\r\n CONDO_SEARCH_SUCCESS,\r\n CONDO_SELECT,\r\n CONDO_SELECT_FAIL,\r\n CONDO_SELECT_SUCCESS,\r\n CONDO_UPDATE,\r\n CONDO_UPDATE_FAIL,\r\n CONDO_UPDATE_SUCCESS,\r\n} from '../constants/ActionTypes';\r\n\r\n// Condo names search by where clause (subdivision name and value)\r\nexport const searchCondo = searchCriteria => async dispatch => {\r\n dispatch({ type: CONDO_SEARCH });\r\n try {\r\n const condoSearchResults = await apiService.Condo.searchCondoName(searchCriteria);\r\n dispatch({\r\n type: CONDO_SEARCH_SUCCESS,\r\n payload: { condoSearchResults },\r\n });\r\n } catch (err) {\r\n console.error('Error: Condo searchCondo', err);\r\n dispatch({ type: CONDO_SEARCH_FAIL });\r\n }\r\n};\r\n\r\n// Select a condo name by UniqueID\r\n// NOTE: this behavior is not used in legacy app\r\nexport const selectCondo = UniqueID => async dispatch => {\r\n dispatch({ type: CONDO_SELECT });\r\n try {\r\n const condoSelected = await apiService.Condo.selectCondoName(UniqueID);\r\n dispatch({\r\n type: CONDO_SELECT_SUCCESS,\r\n payload: { condoSelected },\r\n });\r\n } catch (err) {\r\n console.error('Error: Condo selectCondo', err);\r\n dispatch({ type: CONDO_SELECT_FAIL });\r\n }\r\n};\r\n\r\n// Creates new condo name record and returns new condo name record\r\nexport const createCondo = newCondoRecord => async dispatch => {\r\n dispatch({ type: CONDO_INSERT });\r\n try {\r\n const condoCreated = await apiService.Condo.createCondoName(newCondoRecord); // returns UniqueID\r\n const newCondo = {\r\n UniqueID: condoCreated.UniqueID,\r\n CondoName: newCondoRecord.CondoData.CondoName,\r\n SubdivisionName: newCondoRecord.CondoData.SubdivisionName,\r\n };\r\n\r\n dispatch({\r\n type: CONDO_INSERT_SUCCESS,\r\n payload: { newCondo },\r\n });\r\n } catch (err) {\r\n console.error('Error: Condo createCondo', err);\r\n dispatch({ type: CONDO_INSERT_FAIL });\r\n }\r\n};\r\n\r\n// Edit/update the condo name of an existing condo record\r\nexport const updateCondo = condoRecord => async dispatch => {\r\n dispatch({ type: CONDO_UPDATE });\r\n try {\r\n const updatedCondo = await apiService.Condo.updateCondoName(condoRecord); // returns type SUCCESS or FAILURE (name already exists)\r\n dispatch({\r\n type: CONDO_UPDATE_SUCCESS,\r\n payload: { updateStatus: updatedCondo },\r\n });\r\n } catch (err) {\r\n console.error('Error: Condo updateCondo', err);\r\n dispatch({ type: CONDO_UPDATE_FAIL });\r\n }\r\n};\r\n","export const QUARTERLY_AVERAGES_BY_YEAR = 'Quarterly averages by year';\r\nexport const TOTALS_BY_QUARTER_BY_YEAR = 'Totals by quarter, by year';\r\nexport const TOTALS_BY_YEAR = 'Totals by year';\r\n\r\nexport const AggregateDataChartsArray = [\r\n TOTALS_BY_QUARTER_BY_YEAR,\r\n TOTALS_BY_YEAR,\r\n QUARTERLY_AVERAGES_BY_YEAR,\r\n];\r\n\r\nexport const listingDict = {\r\n com: 'Commercial',\r\n farm: 'Farm',\r\n land: 'Land',\r\n mob: 'MobileHome',\r\n mult: 'Multifamily',\r\n rnt: 'Rental',\r\n res: 'Residential',\r\n};\r\n\r\nexport const listingRuleDict = {\r\n com: 'CommercialListingRules',\r\n farm: 'FarmListingRules',\r\n land: 'LandListingRules',\r\n mob: 'MobileHomeListingRules',\r\n mult: 'MultifamilyListingRules',\r\n rnt: 'RentalListingRules',\r\n res: 'ResidentialListingRules',\r\n chgTerm: 'ChangeToTerminatedListingRules',\r\n chgSold: 'ChangeToSoldListingRules',\r\n chgMajor: 'MajorCorrectionsRules',\r\n chgPending: 'ChangeToPendingListingRules',\r\n chgLeased: 'ChangeToLeasedListingRules',\r\n chgWithdrawn: 'ChangeToWithdrawnListingRules',\r\n chgActive: 'ChangeToActiveListingRules',\r\n chgExp: 'ChangeToExpiredListingRules',\r\n chgDel: 'ChangeToDeletedListingRules',\r\n chgOpenHouse: 'ChangeToOpenHouseListingRules',\r\n};\r\n","import { createSelector } from 'reselect';\r\nimport { listingDict, listingRuleDict } from '../constants/GeneralConstants';\r\n\r\nexport const getLoadingState = ({ formGeneration }) => formGeneration.isLoading;\r\n\r\nexport const selectPageStructure = ({ formGeneration }) => formGeneration.pageStructure;\r\n\r\nexport const selectVisiblePageStructure = createSelector(selectPageStructure, pageStructure => {\r\n pageStructure.forEach(page => {\r\n // solve for groups\r\n if (!page?.children?.find(child => child.isGroup)) {\r\n const pageVisible = page?.children?.find(child => child?.IsVisible);\r\n page.IsVisible = !!(pageVisible); // eslint-disable-line no-param-reassign\r\n }\r\n if (page?.children?.find(child => child.isGroup)) {\r\n const pageVisible = page?.children?.find(child => child?.fields?.find(field => field?.IsVisible));\r\n page.IsVisible = !!(pageVisible);// eslint-disable-line no-param-reassign\r\n }\r\n });\r\n return pageStructure;\r\n});\r\n\r\nexport const selectPageStructureHasRooms = createSelector(selectPageStructure, pageStructure => pageStructure?.find(section => section.sectionName === 'Rooms') !== undefined ?? false);\r\n\r\nexport const selectAllFields = ({ formGeneration }) => formGeneration.allFields;\r\n\r\nexport const selectStatusByName = ({ formGeneration }, name, repeatableType = '', repeatableId = '') => {\r\n if (repeatableType !== '' && repeatableId !== '') return formGeneration?.validationResult?.[repeatableType]?.[repeatableId]?.[name];\r\n return formGeneration?.validationResult?.[name];\r\n};\r\n\r\nexport const selectSectionAddClicksByName = ({ formGeneration }, name) => formGeneration?.sectionAddClicks?.[name] ?? 0;\r\n\r\nexport const selectRequiredStatusByFieldName = ({ formGeneration }, fieldName) => formGeneration.validationResult?.[fieldName]?.isRequired;\r\n\r\n// retrieves validation results\r\nexport const selectValidationResults = ({ formGeneration }) => formGeneration?.validationResult;\r\n\r\n// Consumes UID corresponding to a room. Returns the validation results for all fields in that room.\r\nexport const selectRoomStatusById = ({ formGeneration }, id) => formGeneration?.roomValidationResult?.[id];\r\n\r\nexport const selectComboValueDict = ({ formGeneration }) => formGeneration.comboSetValueDictionary;\r\n\r\nexport const selectAllComboBoxOptions = createSelector(\r\n ({ formGeneration }) => formGeneration.comboBoxOptions,\r\n ({ listing }) => listing.selectedListing,\r\n ({ formGeneration }) => formGeneration.isCopyOperation,\r\n (comboBoxOptions, selectedListing, isCopyOperation) => {\r\n if (!selectedListing?.listing || isCopyOperation) return comboBoxOptions;\r\n\r\n // When a listing has a disabled value we need to allow the option to show for the member to remove or keep.\r\n return comboBoxOptions.map(comboBoxOption => {\r\n if (selectedListing.listing[comboBoxOption.lookupFieldName]) {\r\n const selectedComboBoxValue = selectedListing.listing[comboBoxOption.lookupFieldName];\r\n const selectedComboBoxOption = comboBoxOption.data.find(option => option.Code === selectedComboBoxValue);\r\n if (selectedComboBoxOption) {\r\n // Ensure current option is enabled\r\n if (!selectedComboBoxOption.Active) {\r\n selectedComboBoxOption.Active = true;\r\n selectedComboBoxOption.Description += ' (disabled)';\r\n }\r\n }\r\n }\r\n return comboBoxOption;\r\n });\r\n },\r\n);\r\n\r\nexport const selectFormType = ({ formGeneration }) => formGeneration.formType;\r\n\r\nexport const selectFormDefinition = ({ formGeneration }) => formGeneration?.formDefinition;\r\n\r\nexport const selectFormDefinitionType = ({ formGeneration }) => formGeneration.definitionType;\r\n\r\nexport const selectListingCode = ({ formGeneration }) => formGeneration.listingType;\r\n\r\nexport const selectRoomValidationResult = ({ formGeneration }) => formGeneration.roomValidationResult;\r\n\r\nexport const selectFormDataStatus = ({ formGeneration }) => formGeneration.formDataStatus;\r\n\r\nexport const selectRoomValidationResults = createSelector(\r\n selectRoomValidationResult,\r\n roomValidationResult => {\r\n const dict = [];\r\n if (roomValidationResult) {\r\n Object.entries(roomValidationResult).map(([roomID]) => {\r\n Object.entries(roomValidationResult[roomID]).map(([key, value]) => {\r\n if (key && !value.isValid) {\r\n dict.push({ [`Rooms.[${roomID}].${value.id}`]: value.errorMessage });\r\n }\r\n return null;\r\n });\r\n return null;\r\n });\r\n }\r\n return dict;\r\n },\r\n);\r\n\r\nexport const selectOpenHouseValidationResults = createSelector(\r\n selectValidationResults,\r\n fullValidationResults => {\r\n const openHouseResults = fullValidationResults?.OpenHouse;\r\n if (!openHouseResults) return [];\r\n const dict = [];\r\n Object.entries(openHouseResults).map(([openHouseID]) => {\r\n Object.entries(openHouseResults[openHouseID]).map(([key, value]) => {\r\n if (key && !value.isValid) {\r\n dict.push({ [`OpenHouse ${value.id}`]: value.errorMessage });\r\n }\r\n return null;\r\n });\r\n return null;\r\n });\r\n return dict;\r\n },\r\n\r\n);\r\n\r\nexport const selectFieldLabelDictionary = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const dictionary = {};\r\n formDefinition.map(item => {\r\n dictionary[item?.fieldLabel] = item?.PageName;\r\n return null;\r\n });\r\n dictionary.Photos = 'Photos';\r\n dictionary.Rooms = 'Rooms';\r\n dictionary.Supplements = 'Supplements';\r\n return dictionary;\r\n },\r\n);\r\n\r\nexport const selectFieldDictionary = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const dictionary = {};\r\n formDefinition.map(item => {\r\n dictionary[item?.FieldName] = item?.PageName;\r\n return null;\r\n });\r\n dictionary.Photos = 'Photos';\r\n dictionary.Rooms = 'Rooms';\r\n dictionary.Supplements = 'Supplements';\r\n return dictionary;\r\n },\r\n);\r\n\r\nexport const getVisibleSections = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const visiblePageNames = formDefinition.map(field => {\r\n if (field?.IsVisible) return field.PageName;\r\n return null;\r\n }).filter(entry => entry);\r\n const visiblePageSet = [...new Set(visiblePageNames)];\r\n return visiblePageSet;\r\n // if all fields w/PageName are visible\r\n },\r\n);\r\n\r\n// sort definition first by pageSortOrder, secondly by field SortOrder\r\nexport const getSortedDefinition = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const sorted = formDefinition.sort((a, b) => {\r\n const x = (a.pageSortOrder - b.pageSortOrder);\r\n if (x === 0) {\r\n return (a.SortOrder - b.SortOrder);\r\n }\r\n return x;\r\n });\r\n return sorted;\r\n },\r\n);\r\n\r\n// consumes sorted form definition, returns (sorted) unique sections\r\nexport const getOrderedSections = createSelector(\r\n // input selector\r\n getSortedDefinition,\r\n // output selector\r\n sortedDef => {\r\n const flags = {};\r\n const unique = sortedDef.filter(item => {\r\n if (flags[item.PageName]) {\r\n return false;\r\n }\r\n if (!item.IsVisible) {\r\n return false;\r\n }\r\n flags[item.PageName] = true;\r\n return true;\r\n });\r\n return unique.map(item => ({ sectionName: item.PageName, sectionLabel: item.PageLabel }));\r\n },\r\n);\r\n\r\n// creates a dictionary mapping between section and fields\r\nexport const selectFormStructure = createSelector(\r\n // input selector\r\n getSortedDefinition,\r\n // output selector\r\n sortedDef => {\r\n const structure = {};\r\n sortedDef.map(item => {\r\n if (!structure[item.PageName]) {\r\n structure[item.PageName] = [];\r\n }\r\n structure[item.PageName] = [\r\n ...structure[item.PageName],\r\n { ...item },\r\n ];\r\n return null;\r\n });\r\n return structure;\r\n },\r\n);\r\n\r\n// Gets/sets the initial values for the create listings form\r\nexport const selectInitialValues = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const initialValues = {};\r\n formDefinition.forEach(field => {\r\n if (field.datatype === 'bit') {\r\n // set bit fields to null by default for validation\r\n initialValues[field.FieldName] = null;\r\n } else {\r\n initialValues[field.FieldName] = '';\r\n }\r\n return null;\r\n });\r\n return initialValues;\r\n },\r\n);\r\n\r\n// gets/sets initial touched values for validation on mount purposes\r\nexport const selectInitialTouched = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const initialTouched = {};\r\n\r\n formDefinition.forEach(field => { initialTouched[field.FieldName] = field.IsRequired; });\r\n return initialTouched;\r\n },\r\n);\r\n\r\n// Needs cases for other listing types\r\nexport const selectListingType = createSelector(\r\n selectListingCode,\r\n listingType => listingDict[listingType],\r\n);\r\n\r\nexport const selectListingRule = createSelector(\r\n selectListingCode,\r\n listingType => listingRuleDict[listingType],\r\n);\r\n\r\n// Retrieves first page name for the change form panel headers\r\nexport const selectEditPageName = createSelector(\r\n selectListingCode,\r\n selectPageStructure,\r\n (listingType, pageStructure) => {\r\n let pageName = '';\r\n const pageValues = Object.values(pageStructure);\r\n if (pageValues.length > 0 && listingType?.includes('chg')) {\r\n pageName = pageValues[0].sectionName;\r\n }\r\n return pageName;\r\n },\r\n);\r\n\r\n// Selects all field objects marked as required from the validationResult section of the data store.\r\nexport const selectRequired = createSelector(\r\n selectValidationResults,\r\n validationResult => {\r\n const required = [];\r\n Object.keys(validationResult).map(fieldName => {\r\n const {\r\n id,\r\n isRequired,\r\n isVisible,\r\n } = validationResult[fieldName];\r\n\r\n if (isRequired && isVisible) (required.push(id));\r\n return null;\r\n });\r\n return required;\r\n },\r\n);\r\n\r\nexport const selectLookupNames = createSelector(\r\n selectFormDefinition,\r\n formDefinition => {\r\n const lookupTableNames = {\r\n lookupNames: [],\r\n };\r\n\r\n formDefinition.map(field => {\r\n if (field.inputType === 'ComboBox' && field.comboBoxLookupName) {\r\n lookupTableNames.lookupNames.push(field.comboBoxLookupName);\r\n }\r\n return null;\r\n });\r\n return lookupTableNames;\r\n },\r\n);\r\n\r\n// Retrieves combo options for a condo lookup name\r\n// Using instead of selectComboBoxOptions since that selector is mainly for listings\r\nexport const selectCondoMgmtComboBoxOptions = createSelector(\r\n [\r\n selectAllComboBoxOptions,\r\n (_, lookupName) => lookupName,\r\n ],\r\n (allComboBoxOptions, lookupName) => {\r\n const comboBoxOptions = [];\r\n allComboBoxOptions.forEach(optionGroups => {\r\n if (lookupName === optionGroups.tableName) {\r\n optionGroups.data.forEach(option => { // add option object to list for specific field.\r\n if (option.Active && option.ParentIsActive) {\r\n comboBoxOptions.push({\r\n label: option.Description,\r\n value: `${option.Code ? option.Code : ''}`,\r\n parents: option.Parents,\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return comboBoxOptions;\r\n },\r\n);\r\n\r\n// Gets all of the options for the given ComboBox Field\r\nexport const selectComboBoxOptions = createSelector(\r\n [\r\n selectFormDefinition,\r\n selectAllComboBoxOptions,\r\n (_, lookupName) => lookupName,\r\n (_, __, lookupRequired) => lookupRequired,\r\n ],\r\n (formDefinition, allComboBoxOptions, lookupName, lookupRequired = true) => {\r\n if (!lookupRequired) return null;\r\n\r\n // if this is using the boptions from formGeneration, then you need to be able to manipulate what's available in that array.\r\n // lookupName == field name\r\n\r\n const comboBoxOptions = [];\r\n let comboBoxLookupName;\r\n // wrapped in an if so that FIGs can be used for comboBox Population in Search Listing forms\r\n if (formDefinition !== []) {\r\n // Goes through the formDefinition to get the lookupTableName based on the fieldName\r\n formDefinition.forEach(field => {\r\n if (field.FieldName === lookupName) {\r\n comboBoxLookupName = field.comboBoxLookupName;\r\n }\r\n });\r\n\r\n // If there was a comboBoxLookupName, now loop through the comboBox options to get the relevant data\r\n if (comboBoxLookupName) {\r\n allComboBoxOptions.forEach(optionGroups => {\r\n if (comboBoxLookupName === optionGroups.tableName) { // matches the table name to the fieldName\r\n optionGroups.data.forEach(option => { // add option object to list for specific field.\r\n // can you just add a ParentActive? prop\r\n if (option.Active && option.ParentIsActive) {\r\n comboBoxOptions.push({ // returned boptions.\r\n label: option.Description,\r\n value: `${option.Code ? option.Code : ''}`,\r\n parents: option.Parents,\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Retrieves comboBoxOptions for dropdown that are not part of a listing form\r\n if (formDefinition.length === 0) {\r\n allComboBoxOptions.forEach(optionGroup => {\r\n if (lookupName === optionGroup.tableName) {\r\n optionGroup.data.forEach(option => { // add option object to list for specific field.\r\n if (option.Active) {\r\n comboBoxOptions.push({ // returned boptions.\r\n label: option.Description,\r\n value: `${option.Code ? option.Code : ''}`,\r\n parents: option.Parents,\r\n });\r\n }\r\n return null;\r\n });\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n return comboBoxOptions;\r\n },\r\n);\r\n\r\nexport const selectYNOptions = ({ formGeneration }, fieldname) => {\r\n const requiredOptions = [];\r\n let YNfield;\r\n\r\n // check that field retrieved matches the fieldname passed in and check if its a YN field\r\n formGeneration.formDefinition.map(field => {\r\n if (field.FieldName === fieldname) {\r\n if (field.datatype === 'bit') {\r\n YNfield = field.FieldName;\r\n }\r\n }\r\n return null;\r\n });\r\n\r\n /*\r\n YN field required : Yes/No/Empty\r\n YN field !required : Yes/No\r\n */\r\n if (YNfield) {\r\n formGeneration.formDefinition.map(field => {\r\n if (YNfield === field.FieldName) {\r\n requiredOptions.push(\r\n { label: 'Yes', value: 1 },\r\n { label: 'No', value: 0 },\r\n );\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n return requiredOptions;\r\n};\r\n\r\n// Receives array of sorted fields and retrieves the error messages to display in the same order\r\nexport const getSortedErrors = createSelector(\r\n selectFormStructure,\r\n selectValidationResults,\r\n selectRoomValidationResults,\r\n selectOpenHouseValidationResults,\r\n (structure, validationResult, roomValidationResult, openHouseValidationResult) => {\r\n const orderedErrors = [];\r\n if (validationResult !== null) {\r\n const orderedSections = Object.keys(structure);\r\n const valKeys = Object.keys(validationResult);\r\n if (valKeys.length > 0) {\r\n orderedSections.map(section => {\r\n const sectionResults = structure[section].sort((a, b) => a.SortOrder - b.SortOrder);\r\n sectionResults.map(field => {\r\n if (valKeys.includes(field.FieldName)) {\r\n const {\r\n isVisible, isValid, errorMessage,\r\n } = validationResult[field.FieldName];\r\n\r\n if (isVisible && !isValid && errorMessage) {\r\n orderedErrors.push({ [field.fieldLabel]: errorMessage });\r\n }\r\n }\r\n return null;\r\n });\r\n if (section === 'Photos' && valKeys.includes('Photos') && validationResult.Photos.errorMessage) {\r\n orderedErrors.push({ Photos: validationResult.Photos.errorMessage });\r\n }\r\n if (section === 'Supplements' && valKeys.includes('Supplements') && validationResult.Supplements.errorMessage) {\r\n orderedErrors.push({ Supplements: validationResult.Supplements.errorMessage });\r\n }\r\n if (section === 'Rooms' && valKeys.includes('RoomDimensions') && validationResult.RoomDimensions.errorMessage) {\r\n orderedErrors.push({ 'Room Dimensions': validationResult.RoomDimensions.errorMessage });\r\n }\r\n if (section === 'Rooms' && valKeys.includes('RoomTypeMinimumRequirements') && validationResult.RoomTypeMinimumRequirements.errorMessage) {\r\n orderedErrors.push({ 'Room Type Minimum Requirements': validationResult.RoomTypeMinimumRequirements.errorMessage });\r\n }\r\n if (section === 'Rooms' && roomValidationResult) {\r\n orderedErrors.push(...roomValidationResult);\r\n }\r\n if (section === 'OpenHouses' && openHouseValidationResult) orderedErrors.push(...openHouseValidationResult);\r\n return null;\r\n });\r\n }\r\n }\r\n return orderedErrors;\r\n },\r\n);\r\n\r\nexport const getSortedErrorsOfInvisibleFields = createSelector(\r\n selectFormStructure,\r\n selectValidationResults,\r\n selectRoomValidationResults,\r\n (structure, validationResult, roomValidationResult) => {\r\n const orderedErrors = [];\r\n if (validationResult !== null) {\r\n const orderedSections = Object.keys(structure);\r\n const valKeys = Object.keys(validationResult);\r\n if (valKeys.length > 0) {\r\n orderedSections.map(section => {\r\n const sectionResults = structure[section].sort((a, b) => a.SortOrder - b.SortOrder);\r\n sectionResults.map(field => {\r\n if (valKeys.includes(field.FieldName)) {\r\n const {\r\n isVisible, isValid, errorMessage,\r\n } = validationResult[field.FieldName];\r\n\r\n if (!isVisible && !isValid && errorMessage) {\r\n orderedErrors.push({ [field.fieldLabel]: errorMessage });\r\n }\r\n }\r\n return null;\r\n });\r\n if (section === 'Photos' && valKeys.includes('Photos') && validationResult.Photos.errorMessage) {\r\n orderedErrors.push({ Photos: validationResult.Photos.errorMessage });\r\n }\r\n if (section === 'Supplements' && valKeys.includes('Supplements') && validationResult.Supplements.errorMessage) {\r\n orderedErrors.push({ Supplements: validationResult.Supplements.errorMessage });\r\n }\r\n if (section === 'Rooms' && valKeys.includes('RoomDimensions') && validationResult.RoomDimensions.errorMessage) {\r\n orderedErrors.push({ 'Room Dimensions': validationResult.RoomDimensions.errorMessage });\r\n }\r\n if (section === 'Rooms' && valKeys.includes('RoomTypeMinimumRequirements') && validationResult.RoomTypeMinimumRequirements.errorMessage) {\r\n orderedErrors.push({ 'Room Type Minimum Requirements': validationResult.RoomTypeMinimumRequirements.errorMessage });\r\n }\r\n if (section === 'Rooms' && roomValidationResult) {\r\n orderedErrors.push(...roomValidationResult);\r\n }\r\n return null;\r\n });\r\n }\r\n }\r\n return orderedErrors;\r\n },\r\n);\r\n\r\nexport const selectErrorsPerSection = createSelector(\r\n getSortedErrors,\r\n selectFieldLabelDictionary,\r\n selectRoomValidationResults,\r\n selectOpenHouseValidationResults,\r\n (errors, dictionary, roomValidationResult, openHouseResult) => {\r\n const errorsPerSection = {};\r\n errorsPerSection.Rooms = [];\r\n errorsPerSection.OpenHouses = [];\r\n errors.map(error => {\r\n const [fieldName] = Object.keys(error);\r\n const section = dictionary[fieldName];\r\n if (fieldName === 'Room Dimensions' || fieldName === 'Room Type Minimum Requirements') {\r\n errorsPerSection.Rooms = [...errorsPerSection.Rooms, fieldName];\r\n } else if (!errorsPerSection[section]) {\r\n errorsPerSection[section] = [fieldName];\r\n } else if (errorsPerSection[section] && !errorsPerSection[section].includes(fieldName)) {\r\n errorsPerSection[section] = [...errorsPerSection[section], fieldName];\r\n }\r\n return null;\r\n });\r\n if (roomValidationResult) {\r\n errorsPerSection.Rooms = [...errorsPerSection.Rooms, ...roomValidationResult];\r\n }\r\n if (!errorsPerSection.Rooms.length) {\r\n delete errorsPerSection.Rooms;\r\n }\r\n if (openHouseResult) {\r\n errorsPerSection.OpenHouses = [...errorsPerSection.OpenHouses, ...openHouseResult];\r\n }\r\n if (!errorsPerSection.OpenHouses.length) {\r\n delete errorsPerSection.OpenHouses;\r\n }\r\n return errorsPerSection;\r\n },\r\n);\r\n\r\nexport const selectRequiredPerSection = createSelector(\r\n selectRequired,\r\n selectFieldDictionary,\r\n (required, dictionary) => {\r\n const reqPerSection = {};\r\n required.map(req => {\r\n const section = dictionary[req];\r\n\r\n if (!reqPerSection[section]) (reqPerSection[section] = [req]);\r\n if (reqPerSection[section] && !reqPerSection[section].includes(req)) {\r\n reqPerSection[section] = [...reqPerSection[section], req];\r\n }\r\n return null;\r\n });\r\n return reqPerSection;\r\n },\r\n);\r\n\r\nexport const getFieldNameAndLabels = createSelector(\r\n selectFormDefinition,\r\n formDefinition => (\r\n formDefinition?.flatMap(singleField => (\r\n [{\r\n fieldName: singleField?.FieldName,\r\n fieldLabel: singleField?.fieldLabel,\r\n }]\r\n ))\r\n ),\r\n);\r\n\r\nexport const getVisibleFieldNameAndLabels = createSelector(\r\n selectFormDefinition,\r\n formDefinition => (\r\n formDefinition?.flatMap(singleField => (\r\n (singleField?.IsVisible || singleField?.isVisible)\r\n ? [{\r\n fieldName: singleField?.FieldName,\r\n fieldLabel: singleField?.fieldLabel,\r\n }] : []\r\n ))\r\n ),\r\n);\r\n\r\nexport const transformComboBoxData = createSelector(\r\n selectAllComboBoxOptions,\r\n allComboBoxOptions => {\r\n const formattedComboBoxOptions = allComboBoxOptions.flatMap(tableOptions => {\r\n const comboData = tableOptions.data.flatMap(singleOption => {\r\n if (!singleOption.Active) return [];\r\n\r\n return [{\r\n label: singleOption.Description,\r\n value: singleOption.Description,\r\n formValue: tableOptions.lookupFieldName,\r\n }];\r\n });\r\n if (!comboData.length) return [];\r\n\r\n return [{\r\n label: tableOptions.lookupFieldName,\r\n options: comboData,\r\n }];\r\n });\r\n\r\n return formattedComboBoxOptions;\r\n },\r\n);\r\n\r\nconst transformFieldOptions = createSelector(\r\n getVisibleFieldNameAndLabels,\r\n fields => {\r\n const fieldOptions = fields.flatMap(fieldData => (\r\n [{\r\n label: fieldData.fieldLabel,\r\n value: fieldData.fieldName,\r\n formValue: fieldData.fieldName,\r\n }]\r\n ));\r\n return {\r\n label: 'Fields',\r\n options: fieldOptions,\r\n };\r\n },\r\n);\r\n\r\nexport const selectFormSearchOptions = createSelector(\r\n transformComboBoxData,\r\n transformFieldOptions,\r\n (comboBoxOptionsGroup, fieldOptions) => {\r\n const groupedOptions = [];\r\n groupedOptions.push(fieldOptions);\r\n /*\r\n Currently, adding the comboBoxOptionsGroup to the options for the form search\r\n causes lag. The Select in FormSearchBar will need to be refactored to be async,\r\n and after talking with Aaron it was decided that we will leave comboBoxOptions\r\n out for now and will come back to it for v2\r\n */\r\n // groupedOptions = groupedOptions.concat(comboBoxOptionsGroup);\r\n\r\n return groupedOptions;\r\n },\r\n);\r\n","import React, { useState, useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport Select from 'react-select';\r\nimport { selectCondoMgmtComboBoxOptions } from '@redux/selectors/FormSelector';\r\n\r\nconst CondoManagementForm = ({ setSubdivisionSelected }) => {\r\n const [county, setCounty] = useState(null);\r\n const [city, setCity] = useState(null);\r\n const [subdivision, setSubdivision] = useState(null);\r\n\r\n const comboIsLoading = useSelector(state => state.formGeneration.comboIsLoading); // combo loading status\r\n const countyComboValues = useSelector(state => selectCondoMgmtComboBoxOptions(state, 'Lookup_Property_Listing_CountyOrParish'));\r\n const cityComboValues = useSelector(state => selectCondoMgmtComboBoxOptions(state, 'Lookup_Property_Listing_City'));\r\n const subdivisionComboValues = useSelector(state => selectCondoMgmtComboBoxOptions(state, 'Lookup_Property_Listing_SubdivisionName'));\r\n\r\n const handleCountyChange = value => setCounty(value);\r\n const handleCityChange = value => setCity(value);\r\n\r\n const handleSubdivChange = value => {\r\n setSubdivision(value);\r\n setSubdivisionSelected(value);\r\n };\r\n\r\n // Determine the options to display for city based on parent childing rules from County\r\n const cityOptions = useMemo(() => {\r\n if (county) {\r\n // parents is ALWAYS a one-level array since it's already filtered to the city-level;\r\n return cityComboValues.filter(cityValue => cityValue?.parents?.[0]?.ParentCodes?.[0] === county.value);\r\n }\r\n return [];\r\n }, [county]);\r\n\r\n // Determines the options to display for subdivisions based on parent childing rules from City\r\n const subdivOptions = useMemo(() => {\r\n if (city) {\r\n // parents is ALWAYS a one-level array since it's already filtered to the subdivision-level;\r\n return subdivisionComboValues.filter(subdiv => subdiv?.parents?.[0]?.ParentCodes?.[0] === city.value);\r\n }\r\n return [];\r\n }, [city]);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nCondoManagementForm.propTypes = {\r\n setSubdivisionSelected: PropTypes.func,\r\n};\r\n\r\nexport default CondoManagementForm;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { loadComboBoxOptions } from '@redux/modules/formGeneration';\r\nimport { createCondo, searchCondo, updateCondo } from '@redux/actionCreators/CondoCreator';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport CondoForm from '@components/form/forms/CondoManagementForm';\r\n\r\nconst submitTranslation = {\r\n Lookup_Property_Listing_CountyOrParish: 'CountyOrParish',\r\n Lookup_Property_Listing_City: 'City',\r\n Lookup_Property_Listing_SubdivisionName: 'SubdivisionName',\r\n};\r\nconst lookupNames = { lookupNames: Object.keys(submitTranslation) };\r\n\r\n// NOTE: Not all subdivisions will return a list -> will display no subdivisions message\r\n// NOTE: Add Condo Name button disabled until a subdivision search has been performed\r\n\r\nconst CondoManagementPage = () => {\r\n const dispatch = useDispatch();\r\n\r\n const [editCondoName, setEditCondoName] = useState(''); // holds condo name to edit/update\r\n const [currCondo, setCurrCondo] = useState({}); // holds current condo record to edit\r\n const [newCondoName, setNewCondoName] = useState(''); // holds new condo name to create/insert\r\n const [subdivisionSelected, setSubdivisionSelected] = useState({}); // holds subdivision name from results list to create new condo record\r\n const [isEditable, setIsEditable] = useState(false); // flag to determine whether to display the condo name in a or for edit\r\n\r\n const condoSearchResults = useSelector(state => state.condo.condoSearchResults); // array of condo record objects\r\n const isSearching = useSelector(state => state.condo.isSearching);\r\n\r\n // API call to get combo box values on first render\r\n useEffect(() => {\r\n dispatch(loadComboBoxOptions(lookupNames));\r\n }, []);\r\n\r\n // submits search criteria to retrieve condo records\r\n const handleSubmit = event => {\r\n event.preventDefault();\r\n if (subdivisionSelected?.value) {\r\n const jsonBody = {\r\n whereClause: {\r\n clause: [{\r\n name: 'SubdivisionName',\r\n value: subdivisionSelected.value,\r\n }],\r\n },\r\n };\r\n dispatch(searchCondo(jsonBody));\r\n setIsEditable(false);\r\n }\r\n };\r\n\r\n // sets editable state to true and saves input as currCondo\r\n const handleEdit = condoItem => {\r\n setIsEditable(true);\r\n setCurrCondo(condoItem);\r\n };\r\n\r\n // stores input value to local state editCondoName\r\n const updateCondoName = e => {\r\n setEditCondoName(e.target.value);\r\n };\r\n\r\n // extract updated condo name values to submit to API / redux\r\n const buildUpdateWhereClause = values => {\r\n const whereClause = {\r\n clause: [],\r\n };\r\n const valueKeys = Object.keys(values);\r\n valueKeys.forEach(key => {\r\n if (values[key] && key === 'UniqueID') {\r\n whereClause.clause.push({\r\n name: 'UniqueID',\r\n value: values[key],\r\n });\r\n }\r\n });\r\n return whereClause;\r\n };\r\n\r\n // handles the condo name update and re rendering of updated results list (with small delay in re render)\r\n const handleSaveEdit = () => {\r\n setIsEditable(false);\r\n // currCondo is the original condo name record, where as editCondoName only holds the input string to update the condo name\r\n if (currCondo && editCondoName) {\r\n const updateClause = buildUpdateWhereClause(currCondo);\r\n const jsonBody = {\r\n whereClause: updateClause,\r\n CondoData: {\r\n CondoName: editCondoName, // holds new condo name value\r\n SubdivisionName: currCondo.SubdivisionName,\r\n },\r\n };\r\n dispatch(updateCondo(jsonBody));\r\n\r\n const searchClause = {\r\n clause: [{\r\n name: 'SubdivisionName',\r\n value: currCondo.SubdivisionName,\r\n }],\r\n };\r\n const updatedJsonBody = {\r\n whereClause: searchClause,\r\n };\r\n dispatch(searchCondo(updatedJsonBody)); // re render result list with edited condo name\r\n setEditCondoName(''); // clear edit name\r\n }\r\n };\r\n\r\n // reset editable state\r\n const handleCancelEdit = () => {\r\n setEditCondoName(''); // clear edit name\r\n setIsEditable(false);\r\n };\r\n\r\n // Captures the input's value and saves it to local state as newCondoName\r\n const handleInput = e => setNewCondoName(e.target.value);\r\n\r\n // Creates new subdivision and adds new record to results list for display\r\n const submitNewCondoName = e => {\r\n e.preventDefault();\r\n if ((condoSearchResults ?? [])) {\r\n if (newCondoName !== '' && subdivisionSelected !== '') {\r\n const newCondoRecord = {\r\n CondoData: {\r\n CondoName: newCondoName,\r\n SubdivisionName: subdivisionSelected.value,\r\n },\r\n };\r\n dispatch(createCondo(newCondoRecord));\r\n }\r\n }\r\n };\r\n\r\n // NOTE: Left as is for now as per Riz/Bill's instruction since delete might be added later\r\n const handleDelete = () => null;\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Condo Management\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n <>\r\n \r\n New Condo Name\r\n \r\n \r\n \r\n \r\n
      \r\n {condoSearchResults\r\n && condoSearchResults.sort((a, b) => a.CondoName.localeCompare(b.CondoName)).map(item => (\r\n
      \r\n {(isEditable && (currCondo.CondoName === item.CondoName))\r\n ? (\r\n
      \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n )\r\n : (\r\n
    • \r\n {`${item.CondoName}`}\r\n
      \r\n \r\n \r\n
      \r\n
    • \r\n )}\r\n
      \r\n ))}\r\n
    \r\n {(condoSearchResults && condoSearchResults.length === 0 && !isSearching)\r\n &&
    No condo names found
    }\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default CondoManagementPage;\r\n","import React, { useMemo } from 'react';\r\nimport Select, { components } from 'react-select';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectFormSearchOptions } from '@redux/selectors/FormSelector';\r\n\r\nconst formatGroupLabel = () => (\r\n
    \r\n);\r\n\r\nconst DropdownIndicator = props => (\r\n \r\n \r\n \r\n);\r\n\r\nconst navigateToField = option => {\r\n if (option) {\r\n window.location.hash = '';\r\n window.location.hash = `#${option.label}`;\r\n const tabContent = document.querySelector('.tab-content');\r\n const anchor = tabContent.querySelector(`[id=\"${option.label}\"]`);\r\n if (anchor) {\r\n const tabPane = anchor.closest('.tab-pane');\r\n if (tabPane) {\r\n const tabLinkID = tabPane.id.replace('tabpane', 'tab');\r\n const tabLink = document.getElementById(tabLinkID);\r\n tabLink?.click();\r\n setTimeout(() => {\r\n const formcontrol = anchor.querySelector('[id]');\r\n formcontrol?.focus();\r\n }, 1);\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst FormSearchBar = () => {\r\n const formSearchOptions = useSelector(selectFormSearchOptions);\r\n const memoSearchOptions = useMemo(() => formSearchOptions, [formSearchOptions]);\r\n\r\n return (\r\n
    \r\n ({ ...css, padding: 0 }), clearIndicator: css => ({ ...css, padding: 0 }) }}\r\n />\r\n
    \r\n );\r\n};\r\n\r\nexport default FormSearchBar;\r\n","import React from 'react';\r\n\r\nimport Skeleton from '@mui/material/Skeleton';\r\n\r\nconst FormLoader = () => (\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nexport default FormLoader;\r\n","/* eslint-disable no-unused-vars */\r\n/* eslint-disable react/prop-types */\r\n/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport { useEffect } from 'react';\r\nimport { useFormikContext } from 'formik';\r\nimport { useDispatch } from 'react-redux';\r\nimport { setValidationResult } from '@redux/modules/formGeneration';\r\n\r\nconst FieldValidator = ({\r\n validationRules,\r\n validateFieldName,\r\n validateFlag,\r\n validationValue,\r\n selectedListing,\r\n setValidateFlag,\r\n setValidationValue,\r\n setValidateFieldName,\r\n runValidation = () => null,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const { values } = useFormikContext();\r\n\r\n // photosHaveChanged, supplementsHaveChanged, roomsHaveChanged, listing, unmodifiedListing, photos, supplements, rooms\r\n\r\n const getRepeatableChanged = (formikGroup, unmodifiedGroup) => {\r\n /* does origin have this item?\r\n does any prop of this item not match origin?\r\n */\r\n let hasChanged = false;\r\n if (formikGroup.length !== unmodifiedGroup.length) return true;\r\n formikGroup.forEach(item => {\r\n if (hasChanged) return;\r\n if (item.UniqueID) {\r\n // room/door/parcel, openhouse?\r\n const umItem = unmodifiedGroup.find(umi => umi.UniqueID === item.UniqueID);\r\n Object.keys(item).forEach(itemkey => {\r\n if (hasChanged) return;\r\n if (umItem?.[itemkey]) {\r\n if (umItem[itemkey] !== item[itemkey]) hasChanged = true;\r\n }\r\n });\r\n // see that every key's value in formikElement matches umEl\r\n } else if (item.URL) {\r\n // photo or supp\r\n const umItem = unmodifiedGroup.find(umi => umi.URL === item.URL);\r\n Object.keys(item).forEach(itemkey => {\r\n if (hasChanged) return;\r\n if (umItem?.[itemkey]) {\r\n if (umItem[itemkey] !== item[itemkey]) hasChanged = true;\r\n }\r\n });\r\n } else {\r\n // item has neither url or uniqueId;\r\n hasChanged = true;\r\n }\r\n });\r\n return hasChanged;\r\n };\r\n\r\n const getChanged = (unModGroup, photosGroup, roomsGroup, supplementsGroup, openHousesGroup) => {\r\n let photosHaveChanged = false;\r\n let supplementsHaveChanged = false;\r\n let roomsHaveChanged = false;\r\n let openHousesHaveChanged = false;\r\n\r\n photosHaveChanged = getRepeatableChanged(photosGroup, unModGroup.umPhotos);\r\n supplementsHaveChanged = getRepeatableChanged(supplementsGroup, unModGroup.umSupplements);\r\n roomsHaveChanged = getRepeatableChanged(roomsGroup, unModGroup.umRooms);\r\n openHousesHaveChanged = getRepeatableChanged(openHousesGroup, unModGroup.umOpenHouses);\r\n\r\n photosHaveChanged = photosHaveChanged ? 1 : 0;\r\n supplementsHaveChanged = supplementsHaveChanged ? 1 : 0;\r\n roomsHaveChanged = roomsHaveChanged ? 1 : 0;\r\n openHousesHaveChanged = openHousesHaveChanged ? 1 : 0;\r\n\r\n return [photosHaveChanged, supplementsHaveChanged, roomsHaveChanged, openHousesHaveChanged];\r\n };\r\n\r\n useEffect(() => {\r\n if (validateFlag === true) {\r\n values[validateFieldName] = validationValue;\r\n\r\n try {\r\n if (validationRules.descriptions.logics.includes(`${validateFieldName}Rules`)) { // possessionData, NumofElevators rules do not exist, it will throw an error\r\n let res;\r\n const {\r\n Photos, Rooms, Supplements, OpenHouses, ...resourceData\r\n } = values;\r\n\r\n if ((validationRules.descriptions.logicName === 'AgentRules') || (validationRules.descriptions.logicName === 'OfficeRules')) {\r\n res = validationRules.runWithParameters({ name: `${validateFieldName}Rules` }, resourceData);\r\n } else {\r\n const unmodifiedListing = selectedListing ? selectedListing.listing : {};\r\n const unModGroup = {\r\n umPhotos: selectedListing?.photos ?? [],\r\n umRooms: selectedListing?.rooms ?? [],\r\n umSupplements: selectedListing?.supplements ?? [],\r\n umOpenHouses: selectedListing?.openHouses ?? [],\r\n umParcels: selectedListing?.parcels ?? [],\r\n umDoors: selectedListing?.doors ?? [],\r\n };\r\n const photosGroup = Photos\r\n ? Object.keys(Photos).map(key => (!Photos[key].IsDeleted) && Photos[key])\r\n : [];\r\n const roomsGroup = Rooms\r\n ? Object.keys(Rooms).map(key => (!Rooms[key].IsDeleted) && Rooms[key])\r\n : [];\r\n const supplementsGroup = Supplements\r\n ? Object.keys(Supplements).map(key => (!Supplements[key].IsDeleted) && Supplements[key])\r\n : [];\r\n const openHousesGroup = OpenHouses\r\n ? Object.keys(OpenHouses).map(key => (!OpenHouses[key].IsDeleted) && OpenHouses[key])\r\n : [];\r\n\r\n const [photosHaveChanged, supplementsHaveChanged, roomsHaveChanged, openHousesHaveChanged] = getChanged(unModGroup, photosGroup, roomsGroup, supplementsGroup, openHousesGroup);\r\n\r\n res = validationRules.runWithParameters({ name: `${validateFieldName}Rules` }, photosHaveChanged, supplementsHaveChanged, roomsHaveChanged, openHousesHaveChanged, resourceData, unmodifiedListing, photosGroup, supplementsGroup, roomsGroup);\r\n }\r\n\r\n const { fieldValidationResult } = res.context.variableContainer;\r\n dispatch(setValidationResult(fieldValidationResult));\r\n }\r\n } catch (er) {\r\n console.error('Error: FieldValidator getChanged', er);\r\n }\r\n\r\n setValidateFlag(false); // clear state\r\n setValidateFieldName('');\r\n setValidationValue('');\r\n runValidation();\r\n }\r\n }, [validateFlag]);\r\n\r\n return null;\r\n};\r\n\r\nexport default FieldValidator;\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const selectOperationType = createSelector(({ formGeneration }) => formGeneration.operationType, result => result);\r\n\r\nexport const selectDefinitionType = createSelector(({ formGeneration }) => formGeneration.definitionType, result => result);\r\n\r\nexport const selectListingType = createSelector(({ formGeneration }) => formGeneration.listingType, result => result);\r\n\r\nexport const selectDefaultValues = createSelector(({ formGeneration }) => formGeneration.defaultValues, result => result);\r\n\r\nexport const selectListingSelected = createSelector(({ listing }) => listing.selectedListing, result => result);\r\n\r\nexport const selectAgentSelected = createSelector(({ agent }) => agent.agentSelected, result => result);\r\n\r\nexport const selectOfficeSelected = createSelector(({ office }) => office.currentOffice, result => result);\r\n\r\n/*\r\n Select Listings's form data taking default values into account:\r\n * on Create : pre-populate the field with the default value;\r\n * on Full Edit : Listing data takes priority over default values, even if Listing has null data for the field;\r\n * on Task Edits (chgMajor, chgSold etc) : non-null fields in listing data override defaults, but default values override null properties in listing data.\r\n*/\r\nexport const selectListingFormData = createSelector(\r\n selectOperationType,\r\n selectDefinitionType,\r\n selectListingType,\r\n selectDefaultValues,\r\n selectListingSelected,\r\n (operationType, definitionType, listingType, defaultValues, selectedListing) => {\r\n if (definitionType !== 'listings') return null;\r\n if (operationType === 'edit' && !selectedListing) return null;\r\n\r\n const formData = selectedListing?.listing ?? defaultValues;\r\n const taskTypes = ['chgTerm', 'chgSold', 'chgDetails', 'chgMajor', 'chgDel', 'chgPending', 'chgLeased', 'chgPropType', 'chgWithdrawn', 'chgActive', 'chgExp'];\r\n const isTaskEdit = taskTypes.includes(listingType);\r\n if (isTaskEdit) {\r\n // Update empty values with default values.\r\n Object.entries(formData).map(([key, value]) => {\r\n if (value == null && (key in defaultValues)) {\r\n formData[key] = defaultValues[key];\r\n }\r\n return null;\r\n });\r\n // Add missing defaulted fields (TBD if this is required).\r\n Object.entries(defaultValues).map(([key, defaultValue]) => {\r\n if (!(key in formData)) {\r\n formData[key] = defaultValue;\r\n }\r\n return null;\r\n });\r\n }\r\n return formData;\r\n },\r\n);\r\n\r\n/*\r\n Select Agent's form data taking default values into account:\r\n * on Create : pre-populate the field with the default value;\r\n * on Edit : Agent data takes priority over default values, even if Agent has null data for the field.\r\n*/\r\nexport const selectAgentFormData = createSelector(\r\n selectOperationType,\r\n selectDefinitionType,\r\n selectDefaultValues,\r\n selectAgentSelected,\r\n (operationType, definitionType, defaultValues, selectedAgent) => {\r\n if (definitionType !== 'agent') return null;\r\n if (operationType === 'edit' && !selectedAgent) return null;\r\n\r\n const formData = selectedAgent ?? defaultValues;\r\n return formData;\r\n },\r\n);\r\n\r\n/*\r\n Select Office's form data taking default values into account:\r\n * on Create : pre-populate the field with the default value;\r\n * on Edit : Office data takes priority over default values, even if Office has null data for the field.\r\n*/\r\nexport const selectOfficeFormData = createSelector(\r\n selectOperationType,\r\n selectDefinitionType,\r\n selectDefaultValues,\r\n selectOfficeSelected,\r\n (operationType, definitionType, defaultValues, selectedOffice) => {\r\n if (definitionType !== 'office') return null;\r\n if (operationType === 'edit' && !selectedOffice) return null;\r\n\r\n const formData = selectedOffice ?? defaultValues;\r\n return formData;\r\n },\r\n);\r\n","/* eslint-disable react/prop-types */\r\nimport { useEffect } from 'react';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectAllComboBoxOptions } from '@redux/selectors/FormSelector';\r\n\r\nconst ComboEnforcer = props => {\r\n const parentFields = [\r\n 'City',\r\n 'CountyOrParish',\r\n 'PropertySubType',\r\n 'SubdivisionName',\r\n ];\r\n\r\n const {\r\n valueBubble, opt, FieldName,\r\n } = props;\r\n\r\n const allComboBoxOptions = useSelector(selectAllComboBoxOptions); // used to gather target children when parent changes\r\n\r\n const { values } = useFormikContext(); // used to check the set displayed values\r\n\r\n useEffect(() => {\r\n if (opt) { // enforcer is running.\r\n // a governing field has changed, select the options that need to be checked.\r\n if (parentFields.includes(FieldName)) { // a governor has changed\r\n const targetComboOptions = allComboBoxOptions.map(aCBO => {\r\n const found = aCBO.data.map(singleOption => {\r\n let isTargetOption = false;\r\n let target = null;\r\n if ('Parents' in singleOption) {\r\n singleOption.Parents.map(parent => {\r\n if (parent.ParentField === FieldName) {\r\n isTargetOption = true;\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n if (isTargetOption === true) {\r\n target = singleOption;\r\n } return target;\r\n });\r\n\r\n return { lookupFieldName: aCBO.lookupFieldName, found };\r\n });\r\n\r\n // filter the target options out of the dirty array\r\n const filteredTargets = [];\r\n\r\n if (targetComboOptions.length > 0) {\r\n targetComboOptions.map(tgt => {\r\n const filteredOptions = tgt.found.filter(fOpt => fOpt !== null);\r\n if (filteredOptions.length > 0) filteredTargets.push({ lookupFieldName: tgt.lookupFieldName, filteredOptions });\r\n return null;\r\n });\r\n }\r\n\r\n // manipulate targeted data. => clear out any values that have been set.\r\n if (filteredTargets.length > 0) { // ensure that there's anything to check\r\n filteredTargets.map(tgtOpt => {\r\n const childOpt = values[tgtOpt.lookupFieldName];\r\n if (childOpt) {\r\n const foundChild = tgtOpt.filteredOptions.find(tData => tData.Code === childOpt);\r\n if (foundChild) {\r\n const targetParent = foundChild.Parents.find(parent => parent.ParentField === FieldName);\r\n if (!targetParent.ParentCodes.includes(opt.value)) {\r\n valueBubble({ fieldName: tgtOpt.lookupFieldName, newValue: '' });\r\n }\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n // Manipulate the available options.\r\n const parentValue = values[FieldName];\r\n\r\n filteredTargets.map(fTarg => {\r\n fTarg.filteredOptions.map(fOpt => {\r\n let hasParent;\r\n\r\n fOpt.Parents.map(ftPar => {\r\n if (ftPar.ParentField === FieldName) {\r\n if (ftPar.ParentCodes.find(pc => pc === parentValue)) {\r\n hasParent = true;\r\n }\r\n }\r\n\r\n const mOpt = fOpt;\r\n mOpt.ParentIsActive = hasParent;\r\n return null;\r\n });\r\n return null;\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n }, [opt]);\r\n return null;\r\n};\r\n\r\nexport default ComboEnforcer;\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { useField } from 'formik';\r\nimport NumberFormat from 'react-number-format';\r\nimport Select from 'react-select';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport { setComboSetValueDictionary } from '@redux/modules/formGeneration';\r\n\r\nimport {\r\n selectStatusByName,\r\n selectLookupNames,\r\n selectAllComboBoxOptions,\r\n selectComboBoxOptions,\r\n selectYNOptions, // determines options to show for YN values depending on isRequired\r\n selectRequiredStatusByFieldName, // retrieves required field objects from the validationResults\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport {\r\n selectListingFormData,\r\n selectAgentFormData,\r\n selectOfficeFormData,\r\n} from '@redux/selectors/FormDataSelector';\r\n\r\nimport ComboEnforcer from '@components/form/formHelpers/ParentChildEnforcer';\r\n// import { isNull } from 'lodash';\r\nimport TextareaAutosize from 'react-textarea-autosize';\r\n\r\n/*\r\nComboBox Attributes\r\n- multiselect\r\n- dataType: string\r\n- inputType: ComboBox\r\n- fieldWidth\r\n- fieldLabel\r\n- isRequired\r\n- showHelpIcon\r\n- helpText\r\n- comboBoxValue\r\n- comboBoxLabel\r\n- comboBoxParentFieldName\r\n- comboBoxParentLinkAttribute\r\n- comboBoxChildLinkAttribute\r\n\r\nTextInput/MaskedTextInput Attributes\r\n- dataType: string, integer, numeric, date, datetime, time\r\n- inputType: TextInput / MaskedTextInput\r\n- fieldWidth\r\n- fieldHeight (multi row)\r\n- fieldLabel\r\n- isRequired\r\n- showHelpIcon\r\n- helpText\r\n- isHidden\r\n- sortOrder\r\n*/\r\n\r\nconst FormikInputGroup = ({\r\n comboClear, // reset flag for combos\r\n setComboClear, // set reset flag for combos\r\n datatype, // = 'string',\r\n // disabled = false, // Removed in favor of IsDisabled flag\r\n fieldLabel,\r\n FieldName,\r\n helpText,\r\n inputType, // = 'TextInput',\r\n IsVisible,\r\n IsDisabled,\r\n multiselect = false,\r\n // PageName, // section name e.g. Remarks, General, etc\r\n Precision,\r\n maxLength,\r\n showHelpIcon = false,\r\n validateFigField,\r\n comboBubbleWrap = {\r\n AddComboMutator: () => { },\r\n setNewComboValue: () => { },\r\n setNewComboOptions: () => { },\r\n },\r\n}) => {\r\n const dispatch = useDispatch();\r\n\r\n const [field, meta, helpers] = useField(FieldName);\r\n const [localFieldValue, setLocalFieldValue] = useState(field?.value);\r\n const [checkOpt, setCheckOpt] = useState('');\r\n const [comboValue, setComboValue] = useState('');\r\n const [characterCount, setCharacterCount] = useState(0);\r\n\r\n const listingFormData = useSelector(selectListingFormData);\r\n const agentFormData = useSelector(selectAgentFormData);\r\n const officeFormData = useSelector(selectOfficeFormData);\r\n const lookUpNames = useSelector(selectLookupNames);\r\n const allComboBoxOptions = useSelector(selectAllComboBoxOptions);\r\n const comboBoxOptions = useSelector(state => selectComboBoxOptions(state, FieldName, inputType === 'ComboBox'));\r\n const comboIsLoading = useSelector(state => state.formGeneration.comboIsLoading); // combo loading status\r\n const requiredFields = useSelector(state => selectRequiredStatusByFieldName(state, FieldName)); // returns isRequired prop per fieldname in the form\r\n const staticOptions = useSelector(state => selectYNOptions(state, FieldName));\r\n const status = useSelector(state => selectStatusByName(state, FieldName));\r\n const fieldIsVisible = IsVisible;\r\n const fieldIsDisabled = IsDisabled ?? false;\r\n const controlRef = useRef(null);\r\n\r\n // string array for combo placeholder to force display of TAP values in form\r\n const validationBubble = fieldValue => {\r\n helpers.setTouched(true);\r\n validateFigField(FieldName, fieldValue);\r\n };\r\n\r\n const comboChange = opt => {\r\n let blurValue = '';\r\n if (opt) {\r\n if (multiselect) {\r\n blurValue = opt?.map(option => option.value).join(',') ?? '';\r\n } else if (datatype !== 'bit') {\r\n blurValue = opt.value ?? '';\r\n setCheckOpt(opt);\r\n } else {\r\n blurValue = opt.value ?? '';\r\n }\r\n }\r\n setComboValue(opt ?? '');\r\n if (field?.value === blurValue) return;\r\n helpers.setValue(blurValue);\r\n validationBubble(blurValue);\r\n };\r\n\r\n // Combo values can be updated externally via redux (see usage of setComboSetValueDictionary and comboSetValueDictionary).\r\n useEffect(() => {\r\n if (inputType === 'ComboBox') {\r\n comboChange(comboValue);\r\n }\r\n }, [comboValue]);\r\n\r\n // sets combo value to empty to remove any values displaying\r\n useEffect(() => {\r\n if (comboClear && inputType === 'ComboBox') {\r\n setComboValue('');\r\n setComboClear(false);\r\n }\r\n }, [comboClear]);\r\n\r\n useEffect(() => {\r\n if (inputType === 'ComboBox') {\r\n dispatch(setComboSetValueDictionary({ [FieldName]: setComboValue }));\r\n }\r\n }, []);\r\n\r\n /*\r\n This is still here to update the comboBox, date time and bit fields.\r\n Because they read their values from state, this will need to potentially\r\n be moved at another time.\r\n */\r\n const updateFIGValues = updatedData => {\r\n if (updatedData) {\r\n Object.entries(updatedData).map(([key, value]) => {\r\n if (field.name !== key) return null;\r\n\r\n switch (inputType) {\r\n case 'TextInput':\r\n if (datatype === 'bit') {\r\n let bitValue;\r\n if (value != null && value !== '') {\r\n if (typeof value === 'string') {\r\n bitValue = value === 'true' ? 1 : 0;\r\n } else if (typeof value === 'boolean') {\r\n bitValue = value === true ? 1 : 0;\r\n } else if (typeof value === 'number') {\r\n bitValue = value;\r\n }\r\n }\r\n if (bitValue != null) {\r\n const option = {\r\n label: bitValue ? 'Yes' : 'No',\r\n value: bitValue,\r\n };\r\n comboChange(option);\r\n }\r\n }\r\n break;\r\n\r\n case 'ComboBox':\r\n if (comboBoxOptions?.length) {\r\n const multiSelectedOptions = [];\r\n let singleSelectOption = null;\r\n comboBoxOptions.forEach(opt => {\r\n // checking that field names and combo options match popfield value to display\r\n if (value) {\r\n if (multiselect) {\r\n value.split(',').map(val => {\r\n if (val === opt.value) {\r\n multiSelectedOptions.push(opt);\r\n }\r\n return null;\r\n });\r\n }\r\n if (value === opt.value) {\r\n if (!multiselect) {\r\n singleSelectOption = opt;\r\n }\r\n }\r\n }\r\n });\r\n if (multiselect) {\r\n comboChange(multiSelectedOptions);\r\n }\r\n if (!multiselect) {\r\n comboChange(singleSelectOption);\r\n }\r\n }\r\n break;\r\n\r\n default: break;\r\n }\r\n return null;\r\n });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (listingFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFIGValues(listingFormData);\r\n }\r\n }, [listingFormData, allComboBoxOptions]);\r\n\r\n useEffect(() => {\r\n if (agentFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFIGValues(agentFormData);\r\n }\r\n }, [agentFormData, allComboBoxOptions]);\r\n\r\n useEffect(() => {\r\n if (officeFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFIGValues(officeFormData);\r\n }\r\n }, [officeFormData, allComboBoxOptions]);\r\n\r\n const sameValue = (oldValue, newValue) => {\r\n if (oldValue === newValue) return true;\r\n if (oldValue?.toString() === newValue?.toString()) return true;\r\n // if (!oldValue && !newValue) return true;\r\n return false;\r\n };\r\n\r\n const handleBlur = e => {\r\n let validationValue = e.target.value;\r\n const isNumber = datatype === 'numeric' || datatype === 'decimal' || datatype === 'integer';\r\n if (isNumber && typeof (validationValue) === 'string') {\r\n validationValue = validationValue.replace(/,/g, '');\r\n }\r\n if (sameValue(field?.value, validationValue)) return;\r\n helpers.setValue(validationValue);\r\n validationBubble(validationValue);\r\n };\r\n\r\n const handleChange = ({ target }) => {\r\n setLocalFieldValue(target.value);\r\n setCharacterCount(target.value.length);\r\n };\r\n\r\n const handleFocus = () => {\r\n controlRef.current.focus();\r\n };\r\n\r\n const handleKeyPress = e => {\r\n if (e.key === 'Enter') {\r\n e.target.blur();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (inputType !== 'TextInput') return;\r\n if (!(datatype === 'string' || datatype === 'integer' || datatype === 'decimal' || datatype === 'numeric')) return;\r\n if (field?.value == null || field.value === localFieldValue) return;\r\n setLocalFieldValue(field.value);\r\n }, [field?.value]);\r\n\r\n // display an asterisk beside the field label if a field is required\r\n const isRequiredSymbol = requiredFields ?  * : '';\r\n\r\n const classNames = 'form-group';\r\n // if (!fieldIsVisible) classNames = 'd-none'; // this almost works, but isVisible is not being returned properly.\r\n if (!fieldIsVisible) return null;\r\n\r\n return (\r\n
    \r\n \r\n {fieldLabel}\r\n {isRequiredSymbol}\r\n \r\n {\r\n showHelpIcon && (\r\n {helpText}}\r\n >\r\n \r\n \r\n )\r\n }\r\n {\r\n inputType === 'TextInput' && (\r\n <>\r\n {\r\n (datatype === 'string' && maxLength < 200)\r\n && (\r\n <>\r\n
    \r\n {fieldLabel.includes('URL') && (
    )}\r\n \r\n {(!fieldIsDisabled && maxLength > 50) && (\r\n
    \r\n
    \r\n {maxLength > 0 && !fieldIsDisabled ? `${characterCount} / ${maxLength}` : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n \r\n )\r\n }\r\n {\r\n (datatype === 'string' && maxLength >= 200)\r\n && (\r\n <>\r\n
    \r\n {fieldLabel.includes('URL') && (
    )}\r\n \r\n {(!fieldIsDisabled && maxLength > 50) && (\r\n
    \r\n
    \r\n {maxLength > 0 && !fieldIsDisabled ? `${characterCount} / ${maxLength}` : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n \r\n )\r\n }\r\n {\r\n datatype === 'integer'\r\n && (\r\n \r\n )\r\n }\r\n {\r\n datatype === 'bit'\r\n && (\r\n \r\n )\r\n }\r\n {\r\n datatype === 'numeric'\r\n && (\r\n
    \r\n {(fieldLabel.includes('Price') || fieldLabel.includes('Tax') || fieldLabel.includes('Rent') || fieldLabel.includes('Fee')) && (
    $
    )}\r\n \r\n {(fieldLabel.includes('Price') || fieldLabel.includes('Tax') || fieldLabel.includes('Rent') || fieldLabel.includes('Fee')) && (
    00
    )}\r\n
    \r\n )\r\n }\r\n \r\n )\r\n }\r\n {\r\n inputType === 'ComboBox' && !multiselect\r\n && (\r\n ({ ...styles, zIndex: 9999 }),\r\n }}\r\n />\r\n )\r\n }\r\n {\r\n inputType === 'ComboBox' && multiselect\r\n && (\r\n ({\r\n ...styles,\r\n backgroundColor: data?.label?.endsWith('(disabled)')\r\n ? 'hsl(0, 0%, 60%)'\r\n : styles.backgroundColor,\r\n }),\r\n menuPortal: styles => ({ ...styles, zIndex: 9999 }),\r\n }}\r\n />\r\n )\r\n }\r\n {\r\n meta && status && status.errorMessage ? (\r\n
    {status.errorMessage}
    \r\n ) : null\r\n }\r\n {inputType === 'ComboBox'\r\n && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nFormikInputGroup.propTypes = {\r\n comboClear: PropTypes.bool,\r\n setComboClear: PropTypes.func,\r\n datatype: PropTypes.string,\r\n // disabled: PropTypes.bool,\r\n fieldLabel: PropTypes.string,\r\n FieldName: PropTypes.string,\r\n helpText: PropTypes.string,\r\n inputType: PropTypes.oneOf(['ComboBox', 'TextInput']),\r\n IsVisible: PropTypes.bool,\r\n IsDisabled: PropTypes.bool,\r\n multiselect: PropTypes.bool,\r\n // PageName: PropTypes.string,\r\n Precision: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n showHelpIcon: PropTypes.bool,\r\n validateFigField: PropTypes.func,\r\n comboBubbleWrap: PropTypes.shape({\r\n AddComboMutator: PropTypes.func,\r\n setNewComboValue: PropTypes.func,\r\n setNewComboOptions: PropTypes.func,\r\n }),\r\n};\r\n\r\nexport default FormikInputGroup;\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const selectPhotoMetaCollection = createSelector(({ photo }) => photo.photoMetaCollection, result => result);\r\n\r\nexport const selectPhotosToUpload = createSelector(\r\n selectPhotoMetaCollection,\r\n photos => {\r\n if (!photos) return null;\r\n return photos.filter(p => !p.IsDeleted && !p.externalURL && !p.IsError);\r\n },\r\n);\r\n\r\nexport const selectPhotosToDisplay = createSelector(selectPhotoMetaCollection,\r\n photos => {\r\n if (!photos) return null;\r\n return photos.filter(pm => !pm.IsDeleted && pm.externalURL);\r\n });\r\n\r\nexport const selectValidPhotos = createSelector(selectPhotoMetaCollection, photoMetas => photoMetas.filter(pM => !pM.IsDeleted));\r\n\r\nexport const selectPhotoToEdit = createSelector(({ photo }) => photo.editPhotoMeta, result => result);\r\n\r\nexport const selectMaxSortOrder = createSelector(selectPhotoMetaCollection, allPhotos => {\r\n if (!allPhotos) return 0;\r\n if (allPhotos.length === 0) return 0;\r\n return allPhotos.filter(photoMeta => !photoMeta.IsDeleted).length;\r\n});\r\n\r\nexport const selectPhotoQueueLength = createSelector(selectPhotoMetaCollection, allPhotos => {\r\n if (!allPhotos) return 0;\r\n if (allPhotos.length === 0) return 0;\r\n return allPhotos.filter(photo => !photo.IsUploaded && !photo.IsError).length;\r\n});\r\n\r\nexport const selectDisplayedPhotoCount = createSelector(selectPhotosToDisplay, displayPhotos => displayPhotos.length);\r\n","/* eslint-disable react/prop-types */\r\nimport { useEffect } from 'react';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport {\r\n selectLookupNames,\r\n selectAllComboBoxOptions,\r\n selectFormDefinition,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport {\r\n setFormDataInitialized,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { setRepeatableSectionCount } from '@redux/modules/listing';\r\nimport { selectPhotoMetaCollection } from '@redux/selectors/PhotoSelector';\r\n\r\nconst FormikFieldUpdater = ({\r\n agentGroupType,\r\n agentLookup,\r\n agentOfficeLookup,\r\n agentFormData,\r\n currCoords,\r\n officeLookup,\r\n officeManagerLookup,\r\n officeFormData,\r\n listingFormData,\r\n runValidation,\r\n}) => {\r\n const formDefinition = useSelector(selectFormDefinition);\r\n const lookUpNames = useSelector(selectLookupNames);\r\n const allComboBoxOptions = useSelector(selectAllComboBoxOptions);\r\n const photoMetaCollection = useSelector(selectPhotoMetaCollection);\r\n const { values, setFieldValue } = useFormikContext();\r\n // const newSortOrder = useSelector(selectListingPhotoSortOrder);\r\n const dispatch = useDispatch();\r\n const generateComboBoxOptions = currComboOptionObject => (\r\n currComboOptionObject.data.flatMap(currOption => {\r\n if (!currOption.Active || !currOption.ParentIsActive) return [];\r\n\r\n return [{\r\n label: currOption.Description,\r\n value: `${currOption.Code ? currOption.Code : ''}`,\r\n parents: currOption.Parents,\r\n }];\r\n })\r\n );\r\n\r\n useEffect(() => {\r\n if (values?.Photos) {\r\n if (photoMetaCollection.length === 0 && Object.keys(values.Photos).length !== 0) values.Photos = {};\r\n }\r\n dispatch(setRepeatableSectionCount(values));\r\n }, [values.Rooms, values.Photos, values.Supplements, values.OpenHouses, values.Doors, values.Parcels, values.Units, values.History]);\r\n\r\n const updateFormikValues = updatedData => {\r\n if (!updatedData) return;\r\n const updatedWhiteList = Object.keys(updatedData);\r\n\r\n const formDefinitionFlatMap = formDefinition.flatMap(field => {\r\n if (!updatedWhiteList.includes(field.FieldName)) return [];\r\n return [{ ...field }];\r\n });\r\n\r\n const comboBoxFlatMap = allComboBoxOptions.flatMap(comboOption => {\r\n if (!updatedWhiteList.includes(comboOption.lookupFieldName)) return [];\r\n return [{ ...comboOption }];\r\n });\r\n\r\n formDefinitionFlatMap.map(currField => {\r\n const currentValue = updatedData[currField.FieldName];\r\n\r\n switch (currField.inputType) {\r\n case 'TextInput':\r\n if (currField.datatype === 'datetime' || currField.datatype === 'date') {\r\n if (!currentValue) break;\r\n // FormikField takes care of formatting and presentation\r\n setFieldValue(currField.FieldName, currentValue.split('T')[0]);\r\n } else if (currField.datatype === 'bit') {\r\n let bitValue;\r\n if (currentValue != null && currentValue !== '') {\r\n if (typeof currentValue === 'string') {\r\n bitValue = currentValue === 'true' ? 1 : 0;\r\n } else if (typeof currentValue === 'boolean') {\r\n bitValue = currentValue === true ? 1 : 0;\r\n } else if (typeof value === 'number') {\r\n bitValue = currentValue;\r\n }\r\n }\r\n setFieldValue(currField.FieldName, bitValue ?? '');\r\n } else {\r\n setFieldValue(currField.FieldName, currentValue);\r\n }\r\n break;\r\n\r\n case 'ComboBox':\r\n if (comboBoxFlatMap.length) {\r\n let currComboOptionDirty;\r\n comboBoxFlatMap.forEach(currOption => {\r\n if (currField.comboBoxLookupName === currOption.tableName) {\r\n currComboOptionDirty = currOption;\r\n }\r\n });\r\n\r\n const currentComboOption = currComboOptionDirty ? generateComboBoxOptions(currComboOptionDirty) : [];\r\n const multiSelectedOptions = [];\r\n let singleSelectOption = {};\r\n currentComboOption.forEach(opt => {\r\n if (currentValue) {\r\n if (currField.multiselect) {\r\n currentValue.split(',').map(val => {\r\n if (val === opt.value) {\r\n multiSelectedOptions.push(opt);\r\n }\r\n return null;\r\n });\r\n } else {\r\n // eslint-disable-next-line no-lonely-if\r\n if (currentValue === opt.value) {\r\n singleSelectOption = opt;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (currField.multiselect) {\r\n setFieldValue(currField.FieldName, multiSelectedOptions.map(option => option.value).join(','));\r\n } else {\r\n setFieldValue(currField.FieldName, singleSelectOption.value ?? '');\r\n }\r\n }\r\n break;\r\n\r\n default: break;\r\n }\r\n return null;\r\n });\r\n };\r\n\r\n // Goes through the office keys, and sets an object with the MemberOffice field name and AgentOffice field name\r\n const updatedOfficeKeys = (officeKeys, officeType) => (\r\n officeKeys.flatMap(key => {\r\n // eslint-disable-next-line no-unused-vars\r\n const [officePrefix, officeSuffix] = key.split('Office');\r\n const officeUpdatedKey = officeType.concat('Office', officeSuffix);\r\n let officeWhiteList = ['OfficeAOR', 'OfficeKeyNumeric', 'OfficeMlsId', 'OfficeName', 'OfficePhone'];\r\n\r\n if (officeType === 'Main') {\r\n officeWhiteList = ['OfficeKeyNumeric', 'OfficeMlsId', 'OfficeName'];\r\n }\r\n\r\n if (!officeWhiteList.includes(key)) return [];\r\n return [{\r\n base: key,\r\n updated: officeUpdatedKey,\r\n }];\r\n })\r\n );\r\n\r\n // Goes through the agent keys, and sets an object with the Member field name and Agent field name\r\n const updatedAgentKeys = (agentKeys, agentGroup) => (\r\n agentKeys.flatMap(key => {\r\n let agentWhiteList = ['MemberAOR', 'MemberEmail', 'MemberFullName', 'MemberMlsId', 'MemberDirectPhone'];\r\n if (agentGroup === 'OfficeManager') {\r\n agentWhiteList = ['MemberMlsId', 'MemberFullName', 'MemberKeyNumeric'];\r\n }\r\n if (!agentWhiteList.includes(key)) return [];\r\n\r\n let agentUpdatedKey;\r\n switch (key) {\r\n case 'MemberDirectPhone':\r\n if (agentGroup === 'ListAgent') {\r\n agentUpdatedKey = 'ListAgentDirectPhone';\r\n break;\r\n }\r\n if (agentGroup === 'CoListAgent') {\r\n agentUpdatedKey = 'CoListAgentMobilePhone';\r\n break;\r\n }\r\n if (agentGroup === 'BuyerAgent') {\r\n agentUpdatedKey = 'BuyerAgentDirectPhone';\r\n break;\r\n }\r\n if (agentGroup === 'CoBuyerAgent') {\r\n agentUpdatedKey = 'CoBuyerAgentMobilePhone';\r\n break;\r\n }\r\n break;\r\n\r\n default: {\r\n const [, agentSuffix] = key.split('Member');\r\n agentUpdatedKey = agentGroup.concat(agentSuffix);\r\n break;\r\n }\r\n }\r\n if (!agentUpdatedKey) return [];\r\n\r\n return [{\r\n base: key,\r\n updated: agentUpdatedKey,\r\n }];\r\n })\r\n );\r\n\r\n // Populating manager fields in create/edit office\r\n useEffect(() => {\r\n if (officeManagerLookup) {\r\n const memberKeys = Object.keys(officeManagerLookup);\r\n const memberGroup = 'OfficeManager';\r\n\r\n const filteredMemberKeys = updatedAgentKeys(memberKeys, memberGroup);\r\n filteredMemberKeys.map(key => {\r\n setFieldValue(key.updated, officeManagerLookup[key.base]);\r\n return null;\r\n });\r\n\r\n runValidation();\r\n }\r\n }, [officeManagerLookup]);\r\n\r\n // Populating agent lookup fields in create/edit listing\r\n useEffect(() => {\r\n if (agentLookup) {\r\n const memberKeys = Object.keys(agentLookup);\r\n const agentKeys = [];\r\n const officeKeys = [];\r\n\r\n let agentOfficeType = 'List';\r\n let agentGroup = 'ListAgent';\r\n\r\n if (agentGroupType) {\r\n [agentOfficeType] = agentGroupType.split('Agent');\r\n agentGroup = agentGroupType;\r\n }\r\n\r\n memberKeys.map(key => {\r\n if (key.includes('Member')) {\r\n agentKeys.push(key);\r\n } else if (key.includes('Office')) {\r\n officeKeys.push(key);\r\n }\r\n return null;\r\n });\r\n\r\n const filteredMemberKeys = updatedAgentKeys(agentKeys, agentGroup);\r\n const filteredOfficeKeys = updatedOfficeKeys(officeKeys, agentOfficeType);\r\n\r\n filteredMemberKeys.map(key => {\r\n setFieldValue(key.updated, agentLookup[key.base]);\r\n return null;\r\n });\r\n\r\n filteredOfficeKeys.map(key => {\r\n setFieldValue(key.updated, agentLookup[key.base]);\r\n return null;\r\n });\r\n\r\n const keyNumericKey = agentGroup.concat('KeyNumeric');\r\n setFieldValue(keyNumericKey, agentLookup.UniqueID);\r\n\r\n runValidation();\r\n }\r\n }, [agentLookup]);\r\n\r\n // This is for populating the office lookup fields when creating an agent\r\n useEffect(() => {\r\n if (agentOfficeLookup) {\r\n Object.entries(agentOfficeLookup).map(([key, value]) => {\r\n const officeWhiteList = ['OfficeKeyNumeric', 'OfficeID', 'OfficeMlsId', 'OfficeName']; // We know that these are the office fields are are looking for\r\n if (officeWhiteList.includes(key)) {\r\n setFieldValue(key, value);\r\n }\r\n return null;\r\n });\r\n runValidation();\r\n }\r\n }, [agentOfficeLookup]);\r\n\r\n // This is for populating the coordinates fields when using the location plotter\r\n useEffect(() => {\r\n if (currCoords) {\r\n Object.entries(currCoords).map(([key, value]) => {\r\n setFieldValue(key, value);\r\n return null;\r\n });\r\n runValidation();\r\n }\r\n }, [currCoords]);\r\n\r\n /*\r\n This useEffect listens to both the comboBox options and selectedListing\r\n because when editing a listing, we need to wait for the comboBox options\r\n to load before we update the fields, whereas with TAP we don't need to do that.\r\n */\r\n useEffect(() => {\r\n if (listingFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFormikValues(listingFormData);\r\n runValidation();\r\n dispatch(setFormDataInitialized());\r\n }\r\n }, [listingFormData, allComboBoxOptions]);\r\n\r\n // Populating fields when we edit an agent\r\n useEffect(() => {\r\n if (agentFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFormikValues(agentFormData);\r\n runValidation();\r\n dispatch(setFormDataInitialized());\r\n }\r\n }, [agentFormData, allComboBoxOptions]);\r\n\r\n // Populating the fields when editing an office\r\n useEffect(() => {\r\n if (officeFormData && (!lookUpNames?.lookupNames?.length || allComboBoxOptions?.length)) {\r\n updateFormikValues(officeFormData);\r\n runValidation();\r\n dispatch(setFormDataInitialized());\r\n }\r\n }, [officeFormData, allComboBoxOptions]);\r\n\r\n /*\r\n This is for when we are in the create/edit office form\r\n and do a Main Office Lookup\r\n */\r\n useEffect(() => {\r\n if (officeLookup) {\r\n const officeKeys = Object.keys(officeLookup);\r\n const filteredOfficeKeys = updatedOfficeKeys(officeKeys, 'Main');\r\n filteredOfficeKeys.map(key => {\r\n setFieldValue(key.updated, officeLookup[key.base]);\r\n return null;\r\n });\r\n runValidation();\r\n }\r\n }, [officeLookup]);\r\n\r\n return null;\r\n};\r\n\r\nexport default FormikFieldUpdater;\r\n","import isEmpty from 'lodash/isEmpty';\r\nimport { createSelector } from 'reselect';\r\nimport { isUndefined } from 'lodash';\r\nimport { listingDict } from '../constants/GeneralConstants';\r\n\r\nexport const selectRepeatableSectionCount = ({ listing }) => listing.repeatableSectionCount;\r\n\r\nexport const selectUploadedImages = ({ listing }) => listing.uploadedPhotos;\r\n\r\nexport const selectCurrentImages = ({ listing }) => listing.currentImages;\r\n\r\nexport const selectUploadedSupplements = ({ listing }) => listing.uploadedSupplements;\r\n\r\nexport const selectCurrentListing = ({ listing }) => listing?.listingClicked;\r\n\r\nexport const selectListingStdStatus = ({ listing }) => listing?.listingClicked?.StandardStatus;\r\n\r\nexport const selectListingStdStatusVerb = ({ listing }) => listing?.listingClicked?.StandardStatusVerb;\r\n\r\nexport const selectCurrentListingPreferredPhotoDetails = ({ listing }) => listing.listingPreferredPhotoDetails;\r\n\r\nexport const selectCurrentListingPhoto = ({ listing }) => listing.listingPhoto;\r\n\r\nexport const selectListingSelected = ({ listing }) => listing.selectedListing;\r\n\r\nexport const selectMyListings = ({ listing }) => listing.myListings;\r\n\r\nexport const selectListingSelectedPhotos = createSelector(selectListingSelected, selectedListing => selectedListing?.photos ?? []);\r\n\r\nexport const selectListingSelectedRooms = createSelector(selectListingSelected, selectedListing => selectedListing?.rooms ?? []);\r\n\r\nexport const selectListingSelectedSupplements = createSelector(selectListingSelected, selectedListing => selectedListing?.supplements ?? []);\r\n\r\nexport const selectListingSelectedOpenHouses = createSelector(selectListingSelected, selectedListing => selectedListing?.openHouses ?? []);\r\n\r\nexport const selectListingSelectedParcels = createSelector(selectListingSelected, selectedListing => selectedListing?.parcels ?? []);\r\n\r\nexport const selectListingSelectedDoors = createSelector(selectListingSelected, selectedListing => selectedListing?.doors ?? []);\r\n\r\nexport const selectListingSelectedUnits = createSelector(selectListingSelected, selectedListing => selectedListing?.units ?? []);\r\n\r\nexport const selectListingSelectedHistory = createSelector(selectListingSelected, selectedListing => selectedListing?.history ?? []);\r\n\r\nexport const getSelectedListingData = ({ listing }) => listing?.selectedListing?.listing;\r\n\r\nexport const selectListingPhotoSortOrder = ({ listing }) => listing.listingPhotoSortOrder;\r\n\r\nexport const selectListingCodeFromListing = createSelector(\r\n selectListingSelected,\r\n listing => listing?.PropertyType.toString().toLowerCase(),\r\n);\r\n\r\nexport const selectListingTypeForViewing = createSelector(\r\n selectListingCodeFromListing,\r\n listingType => listingDict[listingType],\r\n);\r\n\r\nexport const selectListingSelectedByFilled = ({ listing }) => {\r\n const selectedListing = [];\r\n const dict = {};\r\n if (!isEmpty(listing.selectedListing)) {\r\n let slctListingData;\r\n if (listing.selectedListing.listing) {\r\n slctListingData = listing.selectedListing.listing; // Loading a listing\r\n } else {\r\n [slctListingData] = listing.selectedListing; // TAP data\r\n }\r\n Object.entries(slctListingData).map(([key, value]) => {\r\n if (value !== null) {\r\n dict[key] = value;\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n if (!isEmpty(dict)) {\r\n selectedListing.push(dict);\r\n }\r\n return selectedListing;\r\n};\r\n\r\n// unused?\r\nexport const selectAutoPopSelectedByFieldName = ({ listing }, fieldName) => {\r\n const dict = {};\r\n if (listing.autoPopSelected) {\r\n const [slctListingData] = listing.autoPopSelected[0];\r\n Object.entries(slctListingData).map(([key, value]) => {\r\n if (key === fieldName) {\r\n dict[key] = value;\r\n }\r\n return null;\r\n });\r\n }\r\n return dict;\r\n};\r\n\r\n/* retrieves ListingId, UnparsedAddress and StandardStatus values from the current listing */\r\nexport const selectEditListingHeaderInfo = createSelector(selectListingSelected, listing => {\r\n const listingInfo = [];\r\n if (!isEmpty(listing)) {\r\n Object.entries(listing).map(([key, value]) => {\r\n if (key === 'listing') {\r\n const unitNumber = isUndefined(value?.UnitNumber) ? '' : `${value?.UnitNumber}, `;\r\n const streetNumber = isUndefined(value?.StreetNumber) ? '' : `${value?.StreetNumber} `;\r\n const streetName = isUndefined(value?.StreetName) ? '' : `${value?.StreetName} `;\r\n const streetSuffix = isUndefined(value?.StreetSuffix) ? '' : `${value?.StreetSuffix} `;\r\n const streetDirSuffix = isUndefined(value?.StreetDirSuffix) ? '' : `${value?.StreetDirSuffix}`;\r\n const unparsedAddress = value?.UnparsedAddress\r\n ? value?.UnparsedAddress\r\n : `${unitNumber}${streetNumber}${streetName}${streetSuffix}${streetDirSuffix}`;\r\n\r\n listingInfo.push({\r\n ListingId: value?.ListingId,\r\n PropertyType: value?.PropertyType,\r\n StandardStatus: value?.StandardStatus,\r\n UnparsedAddress: unparsedAddress,\r\n });\r\n }\r\n return null;\r\n });\r\n }\r\n return listingInfo;\r\n});\r\n\r\nexport const selectSectionsPerRepeatableSection = createSelector(selectRepeatableSectionCount, countListing => {\r\n const countPerSection = {};\r\n if (countListing) {\r\n const {\r\n Photos = [],\r\n Rooms = [],\r\n Supplements = [],\r\n OpenHouses = [],\r\n Doors = [],\r\n Parcels = [],\r\n Units = [],\r\n History = [],\r\n } = countListing;\r\n countPerSection.Photos = Photos.filter(photo => !photo);\r\n countPerSection.Rooms = Rooms.filter(room => !room);\r\n countPerSection.Supplements = Supplements.filter(supp => !supp);\r\n countPerSection.OpenHouses = OpenHouses.filter(openHouse => !openHouse);\r\n countPerSection.Doors = Doors.filter(door => !door);\r\n countPerSection.Parcels = Parcels.filter(parcel => !parcel);\r\n countPerSection.Units = Units.filter(unit => !unit);\r\n countPerSection.History = History.filter(hist => !hist);\r\n }\r\n return countPerSection;\r\n});\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const getSearchAgentResults = createSelector(({ agent }) => agent.agentSearchResults, results => results);\r\n\r\nexport const getAgentSelected = ({ agent }) => agent.agentSelected;\r\n\r\nexport const selectAgentPhotos = ({ agent }) => agent.agentPhotos;\r\n\r\nexport const selectAgentPreferredPhoto = ({ agent }) => agent.singleAgentPhoto;\r\n\r\nexport const selectAgentPreferredPhotoDetails = createSelector(selectAgentPhotos, photos => {\r\n let preferredPhoto = {};\r\n if (photos?.length > 0) {\r\n [preferredPhoto] = photos;\r\n photos?.map(singlePhoto => {\r\n if (singlePhoto.PreferredPhotoYN) preferredPhoto = singlePhoto;\r\n return null;\r\n });\r\n }\r\n return preferredPhoto;\r\n});\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\n\r\n// This will group the Address fields together\r\n\r\nconst Address = props => {\r\n const [cityField, setCityField] = useState({ FieldName: 'City' });\r\n const [countyField, setCountyField] = useState({ FieldName: 'CountyOrParish' });\r\n const [postalField, setPostalField] = useState({ FieldName: 'PostalCode' });\r\n const [provinceField, setProvinceField] = useState({ FieldName: 'StateOrProvince' });\r\n const [streetDirSufField, setStreetDirSufField] = useState({ FieldName: 'StreetDirSuffix' });\r\n const [streetNameField, setStreetNameField] = useState({ FieldName: 'StreetName' });\r\n const [streetNumField, setStreetNumField] = useState({ FieldName: 'StreetNumber' });\r\n const [streetSufField, setStreetSufField] = useState({ FieldName: 'StreetSuffix' });\r\n const [unitNumField, setUnitNumField] = useState({ FieldName: 'UnitNumber' });\r\n\r\n const { fields, validateFigField, comboBubbleWrap } = props;\r\n\r\n useEffect(() => {\r\n fields.forEach(field => {\r\n switch (field.FieldName) {\r\n case 'City':\r\n setCityField(field);\r\n break;\r\n case 'CountyOrParish':\r\n setCountyField(field);\r\n break;\r\n case 'PostalCode':\r\n setPostalField(field);\r\n break;\r\n case 'StateOrProvince':\r\n setProvinceField(field);\r\n break;\r\n case 'StreetDirSuffix':\r\n setStreetDirSufField(field);\r\n break;\r\n case 'StreetName':\r\n setStreetNameField(field);\r\n break;\r\n case 'StreetNumber':\r\n setStreetNumField(field);\r\n break;\r\n case 'StreetSuffix':\r\n setStreetSufField(field);\r\n break;\r\n case 'UnitNumber':\r\n setUnitNumField(field);\r\n break;\r\n default: break;\r\n }\r\n });\r\n }, [fields]);\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nAddress.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n comboBubbleWrap: PropTypes.shape({\r\n AddComboMutator: PropTypes.func,\r\n setNewComboValue: PropTypes.func,\r\n setNewComboOptions: PropTypes.func,\r\n }),\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default Address;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { SET_GROUP_TYPE } from '@redux/constants/ActionTypes';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\n\r\nconst AgentLookup = ({ fields, groupName, validateFigField }) => {\r\n const dispatch = useDispatch();\r\n const selectLoading = useSelector(state => state.agent.selectLoading);\r\n\r\n const agentFullNameField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('FULLNAME')), [fields]);\r\n const officeNameField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('OFFICENAME')), [fields]);\r\n\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const agentSearchClicked = () => {\r\n dispatch({ type: SET_GROUP_TYPE, groupType: groupName });\r\n };\r\n\r\n const onAgentCleared = () => {\r\n if (fields) {\r\n fields.map(field => {\r\n setFieldValue(field.FieldName, '');\r\n return null;\r\n });\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n groupName !== 'OfficeManager' && (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n agentSearchClicked()}\r\n variant=\"primary\"\r\n tooltipText=\"Agent Lookup\"\r\n disabled={selectLoading}\r\n >\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nAgentLookup.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n groupName: PropTypes.string,\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default AgentLookup;\r\n","import { useEffect, useRef } from 'react';\r\n\r\n// https://blog.logrocket.com/how-to-get-previous-props-state-with-react-hooks/\r\n\r\nconst usePrevious = value => {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n};\r\n\r\nexport default usePrevious;\r\n","import React, {\r\n useEffect,\r\n useState,\r\n useMemo,\r\n useCallback,\r\n} from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport {\r\n Autocomplete, GoogleMap, LoadScript, Marker,\r\n} from '@react-google-maps/api';\r\n\r\nimport { useField } from 'formik';\r\n\r\nimport {\r\n selectComboBoxOptions,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport usePrevious from '@hooks/usePrevious';\r\n\r\nconst defaultCenter = {\r\n lat: 53.54288713007532,\r\n lng: -113.49615377351157,\r\n};\r\n\r\nconst containerStyles = {\r\n width: '100%',\r\n height: '60vh',\r\n};\r\n\r\nconst defaultLibraries = ['places', 'geometry'];\r\n\r\nconst LocationPlotterMap = ({ onCoordsClicked }) => {\r\n const [autocompleteInstance, setAutocompleteInstance] = useState(null);\r\n const [mapInstance, setMapInstance] = useState(null);\r\n const [zoom, setZoom] = useState(5);\r\n\r\n const [zoomToLocation, setZoomToLocation] = useState(false);\r\n\r\n const [latValue, setLatValue] = useState(null);\r\n const [lngValue, setLngValue] = useState(null);\r\n\r\n const [latField] = useField('Latitude');\r\n const [lngField] = useField('Longitude');\r\n\r\n const [streetNoField] = useField('StreetNumber');\r\n const [streetNameField] = useField('StreetName');\r\n const [postalCodeField] = useField('PostalCode');\r\n const [streetSuffixField] = useField('StreetSuffix'); // ComboBox\r\n const [streetDirSuffixField] = useField('StreetDirSuffix'); // ComboBox\r\n const [cityField] = useField('City'); // ComboBox\r\n const [countyField] = useField('CountyOrParish'); // ComboBox\r\n const [provinceField] = useField('StateOrProvince'); // ComboBox\r\n\r\n const streetSuffixOptions = useSelector(state => selectComboBoxOptions(state, 'StreetSuffix'));\r\n const streetDirSuffixOptions = useSelector(state => selectComboBoxOptions(state, 'StreetDirSuffix'));\r\n const cityOptions = useSelector(state => selectComboBoxOptions(state, 'City'));\r\n const countyOptions = useSelector(state => selectComboBoxOptions(state, 'CountyOrParish'));\r\n const provinceOptions = useSelector(state => selectComboBoxOptions(state, 'StateOrProvince'));\r\n\r\n const streetNo = useMemo(() => streetNoField.value ?? '', [streetNoField]);\r\n const streetName = useMemo(() => streetNameField.value ?? '', [streetNameField]);\r\n const postalCode = useMemo(() => postalCodeField.value ?? '', [postalCodeField]);\r\n const streetSuffix = useMemo(() => streetSuffixOptions.find(opt => opt.value === streetSuffixField.value)?.label ?? '', [streetSuffixField.value, streetSuffixOptions]);\r\n const streetDirSuffix = useMemo(() => streetDirSuffixOptions.find(opt => opt.value === streetDirSuffixField.value)?.label ?? '', [streetDirSuffixField.value, streetSuffixOptions]);\r\n const city = useMemo(() => cityOptions.find(opt => opt.value === cityField.value)?.label ?? '', [cityField.value, streetSuffixOptions]);\r\n const county = useMemo(() => countyOptions.find(opt => opt.value === countyField.value)?.label ?? '', [countyField.value, streetSuffixOptions]);\r\n const province = useMemo(() => provinceOptions.find(opt => opt.value === provinceField.value)?.value ?? '', [provinceField.value, streetSuffixOptions]);\r\n\r\n const [addressInputValue, setAddressInputValue] = useState('');\r\n\r\n const [formAddress, setFormAddress] = useState('');\r\n useEffect(() => {\r\n const cityOrCounty = city || county;\r\n const address = `${streetNo} ${streetName} ${streetSuffix} ${streetDirSuffix}, ${cityOrCounty}, ${province} ${postalCode}`\r\n .replace(/\\s+,/g, ',') // moves any spaced comma next to the leftmost address token\r\n .trim() // cleanups any leading and trailing white space\r\n .replace(/^,+|,+$/g, '') // cleanups leading and trailing commas\r\n .replace(/,+/g, ',') // ensures only one comma is used between address tokens\r\n .replace(/\\s+/g, ' ') // ensures only one space is used between address tokens\r\n .trim(); // cleanups any leading and trailing white space\r\n setFormAddress(address);\r\n setAddressInputValue(address);\r\n }, [streetNo, streetName, streetSuffix, streetDirSuffix, city, county, province, postalCode]);\r\n\r\n const [isModalShown, setIsModalShown] = useState(false);\r\n const previousIsModalShown = usePrevious(isModalShown);\r\n const onModalShow = () => setIsModalShown(true);\r\n const onModalHide = () => setIsModalShown(false);\r\n\r\n useEffect(() => {\r\n window.jQuery('#locationPlotterModal').on('show.bs.modal', onModalShow);\r\n window.jQuery('#locationPlotterModal').on('hide.bs.modal', onModalHide);\r\n return () => {\r\n window.jQuery('#locationPlotterModal').off('show.bs.modal', onModalShow);\r\n window.jQuery('#locationPlotterModal').off('hide.bs.modal', onModalHide);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (previousIsModalShown && !isModalShown && !addressInputValue) {\r\n // Populate address field with existing form address when exiting modal without an address.\r\n setAddressInputValue(formAddress);\r\n }\r\n }, [isModalShown]);\r\n\r\n useEffect(() => {\r\n if (latField.value !== '') {\r\n const parseLat = parseFloat(latField.value);\r\n\r\n if (!latValue || parseLat !== latValue) {\r\n setLatValue(parseLat);\r\n }\r\n setZoomToLocation(true);\r\n } else if (latValue) {\r\n setLatValue(null); // If the user clears the lng coordinate we remove it from the map\r\n }\r\n }, [latField.value]);\r\n\r\n useEffect(() => {\r\n if (lngField.value !== '') {\r\n const parseLng = parseFloat(lngField.value);\r\n\r\n if (!lngValue || parseLng !== lngValue) {\r\n setLngValue(parseLng);\r\n }\r\n setZoomToLocation(true);\r\n } else if (lngValue) {\r\n setLngValue(null); // If the user clears the lng coordinate we remove it from the map\r\n }\r\n }, [lngField.value]);\r\n\r\n useEffect(() => {\r\n if (mapInstance && latValue && lngValue) {\r\n mapInstance.panTo({ lat: latValue, lng: lngValue });\r\n\r\n if (zoomToLocation) {\r\n mapInstance.setZoom(18);\r\n setZoom(18);\r\n }\r\n }\r\n }, [mapInstance, latValue, lngValue, zoomToLocation]);\r\n\r\n const onPlaceChanged = () => {\r\n if (autocompleteInstance) {\r\n const place = autocompleteInstance.getPlace();\r\n\r\n if (!place.geometry) return;\r\n if (mapInstance) {\r\n if (place.geometry.viewport) {\r\n mapInstance.fitBounds(place.geometry.viewport);\r\n } else {\r\n mapInstance.setCenter(place.geometry.location);\r\n mapInstance.setZoom(17);\r\n }\r\n }\r\n setLatValue(place.geometry.location.lat());\r\n setLngValue(place.geometry.location.lng());\r\n onCoordsClicked({\r\n Latitude: place.geometry.location.lat().toString(),\r\n Longitude: place.geometry.location.lng().toString(),\r\n });\r\n setAddressInputValue(place.formatted_address);\r\n }\r\n };\r\n\r\n const onMapClick = e => {\r\n if (mapInstance) {\r\n setZoomToLocation(false);\r\n setLatValue(e.latLng.lat());\r\n setLngValue(e.latLng.lng());\r\n onCoordsClicked({\r\n Latitude: e.latLng.lat().toString(),\r\n Longitude: e.latLng.lng().toString(),\r\n });\r\n }\r\n };\r\n\r\n const onMapLoad = useCallback(map => {\r\n setMapInstance(map);\r\n const parcelLayer = new window.google.maps.ImageMapType({\r\n getTileUrl: (c, z) => `${process.env.REACT_APP_MAPS_PARCEL_LAYER}${z}/${c.x}/${c.y}.png`,\r\n maxZoom: 20,\r\n minZoom: 16,\r\n tileSize: new window.google.maps.Size(256, 256),\r\n name: 'Parcels',\r\n });\r\n\r\n const neighbourhoodLayer = new window.google.maps.ImageMapType({\r\n getTileUrl: (c, z) => `${process.env.REACT_APP_MAPS_NEIGHBOURHOOD_LAYER}${z}/${c.x}/${c.y}.png`,\r\n maxZoom: 15,\r\n minZoom: 12,\r\n tileSize: new window.google.maps.Size(256, 256),\r\n name: 'Neighbourhoods',\r\n });\r\n\r\n const municipalityLayer = new window.google.maps.ImageMapType({\r\n getTileUrl: (c, z) => `${process.env.REACT_APP_MAPS_MUNICIPALITY_LAYER}${z}/${c.x}/${c.y}.png`,\r\n maxZoom: 13,\r\n minZoom: 7,\r\n tileSize: new window.google.maps.Size(256, 256),\r\n name: 'Municipalities',\r\n });\r\n map.overlayMapTypes.insertAt(0, parcelLayer);\r\n map.overlayMapTypes.insertAt(1, neighbourhoodLayer);\r\n map.overlayMapTypes.insertAt(2, municipalityLayer);\r\n }, []);\r\n\r\n const onMapUnmount = () => {\r\n setMapInstance(null);\r\n };\r\n\r\n const onAutoCompleteLoad = autocomplete => {\r\n setAutocompleteInstance(autocomplete);\r\n };\r\n\r\n const onAutoCompleteUnload = () => {\r\n setAutocompleteInstance(null);\r\n };\r\n\r\n const handleClear = () => {\r\n document.getElementById('locationPlotter').value = '';\r\n };\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n setAddressInputValue(e.value)}\r\n value={addressInputValue}\r\n />\r\n
    \r\n Clear}\r\n >\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {\r\n latValue && lngValue\r\n && (\r\n \r\n )\r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nLocationPlotterMap.propTypes = {\r\n onCoordsClicked: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default LocationPlotterMap;\r\n","import React, { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { saveCurrentCoordinates } from '@redux/modules/listing';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport Modal from '@components/smartAdminUI/Modal';\r\nimport LocationPlotterMap from '@components/form/formComponents/inputGroups/locationPlotter/LocationPlotterMap';\r\n\r\nconst MapModal = () => {\r\n const dispatch = useDispatch();\r\n const [updatedCords, setUpdatedCords] = useState(null);\r\n\r\n const onUpdateLocationClicked = () => {\r\n if (updatedCords) {\r\n dispatch(saveCurrentCoordinates(updatedCords));\r\n }\r\n };\r\n\r\n const updateCoords = coords => {\r\n setUpdatedCords(coords);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Update Location\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MapModal;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport MapModal from '@components/form/formComponents/inputGroups/locationPlotter/MapModal';\r\n\r\n// Will populate the latitude and longitude\r\n\r\nconst LocationPlotter = ({\r\n fields,\r\n validateFigField,\r\n}) => {\r\n const latField = useMemo(() => fields.find(field => field.FieldName === 'Latitude'), [fields]);\r\n const longField = useMemo(() => fields.find(field => field.FieldName === 'Longitude'), [fields]);\r\n\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const onLocationCleared = () => {\r\n if (fields) {\r\n fields.map(field => {\r\n setFieldValue(field.FieldName, '');\r\n return null;\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nLocationPlotter.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default LocationPlotter;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\n\r\nconst OfficeLookup = ({ fields, validateFigField }) => {\r\n const officeNameField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('OFFICENAME')), [fields]);\r\n\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const onOfficeClear = () => {\r\n if (fields) {\r\n fields.map(field => {\r\n setFieldValue(field.FieldName, '');\r\n return null;\r\n });\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nOfficeLookup.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default OfficeLookup;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { useField, useFormikContext } from 'formik';\r\n\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\n// Contains one numeric field and one units lookup field\r\n\r\nconst OneDMeasurement = props => {\r\n const { fields, validateFigField } = props;\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const [currUnit, setCurrUnit] = useState('');\r\n\r\n const areaField = useMemo(() => fields.find(field => !(field.FieldName.toUpperCase().includes('UNITS'))), [fields]);\r\n const unitsField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('UNITS')), [fields]);\r\n\r\n const [areaFormikField] = useField(areaField?.FieldName);\r\n const [unitsFormikField] = useField(unitsField?.FieldName);\r\n\r\n // updates current unit value from formik\r\n useEffect(() => {\r\n if (unitsFormikField.name) {\r\n if (!isEmpty(unitsFormikField.value)) {\r\n setCurrUnit(unitsFormikField.value);\r\n }\r\n }\r\n }, [unitsFormikField]);\r\n\r\n const convertFieldMeasurements = () => {\r\n let areaValue = parseFloat(areaFormikField.value);\r\n /*\r\n currUnit is the measurement we are changing from\r\n unitsFormikField is the measurement we are changing to\r\n */\r\n\r\n switch (currUnit) {\r\n case 'AC': {\r\n switch (unitsFormikField.value) {\r\n case 'HA': {\r\n areaValue /= 2.471;\r\n break;\r\n }\r\n case 'SF': {\r\n areaValue *= 43560;\r\n break;\r\n }\r\n case 'SM': {\r\n areaValue /= 0.000247105;\r\n break;\r\n }\r\n default: break;\r\n }\r\n break;\r\n }\r\n case 'HA': {\r\n switch (unitsFormikField.value) {\r\n case 'AC': {\r\n areaValue *= 2.471;\r\n break;\r\n }\r\n case 'SF': {\r\n areaValue *= 107639;\r\n break;\r\n }\r\n case 'SM': {\r\n areaValue *= 10000;\r\n break;\r\n }\r\n default: break;\r\n }\r\n break;\r\n }\r\n case 'SF': {\r\n switch (unitsFormikField.value) {\r\n case 'AC': {\r\n areaValue /= 43560;\r\n break;\r\n }\r\n case 'HA': {\r\n areaValue /= 107640;\r\n break;\r\n }\r\n case 'SM': {\r\n areaValue *= 0.09290304;\r\n break;\r\n }\r\n default: break;\r\n }\r\n break;\r\n }\r\n case 'SM': {\r\n switch (unitsFormikField.value) {\r\n case 'AC': {\r\n areaValue *= 0.000247105;\r\n break;\r\n }\r\n case 'HA': {\r\n areaValue /= 10000;\r\n break;\r\n }\r\n case 'SF': {\r\n areaValue *= 10.7639104167;\r\n break;\r\n }\r\n default: break;\r\n }\r\n break;\r\n }\r\n default: break;\r\n }\r\n\r\n setFieldValue(areaField.FieldName, areaValue);\r\n setCurrUnit(unitsFormikField.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (unitsFormikField.value !== currUnit && areaFormikField.value > 0) {\r\n convertFieldMeasurements();\r\n }\r\n }, [unitsFormikField.value, areaFormikField.value]);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nOneDMeasurement.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default OneDMeasurement;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useField, useFormikContext } from 'formik';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\n\r\n// Contains two numeric fields and one units lookup field\r\n\r\nconst TwoDMeasurement = props => {\r\n const { fields, validateFigField } = props;\r\n const { setFieldValue } = useFormikContext();\r\n\r\n const [currUnit, setCurrUnit] = useState('');\r\n\r\n const lengthField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('LENGTH') || field.FieldName.toUpperCase().includes('FRONTAGEINPUT')), [fields]);\r\n const unitsField = useMemo(() => fields.find(field => field.FieldName.toUpperCase().includes('UNITS')), [fields]);\r\n const widthField = useMemo(() => fields.find(field => {\r\n if (field.FieldName.toUpperCase().includes('LENGTH') || field.FieldName.toUpperCase().includes('FRONTAGEINPUT')) return false;\r\n if (field.FieldName.toUpperCase().includes('UNITS')) return false;\r\n return true;\r\n }), [fields]);\r\n\r\n const [lengthFormikField] = useField(lengthField?.FieldName);\r\n const [unitsFormikField] = useField(unitsField?.FieldName);\r\n const [widthFormikField] = useField(widthField?.FieldName);\r\n\r\n // updates current unit value from formik\r\n useEffect(() => {\r\n if (unitsFormikField.name) {\r\n if (!unitsFormikField.value) {\r\n setCurrUnit(unitsFormikField.value);\r\n }\r\n }\r\n }, [unitsFormikField]);\r\n\r\n const convertFieldMeasurements = () => {\r\n let lengthValue = parseFloat(lengthFormikField.value);\r\n let widthValue = parseFloat(widthFormikField.value);\r\n\r\n // Convert between feet and meters\r\n if (currUnit === 'M') {\r\n lengthValue *= 3.281;\r\n widthValue *= 3.281;\r\n } else if (currUnit === 'F') {\r\n lengthValue /= 3.281;\r\n widthValue /= 3.281;\r\n }\r\n setFieldValue(lengthField.FieldName, lengthValue); // Set the length field in Formik state\r\n setFieldValue(widthField.FieldName, widthValue); // Set the width field in Formik state\r\n setCurrUnit(unitsFormikField.value); // Update the state\r\n };\r\n\r\n useEffect(() => {\r\n if (unitsFormikField.value !== currUnit && lengthFormikField.value && widthFormikField.value) {\r\n convertFieldMeasurements();\r\n }\r\n }, [unitsFormikField.value, lengthFormikField.value, widthFormikField.value]);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTwoDMeasurement.propTypes = {\r\n // fields: PropTypes.arrayOf(PropTypes.shape({\r\n // datatype: PropTypes.string,\r\n // fieldLabel: PropTypes.string,\r\n // FieldName: PropTypes.string.isRequired,\r\n // FormName: PropTypes.oneOf([\r\n // 'COM',\r\n // 'FARM',\r\n // 'LAND',\r\n // 'MOB',\r\n // 'MULT',\r\n // 'RES',\r\n // 'RNT',\r\n // ]).isRequired,\r\n // helpText: PropTypes.string,\r\n // inputType: PropTypes.oneOf(['ComboBox', 'TextInput']).isRequired,\r\n // IsActive: PropTypes.bool,\r\n // IsGrandfathered: PropTypes.bool,\r\n // IsRequired: PropTypes.bool,\r\n // layoutGroupName: PropTypes.string,\r\n // layoutGroupType: PropTypes.string,\r\n // maxLength: PropTypes.number,\r\n // multiselect: PropTypes.bool,\r\n // pageIsRepeatableComponent: PropTypes.bool,\r\n // PageName: PropTypes.string,\r\n // pageSortOrder: PropTypes.number.isRequired,\r\n // Precision: PropTypes.number,\r\n // RowID: PropTypes.number.isRequired,\r\n // showHelpIcon: PropTypes.bool.isRequired,\r\n // SortOrder: PropTypes.number.isRequired,\r\n // ValidationMessage: PropTypes.string,\r\n // ValidationRule: PropTypes.string,\r\n // })).isRequired,\r\n fields: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n validateFigField: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TwoDMeasurement;\r\n","/* eslint-disable jsx-a11y/label-has-associated-control */\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport Select from 'react-select';\r\nimport { useField, useFormikContext } from 'formik';\r\nimport { selectComboBoxOptions, selectStatusByName } from '@redux/selectors/FormSelector';\r\n\r\nconst SupplementComboBox = ({ uid, supplementType }) => {\r\n const name = `Supplements.[${uid}].SupplementType`;\r\n const [field, meta] = useField(name);\r\n const { setFieldTouched, setFieldValue } = useFormikContext();\r\n\r\n const supplementTypeOptions = useSelector(state => selectComboBoxOptions(state, 'SupplementType'));\r\n const suppType = useMemo(() => supplementTypeOptions.find(opt => opt.value === supplementType), [supplementType, supplementTypeOptions]);\r\n\r\n const status = useSelector(state => selectStatusByName(state, 'Supplements'));\r\n\r\n // FlexRule does not return a validation result per supplement instance, but instead a single status for all supplements.\r\n // Therefore, it is necessary to check MEASURE and JUDICIAL (the only two valid selections) before displaying validation error message.\r\n const isValid = (meta.touched && status?.errorMessage && field.value !== 'MEASURE' && field.value !== 'JUDICIAL');\r\n\r\n return (\r\n
    \r\n \r\n setFieldTouched(name, true)}\r\n // react-select sends synthetic events, and will not work with formik change handler\r\n onChange={option => ((option === null) ? setFieldValue(name, '') : setFieldValue(name, option.value))}\r\n closeMenuOnSelect\r\n value={suppType}\r\n isClearable // option will be null if user clears combo box\r\n options={supplementTypeOptions}\r\n placeholder=\"Choose one\"\r\n />\r\n {isValid && (
    {status.errorMessage}
    )}\r\n
    \r\n );\r\n};\r\n\r\nSupplementComboBox.propTypes = {\r\n uid: PropTypes.string,\r\n supplementType: PropTypes.string,\r\n};\r\n\r\nexport default SupplementComboBox;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useField } from 'formik';\r\n\r\nconst SupplementDescription = ({ uid }) => {\r\n const name = `Supplements.[${uid}].Description`;\r\n const [field, , helpers] = useField(name);\r\n const [localFieldValue, setLocalFieldValue] = useState(field?.value);\r\n\r\n const handleBlur = e => {\r\n if (field?.value === e.target.value) return;\r\n helpers.setValue(e.target.value);\r\n };\r\n\r\n const handleChange = ({ target }) => setLocalFieldValue(target.value);\r\n\r\n useEffect(() => {\r\n if (field?.value == null || field.value === localFieldValue) return;\r\n setLocalFieldValue(field.value);\r\n }, [field?.value]);\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nSupplementDescription.propTypes = {\r\n uid: PropTypes.string,\r\n};\r\n\r\nexport default SupplementDescription;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport apiService from '@services/apiService';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nconst extensionDict = {\r\n doc: 'word',\r\n docx: 'word',\r\n pdf: 'pdf',\r\n rtf: 'alt',\r\n txt: 'alt',\r\n xls: 'spreadsheet',\r\n xlsx: 'spreadsheet',\r\n gif: 'image',\r\n jpg: 'image',\r\n jpeg: 'image',\r\n png: 'image',\r\n tiff: 'image',\r\n mov: 'video',\r\n mp4: 'video',\r\n mpeg: 'video',\r\n wmv: 'video',\r\n quicktime: 'video',\r\n};\r\n\r\nconst SupplementLink = ({ path }) => {\r\n const [fileBlob, setFileBlob] = useState(null);\r\n const [blobURL, setBlobURL] = useState('');\r\n const [blobSize, setBlobSize] = useState(0);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const currentIcon = useMemo(() => {\r\n if (path) {\r\n const extension = path.substring(path.lastIndexOf('.') + 1);\r\n return `far fa-file-${extensionDict[extension]}`;\r\n }\r\n return null;\r\n }, [path]);\r\n\r\n const retrieveFile = async awsUrl => {\r\n try {\r\n const response = await apiService.Photos.getSingleImage(awsUrl);\r\n return response;\r\n } catch (er) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: SupplementLink retrieveFile:', er);\r\n return null;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (fileBlob) {\r\n const megabytes = Math.round((fileBlob.size * 0.000001 + Number.EPSILON) * 100) / 100;\r\n setBlobSize(megabytes);\r\n setBlobURL(URL.createObjectURL(fileBlob));\r\n }\r\n }, [fileBlob]);\r\n\r\n useEffect(async () => {\r\n try {\r\n if (path) {\r\n setIsLoading(true);\r\n const fileResp = await retrieveFile(path);\r\n setFileBlob(fileResp);\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: SupplementLink retrieveFile', err);\r\n }\r\n }, [path]);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Download\r\n {' ('}\r\n \r\n {isLoading ? : ` , ${blobSize} MB`}\r\n {') '}\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nSupplementLink.propTypes = {\r\n path: PropTypes.string,\r\n};\r\n\r\nexport default SupplementLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useFormikContext } from 'formik';\r\nimport { deleteSupplement } from '@redux/modules/listing';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport SupplementComboBox from './components/SupplementComboBox';\r\nimport SupplementDescription from './components/SupplementDescription';\r\nimport SupplementLink from './components/SupplementLink';\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst SupplementCard = ({ file, sortIndex }) => {\r\n const dispatch = useDispatch();\r\n const { values, setValues } = useFormikContext();\r\n\r\n const handleDelete = () => {\r\n // flips isDeleted flag in Redux store\r\n dispatch(deleteSupplement(file.uid));\r\n\r\n // set formik state for deleted supplement\r\n setValues({\r\n ...values,\r\n Supplements: {\r\n ...values.Supplements,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete Supplement}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nSupplementCard.propTypes = {\r\n file: PropTypes.shape({\r\n Path: PropTypes.string,\r\n Name: PropTypes.string,\r\n Description: PropTypes.string,\r\n UniqueID: PropTypes.number,\r\n SupplementType: PropTypes.string,\r\n MediaType: PropTypes.string,\r\n IsDeleted: PropTypes.bool,\r\n IsLive: PropTypes.bool,\r\n IsPreload: PropTypes.bool,\r\n URL: PropTypes.string,\r\n uid: PropTypes.string,\r\n }),\r\n sortIndex: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default SupplementCard;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { useFormikContext } from 'formik';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableElement, SortableContainer } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\nimport { selectStatusByName } from '@redux/selectors/FormSelector';\r\nimport { saveSupplement, reorderSupplements } from '@redux/modules/listing';\r\nimport { selectUploadedSupplements, selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\nimport Swal from 'sweetalert2';\r\nimport SupplementCard from './SupplementCard';\r\n\r\nconst allowableFiles = '.doc, .docx, .pdf, .rtf, .txt, .xls, .xlsx, .gif, .jpg, .jpeg, .png, .tiff, .mov, .mp4, .mpeg, .wmv, .quicktime';\r\n\r\nconst MAX = 2;\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({ fileList, something, ...otherProps }) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst SupplementGrid = ({ fields, supplementsPayload }) => {\r\n const {\r\n values, setValues, setFieldValue,\r\n } = useFormikContext();\r\n const dispatch = useDispatch();\r\n const statusSupplement = useSelector(state => selectStatusByName(state, 'Supplements'));\r\n // const pageStructureHasRooms = useSelector(selectPageStructureHasRooms);\r\n\r\n const uploadList = useSelector(selectUploadedSupplements);\r\n // this property is duplicated in each member of fields\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const supplementsCount = sectionsPerRepeatableSection.Supplements.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.Supplements) {\r\n Object.entries(values.Supplements).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.Supplements]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Supplements Exceeded',\r\n html: `The maximum number of supplements must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n useEffect(() => {\r\n const formikSupplements = values.Supplements;\r\n uploadList.forEach(upload => {\r\n if (!upload.IsUploading) {\r\n // formik may not have the record.\r\n const uploadFormikRecord = formikSupplements?.[upload.uid] ?? null;\r\n if (uploadFormikRecord) {\r\n uploadFormikRecord.Description = upload.Description;\r\n uploadFormikRecord.Path = upload.Name ?? upload.URL;\r\n uploadFormikRecord.Name = upload.Name ?? upload.URL;\r\n }\r\n }\r\n });\r\n }, [uploadList]);\r\n\r\n const handleFileDrop = acceptedFiles => {\r\n if (supplementsCount + acceptedFiles.length > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n // we batch supplements before adding to formik state, may need async hack per https://github.com/jaredpalmer/formik/issues/529\r\n const batch = {};\r\n acceptedFiles.map(file => {\r\n // generate UID to relate placeholder to POST response to formik state\r\n const id = uuidv4();\r\n // For each file, dispatch async thunk in Redux\r\n dispatch(saveSupplement(file, id));\r\n\r\n batch[id] = {\r\n uid: id,\r\n Description: '',\r\n SupplementType: '',\r\n SortOrder: uploadList.length + 1,\r\n IsDeleted: false,\r\n };\r\n return null;\r\n });\r\n // add uploads to formik state\r\n setValues({\r\n ...values,\r\n Supplements: {\r\n ...values.Supplements,\r\n ...batch,\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (supplementsPayload?.length) {\r\n const batch = {}; // adds object to formik\r\n const newUploadedSupp = []; // used for re ordering\r\n supplementsPayload.map(supp => {\r\n // generate UID to relate placeholder to POST response to formik state\r\n const id = uuidv4();\r\n batch[id] = {\r\n uid: id,\r\n Description: supp.displayName ?? supp.Description,\r\n SupplementType: supp.SupplementType,\r\n SortOrder: supp.SortOrder,\r\n IsDeleted: supp.IsDeleted,\r\n Name: supp.Path,\r\n Path: supp.Path,\r\n URL: supp.URL,\r\n };\r\n newUploadedSupp.push({\r\n uid: id,\r\n Path: supp.Path,\r\n Description: supp.displayName ?? supp.Description,\r\n UniqueID: supp.UniqueID,\r\n SupplementType: supp.SupplementType,\r\n MediaType: supp.MediaType,\r\n URL: supp.URL,\r\n SortOrder: supp.SortOrder,\r\n IsDeleted: supp.IsDeleted,\r\n IsLive: supp.IsLive,\r\n IsPreload: supp.IsPreload,\r\n Name: supp.Path,\r\n });\r\n return null;\r\n });\r\n // add uploads to formik state\r\n setFieldValue('Supplements', {\r\n ...values.Supplements,\r\n ...batch,\r\n });\r\n // add it to redux\r\n dispatch(reorderSupplements(newUploadedSupp));\r\n }\r\n }, [supplementsPayload]);\r\n\r\n // after sort ends derive new order, then dispatch results to redux\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const newSortOrder = arrayMoveImmutable(uploadList, oldIndex, newIndex);\r\n dispatch(reorderSupplements(newSortOrder));\r\n\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n setValues({\r\n ...values,\r\n Supplements: { ...newValues },\r\n });\r\n };\r\n\r\n const { getRootProps, getInputProps } = useDropzone({ accept: allowableFiles, maxFiles: maxCount, onDrop: handleFileDrop });\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n

    \r\n \r\n

    \r\n

    \r\n Drag 'n' drop your supplement files here, or click to select\r\n them manually.\r\n

    \r\n

    \r\n Press 'Ctrl' or ⌘ to multi-select\r\n

    \r\n
    \r\n {statusSupplement?.errorMessage &&
    {statusSupplement.errorMessage}
    }\r\n \r\n
    \r\n );\r\n};\r\n\r\nSupplementGrid.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n supplementsPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default SupplementGrid;\r\n","/* eslint-disable no-param-reassign */\r\n\r\nimport { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport apiService from '@services/apiService';\r\nimport {\r\n addNewClientPhoto,\r\n addFlexRulePhoto,\r\n addEditPhotoResult,\r\n addApiUploadResult,\r\n softDeletePhoto,\r\n clearPhotoCollection,\r\n removeEditPhoto,\r\n restorePhotoMetaByKey,\r\n} from '@redux/modules/photo';\r\n\r\nimport {\r\n selectPhotoMetaCollection,\r\n selectPhotosToUpload,\r\n selectPhotoToEdit,\r\n selectMaxSortOrder,\r\n} from '@redux/selectors/PhotoSelector';\r\nimport photoPlaceholder from '@images/image-not-available.png';\r\nimport API from '../config';\r\n\r\nconst usePhotoManager = () => {\r\n const dispatch = useDispatch();\r\n\r\n // retrieves entire collection\r\n const photoMetaCollection = useSelector(selectPhotoMetaCollection);\r\n\r\n // retrieve only photos without externalURL\r\n const photosToUpload = useSelector(selectPhotosToUpload);\r\n\r\n const editPhotoMeta = useSelector(selectPhotoToEdit);\r\n const maxSort = useSelector(selectMaxSortOrder);\r\n // tracks by key which photos have been passed to the api already.\r\n const [photoUploadStatus, setPhotoUploadStatus] = useState([]);\r\n\r\n const getPhotoMetaObject = () => ({\r\n key: null,\r\n id: null,\r\n originalURL: null,\r\n srcURL: null,\r\n cropperSrcURL: null,\r\n externalURL: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n IsUploaded: false,\r\n IsError: false,\r\n Description: null,\r\n thumbailSrcURL: null,\r\n thumbExternalURL: null,\r\n cropPointer: null,\r\n cropperResult: {\r\n file: null,\r\n blobURL: null,\r\n },\r\n dropZoneMeta: {\r\n file: null,\r\n blobURL: null,\r\n },\r\n apiMeta: {\r\n assetType: null,\r\n displayName: null,\r\n extension: null,\r\n isError: null,\r\n newName: null,\r\n path: null,\r\n url: null,\r\n },\r\n formikMeta: {\r\n URL: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n IsLive: null,\r\n IsPreload: null,\r\n Description: null,\r\n MediaType: null,\r\n MediaCategory: null,\r\n },\r\n flexMeta: {\r\n UniqueID: null,\r\n ParentID: null,\r\n SortOrder: null,\r\n IsDeleted: null,\r\n Description: null,\r\n MediaCategory: null,\r\n MediaKeyNumeric: null,\r\n MediaType: null,\r\n ModificationTimestamp: null,\r\n Order: null,\r\n OriginatingSystemMediaKey: null,\r\n OriginatingSystemName: null,\r\n PreferredPhotoYN: null,\r\n ResourceName: null,\r\n Path: null,\r\n URL: null,\r\n ResourceRecordKeyNumeric: null,\r\n ModifiedDate: null,\r\n IsLive: null,\r\n LongDescription: null,\r\n ParentType: null,\r\n OriginatingSystemParent: null,\r\n IsPreload: null,\r\n fullSizeURL: null,\r\n InitialSortOrder: null,\r\n },\r\n });\r\n\r\n const createThumbNailFile = photoMetaFilePtr => {\r\n let thumbnail;\r\n const fileName = photoMetaFilePtr.path ?? photoMetaFilePtr.name;\r\n const name = fileName.replace(/(\\.[\\w\\d_-]+)$/i, '_thumbnail$1');\r\n thumbnail = new File([photoMetaFilePtr], name, {\r\n type: photoMetaFilePtr.type,\r\n });\r\n thumbnail = Object.assign(thumbnail, {\r\n length: photoMetaFilePtr.length,\r\n });\r\n return thumbnail;\r\n };\r\n\r\n const uuidRegexPattern = /[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}/i;\r\n const createThumbnailExternalLink = photoMeta => {\r\n const externalFullSizeUrl = photoMeta.externalURL;\r\n if (externalFullSizeUrl) {\r\n if (!externalFullSizeUrl.match(uuidRegexPattern)) return externalFullSizeUrl; // thumbnail image does not exist\r\n return externalFullSizeUrl.replace(/(\\.[\\w\\d_-]+)$/i, '_thumbnail$1');\r\n }\r\n return '';\r\n };\r\n\r\n const postFormFiles = async (formFiles, photoMeta) => {\r\n /*\r\n +++++++ Base API return\r\n assetType: \"image\"\r\n photoMeta.apiMeta.displayName: \"cat1_thumbnail.jpg\"\r\n photoMeta.apiMeta.extension: \".jpg\"\r\n photoMeta.apiMeta.isError: false\r\n photoMeta.apiMeta.newName: \"https://dev-pillarnineonmarket.s3.ca-central-1.amazonaws.com/8f46d3eb63af4315b7bff500cceff7d8_thumbnail.jpg\"\r\n photoMeta.apiMeta.path: \"8f46d3eb63af4315b7bff500cceff7d8_thumbnail.jpg\"\r\n photoMeta.apiMeta.url: \"https://dev-pillarnineonmarket.s3.ca-central-1.amazonaws.com/8f46d3eb63af4315b7bff500cceff7d8_thumbnail.jpg\"\r\n */\r\n try {\r\n const result = await apiService.Photos.postImage(formFiles);\r\n result.forEach(res => {\r\n if (res.path.includes('_thumbnail')) {\r\n photoMeta.thumbExternalURL = res.url;\r\n return;\r\n }\r\n photoMeta.IsUploaded = true;\r\n photoMeta.externalURL = res.url;\r\n photoMeta.apiMeta.assetType = res.assetType;\r\n photoMeta.apiMeta.displayName = res.displayName;\r\n photoMeta.apiMeta.extension = res.extension;\r\n photoMeta.apiMeta.isError = res.isError;\r\n photoMeta.apiMeta.newName = res.newName;\r\n photoMeta.apiMeta.path = res.path;\r\n photoMeta.apiMeta.url = res.url;\r\n });\r\n // write photoMeta back to redux.\r\n dispatch(addApiUploadResult(photoMeta));\r\n } catch (error) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: usePhotoManager postFormFiles', error);\r\n photoMeta.IsError = true;\r\n if (photoMeta.cropPointer) {\r\n photoMeta.IsDeleted = true;\r\n dispatch(restorePhotoMetaByKey(photoMeta.cropPointer));\r\n } else {\r\n dispatch(addApiUploadResult(photoMeta));\r\n }\r\n }\r\n };\r\n\r\n const uploadPhoto = async photoMeta => {\r\n const metaFile = photoMeta.cropperResult.file ?? photoMeta.dropZoneMeta.file;\r\n const thumbnail = createThumbNailFile(metaFile);\r\n const formFiles = new FormData();\r\n formFiles.append('cropperImageList', metaFile);\r\n formFiles.append('cropperImageList', thumbnail);\r\n await postFormFiles(formFiles, photoMeta); // dispatch key w/ formfile to maintain object provenance\r\n formFiles.delete('cropperImageList');\r\n };\r\n\r\n // set upload flags to track file uploads\r\n // this runs 4 times for 1 photo.\r\n useEffect(() => {\r\n if (photosToUpload && photosToUpload.length > 0) {\r\n photosToUpload.forEach(pm => {\r\n if (!photoUploadStatus.find(status => status.key === pm.key)) {\r\n const newStatus = {\r\n key: pm.key,\r\n toUpload: true,\r\n uploadComplete: false,\r\n reUpload: false,\r\n };\r\n setPhotoUploadStatus([...photoUploadStatus, newStatus]);\r\n }\r\n });\r\n }\r\n }, [photosToUpload, photoUploadStatus]);\r\n\r\n // upload photos based on status\r\n useEffect(() => {\r\n if (photoUploadStatus.length > 0) {\r\n const needToProcess = photoUploadStatus.filter(pU => pU.toUpload);\r\n if (needToProcess.length > 0) {\r\n needToProcess.forEach(async processKey => {\r\n const targetPM = photoMetaCollection.find(pm => pm.key === processKey.key);\r\n if (targetPM) await uploadPhoto(targetPM);\r\n });\r\n const processedStatuses = photoUploadStatus.map(pU => {\r\n const element = pU;\r\n const status = needToProcess.find(n => n.key === pU.key);\r\n if (!status) return element;\r\n element.toUpload = false;\r\n element.uploadComplete = true;\r\n return element;\r\n });\r\n setPhotoUploadStatus(processedStatuses);\r\n }\r\n }\r\n }, [photoUploadStatus]);\r\n\r\n useEffect(() => {\r\n if (photoMetaCollection.length === 0 && photoUploadStatus.length !== 0) setPhotoUploadStatus([]);\r\n }, [photoMetaCollection]);\r\n\r\n // index passed to handle bulk drop of photos, as only the dropzone will know how many files are coming in.\r\n const addNewDropzonePhoto = (photo, index) => {\r\n /* default file params.\r\n {\r\n path: \"cat1.jpg\"\r\n lastModified: 1651087606513\r\n lastModifiedDate: Wed Apr 27 2022 13:26:46 GMT-0600 (Mountain Daylight Time) {}\r\n name: \"cat1.jpg\"\r\n size: 5256\r\n type: \"image/jpeg\"\r\n webkitRelativePath: \"\"\r\n }\r\n */\r\n const newDzPhoto = getPhotoMetaObject();\r\n const key = uuidv4();\r\n newDzPhoto.key = key;\r\n newDzPhoto.id = key;\r\n newDzPhoto.SortOrder = maxSort + index + 1;\r\n newDzPhoto.IsDeleted = false;\r\n newDzPhoto.dropZoneMeta.file = photo;\r\n\r\n // need to convert to a safer data ref for redux storage.\r\n if (photo.blobURL) URL.revokeObjectURL(photo.blobURL);\r\n // URL.revokeObjectURL(photo.blobURL);\r\n dispatch(addNewClientPhoto(newDzPhoto));\r\n };\r\n\r\n const addNewFlexRulePhoto = photo => {\r\n const newFrPhoto = getPhotoMetaObject();\r\n const key = uuidv4();\r\n if (!photo.URL) newFrPhoto.IsError = true;\r\n else newFrPhoto.IsUploaded = true;\r\n newFrPhoto.key = key;\r\n newFrPhoto.id = key;\r\n newFrPhoto.SortOrder = photo.SortOrder;\r\n newFrPhoto.IsDeleted = photo.IsDeleted;\r\n newFrPhoto.Description = photo.Description;\r\n newFrPhoto.flexMeta = { ...photo };\r\n newFrPhoto.externalURL = photo.URL;\r\n newFrPhoto.thumbExternalURL = createThumbnailExternalLink(newFrPhoto);\r\n dispatch(addFlexRulePhoto(newFrPhoto));\r\n };\r\n\r\n // const createFileFromUrl = async (dataUrl, name) => fetch(dataUrl).then(r => r.blob()).then(blobFile => new File([blobFile], `${name}.png`, { type: blobFile.type }));\r\n\r\n const getPhotoFileFromApi = async externalURL => {\r\n try {\r\n const response = await apiService.Photos.getSingleImage(externalURL);\r\n return URL.createObjectURL(response);\r\n } catch (er) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: usePhotoManager getPhotoFileFromApi', er);\r\n return photoPlaceholder;\r\n }\r\n };\r\n\r\n const addEditPhotoMeta = (metaSource, cropperBlob) => {\r\n // const cropMeta = deriveCropMetaFromOriginal(editedPhotoMeta);\r\n\r\n const originMeta = metaSource;\r\n const cropMeta = getPhotoMetaObject();\r\n // const originMeta = photoMeta;\r\n const newKey = uuidv4(); // create new key to hold original photo;\r\n cropMeta.key = newKey;\r\n cropMeta.id = newKey;\r\n cropMeta.SortOrder = originMeta.SortOrder;\r\n cropMeta.IsDeleted = originMeta.IsDeleted;\r\n cropMeta.Description = originMeta.Description;\r\n cropMeta.cropPointer = originMeta.key; // point to original to use on reset\r\n\r\n originMeta.IsDeleted = true;\r\n const name = originMeta.Description ?? originMeta.key;\r\n cropMeta.cropperResult.blobURL = cropperBlob;\r\n\r\n dispatch(addEditPhotoResult(cropMeta, name));\r\n dispatch(softDeletePhoto(originMeta));\r\n URL.revokeObjectURL(cropMeta.cropperResult.blobURL);\r\n URL.revokeObjectURL(cropperBlob);\r\n };\r\n\r\n const getFullImageFromMeta = photoMeta => `${API.URL}Image/GetAwsFile?file=${photoMeta.externalURL}`;\r\n\r\n const getThumbFromMeta = photoMeta => `${API.URL}Image/GetAwsFile?file=${photoMeta.thumbExternalURL}`;\r\n\r\n const markIsDeleted = photoMeta => {\r\n const deletedPhotoMeta = photoMeta;\r\n deletedPhotoMeta.IsDeleted = true;\r\n dispatch(softDeletePhoto(deletedPhotoMeta));\r\n };\r\n\r\n const getPhotoToEdit = async () => {\r\n if (editPhotoMeta) {\r\n editPhotoMeta.originalURL = getFullImageFromMeta(editPhotoMeta);\r\n editPhotoMeta.cropperSrcURL = await getPhotoFileFromApi(editPhotoMeta.externalURL);\r\n return editPhotoMeta;\r\n }\r\n return null;\r\n };\r\n const removeEditPhotoMeta = () => dispatch(removeEditPhoto());\r\n\r\n const dispatchClearPhotoCollection = () => dispatch(clearPhotoCollection());\r\n\r\n return {\r\n addNewDropzonePhoto,\r\n addNewFlexRulePhoto,\r\n addEditPhotoMeta,\r\n\r\n dispatchClearPhotoCollection,\r\n getPhotoFileFromApi,\r\n getFullImageFromMeta,\r\n getThumbFromMeta,\r\n getPhotoToEdit,\r\n maxSort,\r\n removeEditPhotoMeta,\r\n markIsDeleted,\r\n };\r\n};\r\n\r\nexport default usePhotoManager;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst Edit = ({ onEditClicked, item, isDisabled = false }) => {\r\n const handleEditClick = () => onEditClicked(item);\r\n\r\n return (\r\n \r\n Edit Photo}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nEdit.propTypes = {\r\n isDisabled: PropTypes.bool,\r\n onEditClicked: PropTypes.func,\r\n item: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\r\n};\r\n\r\nexport default Edit;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst Remove = ({ onRemove, item, isDisabled = false }) => {\r\n const handleDeleteCLick = () => onRemove(item);\r\n\r\n return (\r\n <>\r\n Delete Photo}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nRemove.propTypes = {\r\n isDisabled: PropTypes.bool,\r\n onRemove: PropTypes.func,\r\n item: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\r\n};\r\n\r\nexport default Remove;\r\n","/* eslint-disable no-nested-ternary */\r\n/* eslint-disable jsx-a11y/label-has-associated-control */\r\n\r\nimport React, {\r\n forwardRef,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { selectValidPhotos } from '@redux/selectors/PhotoSelector';\r\nimport { updatePhotoDescription, setEditPhoto, softDeletePhoto } from '@redux/modules/photo';\r\nimport './Photo.css';\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport photoPlaceholder from '@images/image-not-available.png';\r\nimport Edit from './Edit';\r\nimport Remove from './Remove';\r\nimport API from '../../../../../../config';\r\n\r\nconst Photo = forwardRef(\r\n ({\r\n item,\r\n value,\r\n // onEditClicked,\r\n // onRemove,\r\n listeners,\r\n renderItem,\r\n className,\r\n color,\r\n dragOverlay,\r\n dragging,\r\n disabled,\r\n fadeIn,\r\n handle,\r\n height,\r\n index,\r\n sorting,\r\n style,\r\n transition,\r\n transform,\r\n wrapperStyle,\r\n ...props\r\n }, ref) => {\r\n const dispatch = useDispatch();\r\n const name = item.id;\r\n\r\n const dynamicOrder = true; // governs whether the Order displayed in gridlist changes on drag, or stays the same\r\n\r\n const photoValidCollection = useSelector(selectValidPhotos);\r\n const photoMetaInstance = useMemo(() => photoValidCollection.find(photoMeta => photoMeta.key === item.key) ?? null, [item.key]);\r\n\r\n const [localFieldDescriptionValue, setLocalFieldValue] = useState('');\r\n\r\n useEffect(() => {\r\n if (photoMetaInstance.Description) setLocalFieldValue(photoMetaInstance.Description);\r\n }, [photoMetaInstance.Description]);\r\n\r\n const getThumbFromMeta = photoMeta => `${API.URL}Image/GetAwsFile?file=${photoMeta.thumbExternalURL}`;\r\n const image = useMemo(() => {\r\n if (item.thumbExternalURL) return getThumbFromMeta(photoMetaInstance);\r\n return null;\r\n }, [item.thumbExternalURL]);\r\n\r\n const isError = useMemo(() => {\r\n if (item?.IsError) return true;\r\n return null;\r\n }, [item.IsError]);\r\n\r\n useEffect(() => {\r\n if (!dragOverlay) {\r\n return undefined;\r\n }\r\n document.body.style.cursor = 'grabbing';\r\n return () => {\r\n document.body.style.cursor = '';\r\n };\r\n }, [dragOverlay]);\r\n\r\n const listStyle = {\r\n transition,\r\n '--translate-x': transform\r\n ? `${Math.round(transform.x)}px`\r\n : undefined,\r\n '--translate-y': transform\r\n ? `${Math.round(transform.y)}px`\r\n : undefined,\r\n '--scale-x': transform?.scaleX ? `${transform.scaleX}` : undefined,\r\n '--scale-y': transform?.scaleY ? `${transform.scaleY}` : undefined,\r\n '--index': index,\r\n };\r\n\r\n const handleBlur = e => {\r\n if (photoMetaInstance?.Description === e.target.value) return;\r\n photoMetaInstance.Description = e.target.value;\r\n dispatch(updatePhotoDescription(photoMetaInstance));\r\n };\r\n\r\n // pressing space in the description box selects the underlying card\r\n const handleSpaceAndEnter = e => {\r\n if (e.key === ' ' || e.code === 'Space' || e.keyCode === 32 || e.key === 'Enter') {\r\n e.preventDefault();\r\n setLocalFieldValue(`${localFieldDescriptionValue} `);\r\n }\r\n };\r\n\r\n const onRemove = () => {\r\n dispatch(softDeletePhoto(photoMetaInstance));\r\n };\r\n\r\n const onEditClicked = () => {\r\n dispatch(setEditPhoto(photoMetaInstance, photoPlaceholder));\r\n };\r\n\r\n const handleChange = e => {\r\n setLocalFieldValue(e.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (photoMetaInstance?.Description == null || photoMetaInstance.Description === localFieldDescriptionValue) return;\r\n setLocalFieldValue(photoMetaInstance?.Description);\r\n }, [photoMetaInstance?.Description]);\r\n\r\n return (renderItem && item) ? (\r\n renderItem({\r\n dragOverlay: Boolean(dragOverlay),\r\n dragging: Boolean(dragging),\r\n sorting: Boolean(sorting),\r\n index,\r\n fadeIn: Boolean(fadeIn),\r\n listeners,\r\n ref,\r\n style,\r\n transform,\r\n transition,\r\n value,\r\n })\r\n ) : (\r\n \r\n \r\n
    \r\n {dynamicOrder\r\n ? item?.SortOrder\r\n : item.InitialSortOrder}\r\n
    \r\n
    \r\n {image ? (\r\n <>\r\n \r\n \r\n \r\n )\r\n : (\r\n <>\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n )}\r\n >\r\n {image\r\n ? (\"\")\r\n : isError ? (\r\n \r\n )\r\n : (\r\n
    \r\n
    \r\n Loading...\r\n
    \r\n
    \r\n )}\r\n
    \r\n \r\n
    \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nPhoto.propTypes = {\r\n isSelected: PropTypes.bool,\r\n className: PropTypes.string,\r\n color: PropTypes.string,\r\n dragOverlay: PropTypes.bool,\r\n dragging: PropTypes.bool,\r\n disabled: PropTypes.string,\r\n fadeIn: PropTypes.bool,\r\n height: PropTypes.string,\r\n listeners: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n onSelect: PropTypes.func,\r\n isDropped: PropTypes.bool,\r\n id: PropTypes.string,\r\n index: PropTypes.number,\r\n item: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n sorting: PropTypes.bool,\r\n style: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n transition: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n containerId: PropTypes.string,\r\n getIndex: PropTypes.func,\r\n handle: PropTypes.bool,\r\n renderItem: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n // onRemove: PropTypes.func,\r\n // onEditClicked: PropTypes.func,\r\n transform: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n wrapperStyle: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n\r\n};\r\n\r\nexport default Photo;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n// import { useSelector } from 'react-redux';\r\n\r\nimport {\r\n useSortable,\r\n} from '@dnd-kit/sortable';\r\n\r\nimport Photo from './Photo';\r\n\r\nconst useMountStatus = () => {\r\n const [isMounted, setIsMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => setIsMounted(true), 500);\r\n\r\n return () => clearTimeout(timeout);\r\n }, []);\r\n\r\n return isMounted;\r\n};\r\n\r\nconst SortableItem = ({\r\n item,\r\n isSelected,\r\n onSelect,\r\n // onEditClicked,\r\n // onRemove,\r\n isDropped,\r\n id,\r\n index,\r\n handle,\r\n renderItem,\r\n style,\r\n containerId,\r\n getIndex,\r\n wrapperStyle,\r\n}) => {\r\n // const isBusy = useSelector(state => state?.listing?.isBusy ?? false);\r\n const {\r\n setNodeRef,\r\n listeners,\r\n isDragging,\r\n isSorting,\r\n over,\r\n overIndex,\r\n transform,\r\n transition,\r\n } = useSortable({\r\n id: item.id,\r\n // disabled: isBusy,\r\n });\r\n const mounted = useMountStatus();\r\n const mountedWhileDragging = isDragging && !mounted;\r\n const newlisteners = {\r\n ...listeners,\r\n onClick: event => {\r\n onSelect(item, event.ctrlKey);\r\n },\r\n };\r\n const className = classNames(\r\n isSelected && 'selectedItem',\r\n isDropped && 'droppedItem',\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSortableItem.propTypes = {\r\n isSelected: PropTypes.bool,\r\n item: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n onSelect: PropTypes.func,\r\n isDropped: PropTypes.bool,\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n index: PropTypes.number,\r\n style: PropTypes.func,\r\n containerId: PropTypes.string,\r\n getIndex: PropTypes.func,\r\n handle: PropTypes.bool,\r\n renderItem: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n // onRemove: PropTypes.func,\r\n // onEditClicked: PropTypes.func,\r\n wrapperStyle: PropTypes.func,\r\n};\r\n\r\nexport default SortableItem;\r\n","import React, { forwardRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Grid = forwardRef(({ children, className, ulStyle = {} }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\n\r\nGrid.propTypes = {\r\n ulStyle: PropTypes.shape(),\r\n\r\n children: PropTypes.arrayOf(PropTypes.shape()),\r\n className: PropTypes.string,\r\n};\r\n\r\nexport default Grid;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n useDroppable,\r\n} from '@dnd-kit/core';\r\nimport Grid from './Grid';\r\n\r\nconst DroppableContainer = ({\r\n children,\r\n columns = 5,\r\n id,\r\n ulStyle = {},\r\n items,\r\n getStyle = () => ({}),\r\n}) => {\r\n const { over, isOver, setNodeRef } = useDroppable({\r\n id,\r\n });\r\n const isOverContainer = isOver || (over ? items.includes(over.id) : false);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nDroppableContainer.propTypes = {\r\n ulStyle: PropTypes.shape(),\r\n children: PropTypes.arrayOf(PropTypes.shape()),\r\n columns: PropTypes.number,\r\n id: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape()),\r\n getStyle: PropTypes.func,\r\n};\r\n\r\nexport default DroppableContainer;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\n\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport React, { useEffect, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { createPortal } from 'react-dom';\r\nimport isEqual from 'lodash/isEqual';\r\nimport {\r\n closestCorners,\r\n DndContext,\r\n DragOverlay,\r\n KeyboardSensor,\r\n PointerSensor,\r\n useSensors,\r\n useSensor,\r\n} from '@dnd-kit/core';\r\nimport {\r\n SortableContext,\r\n arrayMove,\r\n sortableKeyboardCoordinates,\r\n rectSortingStrategy,\r\n} from '@dnd-kit/sortable';\r\n\r\nimport { setPhotoCollectionSortOrder } from '@redux/modules/photo';\r\nimport { selectValidPhotos } from '@redux/selectors/PhotoSelector';\r\n\r\nimport SortableItem from './components/SortableItem';\r\nimport Photo from './components/Photo';\r\nimport DroppableContainer from './components/DroppableContainer';\r\n\r\nconst DROPPED_ITEM_TIMEOUT = 2000;\r\nconst defaultContainerStyle = ({ isOverContainer }) => ({\r\n marginTop: 40,\r\n backgroundColor: isOverContainer\r\n ? 'rgb(235,235,235,1)'\r\n : 'rgba(246,246,246,1)',\r\n});\r\n\r\nexport const VOID_ID = 'void';\r\n\r\nexport default function GridList({\r\n adjustScale = false,\r\n collisionDetection = closestCorners,\r\n columns,\r\n\r\n handle = false,\r\n ulStyle = {},\r\n // onRemove,\r\n getItemStyles = () => ({}),\r\n getContainerStyle = defaultContainerStyle,\r\n wrapperStyle = () => ({}),\r\n renderItem,\r\n strategy = rectSortingStrategy,\r\n}) {\r\n const dispatch = useDispatch();\r\n const propagateItems = useRef(false);\r\n const validPhotos = useSelector(selectValidPhotos); // drives creation of photo cards.\r\n\r\n const [items, setItems] = useState([]); // loaded from files prop\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [selectedItemsDict, setSelectedItemsDict] = useState({});\r\n const [droppedItems, setDroppedItems] = useState([]);\r\n const [dragOverlaydItems, setClonedItems] = useState(null);\r\n const [activeId, setActiveId] = useState(null);\r\n\r\n const [files, setFiles] = useState([]);\r\n\r\n const updateCollectionSortOrder = orderedArray => dispatch(setPhotoCollectionSortOrder(orderedArray));\r\n\r\n useEffect(() => {\r\n if (validPhotos) {\r\n const displayKeys = validPhotos.map(dph => dph.key);\r\n const filesKeys = files.map(fileRef => fileRef.key);\r\n if (displayKeys !== filesKeys) setFiles(validPhotos);\r\n }\r\n }, [validPhotos]);\r\n\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 15,\r\n },\r\n }),\r\n useSensor(KeyboardSensor, {\r\n coordinateGetter: sortableKeyboardCoordinates,\r\n }),\r\n );\r\n const findContainer = id => {\r\n if (id in items) {\r\n return id;\r\n }\r\n\r\n return Object.keys(items).find(key => items[key].find(item => item.id === id));\r\n };\r\n\r\n const getIndex = id => {\r\n const container = findContainer(id);\r\n\r\n if (!container) {\r\n return -1;\r\n }\r\n\r\n const index = items[container].findIndex(item => item.id === id);\r\n\r\n return index;\r\n };\r\n\r\n useEffect(() => {\r\n if (files && !isEqual(items.A, files)) {\r\n files.sort((f1, f2) => f1.SortOrder - f2.SortOrder); // arranges according to sort order, ascending\r\n if (files.length < items.A?.length) updateCollectionSortOrder(files.map(f => f.key));\r\n setItems({ A: files, [VOID_ID]: [] });\r\n }\r\n }, [files]);\r\n\r\n useEffect(() => {\r\n if (items && !isEqual(items.A, files)) {\r\n if (propagateItems.current) {\r\n setFiles(items.A);\r\n propagateItems.current = false;\r\n }\r\n }\r\n }, [items]);\r\n\r\n const onSelectionChanged = (item, isCtrlClicked) => {\r\n if (isCtrlClicked) {\r\n if (selectedItemsDict[item.id]) {\r\n setSelectedItems(selectedItems.filter(slctItem => (slctItem.id === item.id)));\r\n } else {\r\n setSelectedItems([...selectedItems, item]);\r\n }\r\n setSelectedItemsDict({ ...selectedItemsDict, [item.id]: true });\r\n } else {\r\n setSelectedItems([]);\r\n }\r\n };\r\n /*\r\n Commented out because it kept throwing an error when one of the ComboBoxes\r\n in FormikInputGroup.jsx is set to stay open on select. 9/15/21\r\n */\r\n useEffect(() => {\r\n const clearSelection = ({ target }) => {\r\n try {\r\n if (target?.nodeName !== 'LI' && target?.parentNode?.nodeName !== 'LI') {\r\n setSelectedItems([]);\r\n setSelectedItemsDict([]);\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n };\r\n document.addEventListener('click', clearSelection);\r\n\r\n return () => {\r\n document.removeEventListener('click', clearSelection);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n let timeout = 0;\r\n if (droppedItems.length) {\r\n timeout = window.setTimeout(\r\n () => setDroppedItems([]),\r\n DROPPED_ITEM_TIMEOUT,\r\n );\r\n }\r\n return () => {\r\n clearTimeout(timeout);\r\n };\r\n }, [droppedItems.length]);\r\n\r\n const handleDragStart = event => {\r\n const { active } = event;\r\n setActiveId(active.id);\r\n setClonedItems(items);\r\n if (selectedItemsDict[active.id]) {\r\n setSelectedItems([]);\r\n } else if (selectedItems.length > 0) {\r\n setItems(\r\n selectedItems.reduce((ret, selectedItem) => {\r\n if (selectedItem.id === active.id) {\r\n return ret;\r\n }\r\n const container = findContainer(selectedItem.id);\r\n return !container\r\n ? ret\r\n : {\r\n ...ret,\r\n [container]: ret[container].filter(\r\n item => item.id !== selectedItem.id,\r\n ),\r\n };\r\n }, items),\r\n );\r\n propagateItems.current = true;\r\n }\r\n };\r\n\r\n const handleDragOver = event => {\r\n const { active, over, draggingRect } = event;\r\n const overId = over?.id || VOID_ID;\r\n const overContainer = findContainer(overId);\r\n const activeContainer = findContainer(active.id);\r\n\r\n if (!overContainer || !activeContainer) {\r\n return;\r\n }\r\n\r\n if (activeContainer !== overContainer) {\r\n const activeItems = items[activeContainer];\r\n const overItems = items[overContainer];\r\n const overIndex = overItems.findIndex(item => item.id === overId);\r\n const activeIndex = activeItems.findIndex(item => item.id === active.id);\r\n\r\n let newIndex;\r\n if (overId in items) {\r\n newIndex = overItems.length + 1;\r\n } else {\r\n const isBelowLastItem = over\r\n && overIndex === overItems.length - 1\r\n && draggingRect.offsetTop > over.rect.offsetTop + over.rect.height;\r\n\r\n const modifier = isBelowLastItem ? 1 : 0;\r\n\r\n newIndex = overIndex >= 0 ? overIndex + modifier : overItems.length + 1;\r\n }\r\n setItems({\r\n ...items,\r\n [activeContainer]: [\r\n ...items[activeContainer].filter(item => item.id !== active.id),\r\n ],\r\n [overContainer]: [\r\n ...items[overContainer].slice(0, newIndex),\r\n items[activeContainer][activeIndex],\r\n ...items[overContainer].slice(\r\n newIndex,\r\n items[overContainer].length,\r\n ),\r\n ],\r\n });\r\n propagateItems.current = true;\r\n }\r\n };\r\n\r\n const handleDragEnd = event => {\r\n const { active, over } = event;\r\n const activeContainer = findContainer(active.id);\r\n\r\n if (!activeContainer) {\r\n setActiveId(null);\r\n return;\r\n }\r\n\r\n const overId = over?.id || '';\r\n\r\n if (overId === VOID_ID) {\r\n setItems({\r\n ...(over?.id === VOID_ID ? items : dragOverlaydItems),\r\n [VOID_ID]: [],\r\n });\r\n propagateItems.current = true;\r\n setActiveId(null);\r\n return;\r\n }\r\n\r\n const overContainer = findContainer(overId);\r\n\r\n if (activeContainer && overContainer) {\r\n const activeIndex = items[activeContainer].findIndex(item => item.id === active.id);\r\n const overIndex = items[overContainer].findIndex(item => item.id === overId);\r\n if (selectedItems.length) {\r\n const newItems = { ...items };\r\n newItems[overContainer] = arrayMove(\r\n newItems[overContainer],\r\n activeIndex,\r\n overIndex,\r\n );\r\n newItems[overContainer].splice(\r\n overIndex + 1,\r\n 0,\r\n ...selectedItems.filter(item => item.id !== active.id),\r\n );\r\n setItems(newItems);\r\n propagateItems.current = true;\r\n setDroppedItems(selectedItems);\r\n setSelectedItems([]);\r\n } else if (activeIndex !== overIndex) {\r\n setItems({\r\n ...items,\r\n [overContainer]: arrayMove(\r\n items[overContainer],\r\n activeIndex,\r\n overIndex,\r\n ),\r\n });\r\n propagateItems.current = true;\r\n }\r\n }\r\n\r\n const newOrder = over.data.current.sortable.items;\r\n updateCollectionSortOrder(newOrder);\r\n setActiveId(null);\r\n };\r\n\r\n const handleDragCancel = () => {\r\n if (dragOverlaydItems) {\r\n // Reset items to their original state in case items have been\r\n // Dragged across containrs\r\n setItems(dragOverlaydItems);\r\n propagateItems.current = true;\r\n }\r\n\r\n setActiveId(null);\r\n setClonedItems(null);\r\n };\r\n return (\r\n \r\n {items && (\r\n Object.keys(items)\r\n .filter(key => key !== VOID_ID)\r\n .map(containerId => (\r\n \r\n \r\n {items[containerId].map((item, index) => (\r\n drop.id === item.id) !== -1}\r\n index={index}\r\n handle={handle}\r\n style={getItemStyles}\r\n wrapperStyle={wrapperStyle}\r\n // onEditClicked={onEditClicked}\r\n // onRemove={onRemove}\r\n renderItem={renderItem}\r\n containerId={containerId}\r\n getIndex={getIndex}\r\n />\r\n ))}\r\n \r\n \r\n )))}\r\n {createPortal(\r\n \r\n {activeId ? (\r\n <>\r\n item.id === activeId)}\r\n value={activeId}\r\n handle={handle}\r\n className={selectedItems.length > 0 ? 'selectedItem' : ''}\r\n style={getItemStyles({\r\n containerId: findContainer(activeId),\r\n overIndex: -1,\r\n index: getIndex(activeId),\r\n value: activeId,\r\n isSorting: activeId !== null,\r\n isDragging: true,\r\n isDragOverlay: true,\r\n })}\r\n // onEditClicked={onEditClicked}\r\n // onRemove={onRemove}\r\n wrapperStyle={wrapperStyle({ index: 0 })}\r\n renderItem={renderItem}\r\n dragOverlay\r\n />\r\n {selectedItems\r\n .filter(itemId => itemId !== activeId)\r\n .slice(0, 4)\r\n .map(item => (\r\n \r\n ))}\r\n {selectedItems.length > 5 && (\r\n
    \r\n \r\n {selectedItems.length}\r\n items\r\n \r\n
    \r\n )}\r\n \r\n ) : null}\r\n
    ,\r\n document.body,\r\n )}\r\n \r\n );\r\n}\r\n\r\nGridList.propTypes = {\r\n columns: PropTypes.number,\r\n adjustScale: PropTypes.bool,\r\n collisionDetection: PropTypes.string,\r\n handle: PropTypes.bool,\r\n ulStyle: PropTypes.shape(),\r\n // onRemove: PropTypes.func,\r\n // onEditClicked: PropTypes.func,\r\n getItemStyles: PropTypes.func,\r\n getContainerStyle: PropTypes.arrayOf(PropTypes.string),\r\n wrapperStyle: PropTypes.func,\r\n renderItem: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n strategy: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n};\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { useFormikContext } from 'formik';\r\n\r\nimport Swal from 'sweetalert2';\r\n\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\nimport { setUploadsCounter } from '@redux/modules/listing';\r\nimport { selectStatusByName, selectFormDefinition } from '@redux/selectors/FormSelector';\r\n\r\nimport usePhotoManager from '@hooks/usePhotoManager';\r\n\r\nimport GridList from './GridList';\r\n\r\nconst ImageDropzone = props => {\r\n const {\r\n photosPayload, // photosPayload is photos returned from FR and 'currentImages'\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n const photoManager = usePhotoManager();\r\n const status = useSelector(state => selectStatusByName(state, 'Photos'));\r\n const formDefn = useSelector(selectFormDefinition);\r\n const [files, setFiles] = useState([]);\r\n // const filesToBeUploadedCounter = useSelector(state => state.listing.filesToBeUploadedCounter);\r\n\r\n const maxCount = useMemo(() => formDefn?.find(meta => meta.PageName === 'Photos')?.repeatableMaxCount ?? 25, [formDefn]);\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const photosCount = sectionsPerRepeatableSection.Photos.length;\r\n const { values } = useFormikContext();\r\n const formikPhotos = values?.Photos;\r\n\r\n useEffect(() => {\r\n if (photosPayload?.length) {\r\n photosPayload.forEach(payloadPhoto => {\r\n photoManager.addNewFlexRulePhoto(payloadPhoto);\r\n });\r\n }\r\n }, [photosPayload]);\r\n\r\n const isUploaded = keyName => Object.keys(formikPhotos ?? []).some(key => key === keyName);\r\n const duplicateImageFile = image => {\r\n let dupNo = 2;\r\n let newFileName = image.name.replace(/(\\.[\\w\\d_-]+)$/i, `_${dupNo}$1`);\r\n while (isUploaded(newFileName)) {\r\n dupNo += 1;\r\n newFileName = image.name.replace(/(\\.[\\w\\d_-]+)$/i, `_${dupNo}$1`);\r\n }\r\n return new File([image], newFileName, {\r\n type: image.type,\r\n });\r\n };\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Photos Exceeded',\r\n html: `The maximum number of photos must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const { getRootProps, getInputProps } = useDropzone({\r\n accept: 'image/jpeg, image/png, image/jpg',\r\n maxFiles: maxCount,\r\n onDrop: acceptedFiles => {\r\n dispatch(setUploadsCounter(acceptedFiles.length));\r\n if (photosCount + acceptedFiles.length > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n acceptedFiles.forEach((file, index) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n let image = file;\r\n if (isUploaded(file.path)) {\r\n image = duplicateImageFile(file);\r\n }\r\n photoManager.addNewDropzonePhoto(image, index);\r\n };\r\n\r\n reader.readAsDataURL(file);\r\n return file; // this file gets used by cropper in new photos.\r\n });\r\n },\r\n });\r\n\r\n // useEffect(() => {\r\n\r\n // dispatch(setIsBusy(((filesToBeUploadedCounter + photosCount - currentImages.length) > 0) && (filesToBeUploadedCounter > 0)));\r\n // }, [currentImages]);\r\n\r\n return (\r\n \r\n
    \r\n \r\n

    \r\n \r\n

    \r\n

    \r\n Drag 'n' drop your photos here, or click to select them\r\n manually.\r\n

    \r\n

    \r\n Press 'Ctrl' or ⌘ to multi-select\r\n

    \r\n
    \r\n {status?.errorMessage &&
    {status.errorMessage}
    }\r\n {photosCount === 0 && (\r\n

    \r\n \r\n Please note that photos must be under 50 MB each in size.\r\n

    \r\n )}\r\n \r\n
    \r\n );\r\n};\r\n\r\nImageDropzone.propTypes = {\r\n // formik: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.shape(), PropTypes.number, PropTypes.func])),\r\n photosPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n onRemove: PropTypes.func,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nexport default ImageDropzone;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nconst CropperController = props => {\r\n const {\r\n cropping, photoToEdit, onCrop, onRemove, onReset, onSave, imageURL,\r\n } = props;\r\n\r\n const handleDeleteClick = () => {\r\n onRemove(photoToEdit);\r\n };\r\n\r\n return (\r\n
    \r\n {cropping && (\r\n
    \r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n OK\r\n \r\n
    \r\n )}\r\n \r\n \r\n Download\r\n \r\n {/* \r\n \r\n\r\n */}\r\n {/* */}\r\n
    \r\n \r\n \r\n Delete\r\n \r\n \r\n \r\n Save\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nCropperController.propTypes = {\r\n cropping: PropTypes.bool,\r\n // imageFile: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\r\n imageURL: PropTypes.string,\r\n photoToEdit: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\r\n onCrop: PropTypes.func,\r\n onRemove: PropTypes.func,\r\n onReset: PropTypes.func,\r\n onSave: PropTypes.func,\r\n};\r\n\r\nexport default CropperController;\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { selectPhotoToEdit } from '@redux/selectors/PhotoSelector';\r\nimport { addEditPhotoResult, removeEditPhoto, softDeletePhoto } from '@redux/modules/photo';\r\n\r\nimport Cropper from 'react-cropper';\r\nimport 'cropperjs/dist/cropper.css';\r\n\r\nimport Modal from '@components/smartAdminUI/Modal';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport CropperController from './cropperController/CropperController';\r\n\r\nconst ImageCropperModal = () => {\r\n const dispatch = useDispatch();\r\n const cropperRef = useRef(null);\r\n const [cropping, setCropping] = useState(false); // whether cropper is in the middle of cropping\r\n const [cropData, setCropData] = useState(null); // cropped image object\r\n const [cropper, setCropper] = useState(null); // cropper js object\r\n const photoToEdit = useSelector(selectPhotoToEdit); // gets photo key for editing out of redux\r\n\r\n const [descriptionFieldValue, setDescriptionFieldValue] = useState(''); // value for description text box\r\n const [displayImageSrc, setDisplayImageSrc] = useState(''); // Full size image for cropper to work with\r\n\r\n // set description from redux\r\n useEffect(() => {\r\n if (photoToEdit) {\r\n setDescriptionFieldValue(photoToEdit.Description);\r\n if (photoToEdit.cropperPhoto && typeof (photoToEdit.cropperPhoto) !== 'string') {\r\n const displaySrc = URL.createObjectURL(photoToEdit.cropperPhoto);\r\n setDisplayImageSrc(displaySrc);\r\n }\r\n }\r\n }, [photoToEdit]);\r\n\r\n // keep modal state in unison with cropper state\r\n useEffect(() => {\r\n if (cropper && cropper.options.dragMode === 'crop') {\r\n setCropping(true);\r\n }\r\n }, [cropper]);\r\n\r\n // writes orientation and scale changes to canvas\r\n const setTransformData = () => {\r\n const canvasData = cropper.getCanvasData();\r\n if (canvasData) {\r\n cropper.setCropBoxData(canvasData);\r\n setCropData(cropper.getCroppedCanvas().toDataURL());\r\n }\r\n };\r\n\r\n // description modification UI -> formik\r\n const handleBlur = e => {\r\n if (!photoToEdit) return;\r\n if (photoToEdit.Description === e.target.value) return;\r\n photoToEdit.Description = e.target.value;\r\n setTransformData();\r\n };\r\n\r\n // description modification formik -> UI\r\n const handleChange = e => {\r\n setDescriptionFieldValue(e.target.value);\r\n setTransformData();\r\n };\r\n\r\n const onRotateLeft = () => {\r\n if (!cropper) return;\r\n cropper.rotate(-90);\r\n setTransformData();\r\n };\r\n\r\n const onRotateRight = () => {\r\n if (!cropper) return;\r\n cropper.rotate(90);\r\n setTransformData();\r\n };\r\n\r\n const onZoomIn = () => {\r\n if (!cropper) return;\r\n cropper.crop();\r\n cropper.zoom(0.1);\r\n setTransformData();\r\n };\r\n\r\n const onZoomOut = () => {\r\n if (!cropper) return;\r\n cropper.crop();\r\n cropper.zoom(-0.1);\r\n setTransformData();\r\n };\r\n\r\n const onFlipH = () => {\r\n if (!cropper) return;\r\n cropper.scaleX(-cropper.getData().scaleX || 1);\r\n setTransformData();\r\n };\r\n\r\n const onFlipV = () => {\r\n if (!cropper) return;\r\n cropper.scaleY(-cropper.getData().scaleY || 1);\r\n setTransformData();\r\n };\r\n\r\n const onCropImage = action => {\r\n if (!cropper) return;\r\n if (cropper !== undefined && action === 'move') {\r\n cropper.setDragMode('move');\r\n setCropping(false);\r\n } else {\r\n cropper.setDragMode('crop');\r\n setCropping(true);\r\n }\r\n };\r\n\r\n const onSave = async () => {\r\n if (cropData) {\r\n dispatch(addEditPhotoResult(photoToEdit, cropData));\r\n setCropData(URL.revokeObjectURL(cropData));\r\n setCropping(false);\r\n setCropData(null);\r\n dispatch(removeEditPhoto());\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n cropper.reset();\r\n cropper.clear();\r\n if (cropData) setCropData(URL.revokeObjectURL(cropData));\r\n setCropData(null);\r\n setCropping(false);\r\n };\r\n\r\n // load crop result\r\n const onCrop = () => {\r\n if (!cropper) return;\r\n setCropData(cropper.getCroppedCanvas().toDataURL());\r\n setCropping(false);\r\n cropper.setDragMode('move');\r\n };\r\n\r\n const closeClicked = () => {\r\n if (!cropper) return;\r\n if (cropData) setCropData(URL.revokeObjectURL(cropData));\r\n setCropData(null);\r\n setCropping(false);\r\n dispatch(removeEditPhoto());\r\n };\r\n\r\n const onRemove = () => {\r\n if (!cropper) return;\r\n if (cropData) setCropData(URL.revokeObjectURL(cropData));\r\n dispatch(softDeletePhoto(photoToEdit));\r\n dispatch(removeEditPhoto());\r\n };\r\n\r\n return (\r\n \r\n
    \r\n {photoToEdit && (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n Description\r\n \r\n \r\n
    \r\n setCropper(instance)}\r\n dragMode=\"none\"\r\n guides\r\n />\r\n
    \r\n
    \r\n Crop}\r\n >\r\n onCropImage('drag')}\r\n >\r\n \r\n \r\n \r\n Zoom In}\r\n >\r\n \r\n \r\n \r\n \r\n Zoom Out}\r\n >\r\n \r\n \r\n \r\n \r\n Rotate Left}\r\n >\r\n \r\n \r\n \r\n \r\n Rotate Right}\r\n >\r\n \r\n \r\n \r\n \r\n Fip Horizontal}\r\n >\r\n \r\n \r\n \r\n \r\n Fip Vertical}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default ImageCropperModal;\r\n","import React, {\r\n useEffect, useMemo,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport {\r\n setRepeatableSectionCount,\r\n} from '@redux/modules/listing';\r\nimport { selectPhotoMetaCollection } from '@redux/selectors/PhotoSelector';\r\nimport { clearPhotoCollection } from '@redux/modules/photo';\r\nimport 'cropperjs/dist/cropper.css';\r\nimport ImageDropZone from './imageDropZone/ImageDropZone';\r\nimport ImageCropperModal from './imageCropperModal/ImageCropperModal';\r\n\r\nconst ImageCropper = ({ fields, photosPayload }) => {\r\n const dispatch = useDispatch();\r\n const { values, setValues } = useFormikContext();\r\n const photoCollection = useSelector(selectPhotoMetaCollection);\r\n\r\n // clears photo collection on unmount; note the nested anonymous function\r\n useEffect(() => () => {\r\n dispatch(clearPhotoCollection());\r\n }, []);\r\n\r\n const transformFields = currentFields => {\r\n const newFields = [];\r\n if (currentFields?.fields) {\r\n currentFields[0].fields.forEach(field => { newFields[field.FieldName] = ''; });\r\n }\r\n return newFields;\r\n };\r\n\r\n const fieldNames = useMemo(() => transformFields(fields), [fields]);\r\n\r\n // object structure to write to formik values.Photos\r\n const createFormikEntry = photoMeta => {\r\n const formikEntry = {\r\n key: photoMeta.key,\r\n id: photoMeta.id,\r\n URL: photoMeta.externalURL,\r\n UniqueID: photoMeta.flexMeta.UniqueID ?? null,\r\n ParentID: photoMeta.flexMeta.ParentID ?? null,\r\n PreferredPhotoYN: photoMeta.flexMeta.PreferredPhotoYN ?? null,\r\n ResourceName: photoMeta.flexMeta.ResourceName ?? null,\r\n SortOrder: photoMeta.SortOrder,\r\n IsDeleted: photoMeta.IsDeleted,\r\n IsLive: photoMeta.flexMeta.IsLive ?? null,\r\n IsPreload: photoMeta.flexMeta.IsPreload ?? null,\r\n Description: photoMeta.Description,\r\n MediaType: photoMeta.flexMeta.MediaType ?? null,\r\n MediaCategory: photoMeta.flexMeta.MediaCategory ?? null,\r\n };\r\n return formikEntry;\r\n };\r\n\r\n // writes redux photo collection to formik.\r\n useEffect(() => {\r\n if (photoCollection) {\r\n let formikPhotos = values?.Photos ?? {};\r\n if (photoCollection.length === 0) formikPhotos = {};\r\n photoCollection.forEach(dPhoto => {\r\n const formikEntry = createFormikEntry(dPhoto);\r\n if (formikPhotos?.[formikEntry.key] && formikPhotos?.[formikEntry.key] !== formikEntry) {\r\n formikPhotos[formikEntry.key] = { ...fieldNames, ...formikEntry };\r\n } else if (!formikPhotos?.[formikEntry.key]) formikPhotos[formikEntry.key] = formikEntry;\r\n });\r\n const formikValues = values;\r\n formikValues.Photos = formikPhotos;\r\n setValues(formikValues);\r\n dispatch(setRepeatableSectionCount(formikValues));\r\n }\r\n }, [photoCollection]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nImageCropper.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n photosPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default ImageCropper;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\n/*\r\nbadges are small tags used to add context\r\nbadges scale to match the size of the immediate parent element\r\nstyle modifier classes include: primary, secondary, success, danger, warning, info, light and dark\r\n\r\nComponent Call:\r\n\r\n{values to display}\r\n\r\n*/\r\n\r\nconst DynamicBadge = props => {\r\n const {\r\n children,\r\n bg,\r\n bw,\r\n pill,\r\n tooltipText = null,\r\n placeRight = false,\r\n marginRight = false,\r\n } = props;\r\n\r\n const pillClass = pill ? 'badge-pill' : '';\r\n const positioningClass = placeRight ? 'float-right' : '';\r\n const marginClass = marginRight ? 'mr-2' : 'ml-2';\r\n const badgeColor = !isEmpty(bg) ? bg.toLowerCase() : '';\r\n const badgeWidth = !isEmpty(bw) ? bw.toLowerCase() : 'width-1';\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nDynamicBadge.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n bg: PropTypes.string.isRequired,\r\n bw: PropTypes.string,\r\n pill: PropTypes.bool,\r\n tooltipText: PropTypes.string,\r\n placeRight: PropTypes.bool,\r\n marginRight: PropTypes.bool,\r\n};\r\n\r\nDynamicBadge.defaultProps = {\r\n pill: PropTypes.null,\r\n};\r\n\r\nexport default DynamicBadge;\r\n","/* eslint-disable jsx-a11y/label-has-associated-control, no-unused-vars */\r\nimport React, {\r\n useEffect, useRef, useState,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport NumberFormat from 'react-number-format';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectRoomStatusById } from '@redux/selectors/FormSelector';\r\n\r\nconst RoomMeasurement = ({\r\n id, formik, handleBlur,\r\n}) => {\r\n const didMount = useRef(false); // stateflag...\r\n const [inchesL, setInchesL] = useState('');\r\n const [feetL, setFeetL] = useState('');\r\n const [inchesW, setInchesW] = useState('');\r\n const [feetW, setFeetW] = useState('');\r\n const [imperialW, setImperialW] = useState('');\r\n const [imperialL, setImperialL] = useState('');\r\n const [metricW, setMetricW] = useState('');\r\n const [metricL, setMetricL] = useState('');\r\n\r\n const roomStatus = useSelector(state => selectRoomStatusById(state, id)); // room record meta\r\n const MAX_INCHES_VAL = 11; // arithmetic helper\r\n const MAX_SIZE_FEET = 200;\r\n const MAX_SIZE_METERS = 61.24;\r\n\r\n const withFeetValueLimit = ({ formattedValue, floatValue }) => formattedValue === '' || floatValue <= MAX_SIZE_FEET;\r\n const withMeterValueLimit = ({ formattedValue, floatValue }) => formattedValue === '' || floatValue <= MAX_SIZE_METERS;\r\n const withInchValueLimit = ({ formattedValue, floatValue }) => formattedValue === '' || floatValue <= MAX_INCHES_VAL; // unknown control.\r\n\r\n const roomValues = formik?.values?.Rooms[id]; // values for given room\r\n const setFormikValue = (fieldName, val) => formik.setFieldValue(fieldName, val);\r\n\r\n const metricDecimalToImperialInts = metricDecimal => {\r\n const imperialDecimal = metricDecimal * 3.28084;\r\n let feetInt = Math.floor(imperialDecimal);\r\n let inchesInt = (imperialDecimal - feetInt) * 12;\r\n if (inchesInt > 11) {\r\n feetInt += 1;\r\n inchesInt = 0;\r\n }\r\n return {\r\n feet: feetInt,\r\n inches: inchesInt,\r\n };\r\n };\r\n\r\n const imperialDecimalToImperialInts = impDecimal => {\r\n let feetInt = Math.floor(impDecimal);\r\n let inchesInt = (impDecimal - feetInt) * 12;\r\n if (inchesInt > 11) {\r\n feetInt += 1;\r\n inchesInt = 0;\r\n }\r\n return {\r\n feet: feetInt,\r\n inches: inchesInt,\r\n };\r\n };\r\n\r\n const feetInchesToFeetDecimal = (feet = 0, inches = 0) => {\r\n const numericFeet = Number(feet);\r\n const inchDecimal = inches / 12;\r\n return numericFeet + inchDecimal;\r\n };\r\n\r\n const imperialIntsToImperialDecimal = (feet, inches) => feet + Math.round((inches / 12) * 100 + Number.EPSILON) / 100;\r\n const imperialDecimalToMetricDecimal = imperialDecimal => Math.round((imperialDecimal / 3.28084) * 1000 + Number.EPSILON) / 1000;\r\n\r\n // sets UI reading from formik values, converts long to int array if imperial\r\n // only runs once\r\n useEffect(() => {\r\n if (roomValues?.RoomLengthWidthUnits === 'M') { // handles metric\r\n if (roomValues.RoomLength) setMetricL(roomValues.RoomLength);\r\n if (roomValues.RoomWidth) setMetricW(roomValues.roomWidth);\r\n }\r\n\r\n if (roomValues?.RoomLengthWidthUnits === 'F') { // handles imperial\r\n if (roomValues.RoomLength) {\r\n const imperialInts = imperialDecimalToImperialInts(roomValues.RoomLength);\r\n setFeetL(imperialInts.feet);\r\n setInchesL(imperialInts.inches);\r\n setImperialL(feetInchesToFeetDecimal(feetL, inchesL));\r\n }\r\n\r\n if (roomValues?.RoomWidth) {\r\n const imperialInts = imperialDecimalToImperialInts(roomValues.RoomWidth);\r\n setFeetW(imperialInts.feet);\r\n setInchesW(imperialInts.inches);\r\n setImperialW(feetInchesToFeetDecimal(feetW, inchesW));\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (didMount.current) { // in place to not run the conversion on mount, because dimension unit is set on mount\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n if (roomValues.RoomLength) { // convert metric decimal to imperial\r\n const imperialInts = metricDecimalToImperialInts(roomValues.RoomLength);\r\n const imperialDecimal = imperialIntsToImperialDecimal(imperialInts.feet, imperialInts.inches);\r\n setFormikValue(`Rooms.[${id}].RoomLength`, imperialDecimal);\r\n setInchesL(imperialInts.inches);\r\n setFeetL(imperialInts.feet);\r\n setImperialL(feetInchesToFeetDecimal(feetL, inchesL));\r\n }\r\n if (roomValues.RoomWidth) {\r\n const imperialInts = metricDecimalToImperialInts(roomValues.RoomWidth);\r\n const imperialDecimal = imperialIntsToImperialDecimal(imperialInts.feet, imperialInts.inches);\r\n setFormikValue(`Rooms.[${id}].RoomWidth`, imperialDecimal);\r\n setInchesW(imperialInts.inches);\r\n setFeetW(imperialInts.feet);\r\n setImperialW(feetInchesToFeetDecimal(feetW, inchesW));\r\n }\r\n }\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (roomValues.RoomLength) {\r\n const metricDecimal = imperialDecimalToMetricDecimal(roomValues.RoomLength);\r\n setFormikValue(`Rooms.[${id}].RoomLength`, metricDecimal);\r\n setMetricL(metricDecimal);\r\n }\r\n if (roomValues.RoomWidth) {\r\n const metricDecimal = imperialDecimalToMetricDecimal(roomValues.RoomWidth);\r\n setFormikValue(`Rooms.[${id}].RoomWidth`, metricDecimal);\r\n setMetricW(metricDecimal);\r\n }\r\n }\r\n } else didMount.current = true;\r\n }, [roomValues?.RoomLengthWidthUnits]);\r\n\r\n // blur handlers for length/width, uninvolved in conversions\r\n // formik state values are updated on blur\r\n // handleblur passed from props.\r\n useEffect(() => {\r\n handleBlur(`Rooms.[${id}].RoomLength`)();\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (roomValues.RoomLength === metricL) return;\r\n setMetricL(roomValues?.RoomLength);\r\n }\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n if (roomValues.RoomLength === imperialL) return;\r\n setImperialL(roomValues?.RoomLength);\r\n }\r\n }, [roomValues?.RoomLength]);\r\n\r\n // handleblur passeed from props\r\n // formik state updated\r\n useEffect(() => {\r\n handleBlur(`Rooms.[${id}].RoomWidth`)();\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (roomValues.RoomWidth === metricW) return;\r\n setMetricW(roomValues?.RoomWidth);\r\n }\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n if (roomValues.RoomWidth === imperialW) return;\r\n setImperialW(roomValues?.RoomWidth);\r\n }\r\n }, [roomValues?.RoomWidth]);\r\n\r\n const dimensionChangeHandler = e => {\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n const val = e.target.value.replace(/\"/g, '');\r\n if (e.target.name === 'RoomWidthInch') {\r\n setInchesW(val);\r\n setImperialW(feetInchesToFeetDecimal(feetW, val));\r\n }\r\n if (e.target.name === 'RoomWidth') {\r\n setFeetW(val);\r\n setImperialW(feetInchesToFeetDecimal(val, inchesW));\r\n }\r\n\r\n if (e.target.name === 'RoomLengthInch') {\r\n setInchesL(val);\r\n setImperialL(feetInchesToFeetDecimal(feetL, val));\r\n }\r\n if (e.target.name === 'RoomLength') {\r\n setFeetL(val);\r\n setImperialL(feetInchesToFeetDecimal(val, inchesL));\r\n }\r\n }\r\n\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (e.target.name === 'RoomWidth') {\r\n setMetricW(e.target.value);\r\n }\r\n if (e.target.name === 'RoomLength') {\r\n setMetricL(e.target.value);\r\n }\r\n }\r\n };\r\n\r\n const blurWidthHandler = () => {\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (roomValues.RoomWidth === metricW) return;\r\n setFormikValue(`Rooms.[${id}].RoomWidth`, metricW);\r\n }\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n if (roomValues.RoomWidth === imperialW) return;\r\n setFormikValue(`Rooms.[${id}].RoomWidth`, imperialW);\r\n }\r\n };\r\n\r\n const blurLengthHandler = () => {\r\n if (roomValues.RoomLengthWidthUnits === 'M') {\r\n if (roomValues.RoomLength === metricL) return;\r\n setFormikValue(`Rooms.[${id}].RoomLength`, metricL);\r\n }\r\n if (roomValues.RoomLengthWidthUnits === 'F') {\r\n if (roomValues.RoomLength === imperialL) return;\r\n setFormikValue(`Rooms.[${id}].RoomLength`, imperialL);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' ? 'ft' : 'm'}\r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' && (\r\n <>\r\n \r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' ? 'in' : 'm'}\r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n {roomStatus?.RoomLength?.errorMessage &&
    {roomStatus.RoomLength.errorMessage}
    }\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' ? 'ft' : 'm'}\r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' && (\r\n <>\r\n \r\n
    \r\n {roomValues?.RoomLengthWidthUnits === 'F' ? 'in' : 'm'}\r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n {roomStatus?.RoomWidth?.errorMessage &&
    {roomStatus.RoomWidth.errorMessage}
    }\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nRoomMeasurement.propTypes = {\r\n formik: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.shape(), PropTypes.number, PropTypes.func])),\r\n id: PropTypes.string.isRequired,\r\n handleBlur: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default RoomMeasurement;\r\n","/* eslint-disable jsx-a11y/label-has-associated-control */\r\nimport React, {\r\n forwardRef, useEffect, useMemo, useCallback,\r\n} from 'react';\r\n\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport Select from 'react-select';\r\n\r\nimport {\r\n setRoomValidationResult,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { selectRoomStatusById, selectComboBoxOptions } from '@redux/selectors/FormSelector';\r\n\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport styles from '@components/form/formComponents/repeatableRoom/RoomCard.module.css';\r\nimport RoomMeasurement from '@components/form/formComponents/repeatableRoom/RoomMeasurement';\r\n\r\nconst roomRules = window.FlexRule.RuntimeEngine.fromJavaScript('OnePlatform', 'RoomRules');\r\n\r\nconst RoomCard = forwardRef(\r\n ({\r\n attributes,\r\n item,\r\n className,\r\n color,\r\n dragOverlay,\r\n dragging,\r\n disabled,\r\n fadeIn,\r\n handle,\r\n height,\r\n listeners,\r\n renderItem,\r\n sorting,\r\n style,\r\n transition,\r\n transform,\r\n value,\r\n wrapperStyle,\r\n index,\r\n onRemoveRoom,\r\n role,\r\n formik,\r\n id,\r\n ...props\r\n }, ref) => {\r\n const dispatch = useDispatch();\r\n const roomLvlOptions = useSelector(state => selectComboBoxOptions(state, 'RoomLevel'));\r\n const roomTypeOptions = useSelector(state => selectComboBoxOptions(state, 'RoomType'));\r\n const values = formik?.values?.Rooms[id];\r\n const roomLvl = useMemo(() => roomLvlOptions.find(opt => opt.value === values.RoomLevel), [values, roomLvlOptions]);\r\n const roomType = useMemo(() => roomTypeOptions.find(opt => opt.value === values.RoomType), [values, roomTypeOptions]);\r\n\r\n const roomStatus = useSelector(state => selectRoomStatusById(state, id));\r\n // validates total room, then sets the results in redux\r\n const validateRoomField = () => {\r\n if (!values.IsDeleted) {\r\n const res = roomRules.run(values);\r\n const { fieldValidationResult } = res.context.variableContainer;\r\n dispatch(setRoomValidationResult(id, fieldValidationResult));\r\n }\r\n };\r\n\r\n // sets field as touched, then triggers validation on field\r\n const handleBlur = useCallback(fieldName => () => {\r\n formik.setFieldTouched(fieldName, true);\r\n validateRoomField();\r\n }, [values]);\r\n\r\n const lvlOnChange = opt => {\r\n formik.setFieldValue(`Rooms.[${id}].RoomLevel`, opt?.value);\r\n };\r\n\r\n const typeOnChange = opt => {\r\n formik.setFieldValue(`Rooms.[${id}].RoomType`, opt?.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (!dragOverlay) {\r\n return undefined;\r\n }\r\n\r\n document.body.style.cursor = 'grabbing';\r\n\r\n return () => {\r\n document.body.style.cursor = '';\r\n };\r\n }, [dragOverlay]);\r\n\r\n const removeRoom = () => {\r\n onRemoveRoom(id);\r\n };\r\n return (renderItem && item) ? (\r\n renderItem({\r\n key: id,\r\n dragOverlay: Boolean(dragOverlay),\r\n dragging: Boolean(dragging),\r\n sorting: Boolean(sorting),\r\n index,\r\n fadeIn: Boolean(fadeIn),\r\n listeners,\r\n onRemoveRoom,\r\n ref,\r\n style,\r\n transform,\r\n transition,\r\n value,\r\n })\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n {values.SortOrder}\r\n \r\n \r\n \r\n \r\n )}\r\n >\r\n \r\n
    \r\n \r\n Type\r\n \r\n \r\n {roomStatus?.RoomType?.errorMessage && (\r\n
    {roomStatus.RoomType.errorMessage}
    )}\r\n
    \r\n
    \r\n \r\n Level\r\n \r\n \r\n {roomStatus?.RoomLevel?.errorMessage && (\r\n
    {roomStatus.RoomLevel.errorMessage}
    )}\r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nRoomCard.propTypes = {\r\n attributes: PropTypes.string,\r\n className: PropTypes.string,\r\n color: PropTypes.string,\r\n dragOverlay: PropTypes.bool,\r\n dragging: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n fadeIn: PropTypes.bool,\r\n handle: PropTypes.bool,\r\n height: PropTypes.string,\r\n key: PropTypes.string,\r\n listeners: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n id: PropTypes.string.isRequired,\r\n index: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n item: PropTypes.arrayOf(PropTypes.string),\r\n renderItem: PropTypes.bool,\r\n sorting: PropTypes.bool,\r\n style: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n transform: PropTypes.bool,\r\n transition: PropTypes.string,\r\n value: PropTypes.string,\r\n wrapperStyle: PropTypes.oneOfType([PropTypes.shape(), PropTypes.array]),\r\n onRemoveRoom: PropTypes.func,\r\n role: PropTypes.string,\r\n formik: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.shape(), PropTypes.number, PropTypes.func])),\r\n};\r\n\r\nexport default RoomCard;\r\n","import React, {\r\n useEffect, useState, useMemo,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { createPortal } from 'react-dom';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n closestCenter,\r\n DragOverlay,\r\n DndContext,\r\n defaultDropAnimation,\r\n KeyboardSensor,\r\n PointerSensor,\r\n TouchSensor,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core';\r\n\r\nimport {\r\n arrayMove,\r\n useSortable,\r\n SortableContext,\r\n sortableKeyboardCoordinates,\r\n rectSortingStrategy,\r\n} from '@dnd-kit/sortable';\r\n\r\nimport {\r\n deleteRoomValidationResult,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { setRepeatableSectionCount } from '@redux/modules/listing';\r\n\r\nimport Grid from '@components/form/formComponents/imageCropper/imageDropZone/components/Grid';\r\nimport RoomCard from '@components/form/formComponents/repeatableRoom/RoomCard';\r\n\r\nconst defaultDropAnimationConfig = {\r\n ...defaultDropAnimation,\r\n dragSourceOpacity: 0.5,\r\n};\r\n\r\nexport function RoomsGridList({\r\n activationConstraint,\r\n animateLayoutChanges,\r\n adjustScale = false,\r\n collisionDetection = closestCenter,\r\n dropAnimation = defaultDropAnimationConfig,\r\n formik,\r\n getItemStyles = () => ({}),\r\n handle = false,\r\n isDisabled = () => false,\r\n measuring,\r\n modifiers,\r\n renderItem,\r\n strategy = rectSortingStrategy,\r\n useDragOverlay = true,\r\n wrapperStyle = () => ({}),\r\n}) {\r\n const roomValues = formik?.values?.Rooms;\r\n const [items, setItems] = useState(null);\r\n const [activeId, setActiveId] = useState(null);\r\n\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 10,\r\n },\r\n }),\r\n useSensor(TouchSensor, {\r\n activationConstraint,\r\n }),\r\n useSensor(KeyboardSensor, {\r\n coordinateGetter: sortableKeyboardCoordinates,\r\n }),\r\n );\r\n const dispatch = useDispatch();\r\n const entryItems = useMemo(() => {\r\n const arrayOfItems = items ? Object.entries(items) : [];\r\n return arrayOfItems;\r\n }, [items]);\r\n\r\n const getIndex = id => Object.keys(items).findIndex(item => item === id);\r\n const activeIndex = activeId ? getIndex(activeId) : -1;\r\n\r\n useEffect(() => {\r\n if (roomValues) {\r\n setItems(roomValues);\r\n }\r\n }, [roomValues]);\r\n\r\n const onRemoveRoom = id => {\r\n // remove room from formik values\r\n const { [id]: removedValue, ...otherValues } = items;\r\n // otherValues is a dictionary.\r\n // keys are just uid prop\r\n\r\n // eslint-disable-next-line no-param-reassign, no-return-assign\r\n const sortedOthers = Object.values(otherValues).filter(ov => !ov.IsDeleted).sort((ov1, ov2) => ov1.SortOrder - ov2.SortOrder).map((sOv, index) => sOv = { ...sOv, SortOrder: index + 1 });\r\n const otherDict = {};\r\n const newValues = formik.values;\r\n sortedOthers.forEach(sO => {\r\n otherDict[sO.uid] = sO;\r\n newValues.Rooms[sO.uid].SortOrder = sO.SortOrder;\r\n });\r\n setItems({ ...otherDict });\r\n newValues.Rooms[removedValue.uid].IsDeleted = true;\r\n formik.setValues(newValues);\r\n // remove room from formik touched, if it exists\r\n if (formik?.touched?.Rooms?.[id]) {\r\n const { [id]: removedTouched, ...otherTouched } = formik.touched.Rooms;\r\n formik.setTouched({\r\n ...formik.touched,\r\n Rooms: { ...otherTouched },\r\n });\r\n }\r\n // remove room from redux validation\r\n dispatch(setRepeatableSectionCount(newValues));\r\n dispatch(deleteRoomValidationResult(id));\r\n };\r\n\r\n const spliceDict = (dict, startIndex, endIndex) => {\r\n let newDict = [];\r\n const newArr = {};\r\n Object.entries(dict).map(([key]) => newDict.push({ [key]: dict[key] }));\r\n newDict = arrayMove(newDict, startIndex, endIndex);\r\n newDict.map((entry, index) => {\r\n Object.entries(entry).map(([key, value]) => {\r\n newArr[key] = {\r\n ...value,\r\n SortOrder: index + 1,\r\n };\r\n return undefined;\r\n });\r\n return undefined;\r\n });\r\n return newArr;\r\n };\r\n return (\r\n {\r\n if (!active) {\r\n return;\r\n }\r\n setActiveId(active.id);\r\n }}\r\n onDragEnd={({ over }) => {\r\n setActiveId(null);\r\n\r\n if (over) {\r\n const overIndex = getIndex(over.id);\r\n if (activeIndex !== overIndex) {\r\n const newRooms = spliceDict(items, activeIndex, overIndex);\r\n formik.setValues({\r\n ...formik.values,\r\n Rooms: { ...newRooms },\r\n });\r\n }\r\n }\r\n }}\r\n onDragCancel={() => setActiveId(null)}\r\n measuring={measuring}\r\n modifiers={modifiers}\r\n >\r\n \r\n \r\n {items && entryItems.map(([k], index) => (items[k].IsDeleted\r\n ? null\r\n : (\r\n \r\n )\r\n ))}\r\n \r\n \r\n {useDragOverlay\r\n && createPortal(\r\n \r\n {activeId && (\r\n \r\n )}\r\n ,\r\n document.body,\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport function SortableRoomCard({\r\n animateLayoutChanges,\r\n formik,\r\n disabled,\r\n id,\r\n index,\r\n handle,\r\n onRemoveRoom,\r\n style,\r\n renderItem,\r\n useDragOverlay,\r\n wrapperStyle,\r\n}) {\r\n const {\r\n attributes,\r\n isDragging,\r\n isSorting,\r\n listeners,\r\n overIndex,\r\n setNodeRef,\r\n transform,\r\n transition,\r\n } = useSortable({\r\n animateLayoutChanges,\r\n id,\r\n disabled,\r\n });\r\n return (\r\n \r\n );\r\n}\r\n\r\nRoomsGridList.propTypes = {\r\n activationConstraint: PropTypes.number,\r\n animateLayoutChanges: PropTypes.number,\r\n adjustScale: PropTypes.bool,\r\n collisionDetection: PropTypes.string,\r\n dropAnimation: PropTypes.number,\r\n formik: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.shape(), PropTypes.number, PropTypes.func])),\r\n getItemStyles: PropTypes.func,\r\n handle: PropTypes.bool,\r\n isDisabled: PropTypes.number,\r\n measuring: PropTypes.number,\r\n modifiers: PropTypes.number,\r\n renderItem: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n strategy: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n useDragOverlay: PropTypes.bool,\r\n wrapperStyle: PropTypes.func,\r\n};\r\n\r\nSortableRoomCard.propTypes = {\r\n animateLayoutChanges: PropTypes.number,\r\n disabled: PropTypes.bool,\r\n formik: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.shape(), PropTypes.number, PropTypes.func])),\r\n handle: PropTypes.bool,\r\n isSelected: PropTypes.bool,\r\n id: PropTypes.string,\r\n index: PropTypes.number,\r\n renderItem: PropTypes.arrayOf(PropTypes.string, PropTypes.shape()),\r\n onRemoveRoom: PropTypes.func,\r\n style: PropTypes.func,\r\n useDragOverlay: PropTypes.bool,\r\n wrapperStyle: PropTypes.func,\r\n};\r\n","/* eslint-disable jsx-a11y/label-has-associated-control */\r\nimport React, { useEffect, useState, useMemo } from 'react';\r\nimport { Formik, FieldArray, useFormikContext } from 'formik';\r\nimport Select from 'react-select';\r\nimport { useSelector } from 'react-redux';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport PropTypes from 'prop-types';\r\nimport Swal from 'sweetalert2';\r\nimport {\r\n selectComboBoxOptions,\r\n selectStatusByName,\r\n selectFormDefinition,\r\n} from '@redux/selectors/FormSelector';\r\nimport {\r\n selectSectionsPerRepeatableSection,\r\n} from '@redux/selectors/ListingSelector';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Badge from '@components/smartAdminUI/Badge';\r\nimport { RoomsGridList } from './RoomsGridList';\r\n\r\nconst RepeatableRoom = ({ roomsPayload }) => {\r\n const formDefn = useSelector(selectFormDefinition);\r\n const maxCount = useMemo(() => formDefn?.find(meta => meta.PageName === 'Rooms')?.repeatableMaxCount ?? 25, [formDefn]);\r\n\r\n const formik = useFormikContext();\r\n const [dimension, setDimension] = useState();\r\n const roomDimensionOptions = useSelector(state => selectComboBoxOptions(state, 'RoomLengthWidthUnits'));\r\n\r\n const roomErrorDimension = useSelector(state => selectStatusByName(state, 'RoomDimensions'));\r\n const roomErrorCount = useSelector(state => selectStatusByName(state, 'RoomTypeMinimumRequirements'));\r\n const roomErrorLevel = useSelector(state => selectStatusByName(state, 'RoomLevel'));\r\n const roomErrorType = useSelector(state => selectStatusByName(state, 'RoomType'));\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const roomsCount = sectionsPerRepeatableSection.Rooms.length;\r\n\r\n const changeRoomDimension = () => {\r\n const roomsArr = formik.values.Rooms;\r\n\r\n if (!isEmpty(roomsArr)) {\r\n let newArr = {};\r\n Object.entries(roomsArr).forEach(([k]) => {\r\n newArr = {\r\n ...newArr,\r\n [k]: {\r\n ...roomsArr[k],\r\n RoomLengthWidthUnits: !isEmpty(dimension) ? dimension.value : '',\r\n },\r\n };\r\n });\r\n\r\n formik.setValues({\r\n ...formik.values,\r\n Rooms: {\r\n ...newArr,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n roomsPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(room => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: room.UniqueID,\r\n RoomLengthWidthUnits: room.RoomLengthWidthUnits,\r\n RoomLength: room.RoomLength,\r\n RoomWidth: room.RoomWidth,\r\n RoomType: room.RoomType,\r\n RoomLevel: room.RoomLevel,\r\n SortOrder: room.SortOrder,\r\n IsDeleted: false,\r\n };\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (roomsPayload?.length) {\r\n const newValues = buildFormikValues();\r\n const formikValues = formik.values;\r\n formikValues.Rooms = newValues;\r\n formik.setValues(formikValues);\r\n }\r\n\r\n if (roomsPayload?.[0]?.RoomLengthWidthUnits === 'F') { // assuming all rooms have the same unit as it should be\r\n setDimension({\r\n label: 'Feet',\r\n parents: undefined,\r\n value: 'F',\r\n });\r\n } else {\r\n setDimension({\r\n label: 'Meters',\r\n parents: undefined,\r\n value: 'M',\r\n });\r\n }\r\n }, [roomsPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Rooms Exceeded',\r\n html: `The maximum number of rooms must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addRoom = () => {\r\n if (roomsCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n let newArr = {};\r\n const roomsArr = formik.values.Rooms;\r\n if (!isEmpty(roomsArr)) {\r\n // Object.entries(roomsArr).filter(r => !r.IsDeleted).forEach(([k], index) => {\r\n Object.entries(roomsArr).filter(r => !r.IsDeleted).forEach(([k]) => {\r\n newArr = {\r\n ...newArr,\r\n [k]: {\r\n ...roomsArr[k],\r\n uid: k,\r\n // SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n }\r\n\r\n const roomsValues = newArr ? { ...newArr } : { ...formik.values.Rooms };\r\n const isLiveCount = Object.values(roomsValues).filter(r => !r.IsDeleted).length;\r\n formik.setValues({\r\n ...formik.values,\r\n Rooms: {\r\n ...roomsValues,\r\n [uid]: {\r\n uid,\r\n RoomLengthWidthUnits: !isEmpty(dimension) ? dimension.value : '',\r\n RoomLength: '',\r\n RoomWidth: '',\r\n RoomType: '',\r\n RoomLevel: '',\r\n SortOrder: isLiveCount + 1,\r\n IsDeleted: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n const customHandler = opt => {\r\n setDimension(opt);\r\n };\r\n\r\n useEffect(() => {\r\n if (isEmpty(formik.values.Rooms)) return;\r\n changeRoomDimension();\r\n }, [dimension]);\r\n\r\n return (\r\n \r\n {() => (\r\n <>\r\n

    \r\n Rooms\r\n \r\n {roomsCount}\r\n \r\n

    \r\n
    \r\n {roomErrorDimension?.errorMessage &&
    {roomErrorDimension.errorMessage}
    }\r\n {roomErrorCount?.errorMessage &&
    {roomErrorCount.errorMessage}
    }\r\n {roomErrorLevel?.errorMessage &&
    {roomErrorLevel.errorMessage}
    }\r\n {roomErrorType?.errorMessage &&
    {roomErrorType.errorMessage}
    }\r\n \r\n
    \r\n \r\n <>\r\n
    \r\n \r\n Units\r\n \r\n \r\n
    \r\n { roomsCount === 0 && (\r\n

    \r\n \r\n Please note that you can use the dropdown above to change units from Imperial to Metric.\r\n

    \r\n )}\r\n {!isEmpty(formik.values.Rooms) && (\r\n \r\n )}\r\n \r\n
    \r\n {(roomsCount > 2) && (\r\n <>\r\n \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nRepeatableRoom.propTypes = {\r\n roomsPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableRoom;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextareaAutosize from 'react-textarea-autosize';\r\nimport { isNull } from 'lodash';\r\n\r\nconst FormikTextInput = ({\r\n disabled,\r\n name,\r\n value,\r\n onBlur,\r\n onChange,\r\n onKeyPress,\r\n maxLength,\r\n}) => (maxLength < 200\r\n ? (\r\n
    \r\n {name.includes('URL') && (
    )}\r\n \r\n {(!disabled && maxLength > 50) && (\r\n
    \r\n
    \r\n {maxLength > 0 && !disabled ? `${isNull(value) ? 0 : value.length} / ${maxLength}` : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n : (\r\n
    \r\n {name.includes('URL') && (
    )}\r\n \r\n {(!disabled && maxLength > 50) && (\r\n
    \r\n
    \r\n {maxLength > 0 && !disabled ? `${isNull(value) ? 0 : value.length} / ${maxLength}` : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n);\r\n\r\nFormikTextInput.propTypes = {\r\n disabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool, PropTypes.instanceOf(null)]), // if value is null\r\n onBlur: PropTypes.func,\r\n onChange: PropTypes.func,\r\n onKeyPress: PropTypes.func,\r\n maxLength: PropTypes.number,\r\n};\r\n\r\nexport default FormikTextInput;\r\n","import React, { useMemo } from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport PropTypes from 'prop-types';\r\nimport { useField } from 'formik';\r\n\r\nconst FormikBoolean = ({\r\n disabled,\r\n name,\r\n value = false,\r\n onBlur,\r\n onChange,\r\n}) => {\r\n const [field, , helpers] = useField(name);\r\n const checked = useMemo(() => {\r\n if (typeof value === 'boolean') return value;\r\n if (typeof value === 'number') return Boolean(value);\r\n if (typeof value === 'string') return Boolean(Number(value));\r\n return null;\r\n }, [value]);\r\n\r\n const handleChange = event => {\r\n const bitVal = String(Number(event?.target?.checked ?? false));\r\n if (field?.value === bitVal) return;\r\n if (onChange) {\r\n onChange(bitVal);\r\n } else {\r\n helpers.setValue(bitVal);\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nFormikBoolean.propTypes = {\r\n disabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),\r\n onBlur: PropTypes.func,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nexport default FormikBoolean;\r\n","import React, { useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport DatePicker from 'react-datepicker';\r\nimport { useField } from 'formik';\r\nimport { isNull } from 'lodash';\r\n\r\nconst FormikDatePicker = props => {\r\n const {\r\n name,\r\n datatype,\r\n value,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n initialValue, // supplies payload value ahead of formik loading.\r\n } = props;\r\n\r\n const [field, , helpers] = useField(name);\r\n const [dateValue, setDateValue] = useState(null);\r\n\r\n const castByTimezone = date => new Date((typeof date === 'string' ? new Date(date) : date).toLocaleString('en-US', { timeZone: 'America/Edmonton' }));\r\n\r\n const getFormattedDate = inputDate => {\r\n const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(inputDate);\r\n const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(inputDate);\r\n const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(inputDate);\r\n const formattedDate = `${year}-${month}-${day}`;\r\n return formattedDate;\r\n };\r\n\r\n const getFormattedTime = inputDate => new Intl.DateTimeFormat('en', {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n second: 'numeric',\r\n }).format(inputDate);\r\n\r\n const getFormattedDateTime = inputDate => `${getFormattedDate(inputDate)} ${getFormattedTime(inputDate)}`;\r\n\r\n const getFormattedDateValue = inputDate => {\r\n switch (datatype) {\r\n case 'datetime':\r\n return getFormattedDateTime(inputDate);\r\n case 'date':\r\n return getFormattedDate(inputDate);\r\n case 'time':\r\n return getFormattedTime(inputDate);\r\n default:\r\n return inputDate.toLocaleString();\r\n }\r\n };\r\n\r\n const getIsoFormat = seed => {\r\n if (seed.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)((-(\\d{2}):(\\d{2})|Z)?)$/g)) {\r\n const iso = new Date(seed).toISOString();\r\n const tzCast = castByTimezone(iso);\r\n return tzCast;\r\n }\r\n\r\n const localeOptions = {\r\n timeZoneName: 'longOffset',\r\n year: 'numeric',\r\n month: 'numeric',\r\n day: 'numeric',\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n second: 'numeric',\r\n };\r\n const localeFormatter = new Intl.DateTimeFormat([], localeOptions);\r\n\r\n if (datatype === 'datetime') {\r\n const localeDT = localeFormatter.format(new Date(seed));\r\n return new Date(localeDT);\r\n }\r\n if (datatype === 'date') {\r\n const localeDate = seed.replaceAll('-', '/');\r\n const dateObj = new Date(localeDate);\r\n return dateObj;\r\n }\r\n if (datatype === 'time') {\r\n const todayYYMMDD = getFormattedDate(new Date());\r\n const timeStamp = `${todayYYMMDD} ${seed}`;\r\n const timeString = localeFormatter.format(new Date(timeStamp));\r\n return new Date(timeString);\r\n }\r\n\r\n return new Date().toISOString();\r\n };\r\n\r\n // populates field with Flexrule payload\r\n useMemo(() => {\r\n if (!initialValue && !value) return;\r\n const seedValue = !value ? initialValue : value;\r\n const receivedDate = getIsoFormat(seedValue);\r\n\r\n if (datatype === 'time') {\r\n const year = receivedDate.getFullYear();\r\n if (year < 1907) {\r\n const newValue = value.replace(`${year}`, '1907');\r\n const castValue = castByTimezone(newValue);\r\n setDateValue(new Date(castValue));\r\n return;\r\n }\r\n }\r\n setDateValue(receivedDate);\r\n }, []);\r\n\r\n const handleChange = (val = new Date()) => {\r\n setDateValue(val);\r\n // required FlexRuleFormat if not null date value\r\n const dateVal = isNull(val) ? '' : getFormattedDateValue(val);\r\n if (field?.value === dateVal) return;\r\n if (onChange) {\r\n onChange(dateVal);\r\n } else {\r\n helpers.setValue(dateVal);\r\n }\r\n };\r\n\r\n // Forces user to select date from datepicker only and prevents typing any values which caused a bug\r\n const handleTypedInputs = e => {\r\n e.preventDefault();\r\n };\r\n\r\n const DateWithAddOnCalendar = React.forwardRef(({\r\n className: _className, val, onClick, ...remaining\r\n }, ref) => (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n ));\r\n\r\n DateWithAddOnCalendar.propTypes = {\r\n className: PropTypes.string, val: PropTypes.string, onClick: PropTypes.func,\r\n };\r\n\r\n const TimeWithAddOnClock = React.forwardRef(({\r\n className: _className, val, onClick, ...remaining\r\n }, ref) => (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n ));\r\n\r\n TimeWithAddOnClock.propTypes = {\r\n className: PropTypes.string, val: PropTypes.string, onClick: PropTypes.func,\r\n };\r\n\r\n const [customInput, dateFormat, todayButton, showTimeSelect, showTimeSelectOnly] = useMemo(() => {\r\n let input = null;\r\n let format = 'yyyy/MM/dd HH:mm';\r\n let today = null;\r\n let timeSelect = true;\r\n let timeSelectOnly = false;\r\n\r\n switch (datatype) {\r\n case 'date':\r\n input = ;\r\n format = 'yyyy-MM-dd';\r\n today = 'Today';\r\n timeSelect = false;\r\n timeSelectOnly = false;\r\n break;\r\n case 'time':\r\n input = ;\r\n format = 'h:mm aa';\r\n today = '';\r\n timeSelect = true;\r\n timeSelectOnly = true;\r\n break;\r\n case 'datetime':\r\n input = ;\r\n format = 'yyyy-MM-dd HH:mm';\r\n today = 'Today';\r\n timeSelect = true;\r\n timeSelectOnly = false;\r\n break;\r\n default:\r\n input = ;\r\n format = 'yyyy-MM-dd';\r\n today = 'Today';\r\n timeSelect = true;\r\n timeSelectOnly = false;\r\n break;\r\n }\r\n\r\n return [input, format, today, timeSelect, timeSelectOnly];\r\n });\r\n\r\n return (\r\n handleChange(date)}\r\n onChangeRaw={handleTypedInputs}\r\n value={dateValue} // to show date values\r\n selected={dateValue} // to show time values\r\n />\r\n );\r\n};\r\n\r\nFormikDatePicker.propTypes = {\r\n disabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),\r\n datatype: PropTypes.string,\r\n onBlur: PropTypes.func,\r\n onChange: PropTypes.func,\r\n maxLength: PropTypes.number,\r\n initialValue: PropTypes.string,\r\n};\r\n\r\nexport default FormikDatePicker;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport NumberFormat from 'react-number-format';\r\n\r\nconst FormikNumberFormatInput = props => {\r\n const {\r\n name,\r\n value,\r\n disabled,\r\n Precision,\r\n datatype,\r\n onBlur,\r\n onChange,\r\n onKeyPress,\r\n maxLength,\r\n } = props;\r\n\r\n const withNotZero = ({ formattedValue, floatValue }) => formattedValue === '' || floatValue !== 0;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nFormikNumberFormatInput.propTypes = {\r\n disabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),\r\n onBlur: PropTypes.func,\r\n onChange: PropTypes.func,\r\n onKeyPress: PropTypes.func,\r\n Precision: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n datatype: PropTypes.string,\r\n};\r\n\r\nexport default FormikNumberFormatInput;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, { useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Select from 'react-select';\r\nimport { useField } from 'formik';\r\nimport apiService from '@services/apiService';\r\n\r\nconst FormikSelect = ({\r\n disabled,\r\n name,\r\n value,\r\n onBlur,\r\n onChange,\r\n multiselect,\r\n comboBoxLookupName,\r\n}) => {\r\n const [field, , helpers] = useField(name);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [options, setOptions] = useState([]);\r\n\r\n const comboVal = useMemo(() => options.find(item => item.Code === value), [value, options]);\r\n\r\n useEffect(() => {\r\n if (comboBoxLookupName) {\r\n const getOptions = async () => {\r\n try {\r\n const [definitions] = await apiService.Definitions.PostToLookupTable({ lookupNames: [comboBoxLookupName] });\r\n setOptions(definitions.data);\r\n setIsLoading(false);\r\n } catch (er) {\r\n console.error('Error: FormikSelect comboBoxLookup', er);\r\n }\r\n };\r\n\r\n getOptions();\r\n }\r\n }, [comboBoxLookupName]);\r\n\r\n const handleChange = val => {\r\n const selectVal = multiselect && val?.length\r\n ? val.map(({ Code }) => Code)\r\n : val?.Code;\r\n if (field?.value === selectVal) return;\r\n if (onChange) {\r\n onChange(selectVal);\r\n } else {\r\n helpers.setValue(selectVal);\r\n }\r\n };\r\n\r\n return (\r\n Description}\r\n getOptionValue={({ Code }) => Code}\r\n value={comboVal}\r\n />\r\n );\r\n};\r\n\r\nFormikSelect.propTypes = {\r\n disabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),\r\n onBlur: PropTypes.func,\r\n onChange: PropTypes.func,\r\n multiselect: PropTypes.bool,\r\n comboBoxLookupName: PropTypes.string,\r\n};\r\n\r\nexport default FormikSelect;\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport { useField } from 'formik';\r\nimport { selectStatusByName } from '@redux/selectors/FormSelector';\r\nimport { selectListingFormData, selectAgentFormData, selectOfficeFormData } from '@redux/selectors/FormDataSelector';\r\n\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport FormikTextInput from './formikComponents/FormikTextInput';\r\nimport FormikBoolean from './formikComponents/FormikBoolean';\r\nimport FormikDatePicker from './formikComponents/FormikDatePicker';\r\nimport FormikNumberFormatInput from './formikComponents/FormikNumberFormatInput';\r\nimport FormikSelect from './formikComponents/FormikSelect';\r\n\r\nconst FormikField = props => {\r\n const {\r\n FieldName,\r\n helpText,\r\n inputType,\r\n showHelpIcon,\r\n datatype,\r\n IsVisible,\r\n IsDisabled,\r\n name,\r\n fieldLabel,\r\n validateFigField = () => null,\r\n repeatableType = '',\r\n repeatableId = '',\r\n } = props;\r\n\r\n const [field, , helpers] = useField(FieldName);\r\n const [localFieldValue, setLocalFieldValue] = useState(field?.value);\r\n const status = useSelector(state => selectStatusByName(state, name, repeatableType, repeatableId)); // validation result\r\n const listingFormData = useSelector(selectListingFormData);\r\n const agentFormData = useSelector(selectAgentFormData);\r\n const officeFormData = useSelector(selectOfficeFormData);\r\n const fieldIsVisible = IsVisible;\r\n const fieldIsDisabled = IsDisabled ?? false;\r\n let currentComponentInitialValue = null;\r\n\r\n // need to be able to supply hydrate value after component load.\r\n const CurrentComponent = useMemo(() => {\r\n const textInputWhitelist = ['string'];\r\n const NumericInputWhitelist = ['integer', 'decimal', 'numeric'];\r\n const toggleInputWhiteList = ['boolean', 'bit'];\r\n const datePickerWhitelist = ['datetime', 'date', 'time'];\r\n\r\n if (inputType === 'TextInput' && textInputWhitelist.includes(datatype)) return FormikTextInput;\r\n if (inputType === 'ComboBox') return FormikSelect;\r\n if (toggleInputWhiteList.includes(datatype)) return FormikBoolean;\r\n if (datePickerWhitelist.includes(datatype)) {\r\n if (listingFormData) {\r\n currentComponentInitialValue = listingFormData[FieldName];\r\n } else if (agentFormData) {\r\n currentComponentInitialValue = agentFormData[FieldName];\r\n } else if (officeFormData) {\r\n currentComponentInitialValue = officeFormData[FieldName];\r\n }\r\n return FormikDatePicker;\r\n }\r\n if (NumericInputWhitelist.includes(datatype)) return FormikNumberFormatInput;\r\n\r\n return () => null;\r\n }, [inputType, datatype]);\r\n\r\n const updateFormikOnBlur = useMemo(() => {\r\n const textInputWhitelist = ['string'];\r\n const NumericInputWhitelist = ['integer', 'decimal', 'numeric'];\r\n return ((inputType === 'TextInput' && textInputWhitelist.includes(datatype)) || (NumericInputWhitelist.includes(datatype)));\r\n }, [inputType, datatype]);\r\n\r\n const sameValue = (oldValue, newValue) => {\r\n if (oldValue === newValue) return true;\r\n if (oldValue?.toString() === newValue?.toString()) return true;\r\n if (!oldValue && !newValue) return true; // TODO: Should this mimic FormikInputGroup?\r\n return false;\r\n };\r\n\r\n const validateFieldName = useMemo(() => {\r\n if (repeatableType !== '') return name;\r\n return FieldName;\r\n }, [repeatableType]);\r\n\r\n const handleBlur = e => {\r\n if (updateFormikOnBlur) {\r\n if (sameValue(field?.value, e.target.value)) return;\r\n helpers.setValue(e.target.value);\r\n\r\n validateFigField(validateFieldName, e.target.value);\r\n }\r\n };\r\n\r\n const handleChange = e => {\r\n if (updateFormikOnBlur) {\r\n setLocalFieldValue(e.target.value);\r\n } else {\r\n setLocalFieldValue(e);\r\n helpers.setValue(e);\r\n validateFigField(validateFieldName, e);\r\n }\r\n };\r\n\r\n const handleKeyPress = e => {\r\n if (e.key === 'Enter') {\r\n e.target.blur();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (field?.value == null || field.value === localFieldValue) return;\r\n setLocalFieldValue(field.value);\r\n }, [field?.value]);\r\n\r\n if (!fieldIsVisible) return null;\r\n\r\n return (\r\n
    \r\n \r\n {fieldLabel}\r\n {status?.errorMessage &&  *}\r\n \r\n {\r\n showHelpIcon && (\r\n {helpText}}\r\n >\r\n \r\n \r\n )\r\n }\r\n \r\n {status?.errorMessage &&
    {status?.errorMessage}
    }\r\n
    \r\n );\r\n};\r\n\r\nFormikField.propTypes = {\r\n FieldName: PropTypes.string,\r\n helpText: PropTypes.string,\r\n inputType: PropTypes.string,\r\n showHelpIcon: PropTypes.bool,\r\n datatype: PropTypes.string,\r\n IsVisible: PropTypes.bool,\r\n IsDisabled: PropTypes.bool,\r\n name: PropTypes.string,\r\n fieldLabel: PropTypes.string,\r\n validateFigField: PropTypes.func,\r\n repeatableType: PropTypes.string,\r\n repeatableId: PropTypes.string,\r\n};\r\n\r\nexport default FormikField;\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport FormikField from '@components/form/FormikField';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport { setOpenHouseValidationResult, deleteOpenHouseValidationResult } from '@redux/modules/formGeneration';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst openHouseRules = window.FlexRule.RuntimeEngine.fromJavaScript('OnePlatform', 'OpenHouseRules');\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst OpenHouseCard = ({\r\n file,\r\n sortIndex,\r\n fieldsList,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const { values, setValues } = useFormikContext();\r\n const value = values?.OpenHouses[file.uid];\r\n\r\n // run after first render to hydrate default validation errors.\r\n useEffect(() => {\r\n const validateValue = value;\r\n const res = openHouseRules.run(validateValue);\r\n const { fieldValidationResult } = res.context.variableContainer; // results coming back.\r\n dispatch(setOpenHouseValidationResult(`${file.uid}`, fieldValidationResult)); // does set the validation result in redux according to name.\r\n }, []);\r\n\r\n const validateOpenHouseField = (FieldName, newValue) => {\r\n if (!value.IsDeleted) {\r\n const validateValue = value;\r\n validateValue[FieldName] = newValue;\r\n const res = openHouseRules.run(validateValue);\r\n const { fieldValidationResult } = res.context.variableContainer; // results coming back.\r\n dispatch(setOpenHouseValidationResult(`${file.uid}`, fieldValidationResult)); // does set the validation result in redux according to name.\r\n }\r\n };\r\n\r\n const handleDelete = () => {\r\n // update deleted entry\r\n const updated = {\r\n ...values.OpenHouses,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n };\r\n // recalculate sort order\r\n let index = 0;\r\n Object.entries(updated).forEach(([k]) => {\r\n if (!updated[k].IsDeleted) {\r\n updated[k].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n const newValues = values;\r\n newValues.OpenHouses = updated;\r\n // set formik state\r\n setValues(newValues);\r\n dispatch(deleteOpenHouseValidationResult(file.uid));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete Open House}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {fieldsList && fieldsList.map(field => (\r\n \r\n ))}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nOpenHouseCard.propTypes = {\r\n file: PropTypes.shape(),\r\n sortIndex: PropTypes.number.isRequired,\r\n validateFigField: PropTypes.func,\r\n fieldsList: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default OpenHouseCard;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableContainer, SortableElement } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nimport { selectStatusByName, selectSectionAddClicksByName } from '@redux/selectors/FormSelector';\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\n\r\nimport OpenHouseCard from './OpenHouseCard';\r\n\r\nconst MAX = 2;\r\n\r\nconst whiteList = [\r\n 'OpenHouseDate',\r\n 'OpenHouseEndTime',\r\n 'OpenHouseStartTime',\r\n 'OpenHouseStatus',\r\n 'OpenHouseRemarks',\r\n 'OpenHouseType',\r\n 'Refreshments',\r\n 'OpenHouseLiveURL',\r\n];\r\n\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({\r\n fileList,\r\n fieldsList,\r\n validateFigField,\r\n something,\r\n ...otherProps\r\n}) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst RepeatableOpenHouse = ({ fields, validateFigField, openHousesPayload }) => {\r\n const {\r\n values, setValues, setFieldValue,\r\n } = useFormikContext();\r\n\r\n const statusOpenHouseStatus = useSelector(state => selectStatusByName(state, 'OpenHouseStatus'));\r\n const statusOpenHouseDate = useSelector(state => selectStatusByName(state, 'OpenHouseDate'));\r\n const statusOpenHouseStartTime = useSelector(state => selectStatusByName(state, 'OpenHouseStartTime'));\r\n const statusOpenHouseEndTime = useSelector(state => selectStatusByName(state, 'OpenHouseEndTime'));\r\n const statusOpenHouseType = useSelector(state => selectStatusByName(state, 'OpenHouseType'));\r\n const statusOpenHouseURL = useSelector(state => selectStatusByName(state, 'OpenHouseURL'));\r\n\r\n const addClickCounter = useSelector(state => selectSectionAddClicksByName(state, 'OpenHouses'));\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const openHousesCount = sectionsPerRepeatableSection.OpenHouses.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.OpenHouses) {\r\n Object.entries(values.OpenHouses).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.OpenHouses]);\r\n\r\n const fieldsList = useMemo(() => {\r\n const array = [];\r\n fields.forEach(field => {\r\n if (whiteList.includes(field.FieldName)) {\r\n array.push(field);\r\n }\r\n });\r\n return array;\r\n }, [fields]);\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n let index = 0;\r\n openHousesPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(entry => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: entry.UniqueID,\r\n OpenHouseDate: entry.OpenHouseDate,\r\n OpenHouseEndTime: entry.OpenHouseEndTime,\r\n OpenHouseStartTime: entry.OpenHouseStartTime,\r\n OpenHouseStatus: entry.OpenHouseStatus,\r\n OpenHouseRemarks: entry.OpenHouseRemarks,\r\n OpenHouseType: entry.OpenHouseType,\r\n Refreshments: entry.Refreshments,\r\n OpenHouseLiveURL: entry.OpenHouseLiveURL,\r\n SortOrder: entry.SortOrder,\r\n IsDeleted: entry.IsDeleted,\r\n IsLive: entry.IsLive,\r\n };\r\n // ensure correct sort order\r\n if (!entry.IsDeleted) {\r\n newValues[uid].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (openHousesPayload?.length) {\r\n const newValues = buildFormikValues();\r\n setFieldValue('OpenHouses', {\r\n ...values.OpenHouses,\r\n ...newValues,\r\n });\r\n }\r\n }, [openHousesPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Open Houses Exceeded',\r\n html: `The maximum number of open houses must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addOpenHouse = () => {\r\n if (openHousesCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n setValues({\r\n ...values,\r\n OpenHouses: {\r\n ...values.OpenHouses,\r\n [uid]: {\r\n uid,\r\n OpenHouseDate: '',\r\n OpenHouseEndTime: '',\r\n OpenHouseStartTime: '',\r\n OpenHouseStatus: '',\r\n OpenHouseRemarks: '',\r\n OpenHouseType: '',\r\n Refreshments: '',\r\n OpenHouseLiveURL: '',\r\n SortOrder: fileList.length + 1, // fileList excludes deleted entries\r\n IsDeleted: false,\r\n IsLive: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n // after sort ends derive new order, then set formik state\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n // preserve deleted entries - excluded from fileList\r\n Object.entries(values.OpenHouses).forEach(file => {\r\n if (file[1].IsDeleted) {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n },\r\n };\r\n }\r\n });\r\n setValues({\r\n ...values,\r\n OpenHouses: { ...newValues },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (addClickCounter) {\r\n addOpenHouse();\r\n }\r\n }, [addClickCounter]);\r\n\r\n return (\r\n <>\r\n { statusOpenHouseStatus?.errorMessage &&
    {statusOpenHouseStatus.errorMessage}
    }\r\n { statusOpenHouseDate?.errorMessage &&
    {statusOpenHouseDate.errorMessage}
    }\r\n { statusOpenHouseStartTime?.errorMessage &&
    {statusOpenHouseStartTime.errorMessage}
    }\r\n { statusOpenHouseEndTime?.errorMessage &&
    {statusOpenHouseEndTime.errorMessage}
    }\r\n { statusOpenHouseType?.errorMessage &&
    {statusOpenHouseType.errorMessage}
    }\r\n { statusOpenHouseURL?.errorMessage &&
    {statusOpenHouseURL.errorMessage}
    }\r\n \r\n \r\n Add Open House\r\n \r\n
    \r\n \r\n
    \r\n {(openHousesCount > MAX) && (\r\n \r\n \r\n Add Open House\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nRepeatableOpenHouse.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func,\r\n openHousesPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableOpenHouse;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst ParcelCard = ({\r\n file,\r\n sortIndex,\r\n validateFigField,\r\n fieldsList,\r\n}) => {\r\n const { values, setValues } = useFormikContext();\r\n const value = values?.Parcels[file.uid];\r\n\r\n const handleDelete = () => {\r\n // update deleted entry\r\n const updated = {\r\n ...values.Parcels,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n };\r\n // recalculate sort order\r\n let index = 0;\r\n Object.entries(updated).forEach(([k]) => {\r\n if (!updated[k].IsDeleted) {\r\n updated[k].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n // set formik state\r\n setValues({\r\n ...values,\r\n Parcels: updated,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete Parcel}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {fieldsList && fieldsList.map(field => (\r\n \r\n ))}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nParcelCard.propTypes = {\r\n file: PropTypes.shape(),\r\n sortIndex: PropTypes.number.isRequired,\r\n validateFigField: PropTypes.func,\r\n fieldsList: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default ParcelCard;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableElement, SortableContainer } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nimport { selectStatusByName, selectSectionAddClicksByName } from '@redux/selectors/FormSelector';\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\n\r\nimport ParcelCard from './ParcelCard';\r\n\r\nconst MAX = 2;\r\nconst whiteList = [\r\n 'TitleType',\r\n 'LandWestMeridian',\r\n 'LandTaxAmount',\r\n 'LandTownship',\r\n 'LandSection',\r\n 'LandRange',\r\n 'LandQuarter',\r\n 'LandLincNumber',\r\n 'LandAcres',\r\n];\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({\r\n fileList,\r\n fieldsList,\r\n validateFigField,\r\n something,\r\n ...otherProps\r\n}) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst RepeatableParcels = ({ fields, validateFigField, parcelsPayload }) => {\r\n const { values, setValues, setFieldValue } = useFormikContext();\r\n const statusParcels = useSelector(state => selectStatusByName(state, 'Parcels'));\r\n const addClickCounter = useSelector(state => selectSectionAddClicksByName(state, 'Parcels'));\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const parcelsCount = sectionsPerRepeatableSection.Parcels.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.Parcels) {\r\n Object.entries(values.Parcels).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.Parcels]);\r\n\r\n const fieldsList = useMemo(() => {\r\n const array = [];\r\n fields.forEach(field => {\r\n if (whiteList.includes(field.FieldName)) {\r\n array.push(field);\r\n }\r\n });\r\n return array;\r\n }, [fields]);\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n let index = 0;\r\n parcelsPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(entry => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: entry.UniqueID,\r\n TitleType: entry.TitleType,\r\n LandWestMeridian: entry.LandWestMeridian,\r\n LandTaxAmount: entry.LandTaxAmount,\r\n LandTownship: entry.LandTownship,\r\n LandSection: entry.LandSection,\r\n LandRange: entry.LandRange,\r\n LandQuarter: entry.LandQuarter,\r\n LandLincNumber: entry.LandLincNumber,\r\n LandAcres: entry.LandAcres,\r\n SortOrder: entry.SortOrder,\r\n IsDeleted: entry.IsDeleted,\r\n IsLive: entry.IsLive,\r\n };\r\n // ensure correct sort order\r\n if (!entry.IsDeleted) {\r\n newValues[uid].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (parcelsPayload?.length) {\r\n const newValues = buildFormikValues();\r\n setFieldValue('Parcels', {\r\n ...values.Parcels,\r\n ...newValues,\r\n });\r\n }\r\n }, [parcelsPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Parcels Exceeded',\r\n html: `The maximum number of parcels must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addParcel = () => {\r\n if (parcelsCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n setValues({\r\n ...values,\r\n Parcels: {\r\n ...values.Parcels,\r\n [uid]: {\r\n uid,\r\n TitleType: '',\r\n LandWestMeridian: '',\r\n LandTaxAmount: '',\r\n LandTownship: '',\r\n LandSection: '',\r\n LandRange: '',\r\n LandQuarter: '',\r\n LandLincNumber: '',\r\n LandAcres: '',\r\n SortOrder: fileList.length + 1, // fileList excludes deleted entries\r\n IsDeleted: false,\r\n IsLive: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n // after sort ends derive new order, then set formik state\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n // preserve deleted entries - excluded from fileList\r\n Object.entries(values.Parcels).forEach(file => {\r\n if (file[1].IsDeleted) {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n },\r\n };\r\n }\r\n });\r\n setValues({\r\n ...values,\r\n Parcels: { ...newValues },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (addClickCounter) {\r\n addParcel();\r\n }\r\n }, [addClickCounter]);\r\n\r\n return (\r\n <>\r\n { statusParcels?.errorMessage &&
    {statusParcels.errorMessage}
    }\r\n \r\n \r\n Add Parcel\r\n \r\n
    \r\n \r\n
    \r\n {(parcelsCount > MAX) && (\r\n <>\r\n \r\n \r\n Add Parcel\r\n \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nRepeatableParcels.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func,\r\n parcelsPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableParcels;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport FormikField from '@components/form/FormikField';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst DoorCard = ({\r\n file,\r\n sortIndex,\r\n validateFigField,\r\n fieldsList,\r\n}) => {\r\n const { values, setValues } = useFormikContext();\r\n const value = values?.Doors[file.uid];\r\n\r\n const handleDelete = () => {\r\n // update deleted entry\r\n const updated = {\r\n ...values.Doors,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n };\r\n // recalculate sort order\r\n let index = 0;\r\n Object.entries(updated).forEach(([k]) => {\r\n if (!updated[k].IsDeleted) {\r\n updated[k].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n // set formik state\r\n setValues({\r\n ...values,\r\n Doors: updated,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete Door}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {fieldsList && fieldsList.map(field => (\r\n \r\n ))}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nDoorCard.propTypes = {\r\n file: PropTypes.shape(),\r\n sortIndex: PropTypes.number.isRequired,\r\n validateFigField: PropTypes.func,\r\n fieldsList: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default DoorCard;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableElement, SortableContainer } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nimport { selectStatusByName, selectSectionAddClicksByName } from '@redux/selectors/FormSelector';\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\n\r\nimport DoorCard from './DoorCard';\r\n\r\nconst MAX = 2;\r\nconst whiteList = [\r\n 'DoorDescription',\r\n 'DoorHeight',\r\n 'DoorType',\r\n 'DoorWeight',\r\n 'DoorWidth',\r\n 'NumberDoors',\r\n];\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({\r\n fileList,\r\n fieldsList,\r\n validateFigField,\r\n something,\r\n ...otherProps\r\n}) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst RepeatableDoors = ({ fields, validateFigField, doorsPayload }) => {\r\n const { values, setValues, setFieldValue } = useFormikContext();\r\n const statusDoors = useSelector(state => selectStatusByName(state, 'Doors'));\r\n const addClickCounter = useSelector(state => selectSectionAddClicksByName(state, 'Doors'));\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const doorsCount = sectionsPerRepeatableSection.Doors.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.Doors) {\r\n Object.entries(values.Doors).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.Doors]);\r\n\r\n const fieldsList = useMemo(() => {\r\n const array = [];\r\n fields.forEach(field => {\r\n if (whiteList.includes(field.FieldName)) {\r\n array.push(field);\r\n }\r\n });\r\n return array;\r\n }, [fields]);\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n let index = 0;\r\n doorsPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(entry => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: entry.UniqueID,\r\n DoorDescription: entry.DoorDescription,\r\n DoorHeight: entry.DoorHeight,\r\n DoorType: entry.DoorType,\r\n DoorWeight: entry.DoorWeight,\r\n DoorWidth: entry.DoorWidth,\r\n NumberDoors: entry.NumberDoors,\r\n SortOrder: entry.SortOrder,\r\n IsDeleted: entry.IsDeleted,\r\n IsLive: entry.IsLive,\r\n };\r\n // ensure correct sort order\r\n if (!entry.IsDeleted) {\r\n newValues[uid].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (doorsPayload?.length) {\r\n const newValues = buildFormikValues();\r\n setFieldValue('Doors', {\r\n ...values.Doors,\r\n ...newValues,\r\n });\r\n }\r\n }, [doorsPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Doors Exceeded',\r\n html: `The maximum number of doors must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addDoor = () => {\r\n if (doorsCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n setValues({\r\n ...values,\r\n Doors: {\r\n ...values.Doors,\r\n [uid]: {\r\n uid,\r\n DoorDescription: '',\r\n DoorHeight: '',\r\n DoorType: '',\r\n DoorWeight: '',\r\n DoorWidth: '',\r\n NumberDoors: '',\r\n SortOrder: fileList.length + 1, // fileList excludes deleted entries\r\n IsDeleted: false,\r\n IsLive: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n // after sort ends derive new order, then set formik state\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n // preserve deleted entries - excluded from fileList\r\n Object.entries(values.Doors).forEach(file => {\r\n if (file[1].IsDeleted) {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n },\r\n };\r\n }\r\n });\r\n setValues({\r\n ...values,\r\n Doors: { ...newValues },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (addClickCounter) {\r\n addDoor();\r\n }\r\n }, [addClickCounter]);\r\n\r\n return (\r\n <>\r\n { statusDoors?.errorMessage &&
    {statusDoors.errorMessage}
    }\r\n \r\n \r\n Add Door\r\n \r\n
    \r\n \r\n
    \r\n {(doorsCount > MAX) && (\r\n <>\r\n \r\n \r\n Add Door\r\n \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nRepeatableDoors.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func,\r\n doorsPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableDoors;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst UnitCard = ({\r\n file,\r\n sortIndex,\r\n validateFigField,\r\n fieldsList,\r\n}) => {\r\n const { values, setValues } = useFormikContext();\r\n const value = values?.Units[file.uid];\r\n\r\n const handleDelete = () => {\r\n // update deleted entry\r\n const updated = {\r\n ...values.Units,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n };\r\n // recalculate sort order\r\n let index = 0;\r\n Object.entries(updated).forEach(([k]) => {\r\n if (!updated[k].IsDeleted) {\r\n updated[k].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n // set formik state\r\n setValues({\r\n ...values,\r\n Units: updated,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete Unit}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {fieldsList && fieldsList.map(field => (\r\n \r\n ))}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nUnitCard.propTypes = {\r\n file: PropTypes.shape(),\r\n sortIndex: PropTypes.number.isRequired,\r\n validateFigField: PropTypes.func,\r\n fieldsList: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default UnitCard;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableElement, SortableContainer } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nimport { selectStatusByName, selectSectionAddClicksByName } from '@redux/selectors/FormSelector';\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\nimport UnitCard from './UnitCard';\r\n\r\nconst MAX = 3;\r\nconst whiteList = [\r\n 'UnitTypeType',\r\n 'UnitTypeTotalRent',\r\n 'UnitTypeDescription',\r\n 'UnitTypeActualRent',\r\n 'UnitTypeUnitsTotal',\r\n];\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({\r\n fileList,\r\n fieldsList,\r\n validateFigField,\r\n something,\r\n ...otherProps\r\n}) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst RepeatableUnits = ({ fields, validateFigField, unitsPayload }) => {\r\n const {\r\n values, setValues, setFieldValue,\r\n } = useFormikContext();\r\n\r\n const statusUnits = useSelector(state => selectStatusByName(state, 'Units'));\r\n const addClickCounter = useSelector(state => selectSectionAddClicksByName(state, 'Units'));\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const unitsCount = sectionsPerRepeatableSection.Units.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.Units) {\r\n Object.entries(values.Units).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.Units]);\r\n\r\n const fieldsList = useMemo(() => {\r\n const array = [];\r\n fields.forEach(field => {\r\n if (whiteList.includes(field.FieldName)) {\r\n array.push(field);\r\n }\r\n });\r\n return array;\r\n }, [fields]);\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n let index = 0;\r\n unitsPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(entry => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: entry.UniqueID,\r\n UnitTypeType: entry.UnitTypeType,\r\n UnitTypeTotalRent: entry.UnitTypeTotalRent,\r\n UnitTypeDescription: entry.UnitTypeDescription,\r\n UnitTypeActualRent: entry.UnitTypeActualRent,\r\n UnitTypeUnitsTotal: entry.UnitTypeUnitsTotal,\r\n SortOrder: entry.SortOrder,\r\n IsDeleted: entry.IsDeleted,\r\n IsLive: entry.IsLive,\r\n };\r\n // ensure correct sort order\r\n if (!entry.IsDeleted) {\r\n newValues[uid].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (unitsPayload?.length) {\r\n const newValues = buildFormikValues();\r\n setFieldValue('Units', {\r\n ...values.Units,\r\n ...newValues,\r\n });\r\n }\r\n }, [unitsPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Units Exceeded',\r\n html: `The maximum number of units must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addUnit = () => {\r\n if (unitsCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n setValues({\r\n ...values,\r\n Units: {\r\n ...values.Units,\r\n [uid]: {\r\n uid,\r\n UnitTypeType: '',\r\n UnitTypeTotalRent: '',\r\n UnitTypeDescription: '',\r\n UnitTypeActualRent: '',\r\n UnitTypeUnitsTotal: '',\r\n SortOrder: fileList.length + 1, // fileList excludes deleted entries\r\n IsDeleted: false,\r\n IsLive: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n // after sort ends derive new order, then set formik state\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n // preserve deleted entries - excluded from fileList\r\n Object.entries(values.Units).forEach(file => {\r\n if (file[1].IsDeleted) {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n },\r\n };\r\n }\r\n });\r\n setValues({\r\n ...values,\r\n Units: { ...newValues },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (addClickCounter) {\r\n addUnit();\r\n }\r\n }, [addClickCounter]);\r\n\r\n return (\r\n <>\r\n { statusUnits?.errorMessage &&
    {statusUnits.errorMessage}
    }\r\n \r\n \r\n Add Unit\r\n \r\n
    \r\n \r\n
    \r\n {(unitsCount > MAX) && (\r\n <>\r\n \r\n \r\n Add Unit\r\n \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nRepeatableUnits.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func,\r\n unitsPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableUnits;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { SortableHandle } from 'react-sortable-hoc';\r\n\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nimport Card from 'react-bootstrap/Card';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst DragHandle = SortableHandle(() => );\r\n\r\nconst HistoryCard = ({\r\n file,\r\n sortIndex,\r\n validateFigField,\r\n fieldsList,\r\n}) => {\r\n const { values, setValues } = useFormikContext();\r\n const value = values?.History[file.uid];\r\n\r\n const handleDelete = () => {\r\n // update deleted entry\r\n const updated = {\r\n ...values.History,\r\n [file.uid]: {\r\n ...file,\r\n IsDeleted: true,\r\n },\r\n };\r\n // recalculate sort order\r\n let index = 0;\r\n Object.entries(updated).forEach(([k]) => {\r\n if (!updated[k].IsDeleted) {\r\n updated[k].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n // set formik state\r\n setValues({\r\n ...values,\r\n History: updated,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n \r\n {sortIndex + 1}\r\n
    \r\n Delete History}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {fieldsList && fieldsList.map(field => (\r\n \r\n ))}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nHistoryCard.propTypes = {\r\n file: PropTypes.shape(),\r\n sortIndex: PropTypes.number.isRequired,\r\n validateFigField: PropTypes.func,\r\n fieldsList: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default HistoryCard;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useFormikContext } from 'formik';\r\nimport { useSelector } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SortableElement, SortableContainer } from 'react-sortable-hoc';\r\nimport { arrayMoveImmutable } from 'array-move';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nimport { selectStatusByName, selectSectionAddClicksByName } from '@redux/selectors/FormSelector';\r\nimport { selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\nimport HistoryCard from './HistoryCard';\r\n\r\nconst MAX = 2;\r\nconst whiteList = [\r\n 'OriginatingSystemTimestamp',\r\n 'EffectiveDate',\r\n 'MlsChangeType',\r\n 'PreviousValue',\r\n 'NewValue',\r\n 'DOM',\r\n];\r\nconst SortableCard = SortableElement(props => (\r\n \r\n));\r\n\r\nconst Grid = SortableContainer(({\r\n fileList,\r\n fieldsList,\r\n validateFigField,\r\n something,\r\n ...otherProps\r\n}) => (\r\n
    \r\n {fileList.map(([k, file], index) => (\r\n (!file.IsDeleted)\r\n && (\r\n \r\n )\r\n ))}\r\n
    \r\n));\r\n\r\nconst RepeatableHistory = ({ fields, validateFigField, historyPayload }) => {\r\n const {\r\n values, setValues, setFieldValue,\r\n } = useFormikContext();\r\n\r\n const statusHistory = useSelector(state => selectStatusByName(state, 'History'));\r\n const addClickCounter = useSelector(state => selectSectionAddClicksByName(state, 'History'));\r\n const maxCount = useMemo(() => ((fields[0].repeatableMaxCount) ? fields[0].repeatableMaxCount : 25), [fields]);\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const historyCount = sectionsPerRepeatableSection.History.length;\r\n\r\n const fileList = useMemo(() => {\r\n const array = [];\r\n if (values.History) {\r\n Object.entries(values.History).forEach(([k, file]) => {\r\n if (!file.IsDeleted) {\r\n array.push([k, file]);\r\n }\r\n });\r\n }\r\n return array;\r\n }, [values?.History]);\r\n\r\n const fieldsList = useMemo(() => {\r\n const array = [];\r\n fields.forEach(field => {\r\n if (whiteList.includes(field.FieldName)) {\r\n array.push(field);\r\n }\r\n });\r\n return array;\r\n }, [fields]);\r\n\r\n const buildFormikValues = () => {\r\n const newValues = {};\r\n let index = 0;\r\n historyPayload.sort((a, b) => a.SortOrder - b.SortOrder).forEach(entry => {\r\n const uid = uuidv4(); // keep this an unique string that cannot be converted to a number (prevents keys reordering)\r\n newValues[uid] = {\r\n uid,\r\n UniqueID: entry.UniqueID,\r\n OriginatingSystemTimestamp: entry.OriginatingSystemTimestamp,\r\n EffectiveDate: entry.EffectiveDate,\r\n MlsChangeType: entry.MlsChangeType,\r\n PreviousValue: entry.PreviousValue,\r\n NewValue: entry.NewValue,\r\n DOM: entry.DOM,\r\n SortOrder: entry.SortOrder,\r\n IsDeleted: entry.IsDeleted,\r\n IsLive: entry.IsLive,\r\n };\r\n // ensure correct sort order\r\n if (!entry.IsDeleted) {\r\n newValues[uid].SortOrder = index + 1;\r\n index += 1;\r\n }\r\n });\r\n return newValues;\r\n };\r\n\r\n useEffect(() => {\r\n if (historyPayload?.length) {\r\n const newValues = buildFormikValues();\r\n setFieldValue('History', {\r\n ...values.History,\r\n ...newValues,\r\n });\r\n }\r\n }, [historyPayload]);\r\n\r\n const displayMaxCountExceedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'History Exceeded',\r\n html: `The maximum number of history must not exceed ${maxCount}.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n showConfirmButton: false,\r\n timer: 5000,\r\n });\r\n\r\n const addHistory = () => {\r\n if (historyCount + 1 > maxCount) {\r\n displayMaxCountExceedMessage();\r\n return;\r\n }\r\n\r\n const uid = uuidv4();\r\n setValues({\r\n ...values,\r\n History: {\r\n ...values.History,\r\n [uid]: {\r\n uid,\r\n OriginatingSystemTimestamp: '',\r\n EffectiveDate: '',\r\n MlsChangeType: '',\r\n PreviousValue: '',\r\n NewValue: '',\r\n DOM: '',\r\n SortOrder: fileList.length + 1, // fileList excludes deleted entries\r\n IsDeleted: false,\r\n IsLive: false,\r\n },\r\n },\r\n });\r\n };\r\n\r\n // after sort ends derive new order, then set formik state\r\n const onSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedArray = arrayMoveImmutable(fileList, oldIndex, newIndex);\r\n let newValues = {};\r\n sortedArray.forEach((file, index) => {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n SortOrder: index + 1,\r\n },\r\n };\r\n });\r\n // preserve deleted entries - excluded from fileList\r\n Object.entries(values.History).forEach(file => {\r\n if (file[1].IsDeleted) {\r\n newValues = {\r\n ...newValues,\r\n [file[0]]: {\r\n ...file[1],\r\n },\r\n };\r\n }\r\n });\r\n setValues({\r\n ...values,\r\n History: { ...newValues },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (addClickCounter) {\r\n addHistory();\r\n }\r\n }, [addClickCounter]);\r\n\r\n return (\r\n <>\r\n { statusHistory?.errorMessage &&
    {statusHistory.errorMessage}
    }\r\n \r\n \r\n Add History\r\n \r\n
    \r\n \r\n
    \r\n {(historyCount > MAX) && (\r\n <>\r\n \r\n \r\n Add History\r\n \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nRepeatableHistory.propTypes = {\r\n fields: PropTypes.arrayOf(PropTypes.shape()),\r\n validateFigField: PropTypes.func,\r\n historyPayload: PropTypes.arrayOf(PropTypes.shape()),\r\n};\r\n\r\nexport default RepeatableHistory;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n selectListingSelectedDoors,\r\n selectListingSelectedHistory,\r\n selectListingSelectedOpenHouses,\r\n selectListingSelectedParcels,\r\n selectListingSelectedPhotos,\r\n selectListingSelectedRooms,\r\n selectListingSelectedSupplements,\r\n selectListingSelectedUnits,\r\n} from '@redux/selectors/ListingSelector';\r\nimport { selectAgentPhotos } from '@redux/selectors/AgentSelector';\r\nimport Address from './Address';\r\nimport AgentLookup from './agentLookup/AgentLookup';\r\nimport LocationPlotter from './locationPlotter/LocationPlotter';\r\nimport OfficeLookup from './officeLookup/OfficeLookup';\r\nimport OneDMeasurement from './OneDMeasurement';\r\nimport TwoDMeasurement from './TwoDMeasurement';\r\nimport SupplementGrid from './supplements/SupplementGrid';\r\nimport ImageCropper from '../imageCropper/ImageCropper';\r\nimport RepeatableRoom from '../repeatableRoom/RepeatableRoom';\r\nimport RepeatableOpenHouse from './openHouse/RepeatableOpenHouse';\r\nimport RepeatableParcels from './parcels/RepeatableParcels';\r\nimport RepeatableDoors from './doors/RepeatableDoors';\r\nimport RepeatableUnits from './units/RepeatableUnits';\r\nimport RepeatableHistory from './history/RepeatableHistory';\r\n\r\n// TODO: In the future, test this component alongside with https://github.com/welldone-software/why-did-you-render\r\nconst LayoutGroupWrapper = ({ groupType, resourceType = 'listing', ...props }) => {\r\n let photosPayload;\r\n\r\n const listingPhotos = useSelector(selectListingSelectedPhotos);\r\n const agentPhotos = useSelector(selectAgentPhotos);\r\n if (resourceType === 'listing') photosPayload = listingPhotos;\r\n else photosPayload = agentPhotos;\r\n\r\n const supplementsPayload = useSelector(selectListingSelectedSupplements);\r\n const roomsPayload = useSelector(selectListingSelectedRooms);\r\n const parcelsPayload = useSelector(selectListingSelectedParcels);\r\n const unitsPayload = useSelector(selectListingSelectedUnits);\r\n const doorsPayload = useSelector(selectListingSelectedDoors);\r\n const openHousesPayload = useSelector(selectListingSelectedOpenHouses);\r\n const historyPayload = useSelector(selectListingSelectedHistory);\r\n\r\n switch (groupType) {\r\n case 'Address':\r\n return
    ;\r\n case 'AgentLookup':\r\n return ;\r\n case 'History':\r\n return ;\r\n case 'LoadingDoors':\r\n return ;\r\n case 'LocationPlotter':\r\n return ;\r\n case 'OneDimensionalMeasurement':\r\n return ;\r\n case 'OpenHouse':\r\n return ;\r\n case 'OfficeLookup':\r\n return ;\r\n case 'Parcels':\r\n return ;\r\n case 'Photos':\r\n return ;\r\n case 'Rooms':\r\n return ;\r\n case 'Supplements':\r\n return ;\r\n case 'TwoDimensionalMeasurement':\r\n return ;\r\n case 'Units':\r\n return ;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nLayoutGroupWrapper.propTypes = {\r\n groupType: PropTypes.string.isRequired,\r\n resourceType: PropTypes.string,\r\n};\r\n\r\nexport default LayoutGroupWrapper;\r\n","import { createSelector } from 'reselect';\r\n\r\nexport const selectSearchResults = createSelector(({ office }) => office.searchResults, results => results);\r\n\r\nexport const getOfficeDefinition = ({ office }) => office.officeDefinition;\r\n\r\nexport const getInitialValues = ({ office }) => office.initialValues;\r\n\r\nexport const getCurrentOffice = ({ office }) => office.currentOffice;\r\n\r\nexport const getLoadingState = ({ office }) => office.isLoading;\r\n\r\nexport const getDefinitionsLoadingState = ({ office }) => office.isLoadingDefinitions;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst OfficeLookupActionButtons = ({\r\n officeSelected,\r\n currRow,\r\n}) => {\r\n const handleClick = () => officeSelected(currRow);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nOfficeLookupActionButtons.propTypes = {\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n }),\r\n officeSelected: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default OfficeLookupActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport OfficeLookupActionButtons from '@components/table/actionButtons/OfficeLookupActionButtons';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst OfficeLookupTable = ({\r\n displayData,\r\n onOfficeSelect,\r\n isModal = false,\r\n}) => {\r\n const officeSelected = row => onOfficeSelect(row);\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: 'Actions',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '55px' },\r\n },\r\n {\r\n dataField: 'UniqueID',\r\n text: 'ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'OfficeMlsId',\r\n text: 'MLS ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficeName',\r\n text: 'Office Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficePhone',\r\n text: 'Phone',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: false,\r\n },\r\n {\r\n dataField: 'OfficeAOR',\r\n text: 'AOR',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: false,\r\n },\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'OfficeMlsId',\r\n order: 'desc',\r\n }];\r\n\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nOfficeLookupTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onOfficeSelect: PropTypes.func,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default OfficeLookupTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport { Form, Formik } from 'formik';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst OfficeSearchForm = ({ onSubmitClicked }) => {\r\n const formSubmitting = useSelector(state => state.office.isLoading);\r\n\r\n const handleSubmit = values => {\r\n onSubmitClicked(values);\r\n };\r\n\r\n return (\r\n \r\n {({ handleReset }) => (\r\n
    \r\n \r\n \r\n \r\n \r\n {formSubmitting\r\n ? (\r\n <>\r\n \r\n Searching...\r\n \r\n ) : (\r\n <>\r\n \r\n Search\r\n \r\n )}\r\n \r\n \r\n \r\n Clear\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nOfficeSearchForm.propTypes = {\r\n onSubmitClicked: PropTypes.func,\r\n};\r\n\r\nexport default OfficeSearchForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { selectSearchResults } from '@redux/selectors/OfficeSelector';\r\nimport {\r\n lookupOffices,\r\n setOfficeLookup,\r\n} from '@redux/modules/office';\r\n\r\nimport OfficeLookupTable from '@components/table/OfficeLookupTable';\r\nimport OfficeSearchForm from '@components/form/forms/OfficeSearchForm';\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport Modal from '@components/smartAdminUI/Modal';\r\n\r\nconst OfficeLookupModal = ({\r\n id = 'officeLookupModal',\r\n onChange = input => input,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const searchResults = useSelector(selectSearchResults);\r\n\r\n const officeSelected = row => {\r\n onChange(row);\r\n dispatch(setOfficeLookup(row.UniqueID));\r\n };\r\n\r\n const onSubmitClicked = values => {\r\n dispatch(lookupOffices(values));\r\n };\r\n\r\n return (\r\n \r\n {searchResults && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nOfficeLookupModal.propTypes = {\r\n id: PropTypes.string,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nexport default OfficeLookupModal;\r\n","/*eslint-disable */\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'formik';\r\n\r\nconst OnSubmitValidationError = props => {\r\n const { formik, onSubmissionError } = props;\r\n\r\n const effect = () => {\r\n if (formik.submitCount > 0 && !formik.isValid) {\r\n onSubmissionError();\r\n }\r\n };\r\n\r\n useEffect(effect, [formik.submitCount]);\r\n\r\n return null;\r\n};\r\n\r\nexport default connect(OnSubmitValidationError);\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst navigateToField = e => {\r\n const anchorID = e.target.getAttribute('href').replace('#', '');\r\n const tabContent = document.querySelector('.tab-content');\r\n const anchor = tabContent.querySelector(`[id=\"${anchorID}\"]`);\r\n if (anchor) {\r\n const tabPane = anchor.closest('.tab-pane');\r\n if (tabPane) {\r\n const tabLinkID = tabPane.id.replace('tabpane', 'tab');\r\n const tabLink = document.getElementById(tabLinkID);\r\n tabLink?.click();\r\n setTimeout(() => {\r\n const formcontrol = anchor.querySelector('[id]');\r\n formcontrol?.focus();\r\n }, 1);\r\n }\r\n }\r\n};\r\n\r\n// Contains any errors and missing field warnings to display\r\nconst ErrorMessage = ({ item }) => {\r\n const [fieldName] = useMemo(() => Object.keys(item), [item]);\r\n const labelName = useMemo(() => {\r\n if (fieldName.includes('Rooms.')) {\r\n const [rest, splitFieldName] = fieldName.split(/\\.(?=[^\\.]+$)/); //eslint-disable-line\r\n // eslint-disable-next-line\r\n return splitFieldName.split(/(?=[A-Z])/).join(' ');\r\n }\r\n return fieldName;\r\n }, [item]);\r\n return (\r\n
  • \r\n \r\n {`${labelName}: `}\r\n \r\n {`${item[fieldName]}`}\r\n
  • \r\n );\r\n};\r\n\r\nErrorMessage.propTypes = {\r\n item: PropTypes.objectOf(PropTypes.string),\r\n\r\n};\r\n\r\nexport default ErrorMessage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getSortedErrors, selectFormDataStatus } from '@redux/selectors/FormSelector';\r\nimport ErrorMessage from './ErrorMessage';\r\n\r\nconst ValidationFeedback = () => {\r\n const [isFormDataLoaded, setIsFormDataLoaded] = useState(false);\r\n const errors = useSelector(getSortedErrors);\r\n const formDataStatus = useSelector(selectFormDataStatus);\r\n\r\n useEffect(() => {\r\n if (formDataStatus === 'initialized') setIsFormDataLoaded(true);\r\n }, [formDataStatus]);\r\n\r\n // this flashes. because validation is null, runs against a blank form, runs twice more, then is null again\r\n return (\r\n
      \r\n {(isFormDataLoaded) ? errors.map(item => (\r\n \r\n )) : null}\r\n
    \r\n );\r\n};\r\n\r\nexport default ValidationFeedback;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Nav from 'react-bootstrap/Nav';\r\nimport Badge from './Badge';\r\n\r\nconst SectionItem = ({\r\n sectionsPerRepeatableSection,\r\n section,\r\n errPerSection,\r\n reqPerSection,\r\n}) => {\r\n const sectionUrl = useMemo(() => section.sectionName.replace(/\\s/g, ''), [section]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {(!errPerSection[section.sectionName] && !reqPerSection[section.sectionName]) && }\r\n {errPerSection[section.sectionName] && (\r\n \r\n {errPerSection[section.sectionName].length}\r\n \r\n )}\r\n {section.sectionLabel}\r\n {sectionsPerRepeatableSection[section.sectionName] && (\r\n \r\n {sectionsPerRepeatableSection[section.sectionName] ? sectionsPerRepeatableSection[section.sectionName].length : 0}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\nSectionItem.propTypes = {\r\n sectionsPerRepeatableSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.bool)),\r\n section: PropTypes.shape().isRequired,\r\n errPerSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]))).isRequired,\r\n reqPerSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).isRequired,\r\n};\r\n\r\nexport default SectionItem;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport { getSortedErrors, getVisibleSections } from '@redux/selectors/FormSelector';\r\n\r\nimport Nav from 'react-bootstrap/Nav';\r\nimport Badge from 'react-bootstrap/Badge';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport Card from 'react-bootstrap/Card';\r\nimport Collapse from 'react-bootstrap/Collapse';\r\nimport Swal from 'sweetalert2';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nimport ValidationFeedback from '@components/smartAdminUI/ValidationFeedback';\r\nimport SectionItem from './SectionItem';\r\n\r\nconst SectionNav = ({\r\n sectionsPerRepeatableSection,\r\n sections,\r\n errPerSection,\r\n reqPerSection,\r\n}) => {\r\n const visibleSections = useSelector(getVisibleSections);\r\n const errors = useSelector(getSortedErrors);\r\n const sortedErrors = useSelector(getSortedErrors);\r\n const [open, setOpen] = useState(false);\r\n const gaEventTracker = GAEventTracking('Tool');\r\n\r\n const displayCopiedMessage = () => Swal.fire({\r\n position: 'center',\r\n title: 'Validation Summary Copied',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n });\r\n\r\n const copyToClipboard = () => {\r\n displayCopiedMessage();\r\n gaEventTracker('Copy', 'Copied Validation Summary');\r\n navigator.clipboard.writeText(document.getElementById('validationList').innerText);\r\n };\r\n\r\n const handleValidationSummaryClick = () => {\r\n document.getElementById('validationSummary').classList.add('flip-vertical-left');\r\n document.getElementById('validationSummaryCard').classList.add('flip-vertical-right');\r\n document.getElementById('validationSummary').classList.remove('d-none');\r\n document.getElementById('sections').classList.add('d-none');\r\n };\r\n const handleSectionsClick = () => {\r\n document.getElementById('sections').classList.add('flip-vertical-right');\r\n document.getElementById('sectionsCard').classList.add('flip-vertical-left');\r\n document.getElementById('validationSummary').classList.add('d-none');\r\n document.getElementById('sections').classList.remove('d-none');\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nSectionNav.propTypes = {\r\n sectionsPerRepeatableSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.bool)),\r\n sections: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n errPerSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]))).isRequired,\r\n reqPerSection: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).isRequired,\r\n};\r\n\r\nexport default SectionNav;\r\n","import { createSelector } from 'reselect';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport isEqual from 'lodash/isEqual';\r\nimport some from 'lodash/some';\r\n\r\nexport const selectLockRequiresCheck = createSelector(({ rowLock }) => rowLock?.requiresCheck, result => result);\r\n\r\nexport const selectLocked = createSelector(({ rowLock }) => rowLock?.locked, result => result);\r\n\r\nexport const selectLockedBy = createSelector(({ rowLock }) => rowLock?.lockedByUserName, result => result);\r\n\r\nexport const selectLockedByMe = createSelector(({ rowLock }) => rowLock?.lockedByMe, result => result);\r\n\r\nexport const selectLastUpdatedOn = createSelector(({ rowLock }) => rowLock?.lastUpdatedOn, result => result);\r\n\r\nexport const selectLastCheckedOn = createSelector(({ rowLock }) => rowLock?.lastCheckedOn, result => result);\r\n\r\nexport const selectEntity = createSelector(({ rowLock }) => rowLock?.entity, result => result);\r\n\r\nexport const selectCreatedLocks = createSelector(({ rowLock }) => rowLock?.createdLocks, result => result);\r\n\r\nexport const selectCreatedWithinSession = createSelector(selectEntity, selectCreatedLocks, (entity, createdLocks) => {\r\n if (isEmpty(entity)) return false;\r\n if (isEmpty(createdLocks)) return false;\r\n return some(createdLocks, lockedEntity => isEqual(lockedEntity, entity));\r\n});\r\n\r\nexport const selectError = createSelector(({ rowLock }) => rowLock?.error, result => result);\r\n\r\nexport const selectClareityUrl = createSelector(({ rowLock }) => rowLock?.clareityUrl, result => result);\r\n\r\nexport const selectCallback = createSelector(({ rowLock }) => rowLock?.callback, result => result);\r\n\r\nexport const selectLoading = createSelector(({ rowLock }) => rowLock?.loading, result => result);\r\n","/* eslint-disable import/prefer-default-export */\r\n\r\n/* Checks if the entity has all required properties defined. */\r\nconst isValidEntity = entity => {\r\n if (!entity?.type || !entity?.id) return false;\r\n if (!['listing', 'agent', 'office'].includes(entity.type)) return false;\r\n if (Number.isNaN(entity.id)) return false;\r\n return true;\r\n};\r\n\r\nexport {\r\n isValidEntity,\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useInterval = (callback, delay) => {\r\n const savedCallback = useRef();\r\n\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n useEffect(() => {\r\n const tick = () => {\r\n savedCallback.current();\r\n };\r\n\r\n if (delay !== null) {\r\n const id = setInterval(tick, delay);\r\n return () => clearInterval(id);\r\n }\r\n return null;\r\n }, [delay]);\r\n};\r\n\r\nexport default useInterval;\r\n","import { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { checkRowLock } from '@redux/modules/rowLock';\r\nimport { isValidEntity } from '@utils/rowLock';\r\nimport usePrevious from '@hooks/usePrevious';\r\n\r\nimport {\r\n selectLoading,\r\n} from '@redux/selectors/RowLockSelector';\r\n\r\nconst useRowChecked = entity => {\r\n const [checked, setChecked] = useState(false);\r\n const [checkInProgress, setCheckInProgress] = useState(false);\r\n const isLoading = useSelector(selectLoading);\r\n const previousEntity = usePrevious(entity);\r\n const dispatch = useDispatch();\r\n\r\n /* Check the entity lock status. */\r\n useEffect(() => {\r\n // When switching between components using rowlocking, there might still be a rowlocking operation taking place that relates to the\r\n // previous component. In this case, we want to delay the initial check for the new component until the running operation is complete.\r\n if (isLoading) return;\r\n\r\n const isNewEntity = entity !== previousEntity;\r\n if (isNewEntity) setChecked(false);\r\n if (!isValidEntity(entity)) return;\r\n\r\n if (isNewEntity || (!checked && !checkInProgress)) {\r\n setCheckInProgress(true);\r\n dispatch(checkRowLock(entity)).then(() => {\r\n setChecked(true);\r\n setCheckInProgress(false);\r\n });\r\n }\r\n }, [entity, isLoading]);\r\n\r\n return checked;\r\n};\r\n\r\nexport default useRowChecked;\r\n","import React, {\r\n useEffect,\r\n useMemo,\r\n useState,\r\n useCallback,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport useInterval from '@hooks/useInterval';\r\n\r\nimport Alert from 'react-bootstrap/Alert';\r\n\r\nconst RowLockMessage = ({\r\n rowLockEntity,\r\n message,\r\n lockedBy,\r\n lockedByMe,\r\n checkStatus = () => null,\r\n onTakeover = () => null,\r\n onDiscard = () => null,\r\n displayActions = true,\r\n lastUpdatedOn = null,\r\n lastCheckedOn = null,\r\n isAutoSave = false,\r\n}) => {\r\n const [minutesElapsed, setMinutesElapsed] = useState(null);\r\n const canTakeAction = useMemo(() => isAutoSave || minutesElapsed >= 5, [minutesElapsed, lockedByMe]);\r\n const timeElapsedMessage = useMemo(() => {\r\n if (minutesElapsed == null) return null;\r\n if (minutesElapsed < 1) return 'moments ago';\r\n if (minutesElapsed >= 60) {\r\n const hours = Math.floor(minutesElapsed / 60);\r\n const minutes = minutesElapsed % 60;\r\n return minutes > 0\r\n ? `${hours} hour${hours > 1 ? 's' : ''} and ${minutes} minute${minutes > 1 ? 's' : ''} ago`\r\n : `${hours} hour${hours > 1 ? 's' : ''} ago`;\r\n }\r\n return `${minutesElapsed} minute${minutesElapsed > 1 ? 's' : ''} ago`;\r\n }, [minutesElapsed]);\r\n\r\n const lastUpdate = useMemo(() => lastUpdatedOn && new Date(lastUpdatedOn), [lastUpdatedOn]);\r\n\r\n const updateElapsedMinutes = useCallback(() => {\r\n if (!lastUpdate) return;\r\n const minutes = Math.floor((Math.abs(Date.now() - lastUpdate) / 1000) / 60);\r\n setMinutesElapsed(minutes);\r\n }, [lastUpdate]);\r\n\r\n useEffect(updateElapsedMinutes, [lastUpdate]);\r\n useInterval(updateElapsedMinutes, lastUpdate ? (1000 * 30) : null);\r\n\r\n const [callback, setCallback] = useState(null);\r\n const [holdCallbackFiring, setHoldCallbackFiring] = useState(false);\r\n\r\n const handleTakeover = () => {\r\n checkStatus();\r\n setCallback(() => onTakeover);\r\n setHoldCallbackFiring(true); // put the callback firing on hold until the status check is complete\r\n };\r\n\r\n const handleDiscard = () => {\r\n checkStatus();\r\n setCallback(() => onDiscard);\r\n setHoldCallbackFiring(true); // put the callback firing on hold until the status check is complete\r\n };\r\n\r\n useEffect(() => {\r\n if (callback && holdCallbackFiring) setHoldCallbackFiring(false);\r\n }, [lastCheckedOn]);\r\n\r\n useEffect(() => {\r\n if (callback && !holdCallbackFiring && canTakeAction) {\r\n callback();\r\n setCallback(null);\r\n }\r\n }, [holdCallbackFiring]);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {rowLockEntity &&

    {`${rowLockEntity.type.charAt(0).toUpperCase() + rowLockEntity.type.slice(1)} [${rowLockEntity.id}]`}

    }\r\n

    \r\n \r\n {message || (isAutoSave\r\n ? 'There is auto-save data available.'\r\n : `This entity is locked by ${lockedBy}.`)}\r\n

    \r\n {!isAutoSave && lastUpdate && timeElapsedMessage &&

    {`The lock was last updated on ${lastUpdate.toLocaleString()} (${timeElapsedMessage}).`}

    }\r\n {displayActions && canTakeAction && (\r\n <>\r\n {isAutoSave\r\n ?

    Do you wish to use the available auto-save data?

    \r\n :

    Do you wish to take over and create a new lock, or remove the existing lock?

    }\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nRowLockMessage.propTypes = {\r\n rowLockEntity: PropTypes.shape({\r\n type: PropTypes.string,\r\n id: PropTypes.number,\r\n }),\r\n message: PropTypes.string,\r\n lockedBy: PropTypes.string,\r\n lockedByMe: PropTypes.bool,\r\n checkStatus: PropTypes.func,\r\n onTakeover: PropTypes.func,\r\n onDiscard: PropTypes.func,\r\n displayActions: PropTypes.bool,\r\n lastUpdatedOn: PropTypes.string,\r\n lastCheckedOn: PropTypes.number,\r\n isAutoSave: PropTypes.bool,\r\n};\r\n\r\nexport default RowLockMessage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Alert from 'react-bootstrap/Alert';\r\n\r\nconst RowLockOwnerMessage = ({\r\n onRemoveLock = () => null,\r\n}) => (\r\n
    \r\n
    \r\n \r\n

    \r\n \r\n This entity is currently locked.\r\n

    \r\n

    You currently hold a lock for this entity. Do you wish to release the lock?

    \r\n \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nRowLockOwnerMessage.propTypes = {\r\n onRemoveLock: PropTypes.func,\r\n};\r\n\r\nexport default RowLockOwnerMessage;\r\n","import {\r\n useEffect, useMemo, useState, useCallback,\r\n} from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n checkRowLock,\r\n createRowLock,\r\n pingRowLock,\r\n removeRowLock,\r\n setRowLockCurrentUser,\r\n setRowLockEntity,\r\n setRowLockCallback,\r\n takeoverRowLock,\r\n} from '@redux/modules/rowLock';\r\n\r\nimport {\r\n selectLockRequiresCheck,\r\n selectLocked,\r\n selectLockedBy,\r\n selectLockedByMe,\r\n selectLastUpdatedOn,\r\n selectLastCheckedOn,\r\n selectCreatedWithinSession,\r\n selectError,\r\n selectClareityUrl,\r\n} from '@redux/selectors/RowLockSelector';\r\n\r\nimport {\r\n getUserName,\r\n getUserId,\r\n getUserIdleStatus,\r\n} from '@redux/selectors/UserSelector';\r\nimport { getImpersonationStatus } from '@redux/selectors/ImpersonationSelector';\r\n\r\nimport { isValidEntity } from '@utils/rowLock';\r\nimport useInterval from '@hooks/useInterval';\r\nimport useRowChecked from '@hooks/useRowChecked';\r\nimport LockMessage from '@components/rowLock/RowLockMessage';\r\nimport LockOwnerMessage from '@components/rowLock/RowLockOwnerMessage';\r\n\r\n/* Validates hook props using PropTypes.checkPropTypes. */\r\nconst validateProps = props => {\r\n const propTypes = {\r\n rowLockEntity: PropTypes.shape({\r\n type: PropTypes.string,\r\n id: PropTypes.number,\r\n }),\r\n isEditOperation: PropTypes.bool,\r\n enableAutomation: PropTypes.bool,\r\n redirectOnLocked: PropTypes.bool,\r\n enableRowLocking: PropTypes.bool,\r\n };\r\n\r\n PropTypes.checkPropTypes(propTypes, props, 'prop', 'useRowLock');\r\n};\r\n\r\nconst useRowLock = props => {\r\n const {\r\n rowLockEntity = null, // the entity which the hook will be initialized with;\r\n isEditOperation = false, // specifies if the hook is used within an edit page;\r\n enableAutomation = true, // specifies if automations (e.g. intervals) should be ON for this hook;\r\n enableRowLocking = true, // specifies if the row-locking should currently be enabled;\r\n redirectOnLocked = false, // specifies if the user should be redirected to a dedicated page if the entity is locked\r\n } = props;\r\n\r\n validateProps(props);\r\n\r\n const [entity, setEntity] = useState(enableRowLocking && isValidEntity(rowLockEntity) ? rowLockEntity : null);\r\n const [lockCallback, setLockCallback] = useState(null);\r\n const checked = useRowChecked(entity);\r\n\r\n const history = useHistory(); // use for redirection\r\n\r\n const dispatch = useDispatch();\r\n const locked = useSelector(selectLocked);\r\n const lockedBy = useSelector(selectLockedBy);\r\n const lockedByMe = useSelector(selectLockedByMe);\r\n const lockCreatedWithinSession = useSelector(selectCreatedWithinSession);\r\n const lockRequiresCheck = useSelector(selectLockRequiresCheck);\r\n const lastUpdatedOn = useSelector(selectLastUpdatedOn);\r\n const lastCheckedOn = useSelector(selectLastCheckedOn);\r\n const isError = useSelector(selectError);\r\n const clareityUrl = useSelector(selectClareityUrl);\r\n\r\n const isErrorOrUnknownStatus = isError || lockRequiresCheck || !!clareityUrl;\r\n const lockedByMeWithinSession = lockedByMe && lockCreatedWithinSession;\r\n const lockingAuthorized = !locked || lockedByMeWithinSession;\r\n\r\n const realUserName = useSelector(getUserName);\r\n const realUserId = useSelector(getUserId);\r\n const isIdle = useSelector(getUserIdleStatus);\r\n const impersonationStatus = useSelector(getImpersonationStatus);\r\n\r\n const currentUser = useMemo(() => (impersonationStatus?.ImpersonationActive\r\n ? { userName: impersonationStatus.memberFullName, userId: impersonationStatus.memberUniqueID }\r\n : { userName: realUserName, userId: realUserId }\r\n ), [realUserName, realUserId, impersonationStatus]);\r\n\r\n const authChecked = useSelector(({ authentication }) => authentication.authChecked);\r\n const isLoadingAuth = useSelector(({ authentication }) => authentication.isLoadingAuth);\r\n const isAuthenticated = useSelector(({ authentication }) => authentication.isAuthenticated);\r\n const isAuthCloseToExpiry = useSelector(({ authentication }) => authentication.isAuthCloseToExpiry);\r\n\r\n const rowLockIntervalsEnabled = enableRowLocking && enableAutomation && !isIdle && authChecked && isAuthenticated && !isLoadingAuth && !isAuthCloseToExpiry;\r\n\r\n /* Save current user to redux store. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n dispatch(setRowLockCurrentUser(currentUser));\r\n }, [currentUser]);\r\n\r\n const initializeEntity = (newEntity, callback) => {\r\n if (!enableRowLocking) return;\r\n setLockCallback(null);\r\n if (!isValidEntity(newEntity)) return;\r\n setEntity(newEntity);\r\n dispatch(setRowLockEntity(newEntity)).then(() => callback && setLockCallback(() => callback));\r\n };\r\n\r\n /* Make sure to re-initialize the local entity when a new rowLock entity is being passed. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n initializeEntity(rowLockEntity);\r\n }, [rowLockEntity]);\r\n\r\n const checkStatus = useCallback(callback => {\r\n if (!enableRowLocking) return;\r\n if (!isValidEntity(entity)) return;\r\n dispatch(checkRowLock(entity)).then(() => callback && setLockCallback(() => callback));\r\n }, [entity]);\r\n\r\n const createLock = useCallback(async callback => {\r\n let created;\r\n\r\n if (!enableRowLocking) return null;\r\n if (!isValidEntity(entity)) return null;\r\n\r\n try {\r\n created = await dispatch(createRowLock(entity));\r\n if (created && callback) setLockCallback(() => callback);\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: RowLock createLock', err);\r\n }\r\n\r\n return created;\r\n }, [entity]);\r\n\r\n const pingLock = useCallback(() => {\r\n if (!enableRowLocking) return;\r\n if (!isValidEntity(entity)) return;\r\n dispatch(pingRowLock(entity));\r\n }, [entity]);\r\n\r\n const removeLock = useCallback(() => {\r\n if (!enableRowLocking) return;\r\n if (!isValidEntity(entity)) return;\r\n dispatch(removeRowLock(entity));\r\n }, [entity]);\r\n\r\n const takeoverLock = useCallback(callback => {\r\n if (!enableRowLocking) return;\r\n if (!isValidEntity(entity)) return;\r\n dispatch(takeoverRowLock(entity)).then(() => callback && setLockCallback(() => callback));\r\n }, [entity]);\r\n\r\n /* It is not very clear at this point what \"Discard Changes\" action should do behind the scenes, so for now\r\n it will just take over existing lock and remove it (remove is only allowed for the owner of the lock).\r\n This approach should also assist in removing any hanging locks. */\r\n const discardChanges = useCallback(() => {\r\n if (!enableRowLocking) return;\r\n if (!isValidEntity(entity)) return;\r\n dispatch(takeoverRowLock(entity)).then(() => dispatch(removeRowLock(entity)));\r\n }, [entity]);\r\n\r\n /* Redirect the user to the Clareity URL when this is being returned by the api, and the user is not on an edit page.\r\n This is meant to be a temporary solution until a middleware will automatically deal with this url. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n if (clareityUrl && !isEditOperation && checked) {\r\n window.location.href = clareityUrl;\r\n }\r\n }, [clareityUrl, isEditOperation, checked]);\r\n\r\n /* Re-trigger the lock check action if that is required (due to receiving a 'FAILURE' type). */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n if (lockRequiresCheck && checked && !isError) {\r\n checkStatus();\r\n }\r\n }, [lockRequiresCheck, checked, isError]);\r\n\r\n /* Check if there is any callback action waiting to be fired. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n if (lockCallback && checked && !isErrorOrUnknownStatus && lockedByMeWithinSession) {\r\n lockCallback();\r\n setLockCallback(null);\r\n }\r\n }, [lockCallback && checked, isErrorOrUnknownStatus, lockedByMeWithinSession]);\r\n\r\n /* Remove any saved callback actions if the user is not entitled to fire it yet. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n if (lockCallback && checked && !isErrorOrUnknownStatus && locked && !lockedByMeWithinSession) {\r\n setLockCallback(null);\r\n }\r\n }, [lockCallback, checked, isErrorOrUnknownStatus, locked, lockedByMeWithinSession]);\r\n\r\n /* Redirect the user to the RowLock page if the entity is locked. */\r\n useEffect(() => {\r\n if (!enableRowLocking) return;\r\n if (redirectOnLocked && checked && !isErrorOrUnknownStatus && locked && !lockedByMeWithinSession) {\r\n if (lockCallback) {\r\n // Save callback to redux store, from where it will be picked up by the rowLock page.\r\n dispatch(setRowLockCallback(lockCallback));\r\n }\r\n history.push(`/rowLock/${entity.type}/${entity.id}`);\r\n }\r\n }, [redirectOnLocked, checked, isErrorOrUnknownStatus, locked, lockedByMeWithinSession, lockCallback, entity]);\r\n\r\n /* If the lock belongs to the current user, then start to regularly ping the lock for heartbeat purposes. */\r\n useInterval(pingLock, rowLockIntervalsEnabled && isEditOperation && checked && !isErrorOrUnknownStatus && lockedByMeWithinSession ? (1000 * 60 * 5) : null);\r\n\r\n /* If the entity is locked, then start to regularly check for any lock status changes. */\r\n useInterval(checkStatus, rowLockIntervalsEnabled && checked && !isErrorOrUnknownStatus && locked ? (1000 * 60) : null);\r\n\r\n return {\r\n rowLockingEnabled: enableRowLocking && isValidEntity(entity),\r\n entity,\r\n checked,\r\n lockingAuthorized: checked ? lockingAuthorized : false,\r\n locked: checked ? locked : false,\r\n lockedBy: checked ? lockedBy : null,\r\n lockedByMe: checked ? lockedByMe : false,\r\n lastUpdatedOn: checked ? lastUpdatedOn : null,\r\n lastCheckedOn: checked ? lastCheckedOn : null,\r\n initializeEntity,\r\n checkStatus,\r\n createLock,\r\n pingLock,\r\n removeLock,\r\n takeoverLock,\r\n discardChanges,\r\n LockMessage,\r\n LockOwnerMessage,\r\n };\r\n};\r\n\r\nexport default useRowLock;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useIsMounted = () => {\r\n const isMountedRef = useRef(false);\r\n\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => {\r\n isMountedRef.current = false;\r\n };\r\n });\r\n\r\n return isMountedRef.current;\r\n};\r\n\r\nexport default useIsMounted;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, {\r\n useEffect, useMemo, useRef, useState,\r\n} from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Formik, Form } from 'formik';\r\nimport { useRollbar, useRollbarPerson } from '@rollbar/react';\r\n\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport LinearProgress from '@mui/material/LinearProgress';\r\n\r\nimport apiService from '@services/apiService';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport FormSearchBar from '@components/form/formComponents/formSearch/FormSearchBar';\r\nimport FormLoader from '@components/loaders/FormLoader';\r\nimport FieldValidator from '@components/form/formHelpers/FieldValidator';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\nimport FormikFieldUpdater from '@components/form/formHelpers/FormikFieldUpdater';\r\nimport LayoutGroupWrapper from '@components/form/formComponents/inputGroups/LayoutGroupWrapper';\r\nimport OfficeLookupModal from '@components/form/formComponents/inputGroups/officeLookup/OfficeLookupModal';\r\nimport RepeatableRoom from '@components/form/formComponents/repeatableRoom/RepeatableRoom';\r\nimport OnSubmitValidationError from '@components/form/formikComponents/OnSubmitValidationError';\r\n\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nimport {\r\n getSortedErrors,\r\n selectComboValueDict,\r\n selectFormDefinition,\r\n selectInitialTouched,\r\n selectInitialValues,\r\n selectLookupNames,\r\n selectVisiblePageStructure,\r\n selectAllFields,\r\n getOrderedSections,\r\n selectErrorsPerSection,\r\n selectRequiredPerSection,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport {\r\n selectSectionsPerRepeatableSection,\r\n} from '@redux/selectors/ListingSelector';\r\n\r\nimport { getUserName, getUserMlsId } from '@redux/selectors/UserSelector';\r\nimport { selectPhotoQueueLength, selectPhotoMetaCollection } from '@redux/selectors/PhotoSelector';\r\nimport { selectAgentFormData } from '@redux/selectors/FormDataSelector';\r\n\r\nimport {\r\n formSubmitted,\r\n loadComboBoxOptions,\r\n setValidationResult,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { clearAgent } from '@redux/modules/agent';\r\n\r\nimport SectionNav from '@components/smartAdminUI/SectionNav';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useIsMounted from '@hooks/useIsMounted';\r\n\r\nimport Badge from '@components/smartAdminUI/Badge';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst CreateAgentForm = () => {\r\n const dispatch = useDispatch();\r\n const isMounted = useIsMounted();\r\n const formRef = useRef();\r\n const history = useHistory(); // use for redirection\r\n\r\n const agentRules = window.FlexRule.RuntimeEngine.fromJavaScript('OnePlatform', 'AgentRules');\r\n\r\n const photoQueueLength = useSelector(selectPhotoQueueLength);\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const orderedSections = useSelector(getOrderedSections);\r\n const errPerSection = useSelector(selectErrorsPerSection);\r\n const reqPerSection = useSelector(selectRequiredPerSection);\r\n const agentSelected = useSelector(state => state.agent.agentSelected);\r\n const agentDataSelect = useSelector(selectAgentFormData);\r\n const definitionType = useSelector(state => state.formGeneration.definitionType);\r\n const formIsLoading = useSelector(state => state.formGeneration.formIsLoading);\r\n const officeLookup = useSelector(state => state.office.officeLookup);\r\n const operationType = useSelector(state => state.formGeneration.operationType);\r\n const previousOperationType = usePrevious(operationType);\r\n const comboSetValueDict = useSelector(selectComboValueDict);\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const lookUpNames = useSelector(selectLookupNames);\r\n const initialTouched = useSelector(selectInitialTouched);\r\n const initialValues = useSelector(selectInitialValues);\r\n const pageStructure = useSelector(selectVisiblePageStructure);\r\n const allFields = useSelector(selectAllFields);\r\n const photoMeta = useSelector(selectPhotoMetaCollection);\r\n const sortedErrors = useSelector(getSortedErrors);\r\n\r\n const [formSubmitting, setFormSubmitting] = useState(false);\r\n const [newComboValue, setNewComboValue] = useState({});\r\n const [runValidation, setRunValidation] = useState(false);\r\n const [validateFieldName, setValidateFieldName] = useState('');\r\n const [validateFlag, setValidateFlag] = useState(false);\r\n const [validationValue, setValidationValue] = useState('');\r\n const [progress, setProgress] = useState(((1 / orderedSections.length) * 100));\r\n const [activeSection, setActiveSection] = useState(1);\r\n\r\n const memoizedInitialValues = useMemo(() => initialValues, []);\r\n const agentFormData = useMemo(() => agentDataSelect, [agentDataSelect]);\r\n const comboBubbleWrap = { setNewComboValue };\r\n\r\n const photosAreQueued = useMemo(() => {\r\n if (photoQueueLength > 0) return true;\r\n return false;\r\n }, [photoQueueLength]);\r\n\r\n const rowLockEntity = useMemo(() => ({ type: 'agent', id: agentSelected?.UniqueID }), [agentSelected]);\r\n const gaEventTracker = GAEventTracking('Error Agent Form Submit');\r\n const username = useSelector(getUserName);\r\n const userMLSID = useSelector(getUserMlsId);\r\n\r\n const rollbar = useRollbar();\r\n useRollbarPerson({ id: userMLSID, username });\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n checked,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n rowLockingEnabled,\r\n } = useRowLock({ rowLockEntity, isEditOperation: operationType === 'edit', enableRowLocking: operationType === 'edit' });\r\n\r\n const lockReleasedByCurrentUser = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!currentFormDefinition?.length) return;\r\n\r\n if (lookUpNames?.lookupNames?.length) {\r\n dispatch(loadComboBoxOptions(lookUpNames, 'agents'));\r\n }\r\n\r\n formRef?.current?.validateForm();\r\n }, [currentFormDefinition]);\r\n\r\n useEffect(() => {\r\n // prevent the execution of this effect when going from edit mode to create mode;\r\n // current component will not be un-mounted yet when [operationType] gets updated in redux.\r\n if (previousOperationType === 'edit' && operationType === 'create') return;\r\n\r\n if (operationType === 'create') {\r\n dispatch(clearAgent());\r\n formRef?.current?.resetForm();\r\n setRunValidation(true);\r\n }\r\n }, [operationType]);\r\n\r\n useEffect(() => {\r\n if (Object.keys(newComboValue).length > 0) {\r\n const newComboKeys = Object.keys(newComboValue);\r\n if (comboSetValueDict) {\r\n if (newComboKeys.length > 0) {\r\n const { fieldName, newValue } = newComboValue;\r\n const comboMutator = comboSetValueDict[fieldName];\r\n comboMutator(newValue);\r\n }\r\n }\r\n }\r\n }, [newComboValue]);\r\n\r\n const getPhotoDeltas = (formikPhoto, unmodifiedEntry) => {\r\n const deltas = {};\r\n if (!formikPhoto) return deltas;\r\n if (formikPhoto.IsDeleted !== unmodifiedEntry.flexMeta.IsDeleted) deltas.IsDeleted = formikPhoto.IsDeleted;\r\n if (formikPhoto.Description !== unmodifiedEntry.flexMeta.Description) deltas.Description = formikPhoto.Description;\r\n if (formikPhoto.SortOrder !== unmodifiedEntry.flexMeta.SortOrder) deltas.SortOrder = formikPhoto.SortOrder;\r\n return deltas;\r\n };\r\n\r\n const mergePhotoData = (formikState, photoMetaCollection = []) => {\r\n if (!photoMetaCollection) return [];\r\n const mergedPhotos = photoMetaCollection.map(image => {\r\n const isError = image.IsError;\r\n if (image.flexMeta?.UniqueID) { // image exists in flexRule DB\r\n // Handle existing photo.\r\n const { SortOrder, IsDeleted } = formikState[image.key];\r\n if (IsDeleted) {\r\n // Mark photo as deleted.\r\n return {\r\n UniqueID: image.flexMeta.UniqueID,\r\n SortOrder: image.SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n if (isError && !IsDeleted) {\r\n // do not calculate deltas\r\n return {\r\n UniqueID: image.flexMeta.UniqueID,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n // Update photo.\r\n //\r\n const deltas = getPhotoDeltas(formikState[image.key], image);\r\n return {\r\n ...deltas,\r\n UniqueID: image.flexMeta.UniqueID,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n // Handle new photo.\r\n if (isError) return null;\r\n const {\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n } = formikState[image.key];\r\n\r\n return {\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }).filter(photo => photo !== null);\r\n // eslint-disable-next-line no-return-assign, no-param-reassign\r\n mergedPhotos.filter(p => !p.IsDeleted).sort((p1, p2) => p1.SortOrder - p2.SortOrder).forEach((photo, index) => photo.SortOrder = index + 1);\r\n return mergedPhotos;\r\n };\r\n\r\n const convertDateToUTC = date => new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\r\n const getDateValue = value => {\r\n let formattedDate;\r\n if (value) {\r\n const dateUTC = convertDateToUTC(new Date(value));\r\n const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(dateUTC);\r\n const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(dateUTC);\r\n const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(dateUTC);\r\n formattedDate = `${year}-${month}-${day}`;\r\n }\r\n return formattedDate ?? '';\r\n };\r\n\r\n const getBitValue = value => {\r\n let bitValue;\r\n if (value != null && value !== '') {\r\n if (typeof value === 'string') {\r\n bitValue = value === 'true' ? 1 : 0;\r\n } else if (typeof value === 'boolean') {\r\n bitValue = value === true ? 1 : 0;\r\n } else if (typeof value === 'number') {\r\n bitValue = value;\r\n }\r\n }\r\n return bitValue ?? '';\r\n };\r\n\r\n const getStringValue = value => value ?? '';\r\n\r\n const getNumericValue = value => (value != null && value !== '' ? Number(value) : '');\r\n\r\n const getComboBoxValue = value => value ?? '';\r\n\r\n // TODO: move to utility module (used by listing/agent/office)\r\n const valueHasChanged = (fieldName, oldValue, newValue) => {\r\n const inputType = allFields[fieldName]?.InputType;\r\n const dataType = allFields[fieldName]?.DataType;\r\n switch (inputType) {\r\n case 'TextInput':\r\n if (dataType === 'datetime' || dataType === 'date') {\r\n return (getDateValue(oldValue) !== getDateValue(newValue));\r\n }\r\n if (dataType === 'bit') {\r\n return (getBitValue(oldValue) !== getBitValue(newValue));\r\n }\r\n if (dataType === 'string') {\r\n return (getStringValue(oldValue) !== getStringValue(newValue));\r\n }\r\n if (dataType === 'numeric' || dataType === 'decimal' || dataType === 'integer') {\r\n return (getNumericValue(oldValue) !== getNumericValue(newValue));\r\n }\r\n return (oldValue !== newValue);\r\n\r\n case 'ComboBox':\r\n return (getComboBoxValue(oldValue) !== getComboBoxValue(newValue));\r\n\r\n default:\r\n return (oldValue !== newValue);\r\n }\r\n };\r\n\r\n const handlePreviousClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const previous = navItem.previousElementSibling;\r\n if (previous) {\r\n previous.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress - ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection - 1);\r\n }\r\n }\r\n };\r\n\r\n const handleNextClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const next = navItem.nextElementSibling;\r\n if (next) {\r\n next.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress + ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection + 1);\r\n }\r\n }\r\n };\r\n\r\n const handleSubmit = async (values, { setSubmitting }) => {\r\n if (!(operationType === 'create') && !(operationType === 'edit')) return;\r\n\r\n let uniqueID;\r\n const { Photos, ...agent } = values;\r\n const photosGroup = Photos ? mergePhotoData(Photos, photoMeta) : null;\r\n // generates postBody\r\n const postBody = {};\r\n\r\n if (operationType === 'create') {\r\n postBody.data = {\r\n agent: { ...agent },\r\n photos: photosGroup,\r\n };\r\n } else if (operationType === 'edit') {\r\n const agentData = {\r\n UniqueID: agentSelected.UniqueID,\r\n };\r\n\r\n Object.keys(agent).map(key => {\r\n if (valueHasChanged(key, agentSelected[key], values[key])) {\r\n agentData[key] = values[key];\r\n }\r\n return null;\r\n });\r\n\r\n postBody.data = {\r\n agent: { ...agentData },\r\n photos: photosGroup,\r\n };\r\n }\r\n\r\n try {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'question',\r\n iconColor: 'var(--theme-warning)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-agent-submit-no',\r\n },\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n title: 'Submit Agent?',\r\n text: 'Your changes will be reflected in Matrix™ within 10-15 minutes.',\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n setFormSubmitting(true);\r\n\r\n if (operationType === 'create') {\r\n const result = await apiService.Agent.createAgent(postBody);\r\n uniqueID = result?.UniqueID;\r\n } else if (operationType === 'edit') {\r\n uniqueID = agentSelected?.UniqueID;\r\n await apiService.Agent.updateAgent(postBody);\r\n }\r\n\r\n dispatch(formSubmitted());\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Agent Submitted',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n }).then(() => {\r\n history.push(uniqueID == null ? '/' : `/agent/view?UniqueID=${uniqueID}`);\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Agent Not Submitted',\r\n text: 'Agent could not be submitted at this time. Please contact support.',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-submit',\r\n },\r\n });\r\n if (operationType === 'edit') gaEventTracker(`Edit - ${uniqueID}`, `${username}`);\r\n if (operationType === 'create') gaEventTracker(`Create - ${uniqueID}`, `${username}`);\r\n rollbar.error('Error: Agent Form Submit', error, postBody);\r\n }\r\n setFormSubmitting(false);\r\n setSubmitting(false);\r\n };\r\n\r\n const onClickSubmit = (values, actions) => {\r\n if (rowLockingEnabled) return checkStatus(async () => handleSubmit(values, actions)); // check lock status before submitting\r\n return handleSubmit(values, actions);\r\n };\r\n\r\n const transformRepeatable = values => {\r\n const filledValues = { ...values };\r\n const existingLogics = agentRules.descriptions.logics; // existing fields that have validation rules\r\n const newValues = {};\r\n\r\n Object.entries(filledValues).forEach(([key, value]) => { // now handles removal of fields that do not have the validation logic set\r\n const newKeyLogic = `${key}Rules`;\r\n if (existingLogics.includes(newKeyLogic)) {\r\n newValues[key] = value;\r\n }\r\n });\r\n return { agent: newValues };\r\n };\r\n\r\n const myValidateForm = values => {\r\n const errors = {};\r\n\r\n if (agentRules) {\r\n try {\r\n const { agent, photos } = transformRepeatable(values);\r\n\r\n const res = agentRules.run(agent, photos);\r\n const { fieldValidationResult, agentIsValid } = res.context.variableContainer;\r\n\r\n dispatch(setValidationResult(fieldValidationResult));\r\n\r\n if (!agentIsValid) {\r\n errors.agentIsValid = agentIsValid;\r\n }\r\n } catch (er) {\r\n rollbar.error('Error: Agent Validation', er, values);\r\n }\r\n }\r\n\r\n return errors;\r\n };\r\n\r\n const validateFigField = (figFieldName, figValidationValue) => {\r\n setValidateFieldName(figFieldName);\r\n setValidateFlag(true);\r\n setValidationValue(figValidationValue);\r\n };\r\n\r\n const fieldsUpdated = () => {\r\n setRunValidation(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (runValidation) {\r\n formRef?.current?.validateForm();\r\n setRunValidation(false);\r\n }\r\n }, [runValidation]);\r\n\r\n // prevents form from submitting on enter key press\r\n const handleEnterKeyDown = keyEvent => {\r\n if ((keyEvent.charCode || keyEvent.keyCode) === 13) {\r\n keyEvent.preventDefault();\r\n }\r\n };\r\n\r\n // TODO: Pull this function out and put it into a general utils file as it is being used multiple times\r\n // Handle custom header for supplements and photo sections\r\n const getCustomHeader = section => {\r\n if (section.sectionName === 'Photos') {\r\n return (\r\n <>\r\n {section.sectionLabel}\r\n \r\n {sectionsPerRepeatableSection[section.sectionName]\r\n ? sectionsPerRepeatableSection[section.sectionName].length\r\n : 0}\r\n \r\n \r\n );\r\n }\r\n return section.sectionLabel;\r\n };\r\n\r\n // removes row lock and redirects user to home page on discard changes click\r\n const handleDiscardChanges = e => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Discard Changes?',\r\n html: 'Your changes will be discarded.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n showDenyButton: true,\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg mr-2 swal-question-agent-discard-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-agent-discard-no',\r\n },\r\n }).then(result => {\r\n if (result.isConfirmed) {\r\n if (operationType) {\r\n e.preventDefault();\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n history.push(operationType === 'create' ? '/' : '/agent/view');\r\n }\r\n }\r\n });\r\n };\r\n\r\n // updates row lock and displays an alert when changes are being overwritten by another user\r\n useEffect(() => {\r\n const tryRegainRowLock = async () => {\r\n const created = await createLock();\r\n if (!created) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Lock Lost',\r\n text: 'Your lock was lost and could not be regained.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-warning)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg swal-warning-agent-lockLost',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/agent/view');\r\n }\r\n });\r\n }\r\n };\r\n\r\n if (operationType === 'edit' && !lockReleasedByCurrentUser.current) {\r\n if (checked && !locked) {\r\n tryRegainRowLock();\r\n return;\r\n }\r\n\r\n if (locked && !lockingAuthorized) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Changes Overwritten',\r\n text: `Your changes have been overwritten by ${lockedBy}.`,\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-warning-agent-changesOverwritten',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/agent/view');\r\n }\r\n });\r\n }\r\n }\r\n }, [locked, lockingAuthorized, lockedBy, operationType]);\r\n\r\n const datePickerWhitelist = ['datetime', 'date', 'time'];\r\n const requiresDatePicker = childDataType => datePickerWhitelist.includes(childDataType);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {() => (\r\n <>\r\n {\r\n if (sortedErrors?.length > 0) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Validation Failed',\r\n html: `Please correct ${sortedErrors.length} validation errors and try again.`,\r\n confirmButtonText: 'Ok',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-validation',\r\n },\r\n });\r\n }\r\n }}\r\n />\r\n
    \r\n \r\n \r\n {agentFormData?.MemberMlsId ? agentFormData.MemberMlsId : 'Agent'}\r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n {agentFormData?.MemberMlsId ? agentFormData.MemberMlsId : 'Agent'}\r\n \r\n )}\r\n panelToolbar={(\r\n <>\r\n \r\n \r\n Discard Changes\r\n \r\n \r\n \r\n \r\n \r\n {formSubmitting\r\n ? (\r\n <>\r\n \r\n Saving...\r\n \r\n ) : (\r\n <>\r\n \r\n Submit\r\n \r\n )}\r\n \r\n \r\n {formSubmitting ? : }\r\n \r\n \r\n )}\r\n footer={(\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Previous\r\n \r\n \r\n \r\n \r\n \r\n \r\n Next\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n )}\r\n >\r\n {\r\n setProgress((1 / orderedSections.length) * 100 * (orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1));\r\n setActiveSection(orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {pageStructure.map(section => (\r\n \r\n {section.sectionName !== 'Rooms' ? (\r\n <>\r\n

    {getCustomHeader(section)}

    \r\n {section.children.map(child => {\r\n if (child.isGroup) {\r\n return (\r\n \r\n );\r\n }\r\n if (requiresDatePicker(child.datatype)) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n {/* */}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateAgentForm;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport {\r\n selectFormDefinition,\r\n selectFormDefinitionType,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport CreateAgentForm from '@components/form/forms/CreateAgentForm';\r\n\r\nconst CreateAgentPage = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const currentFormDefinitionType = useSelector(selectFormDefinitionType);\r\n const [urlParamFormType, setUrlParamFormType] = useQueryParam('formType', StringParam); // listing type of current listing from CLF\r\n\r\n const alertUser = e => {\r\n e.preventDefault(); // cancel the event\r\n e.returnValue = ''; // chrome requires return value to be set\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('beforeunload', alertUser);\r\n\r\n if (urlParamFormType && (!currentFormDefinition?.length || (urlParamFormType !== currentFormDefinitionType))) {\r\n dispatch(loadFormDefinition('create', urlParamFormType));\r\n }\r\n\r\n return () => window.removeEventListener('beforeunload', alertUser);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n setUrlParamFormType('agent');\r\n }\r\n }, [location]);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Create\r\n Agent\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default CreateAgentPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst AgentLookupActionButtons = ({\r\n agentSelected,\r\n currRow,\r\n}) => {\r\n const handleClick = () => agentSelected(currRow);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nAgentLookupActionButtons.propTypes = {\r\n agentSelected: PropTypes.func.isRequired,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n }),\r\n};\r\n\r\nexport default AgentLookupActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\n\r\nimport AgentLookupActionButtons from '@components/table/actionButtons/AgentLookupActionButtons';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst AgentLookupTable = ({\r\n displayData,\r\n onAgentSelect,\r\n isModal = false,\r\n}) => {\r\n const agentSelected = row => onAgentSelect(row);\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: 'Actions',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '55px' },\r\n },\r\n {\r\n dataField: 'MemberMlsId',\r\n text: 'MLS ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'MemberFirstName',\r\n text: 'First Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'MemberLastName',\r\n text: 'Last Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficeName',\r\n text: 'Office Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficePhone',\r\n text: 'Office Phone',\r\n },\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'MemberMlsId',\r\n order: 'desc',\r\n }];\r\n\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nAgentLookupTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onAgentSelect: PropTypes.func,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default AgentLookupTable;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport { Form, Formik } from 'formik';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst AgentSearchForm = ({ onSubmitClicked }) => {\r\n const agentSearchLoading = useSelector(state => state.agent.searchLoading);\r\n\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n clause: [],\r\n };\r\n const valueKeys = Object.keys(values);\r\n\r\n whereClause.clause = valueKeys.map(key => {\r\n if (values[key]) {\r\n return {\r\n name: key,\r\n value: values[key],\r\n };\r\n }\r\n return null;\r\n });\r\n\r\n whereClause.clause = whereClause.clause.filter(el => el !== null);\r\n\r\n return whereClause;\r\n };\r\n\r\n const handleSubmit = values => {\r\n const whereClause = buildWhereClause(values);\r\n const jsonBody = {\r\n action: 'search',\r\n where: whereClause,\r\n };\r\n\r\n onSubmitClicked(jsonBody);\r\n };\r\n\r\n return (\r\n \r\n {({ handleReset }) => (\r\n
    \r\n \r\n \r\n \r\n \r\n {agentSearchLoading\r\n ? (\r\n <>\r\n \r\n Searching...\r\n \r\n ) : (\r\n <>\r\n \r\n Search\r\n \r\n )}\r\n \r\n \r\n \r\n Clear\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAgentSearchForm.propTypes = {\r\n onSubmitClicked: PropTypes.func,\r\n};\r\n\r\nexport default AgentSearchForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { getSearchAgentResults } from '@redux/selectors/AgentSelector';\r\nimport {\r\n agentLookup,\r\n setAgentLookup,\r\n} from '@redux/modules/agent';\r\nimport { getImpersonationData } from '@redux/modules/impersonation';\r\n\r\nimport AgentLookupTable from '@components/table/AgentLookupTable';\r\nimport AgentSearchForm from '@components/form/forms/AgentSearchForm';\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport Modal from '@components/smartAdminUI/Modal';\r\n\r\nconst AgentLookupModal = ({\r\n id = 'agentLookupModal',\r\n onChange = input => input,\r\n getCurrentImpersonationData = false,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const searchAgentResults = useSelector(getSearchAgentResults);\r\n\r\n const agentSelected = row => {\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [\r\n {\r\n name: 'UniqueID',\r\n value: row.UniqueID,\r\n },\r\n ],\r\n },\r\n };\r\n onChange(row);\r\n dispatch(setAgentLookup(jsonBody))\r\n .then(() => {\r\n if (getCurrentImpersonationData) dispatch(getImpersonationData());\r\n });\r\n };\r\n\r\n const onSubmitClicked = jsonBody => {\r\n dispatch(agentLookup(jsonBody));\r\n };\r\n\r\n return (\r\n \r\n {searchAgentResults && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAgentLookupModal.propTypes = {\r\n id: PropTypes.string,\r\n onChange: PropTypes.func,\r\n getCurrentImpersonationData: PropTypes.bool,\r\n};\r\n\r\nexport default AgentLookupModal;\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n Form, Formik, useField, useFormikContext,\r\n} from 'formik';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\n// custom input fields using Formik's useField react hook\r\nconst CustomInput = ({ label, name }) => {\r\n const [field, meta] = useField(name);\r\n return (\r\n
    \r\n \r\n \r\n {meta.touched && meta.error ? (\r\n
    {meta.error}
    \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nCustomInput.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string,\r\n};\r\n\r\nconst TaxAutoPopForm = props => {\r\n const { onSearchSubmit, formClear } = props;\r\n const [formEdited, setFormEdited] = useState(false);\r\n\r\n const taxAutoPopSearchLoading = useSelector(state => state.listing.searchLoading);\r\n\r\n const FormikHelper = () => {\r\n const { dirty, resetForm } = useFormikContext();\r\n\r\n useEffect(() => {\r\n if (dirty) {\r\n if (!formEdited) setFormEdited(true);\r\n } else {\r\n // eslint-disable-next-line no-lonely-if\r\n if (formEdited) setFormEdited(false);\r\n }\r\n }, [dirty]);\r\n\r\n // resets form once the tax auto pop modal reopens\r\n useEffect(() => {\r\n if (formClear) {\r\n if (formEdited) {\r\n resetForm({});\r\n }\r\n }\r\n }, []);\r\n\r\n return null;\r\n };\r\n\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n clause: [],\r\n };\r\n const valueKeys = Object.keys(values);\r\n\r\n valueKeys.forEach(key => {\r\n if (values[key]) {\r\n whereClause.clause.push({\r\n Name: key,\r\n Value: values[key].trim(),\r\n });\r\n }\r\n });\r\n return whereClause;\r\n };\r\n\r\n const handleSubmit = values => {\r\n const whereClause = buildWhereClause(values);\r\n\r\n const jsonBody = {\r\n action: 'search',\r\n where: whereClause,\r\n };\r\n onSearchSubmit(jsonBody);\r\n };\r\n\r\n return (\r\n \r\n {({\r\n values, resetForm,\r\n } = props) => (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n {taxAutoPopSearchLoading\r\n ? (\r\n <>\r\n \r\n Searching...\r\n \r\n ) : (\r\n <>\r\n \r\n Search\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTaxAutoPopForm.propTypes = {\r\n formClear: PropTypes.oneOf([true, false]),\r\n onSearchSubmit: PropTypes.func,\r\n};\r\n\r\nexport default TaxAutoPopForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '../../smartAdminUI/Button';\r\n\r\nconst TaxActionButtons = ({ listingClicked, index }) => {\r\n const autoTaxPopSelected = () => {\r\n listingClicked(index);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n\r\n
    \r\n );\r\n};\r\n\r\nTaxActionButtons.propTypes = {\r\n listingClicked: PropTypes.func.isRequired,\r\n index: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default TaxActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport TaxActionButtons from './actionButtons/TaxActionButtons';\r\nimport Button from '../smartAdminUI/Button';\r\n\r\nconst TaxAutoPopTable = props => {\r\n const {\r\n displayData,\r\n onListingSelected,\r\n isModal = false,\r\n } = props;\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const generateColumns = () => {\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: 'Actions',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '55px' },\r\n },\r\n {\r\n dataField: 'ParcelNumber',\r\n text: 'LincNumber',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'UnitNumber',\r\n text: 'Unit #',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'StreetNumber',\r\n text: 'Street #',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'StreetName',\r\n text: 'Street Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'StreetSuffix',\r\n text: 'Street Suffix',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n ];\r\n return columns;\r\n };\r\n\r\n const defaultSorted = [{\r\n dataField: 'UniqueID',\r\n order: 'desc',\r\n }];\r\n\r\n // Buttons on the bottom left of the table that allow\r\n // the user to decide on how many rows per page should\r\n // be shown at one time.\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n <>\r\n {displayData.length > 0\r\n ? (\r\n \r\n )\r\n : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTaxAutoPopTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()),\r\n onListingSelected: PropTypes.func.isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default TaxAutoPopTable;\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { loadTaxSearchResults } from '@redux/modules/listing';\r\n\r\nimport Card from '@components/smartAdminUI/Card';\r\nimport Modal from '@components/smartAdminUI/Modal';\r\nimport TaxAutoPopForm from '@components/form/forms/TaxAutoPopForm';\r\nimport TaxAutoPopTable from '@components/table/TaxAutoPopTable';\r\n\r\nconst TaxAutoPopModal = props => {\r\n const {\r\n onListingClicked, id, clearForm, setClearForm,\r\n } = props;\r\n const dispatch = useDispatch();\r\n const autoPopListings = useSelector(state => state.listing.autoPopListings);\r\n\r\n const [listingData, setListingData] = useState('');\r\n\r\n // used for updating TAP table data and reset\r\n useEffect(() => {\r\n if (autoPopListings) {\r\n setListingData(autoPopListings);\r\n }\r\n }, [autoPopListings]);\r\n\r\n // POST request handling on selected listing by UniqueID\r\n const listingSelected = uniqueID => {\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [\r\n { Name: 'UniqueID', Value: uniqueID },\r\n ],\r\n },\r\n };\r\n onListingClicked(jsonBody);\r\n setListingData(''); // clear table data to destroy\r\n\r\n // resets TAP form after listing data is populated in form\r\n setClearForm(true);\r\n };\r\n\r\n const searchSubmit = taxData => {\r\n dispatch(loadTaxSearchResults(taxData));\r\n };\r\n\r\n return (\r\n \r\n

    \r\n \r\n NOTE:\r\n  \r\n Although new tax assessments are sent out to home owners at the beginning of each calendar year, Pillar 9™ does not typically receive\r\n new Calgary Tax Data until sometime in May, with all other municipalities following sometime thereafter. Please check back\r\n \r\n \r\n  HERE\r\n \r\n \r\n {' '}\r\n regularly, to see what data has been received for the current and past years.\r\n

    \r\n
    \r\n {\r\n listingData\r\n && (\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTaxAutoPopModal.propTypes = {\r\n clearForm: PropTypes.bool.isRequired,\r\n id: PropTypes.string.isRequired,\r\n onListingClicked: PropTypes.func.isRequired,\r\n setClearForm: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TaxAutoPopModal;\r\n","/* eslint-disable react/prop-types */\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport useInterval from '@hooks/useInterval';\r\nimport usePrevious from '@hooks/usePrevious';\r\n\r\nconst AutoSave = ({\r\n autoSaveEnabled,\r\n autoSaveTriggered,\r\n formValues,\r\n loadingStatus,\r\n listingChanged,\r\n}) => {\r\n const [isDirty, setIsDirty] = useState(false);\r\n const previousValues = usePrevious(formValues);\r\n\r\n // A countdown timer can be enabled for debugging purposes\r\n const debugAutoSaveCountdownEnabled = false; // For debugging only - enables a countdown timer for the AutoSave\r\n const [counter, setCounter] = useState(30); // For debugging only - keeps track of the countdown value\r\n\r\n // For debugging only\r\n useEffect(() => {\r\n let timer;\r\n if (debugAutoSaveCountdownEnabled && counter > 0) {\r\n // Set countdown timer\r\n timer = setTimeout(() => setCounter(counter - 1), 1000);\r\n // eslint-disable-next-line no-console\r\n console.log('Seconds left to AutoSave: ', counter);\r\n }\r\n return () => timer && clearTimeout(timer);\r\n }, [counter]);\r\n\r\n const autoSaveInterval = () => {\r\n if (isDirty) {\r\n setIsDirty(false);\r\n autoSaveTriggered();\r\n }\r\n\r\n // For debugging only\r\n if (debugAutoSaveCountdownEnabled) {\r\n // Reset counter\r\n setCounter(30);\r\n }\r\n };\r\n\r\n // useInterval(() => autoSaveInterval(), 10000); // Just for testing\r\n useInterval(autoSaveInterval, autoSaveEnabled && !listingChanged ? (30 * 1000) : null);\r\n\r\n useEffect(() => {\r\n if (!loadingStatus) {\r\n if (previousValues && previousValues.StateOrProvince !== '') {\r\n if (JSON.stringify(previousValues) !== JSON.stringify(formValues)) {\r\n setIsDirty(true);\r\n }\r\n }\r\n }\r\n }, [formValues, loadingStatus]);\r\n\r\n return null;\r\n};\r\n\r\nexport default AutoSave;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst SaveAsIncomplete = ({\r\n onSubmit = () => null,\r\n buttonText = 'Save Incomplete',\r\n isDisabled = false,\r\n}) => (\r\n <>\r\n \r\n \r\n {buttonText}\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nSaveAsIncomplete.propTypes = {\r\n isDisabled: PropTypes.bool,\r\n onSubmit: PropTypes.func,\r\n buttonText: PropTypes.string,\r\n};\r\n\r\nexport default SaveAsIncomplete;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Badge from 'react-bootstrap/Badge';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst StatusBadges = ({ status }) => {\r\n switch (status) {\r\n case 'Active':\r\n case 'A':\r\n return (\r\n Active}\r\n >\r\n \r\n A\r\n \r\n \r\n );\r\n case 'Expired':\r\n case 'E':\r\n return (\r\n Expired}\r\n >\r\n \r\n X\r\n \r\n \r\n );\r\n case 'Incomplete':\r\n case 'I':\r\n return (\r\n Incomplete}\r\n >\r\n \r\n I\r\n \r\n \r\n );\r\n case 'Pending':\r\n case 'P':\r\n return (\r\n Pending}\r\n >\r\n \r\n P\r\n \r\n \r\n );\r\n case 'Sold':\r\n case 'S':\r\n return (\r\n Sold}\r\n >\r\n \r\n S\r\n \r\n \r\n );\r\n case 'Terminated':\r\n case 'T':\r\n return (\r\n Terminated}\r\n >\r\n \r\n T\r\n \r\n \r\n );\r\n case 'Withdrawn':\r\n case 'W':\r\n return (\r\n Withdrawn}\r\n >\r\n \r\n W\r\n \r\n \r\n );\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nStatusBadges.propTypes = {\r\n status: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default StatusBadges;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { listingDict } from '@redux/constants/GeneralConstants';\r\n\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst ListingTypeIcons = ({ type }) => (\r\n {listingDict[type.toString().toLowerCase()]}}\r\n >\r\n {(() => {\r\n switch (type) {\r\n case 'RES':\r\n return ;\r\n case 'MULT':\r\n return ;\r\n case 'RNT':\r\n return ;\r\n case 'COM':\r\n return ;\r\n case 'FARM':\r\n return ;\r\n case 'MOB':\r\n return ;\r\n case 'LAND':\r\n return ;\r\n default:\r\n return '';\r\n }\r\n })()}\r\n \r\n);\r\n\r\nListingTypeIcons.propTypes = {\r\n type: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default ListingTypeIcons;\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-unused-vars */\r\n/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, {\r\n useEffect, useMemo, useRef, useState,\r\n} from 'react';\r\n\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport { Formik, Form } from 'formik';\r\nimport { useRollbar, useRollbarPerson } from '@rollbar/react';\r\n\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport LinearProgress from '@mui/material/LinearProgress';\r\n\r\nimport apiService from '@services/apiService';\r\n\r\nimport {\r\n formSubmitted,\r\n loadComboBoxOptions,\r\n setValidationResult,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { getCurrentAgent } from '@redux/modules/agent';\r\n\r\nimport {\r\n checkForAutoSave,\r\n loadAutoSave,\r\n removeAutoSave,\r\n saveAutoSave,\r\n updateAutoSave,\r\n loadTaxAutoPopSelected,\r\n} from '@redux/modules/listing';\r\n\r\nimport { getUserName, getUserMlsId } from '@redux/selectors/UserSelector';\r\n\r\nimport {\r\n getSortedErrors,\r\n selectComboValueDict,\r\n selectFormDefinition,\r\n selectEditPageName,\r\n selectInitialValues,\r\n selectLookupNames,\r\n selectListingRule,\r\n selectListingType,\r\n selectVisiblePageStructure,\r\n selectAllFields,\r\n selectListingCode,\r\n getOrderedSections,\r\n selectErrorsPerSection,\r\n selectRequiredPerSection,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport {\r\n selectCurrentListing,\r\n selectEditListingHeaderInfo,\r\n selectListingStdStatus,\r\n selectListingStdStatusVerb,\r\n selectUploadedSupplements,\r\n selectListingSelectedDoors,\r\n selectListingSelectedHistory,\r\n selectListingSelectedOpenHouses,\r\n selectListingSelectedParcels,\r\n selectListingSelectedRooms,\r\n selectListingSelectedUnits,\r\n selectRepeatableSectionCount,\r\n selectSectionsPerRepeatableSection,\r\n} from '@redux/selectors/ListingSelector';\r\n\r\nimport {\r\n selectListingFormData,\r\n} from '@redux/selectors/FormDataSelector';\r\n\r\nimport {\r\n selectPhotoMetaCollection,\r\n selectPhotoQueueLength,\r\n} from '@redux/selectors/PhotoSelector';\r\n\r\nimport { listingDict } from '@redux/constants/GeneralConstants';\r\n\r\nimport AgentLookupModal from '@components/form/formComponents/inputGroups/agentLookup/AgentLookupModal';\r\nimport AutoPopModal from '@components/taxAutoPop/AutoPopModal';\r\nimport AutoSave from '@components/form/formHelpers/AutoSave';\r\nimport Badge from '@components/smartAdminUI/Badge';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormSearchBar from '@components/form/formComponents/formSearch/FormSearchBar';\r\nimport FieldValidator from '@components/form/formHelpers/FieldValidator';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport LayoutGroupWrapper from '@components/form/formComponents/inputGroups/LayoutGroupWrapper';\r\nimport RepeatableRoom from '@components/form/formComponents/repeatableRoom/RepeatableRoom';\r\nimport SaveAsIncomplete from '@components/form/formHelpers/SaveAsIncomplete';\r\nimport FormikFieldUpdater from '@components/form/formHelpers/FormikFieldUpdater';\r\nimport OnSubmitValidationError from '@components/form/formikComponents/OnSubmitValidationError';\r\nimport FormLoader from '@components/loaders/FormLoader';\r\nimport SectionNav from '@components/smartAdminUI/SectionNav';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport ListingTypeIcons from '@components/table/icons/ListingTypeIcons';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useIsMounted from '@hooks/useIsMounted';\r\nimport { isUndefined, isNull } from 'lodash';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst CreateListingsForm = () => {\r\n let listingRules;\r\n const dispatch = useDispatch();\r\n const isMounted = useIsMounted();\r\n const formRef = useRef();\r\n const history = useHistory(); // use for redirection\r\n const location = useLocation();\r\n const errPerSection = useSelector(selectErrorsPerSection);\r\n const orderedSections = useSelector(getOrderedSections);\r\n const reqPerSection = useSelector(selectRequiredPerSection);\r\n const agentGroupType = useSelector(state => state.agent.agentGroupType);\r\n const agentLookup = useSelector(state => state.agent.agentLookup);\r\n const sortedErrors = useSelector(getSortedErrors);\r\n const comboSetValueDict = useSelector(selectComboValueDict);\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const currCoords = useSelector(state => state.listing.listingCoordinates);\r\n const currLocation = useMemo(() => location?.pathname, [location]);\r\n const currListing = useSelector(selectCurrentListing); // holds data related to the edit listing OR the original listing (on copy operation)\r\n const definitionType = useSelector(state => state.formGeneration.definitionType);\r\n const editPageName = useSelector(selectEditPageName);\r\n const formIsLoading = useSelector(state => state.formGeneration.formIsLoading);\r\n const initialValues = useSelector(selectInitialValues);\r\n const listingCode = useSelector(selectListingCode); // Get listing code\r\n const listingRule = useSelector(selectListingRule);\r\n const listingType = useSelector(selectListingType);\r\n const lookUpNames = useSelector(selectLookupNames);\r\n const memoizedInitialValues = useMemo(() => initialValues, [initialValues]);\r\n const operationType = useSelector(state => state.formGeneration.operationType);\r\n const isCopyOperation = useSelector(state => state.formGeneration.isCopyOperation);\r\n const previousOperationType = usePrevious(operationType);\r\n const pageStructure = useSelector(selectVisiblePageStructure);\r\n const allFields = useSelector(selectAllFields);\r\n const selectedListing = useSelector(state => state.listing.selectedListing);\r\n const listingFormData = useSelector(selectListingFormData);\r\n const standardStatus = useSelector(selectListingStdStatus);\r\n const standardStatusVerb = useSelector(selectListingStdStatusVerb);\r\n const uploadedImages = useSelector(selectPhotoMetaCollection);\r\n const photoQueueLength = useSelector(selectPhotoQueueLength);\r\n const editListingInfo = useSelector(selectEditListingHeaderInfo);\r\n const repeatableSectionCount = useSelector(selectRepeatableSectionCount);\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const uploadedSupplements = useSelector(selectUploadedSupplements);\r\n const roomsPayload = useSelector(selectListingSelectedRooms);\r\n const openHousesPayload = useSelector(selectListingSelectedOpenHouses);\r\n const parcelsPayload = useSelector(selectListingSelectedParcels);\r\n const unitsPayload = useSelector(selectListingSelectedUnits);\r\n const doorsPayload = useSelector(selectListingSelectedDoors);\r\n const historyPayload = useSelector(selectListingSelectedHistory);\r\n const autoSaveCheckLoading = useSelector(state => state.listing.autoSaveCheckLoading);\r\n const comboLoading = useSelector(state => state.formGeneration.comboIsLoading);\r\n const dataLoading = useSelector(state => state.listing.selectLoading);\r\n const formLoading = useSelector(state => state.formGeneration.isLoading);\r\n\r\n const [clearForm, setClearForm] = useState(false); // resets TAP form after closing\r\n const [currListingType, setCurrListingType] = useState(listingType);\r\n const [isFormSubmitting, setIsFormSubmitting] = useState(false);\r\n const [isFormSubmitted, setIsFormSubmitted] = useState(false);\r\n const [isFormSavingAsIncomplete, setIsFormSavingAsIncomplete] = useState(false);\r\n const [isFormSavedAsIncomplete, setIsFormSavedAsIncomplete] = useState(false);\r\n const [newComboValue, setNewComboValue] = useState({});\r\n const [runValidation, setRunValidation] = useState(false);\r\n const [validateFieldName, setValidateFieldName] = useState('');\r\n const [validateFlag, setValidateFlag] = useState(false);\r\n const [validationValue, setValidationValue] = useState('');\r\n const [roomsHaveChanged, setRoomsHaveChanged] = useState(false);\r\n const [photosHaveChanged, setPhotosHaveChanged] = useState(false);\r\n const [supplementsHaveChanged, setSupplementsHaveChanged] = useState(false);\r\n const [openHousesHaveChanged, setOpenHousesHaveChanged] = useState(false);\r\n const [loadingStatus, setLoadingStatus] = useState(false);\r\n const [progress, setProgress] = useState(((1 / orderedSections.length) * 100));\r\n const [activeSection, setActiveSection] = useState(1);\r\n const [incompleteButtonText, setIncompleteButtonText] = useState('Save Incomplete');\r\n const [autoSaveWorking, setAutoSaveWorking] = useState(true);\r\n const [preTaxAutoPopListing, setPreTaxAutoPopListing] = useState(null);\r\n const [wasTaxAutoPopped, setWasTaxAutoPopped] = useState(false);\r\n\r\n const autoSaveData = useSelector(state => state.listing.autoSaveData);\r\n const autoSaveExists = useSelector(state => state.listing.autoSaveExists);\r\n\r\n const isCreating = useMemo(() => location?.pathname.includes('create'), [location]);\r\n const isEditing = useMemo(() => location?.pathname.includes('edit'), [location]);\r\n const gaFormSubmitEventTracker = GAEventTracking('Error Listing Form Submit');\r\n const gaAutoSaveEventTracker = GAEventTracking('Error Listing Auto Save');\r\n const gaSaveIncompleteEventTracker = GAEventTracking('Error Listing Save Incomplete');\r\n const username = useSelector(getUserName);\r\n const userMLSID = useSelector(getUserMlsId);\r\n\r\n const rollbar = useRollbar();\r\n useRollbarPerson({ id: userMLSID, username });\r\n\r\n const timedToast = Swal.mixin({\r\n toast: true,\r\n position: 'top-end',\r\n showConfirmButton: false,\r\n timerProgressBar: true,\r\n });\r\n\r\n const photosQueued = useMemo(() => {\r\n if (photoQueueLength > 0) return true;\r\n return false;\r\n }, [photoQueueLength]);\r\n\r\n const comboBubbleWrap = { setNewComboValue };\r\n\r\n const autoSaveCriteria = useMemo(() => {\r\n if (operationType === 'edit' && currListing?.UniqueID) {\r\n // Look up using ResourceUnique.\r\n return { ResourceUnique: currListing.UniqueID };\r\n }\r\n if (operationType === 'create' && autoSaveData?.length) {\r\n // Look up using AutoSaveKey.\r\n const autoSaveRecord = autoSaveData.find(record => !record.ListingId && !record.ParentID && record.ResourceName.toLowerCase() === 'listing' && record.FormName.toLowerCase() === listingCode.toLowerCase() && !record.IsDeleted);\r\n if (autoSaveRecord) {\r\n return { AutoSaveKey: autoSaveRecord.UniqueID };\r\n }\r\n }\r\n return null;\r\n }, [currListing, autoSaveData]);\r\n\r\n const rowLockEntity = useMemo(() => ({ type: 'listing', id: operationType === 'edit' ? currListing?.UniqueID : null }), [currListing]);\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n checked,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n rowLockingEnabled,\r\n } = useRowLock({ rowLockEntity, isEditOperation: operationType === 'edit', enableRowLocking: operationType === 'edit' });\r\n\r\n const lockReleasedByCurrentUser = useRef(false);\r\n\r\n if (listingRule) listingRules = window.FlexRule.RuntimeEngine.fromJavaScript('OnePlatform', listingRule);\r\n\r\n const autoSaveEnabled = useRef(false);\r\n const [showAvailableAutoSave, setShowAvailableAutoSave] = useState(false);\r\n const [isAvailableAutoSaveShown, setIsAvailableAutoSaveShown] = useState(false);\r\n const [isFormAutoSaving, setIsFormAutoSaving] = useState(false);\r\n\r\n const loadAutoSaveData = () => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Auto Save Data...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(loadAutoSave(autoSaveCriteria));\r\n };\r\n\r\n const removeAutoSaveData = () => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Discarding Auto Save Data...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(removeAutoSave(autoSaveCriteria));\r\n };\r\n\r\n useEffect(() => {\r\n if (!currentFormDefinition?.length) return;\r\n\r\n // API call to get all combo box /I'd like to just be able to submit the listingType right here\r\n // prevent load combos call when there are no lookup names provided\r\n if (lookUpNames?.lookupNames?.length) {\r\n dispatch(loadComboBoxOptions(lookUpNames, listingCode));\r\n }\r\n\r\n // agent userfill should only occur when creating a listing\r\n if (operationType === 'create') {\r\n dispatch(getCurrentAgent()); // userfill\r\n dispatch(checkForAutoSave(autoSaveCriteria));\r\n setShowAvailableAutoSave(true);\r\n }\r\n\r\n formRef?.current?.validateForm();\r\n }, [currentFormDefinition]);\r\n\r\n // enables/disables autoSave\r\n useEffect(() => {\r\n autoSaveEnabled.current = operationType === 'create' || (standardStatus === 'I' && !listingCode?.includes('chg'));\r\n }, [operationType, standardStatus, listingCode]);\r\n\r\n // decision to display autoSave modal.\r\n useEffect(() => {\r\n if (operationType === 'create' && autoSaveExists && autoSaveCriteria && showAvailableAutoSave && !isAvailableAutoSaveShown) {\r\n setIsAvailableAutoSaveShown(true);\r\n setShowAvailableAutoSave(false);\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Auto Save Found',\r\n text: 'There is Auto Save data available, would you like to use it?',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-success)',\r\n confirmButtonText: 'Yes',\r\n denyButtonText: 'No',\r\n showDenyButton: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn-success btn-lg mr-2 swal-question-listing-autosave-yes',\r\n denyButton: 'btn-primary btn-lg swal-question-listing-autosave-no',\r\n },\r\n showClass: {\r\n popup: 'slide-in-elliptic-right-bck',\r\n },\r\n }).then(result => {\r\n if (result.isConfirmed) {\r\n loadAutoSaveData();\r\n setIsAvailableAutoSaveShown(false);\r\n } else {\r\n removeAutoSaveData();\r\n setIsAvailableAutoSaveShown(false);\r\n }\r\n });\r\n }\r\n }, [autoSaveExists, autoSaveCriteria]);\r\n\r\n useEffect(() => {\r\n if (autoSaveCheckLoading || comboLoading || formLoading || dataLoading) {\r\n setLoadingStatus(true);\r\n } else {\r\n setLoadingStatus(false);\r\n }\r\n }, [autoSaveCheckLoading, comboLoading, formLoading, dataLoading]);\r\n\r\n /*\r\n If there is a listing type, and it is different than the one in our state variable,\r\n then we do the following:\r\n 1) Update our state variable\r\n 2) Dispatch the call that retrieves the dropdown/comboBox options\r\n */\r\n useEffect(() => {\r\n if (listingType && listingType !== currListingType) {\r\n setCurrListingType(listingType); // Updates the state variable we use for comparison\r\n if (lookUpNames?.lookupNames?.length) {\r\n dispatch(loadComboBoxOptions(lookUpNames, listingCode)); // Gets the comboBoxOptions for the new form\r\n }\r\n\r\n if (operationType === 'create') {\r\n dispatch(getCurrentAgent()); // userfill\r\n dispatch(checkForAutoSave(autoSaveCriteria));\r\n setShowAvailableAutoSave(true);\r\n }\r\n }\r\n }, [listingType, operationType]);\r\n\r\n useEffect(() => {\r\n // prevent the execution of this effect when going from edit mode to create mode;\r\n // current component will not be un-mounted yet when [operationType] gets updated in redux.\r\n if (previousOperationType === 'edit' && operationType === 'create') return;\r\n\r\n if (operationType === 'create' && listingType === currListingType && !isCopyOperation) { // exception case when going from edit to create and the same listing type\r\n formRef?.current?.resetForm();\r\n setRunValidation(true);\r\n }\r\n }, [currListingType, operationType]);\r\n\r\n // Determines panel header text depending on form 'create' and 'edit' actions\r\n const getPanelString = useMemo(() => {\r\n let panelString;\r\n let listing;\r\n\r\n const listingCodeForPanelString = location.search.split('=')[1];\r\n const listingTypeForPanelString = (\r\n <>\r\n \r\n {listingDict[listingCodeForPanelString]}\r\n \r\n );\r\n\r\n if (listingTypeForPanelString && (isCreating && currLocation.includes((listingCodeForPanelString).toLowerCase()))) {\r\n panelString = listingTypeForPanelString;\r\n } else if (listingTypeForPanelString && !isNull(currListing) && !isNull(selectedListing) && (isEditing && currLocation.includes((listingCodeForPanelString).toLowerCase()))) {\r\n listing = isUndefined(currListing) || isNull(currListing) ? selectedListing.listing : currListing;\r\n panelString = (\r\n <>\r\n \r\n \r\n \r\n {listing?.ListingId}\r\n \r\n );\r\n } else if (listingTypeForPanelString && !isNull(selectedListing) && (isEditing && currLocation.includes('chg'))) {\r\n listing = selectedListing.listing;\r\n panelString = (\r\n <>\r\n { standardStatusVerb && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n {listing?.ListingId}\r\n \r\n );\r\n } else {\r\n panelString = ;\r\n }\r\n return panelString;\r\n }, [currLocation, listingType, listingCode, isCreating, isEditing, editPageName, editListingInfo, currListing, selectedListing]);\r\n\r\n useEffect(() => {\r\n if (Object.keys(newComboValue).length > 0) {\r\n const newComboKeys = Object.keys(newComboValue);\r\n if (comboSetValueDict) {\r\n if (newComboKeys.length > 0) {\r\n const { fieldName, newValue } = newComboValue;\r\n const comboMutator = comboSetValueDict[fieldName];\r\n comboMutator(newValue);\r\n }\r\n }\r\n }\r\n }, [newComboValue]);\r\n\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n const valueKeys = Object.keys(values);\r\n\r\n valueKeys.forEach(key => {\r\n if (values[key] && key === 'UniqueID') {\r\n whereClause.where.clause.push({\r\n Name: key,\r\n Value: values[key],\r\n });\r\n }\r\n });\r\n\r\n return whereClause;\r\n };\r\n\r\n const getDeltas = (formikState, unmodifiedEntry) => {\r\n const deltas = {};\r\n if (!formikState) return deltas;\r\n Object.entries(unmodifiedEntry).map(([key, value]) => {\r\n if (key in formikState && formikState?.[key] !== value) {\r\n deltas[key] = formikState?.[key];\r\n }\r\n return null;\r\n });\r\n return deltas;\r\n };\r\n\r\n // formik, // photoMeta.flexMeta\r\n // this should really just be, has sortOrder or IsDeleted changed.\r\n // URL should not change.\r\n const getPhotoDeltas = (formikPhoto, unmodifiedEntry) => {\r\n const deltas = {};\r\n if (!formikPhoto) return deltas;\r\n if (formikPhoto.IsDeleted !== unmodifiedEntry.flexMeta.IsDeleted) deltas.IsDeleted = formikPhoto.IsDeleted;\r\n if (formikPhoto.Description !== unmodifiedEntry.flexMeta.Description) deltas.Description = formikPhoto.Description;\r\n if (formikPhoto.SortOrder !== unmodifiedEntry.flexMeta.SortOrder) deltas.SortOrder = formikPhoto.SortOrder;\r\n return deltas;\r\n };\r\n\r\n /*\r\n I chose to keep UI state (formik) and file upload state (redux) separate, then combine on form validation.\r\n This should be more readable and perform better than storing all state in Formik. Consider this approach in refactor.\r\n */\r\n const mergeSupplementData = (uiState, uploadList = [], isAutoSave = false) => {\r\n const mergedSupplements = uploadList.map((file, index) => {\r\n if (!file) return [];\r\n const deltas = getDeltas(uiState?.[file.uid], file);\r\n if (file.UniqueID) {\r\n return {\r\n ...(isAutoSave ? file : {}),\r\n ...deltas,\r\n UniqueID: file.UniqueID,\r\n IsDeleted: file.IsDeleted,\r\n SortOrder: index + 1,\r\n };\r\n }\r\n return {\r\n // FileName: file.displayName, currently not used by BE/FR\r\n ...file,\r\n ...uiState?.[file.uid], // SupplementType and Description\r\n };\r\n });\r\n return mergedSupplements;\r\n };\r\n\r\n // uploadList is now photoMetaCollection\r\n // formikState submitted to autoSave as formikStateObject mimics submit configuration\r\n // !IsError && !IsUploaded\r\n const mergePhotoData = (formikState, photoMetaCollection = [], isAutoSave = false) => {\r\n if (!photoMetaCollection) return [];\r\n let deltasExist = false;\r\n const mergedPhotos = photoMetaCollection.map(image => {\r\n const isError = image.IsError;\r\n const isUploaded = image.IsUploaded;\r\n if (image.flexMeta?.UniqueID) { // image exists in flexRule DB\r\n // Handle existing photo.\r\n const { SortOrder, IsDeleted } = formikState[image.key];\r\n if (IsDeleted) {\r\n // Mark photo as deleted.\r\n return {\r\n ...(isAutoSave ? formikState[image.key] : {}),\r\n UniqueID: image.flexMeta.UniqueID,\r\n SortOrder: image.SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n if (isError && !IsDeleted) {\r\n // do not calculate deltas\r\n return {\r\n ...(isAutoSave ? formikState[image.key] : {}),\r\n UniqueID: image.flexMeta.UniqueID,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n // Update photo.\r\n //\r\n const deltas = getPhotoDeltas(formikState[image.key], image);\r\n if (Object.keys(deltas).length !== 0) deltasExist = true;\r\n return {\r\n ...(isAutoSave ? formikState[image.key] : {}),\r\n SortOrder,\r\n IsDeleted,\r\n ...deltas,\r\n UniqueID: image.flexMeta.UniqueID,\r\n };\r\n }\r\n // Handle new photo.\r\n const {\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n } = formikState[image.key];\r\n if (isError) return null;\r\n if (isAutoSave && !isUploaded) return null;\r\n\r\n return {\r\n ...(isAutoSave ? formikState[image.key] : {}),\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }).filter(photo => photo !== null);\r\n // calculates sort order for live photos, adjusts sort order in case of errored photos ejected from payload\r\n // eslint-disable-next-line no-return-assign\r\n mergedPhotos.filter(p => !p.IsDeleted).sort((p1, p2) => p1.SortOrder - p2.SortOrder).forEach((photo, index) => photo.SortOrder = index + 1);\r\n return [mergedPhotos, deltasExist];\r\n };\r\n\r\n const mergeFormikData = (formikState, uploadList, isAutoSave = false, sectionName) => {\r\n let mergedData = [];\r\n if (uploadList) {\r\n mergedData = uploadList.flatMap(entry => {\r\n if (!entry) return [];\r\n let entryKey = '';\r\n Object.entries(formikState).map(([key, value]) => {\r\n if (entry.UniqueID && entry.UniqueID === value.UniqueID) entryKey = key;\r\n if (entry.uid) entryKey = entry.uid;\r\n return null;\r\n });\r\n const formikValues = formikState[entryKey];\r\n if (!formikValues) return [];\r\n const deltas = getDeltas(formikValues, entry);\r\n if (entry.UniqueID) {\r\n return {\r\n ...(isAutoSave ? entry : {}),\r\n ...deltas,\r\n UniqueID: entry.UniqueID,\r\n SortOrder: formikValues.SortOrder,\r\n IsDeleted: formikValues.IsDeleted,\r\n };\r\n }\r\n // this is an else, the linter removes the else {}\r\n const newEntry = { ...formikValues };\r\n if (newEntry.IsDeleted) return [];\r\n // delete newEntry.IsDeleted;\r\n delete newEntry.IsLive;\r\n return newEntry;\r\n // end of else\r\n });\r\n }\r\n return mergedData;\r\n };\r\n\r\n const buildRepeatables = values => {\r\n const submitValues = {};\r\n\r\n // Photos and Supplements are being handled separately.\r\n\r\n if (values.Rooms) {\r\n const entries = [];\r\n Object.entries(values.Rooms).map(([keyField]) => {\r\n const fieldExists = roomsPayload.find(room => room.UniqueID && room.UniqueID === values.Rooms[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.Rooms[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.Rooms = entries;\r\n }\r\n\r\n if (values.OpenHouses) {\r\n const entries = [];\r\n Object.entries(values.OpenHouses).map(([keyField]) => {\r\n const fieldExists = openHousesPayload.find(openHouse => openHouse.UniqueID && openHouse.UniqueID === values.OpenHouses[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.OpenHouses[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.OpenHouses = entries;\r\n }\r\n\r\n if (values.Doors) {\r\n const entries = [];\r\n Object.entries(values.Doors).map(([keyField]) => {\r\n const fieldExists = doorsPayload.find(door => door.UniqueID && door.UniqueID === values.Doors[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.Doors[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.Doors = entries;\r\n }\r\n\r\n if (values.Parcels) {\r\n const entries = [];\r\n Object.entries(values.Parcels).map(([keyField]) => {\r\n const fieldExists = parcelsPayload.find(parcel => parcel.UniqueID && parcel.UniqueID === values.Parcels[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.Parcels[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.Parcels = entries;\r\n }\r\n\r\n if (values.Units) {\r\n const entries = [];\r\n Object.entries(values.Units).map(([keyField]) => {\r\n const fieldExists = unitsPayload.find(unit => unit.UniqueID && unit.UniqueID === values.Units[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.Units[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.Units = entries;\r\n }\r\n\r\n if (values.History) {\r\n const entries = [];\r\n Object.entries(values.History).map(([keyField]) => {\r\n const fieldExists = historyPayload.find(hist => hist.UniqueID && hist.UniqueID === values.History[keyField]?.UniqueID);\r\n if (fieldExists === undefined) return entries.push({ ...values.History[keyField] });\r\n if (fieldExists) return entries.push({ ...fieldExists });\r\n return null;\r\n });\r\n submitValues.History = entries;\r\n }\r\n\r\n return { ...submitValues };\r\n };\r\n\r\n const buildCreateValues = values => {\r\n const submitValues = {};\r\n Object.entries(values).map(([key, value]) => {\r\n if (!isEmpty(value)) {\r\n submitValues[key] = value;\r\n } else if (typeof value === 'number') { // for bit fields\r\n submitValues[key] = value;\r\n }\r\n return null;\r\n });\r\n const repeatableValues = buildRepeatables(values);\r\n return { ...submitValues, ...repeatableValues };\r\n };\r\n\r\n const convertDateToUTC = date => new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\r\n const getDateValue = value => {\r\n let formattedDate;\r\n if (value) {\r\n const dateUTC = convertDateToUTC(new Date(value));\r\n const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(dateUTC);\r\n const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(dateUTC);\r\n const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(dateUTC);\r\n formattedDate = `${year}-${month}-${day}`;\r\n }\r\n return formattedDate ?? '';\r\n };\r\n\r\n const getBitValue = value => {\r\n let bitValue;\r\n if (value != null && value !== '') {\r\n if (typeof value === 'string') {\r\n bitValue = value === 'true' ? 1 : 0;\r\n } else if (typeof value === 'boolean') {\r\n bitValue = value === true ? 1 : 0;\r\n } else if (typeof value === 'number') {\r\n bitValue = value;\r\n }\r\n }\r\n return bitValue ?? '';\r\n };\r\n\r\n const getStringValue = value => value ?? '';\r\n\r\n const getNumericValue = value => (value != null && value !== '' ? Number(value) : '');\r\n\r\n const getComboBoxValue = value => value ?? '';\r\n\r\n // TODO: move to utility module (used by listing/agent/office)\r\n const valueHasChanged = (fieldName, oldValue, newValue) => {\r\n const inputType = allFields[fieldName]?.InputType;\r\n const dataType = allFields[fieldName]?.DataType;\r\n switch (inputType) {\r\n case 'TextInput':\r\n if (dataType === 'datetime' || dataType === 'date') {\r\n return (getDateValue(oldValue) !== getDateValue(newValue));\r\n }\r\n if (dataType === 'bit') {\r\n return (getBitValue(oldValue) !== getBitValue(newValue));\r\n }\r\n if (dataType === 'string') {\r\n return (getStringValue(oldValue) !== getStringValue(newValue));\r\n }\r\n if (dataType === 'numeric' || dataType === 'decimal' || dataType === 'integer') {\r\n return (getNumericValue(oldValue) !== getNumericValue(newValue));\r\n }\r\n return (oldValue !== newValue);\r\n\r\n case 'ComboBox':\r\n return (getComboBoxValue(oldValue) !== getComboBoxValue(newValue));\r\n\r\n default:\r\n return (oldValue !== newValue);\r\n }\r\n };\r\n\r\n // finding deltas and adding\r\n const buildUpdateValues = values => {\r\n const submitValues = {};\r\n const oldValues = preTaxAutoPopListing ?? selectedListing.listing;\r\n\r\n Object.entries(values).forEach(([key, value]) => {\r\n if (Object.keys(oldValues).includes(key)) {\r\n if (valueHasChanged(key, oldValues[key], value)) {\r\n submitValues[key] = value;\r\n }\r\n } else if ((!isEmpty(value) || typeof value === 'number')) {\r\n submitValues[key] = value;\r\n }\r\n });\r\n\r\n const repeatableValues = buildRepeatables(values);\r\n return { ...submitValues, ...repeatableValues };\r\n };\r\n\r\n const buildAutoSaveValues = values => {\r\n const submitValues = {};\r\n Object.entries(values).map(([key, value]) => {\r\n if (allFields[key]?.DataType === 'bit' && value !== null && value !== '') {\r\n submitValues[key] = Boolean(value);\r\n } else if (!isEmpty(value) || typeof value === 'number') {\r\n submitValues[key] = value;\r\n }\r\n return null;\r\n });\r\n const repeatableValues = buildRepeatables(values);\r\n return { ...submitValues, ...repeatableValues };\r\n };\r\n\r\n const generatePostBody = (values, isAutoSave = false) => {\r\n let submitValues = {};\r\n let autoSaveValues = {};\r\n let nonAutoSaveValues = {};\r\n\r\n if (isAutoSave) {\r\n autoSaveValues = buildAutoSaveValues(values);\r\n } else {\r\n nonAutoSaveValues = operationType === 'edit'\r\n ? buildUpdateValues(values)\r\n : buildCreateValues(values);\r\n autoSaveValues = autoSaveExists ? buildAutoSaveValues(values) : {};\r\n }\r\n submitValues = { ...nonAutoSaveValues, ...autoSaveValues };\r\n\r\n const {\r\n Rooms, OpenHouses, Doors, Parcels, Units, History, ...listing\r\n } = submitValues;\r\n const supplementsGroup = mergeSupplementData(values.Supplements, uploadedSupplements, isAutoSave);\r\n const [photosGroup, photosChanged] = mergePhotoData(values.Photos, uploadedImages, isAutoSave);\r\n const roomsGroup = mergeFormikData(values.Rooms, Rooms, isAutoSave, 'Rooms');\r\n const openHouseGroup = mergeFormikData(values?.OpenHouses, OpenHouses, isAutoSave);\r\n const doorsGroup = mergeFormikData(values?.Doors, Doors, isAutoSave);\r\n const unitsGroup = mergeFormikData(values?.Units, Units, isAutoSave);\r\n const parcelsGroup = mergeFormikData(values?.Parcels, Parcels, isAutoSave);\r\n const historyGroup = mergeFormikData(values?.History, History, isAutoSave);\r\n // submitted listing type is used as task edit forms don't load a complete form definition and need to retrieve the property type elsewhere\r\n const submittedPropertyType = selectedListing?.listing?.PropertyType ?? listingType;\r\n const uniqueId = selectedListing?.listing ? { UniqueID: selectedListing.listing.UniqueID } : '';\r\n const postBody = {\r\n formName: listingCode,\r\n data: {\r\n currentStandardStatus: selectedListing?.listing?.StandardStatus ?? 'I',\r\n propertyType: submittedPropertyType,\r\n listing: isAutoSave\r\n ? {\r\n ...uniqueId,\r\n ...listing,\r\n }\r\n : {\r\n [submittedPropertyType]: {\r\n ...uniqueId,\r\n ...listing,\r\n },\r\n },\r\n roomsHaveChanged,\r\n photosHaveChanged,\r\n supplementsHaveChanged,\r\n openHousesHaveChanged,\r\n photos: photosGroup,\r\n rooms: roomsGroup,\r\n supplements: supplementsGroup,\r\n openHouses: openHouseGroup,\r\n doors: doorsGroup,\r\n units: unitsGroup,\r\n parcels: parcelsGroup,\r\n history: historyGroup,\r\n },\r\n };\r\n return postBody;\r\n };\r\n\r\n const handleAutoSave = async () => {\r\n if (!(operationType === 'create') && !(operationType === 'edit')) return;\r\n if (!autoSaveEnabled.current) return;\r\n if (isAvailableAutoSaveShown) return;\r\n if (autoSaveCheckLoading) return;\r\n if (isFormSubmitting || isFormSavingAsIncomplete || isFormAutoSaving) return;\r\n if (isFormSubmitted || isFormSavedAsIncomplete) return;\r\n\r\n setIsFormAutoSaving(true);\r\n\r\n const { current: currForm } = formRef;\r\n const autoSaveBody = generatePostBody(currForm?.values, true);\r\n\r\n autoSaveBody.data.photos = autoSaveBody?.data?.photos ?? [];\r\n let saved = false;\r\n try {\r\n if (!autoSaveBody.data?.listing?.StandardStatus) autoSaveBody.data.listing.StandardStatus = 'I';\r\n if (operationType === 'edit') {\r\n const saveData = {\r\n FormName: autoSaveBody.formName,\r\n ResourceData: autoSaveBody.data,\r\n ResourceId: currListing.ListingId,\r\n ResourceUnique: currListing.UniqueID,\r\n };\r\n saved = autoSaveExists && autoSaveCriteria\r\n ? await dispatch(updateAutoSave(saveData))\r\n : await dispatch(saveAutoSave(saveData));\r\n } else if (operationType === 'create') {\r\n const saveData = {\r\n FormName: autoSaveBody.formName,\r\n ResourceData: autoSaveBody.data,\r\n AutoSaveKey: autoSaveCriteria?.AutoSaveKey,\r\n };\r\n saved = autoSaveExists && autoSaveCriteria\r\n ? await dispatch(updateAutoSave(saveData))\r\n : await dispatch(saveAutoSave(saveData));\r\n\r\n if (saved && !autoSaveCriteria) {\r\n dispatch(checkForAutoSave());\r\n }\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Listing handleAutoSave', err, autoSaveBody);\r\n }\r\n\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n setIsFormAutoSaving(false);\r\n\r\n if (saved) {\r\n setShowAvailableAutoSave(false);\r\n setIsAvailableAutoSaveShown(false);\r\n setAutoSaveWorking(true);\r\n } else {\r\n setAutoSaveWorking(false);\r\n }\r\n\r\n if (!autoSaveWorking) {\r\n if (operationType === 'edit') gaAutoSaveEventTracker(`Edit - ${currListing.ListingId}`, `${username}`);\r\n if (operationType === 'create') gaAutoSaveEventTracker('Create', `${username}`);\r\n rollbar.error('Error: Listing Auto Save', 'Auto Save Failed', autoSaveBody);\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Auto Save Failed',\r\n text: 'Your data could not be Auto Saved at this time, please try to Save As Incomplete.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-autosave',\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = async (values, { setSubmitting }) => {\r\n if (!(operationType === 'create') && !(operationType === 'edit')) return;\r\n if (isFormSubmitting || isFormSavingAsIncomplete || isFormAutoSaving) return;\r\n if (isFormSubmitted || isFormSavedAsIncomplete) return;\r\n\r\n // Integration pending API refactor: ideally we will leave data scrubbing, building where clauses, etc. to the BE\r\n const postBody = generatePostBody(values);\r\n let listingId;\r\n\r\n try {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'question',\r\n iconColor: 'var(--theme-warning)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-listing-submit-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-listing-submit-no',\r\n },\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n title: 'Submit Listing?',\r\n text: 'Your changes will be reflected in Matrix™ within 10-15 minutes and on Realtor.ca® within 10-30 minutes.',\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n setIsFormSubmitting(true);\r\n\r\n if (operationType === 'create') {\r\n const result = await apiService.Listing.CreateListingV2(postBody);\r\n listingId = result?.Data?.ListingId;\r\n } else if (operationType === 'edit') {\r\n listingId = currListing?.ListingId;\r\n const whereClause = currListing ? buildWhereClause(currListing) : null;\r\n await apiService.Listing.UpdateListing({\r\n ...postBody,\r\n ...whereClause, // BE requires where clause in EDIT operation (but not CREATE)\r\n });\r\n }\r\n dispatch(formSubmitted());\r\n if (autoSaveExists && autoSaveCriteria) {\r\n removeAutoSaveData();\r\n }\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n\r\n setIsFormSubmitting(false);\r\n setSubmitting(false);\r\n setIsFormSubmitted(true);\r\n\r\n const message = listingCode === 'chgDel' ? 'Listing Deleted' : 'Listing Submitted';\r\n const locationString = listingCode === 'chgDel' ? '/' : `/listings/view?ListingID=${listingId}`;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: message,\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n }).then(() => {\r\n history.push(locationString);\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n setIsFormSubmitting(false);\r\n setSubmitting(false);\r\n setIsFormSubmitted(false);\r\n const message = listingCode === 'chgDel' ? 'Listing Not Deleted' : 'Listing Not Submitted';\r\n const messageText = listingCode === 'chgDel' ? 'Listing could not be deleted' : 'Listing could not be submitted';\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: message,\r\n text: `${messageText} at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-submit',\r\n },\r\n });\r\n if (listingCode === 'chgDel') {\r\n gaFormSubmitEventTracker(`Change to Delete - ${listingId}`, `${username}`);\r\n rollbar.error('Error: Listing Change to Delete', error, postBody);\r\n } else {\r\n if (operationType === 'create') gaFormSubmitEventTracker(`Save Create - ${listingId}`, `${username}`);\r\n if (operationType === 'edit') gaFormSubmitEventTracker(`Save Edit - ${listingId}`, `${username}`);\r\n rollbar.error('Error: Listing Form Submit', error, postBody);\r\n }\r\n }\r\n };\r\n\r\n const handleSaveIncomplete = async () => {\r\n if (!(operationType === 'create') && !(operationType === 'edit')) return;\r\n if (isFormSubmitting || isFormSavingAsIncomplete || isFormAutoSaving) return;\r\n if (isFormSubmitted || isFormSavedAsIncomplete) return;\r\n\r\n const { current: currForm } = formRef;\r\n const postBody = generatePostBody(currForm?.values);\r\n let listingId;\r\n\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'question',\r\n iconColor: 'var(--theme-warning)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-listing-saveIncomplete-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-listing-saveIncomplete-no',\r\n },\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n title: 'Save As Incomplete?',\r\n text: 'Your changes will be reflected in Matrix™ within 10-15 minutes.',\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n setIsFormSavingAsIncomplete(true);\r\n setIncompleteButtonText('Saving...');\r\n try {\r\n if (operationType === 'create') {\r\n const result = await apiService.Listing.SaveIncomplete(postBody);\r\n listingId = result?.Data?.ListingId;\r\n } else if (operationType === 'edit') {\r\n listingId = currListing?.ListingId;\r\n const whereClause = currListing ? buildWhereClause(currListing) : null;\r\n await apiService.Listing.UpdateIncomplete({\r\n ...postBody,\r\n ...whereClause, // BE requires where clause in EDIT operation (but not CREATE)\r\n });\r\n }\r\n } catch (error) {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n setIsFormSavingAsIncomplete(false);\r\n setIncompleteButtonText('Save Incomplete');\r\n setIsFormSavedAsIncomplete(false);\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Listing Not Saved As Incomplete',\r\n text: 'Listing could not be saved at this time. Please contact support',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-saveIncomplete',\r\n },\r\n });\r\n if (operationType === 'create') gaSaveIncompleteEventTracker(`Save Incomplete Create - ${listingId}`, `${username}`);\r\n if (operationType === 'edit') gaSaveIncompleteEventTracker(`Save Incomplete Edit - ${listingId}`, `${username}`);\r\n rollbar.error('Error: Listing Save Incomplete', error, postBody);\r\n\r\n return;\r\n }\r\n\r\n dispatch(formSubmitted());\r\n if (autoSaveExists && autoSaveCriteria) {\r\n removeAutoSaveData();\r\n }\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n\r\n setIsFormSavingAsIncomplete(false);\r\n setIncompleteButtonText('Save Incomplete');\r\n setIsFormSavedAsIncomplete(true);\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Listing Saved As Incomplete',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n }).then(() => {\r\n history.push(listingId == null ? '/' : `/listings/view?ListingID=${listingId}`);\r\n });\r\n }\r\n });\r\n };\r\n\r\n const onClickSubmit = (values, actions) => {\r\n if (rowLockingEnabled) return checkStatus(async () => handleSubmit(values, actions)); // check lock status before submitting\r\n return handleSubmit(values, actions);\r\n };\r\n\r\n const onClickSaveIncomplete = (values, actions) => {\r\n if (rowLockingEnabled) return checkStatus(async () => handleSaveIncomplete()); // check lock status before submitting\r\n\r\n return handleSaveIncomplete(values, actions);\r\n };\r\n\r\n const getRepeatableChanged = (formikGroup, unmodifiedGroup) => {\r\n /* does origin have this item?\r\n does any prop of this item not match origin?\r\n */\r\n let hasChanged = false;\r\n if (formikGroup.length !== unmodifiedGroup.length) return true;\r\n formikGroup.forEach(item => {\r\n if (hasChanged) return;\r\n if (item.UniqueID) {\r\n // room/door/parcel, openhouse?\r\n const umItem = unmodifiedGroup.find(umi => umi.UniqueID === item.UniqueID);\r\n Object.keys(umItem).forEach(itemkey => {\r\n if (hasChanged) return;\r\n if (umItem?.[itemkey]) {\r\n if (umItem[itemkey] !== item[itemkey]) hasChanged = true;\r\n }\r\n });\r\n // see that every key's value in formikElement matches umEl\r\n } else if (item.URL) {\r\n // photo or supp\r\n const umItem = unmodifiedGroup.find(umi => umi.URL === item.URL);\r\n Object.keys(item).forEach(itemkey => {\r\n if (hasChanged) return;\r\n if (umItem?.[itemkey]) {\r\n if (umItem[itemkey] !== item[itemkey]) hasChanged = true;\r\n }\r\n });\r\n } else {\r\n // item has neither url or uniqueId;\r\n hasChanged = true;\r\n }\r\n });\r\n return hasChanged;\r\n };\r\n\r\n const getChanged = (unModGroup, photosGroup, roomsGroup, supplementsGroup, openHousesGroup) => {\r\n let photosChanged = false;\r\n let supplementsChanged = false;\r\n let roomsChanged = false;\r\n let openHousesChanged = false;\r\n\r\n photosChanged = getRepeatableChanged(photosGroup, unModGroup.umPhotos);\r\n supplementsChanged = getRepeatableChanged(supplementsGroup, unModGroup.umSupplements);\r\n roomsChanged = getRepeatableChanged(roomsGroup, unModGroup.umRooms);\r\n openHousesChanged = getRepeatableChanged(openHousesGroup, unModGroup.umOpenHouses);\r\n\r\n const photosChangedBool = photosChanged;\r\n photosChanged = photosChanged ? 1 : 0;\r\n const supplementsChangedBool = supplementsChanged;\r\n supplementsChanged = supplementsChanged ? 1 : 0;\r\n const roomsChangedBool = roomsChanged;\r\n roomsChanged = roomsChanged ? 1 : 0;\r\n const openHousesChangedBool = openHousesChanged;\r\n openHousesChanged = openHousesChanged ? 1 : 0;\r\n\r\n return [photosChanged, photosChangedBool, supplementsChanged, supplementsChangedBool, roomsChanged, roomsChangedBool, openHousesChanged, openHousesChangedBool];\r\n };\r\n\r\n // TODO: Refactor\r\n // converts repeatable data to format required by validation scripts\r\n // validation is running before the form has even loaded the listing data\r\n const transformRepeatable = values => {\r\n let newValues = {};\r\n\r\n // added if statement to compliment the onMount validation\r\n if (selectedListing?.listing) { // dealing with a saved listing\r\n newValues = {\r\n Photos: values.Photos,\r\n Rooms: values.Rooms,\r\n Supplements: values.Supplements,\r\n OpenHouses: values.OpenHouses,\r\n ...values,\r\n unmodifiedListing: { ...values, ...selectedListing.listing },\r\n };\r\n } else { // new listing\r\n newValues = { ...values, unmodifiedListing: {} }; // supply values and append empty unMod.\r\n }\r\n\r\n const {\r\n Photos, Rooms, Supplements, OpenHouses, unmodifiedListing, ...otherValues\r\n } = newValues;\r\n const photosGroup = Photos\r\n ? Object.keys(Photos).map(key => (!Photos[key].IsDeleted) && Photos[key])\r\n : [];\r\n const roomsGroup = Rooms\r\n ? Object.keys(Rooms).map(key => (!Rooms[key].IsDeleted) && Rooms[key]).filter(r => r !== false)\r\n : [];\r\n // see comments above\r\n const supplementsGroup = Supplements\r\n ? Object.keys(Supplements).map(key => (!Supplements[key].IsDeleted) && Supplements[key])\r\n : [];\r\n const openHousesGroup = OpenHouses\r\n ? Object.keys(OpenHouses).map(key => (!OpenHouses[key].IsDeleted) && OpenHouses[key])\r\n : [];\r\n\r\n const initKeys = Object.keys(memoizedInitialValues); // add in blank or null values for blank form validation\r\n initKeys.forEach(k => {\r\n if (otherValues[k] || otherValues[k] === 0) return;\r\n otherValues[k] = memoizedInitialValues[k];\r\n });\r\n\r\n return {\r\n listing: otherValues, photos: photosGroup, rooms: roomsGroup, supplements: supplementsGroup, unmodifiedListing, openHouses: openHousesGroup,\r\n };\r\n };\r\n\r\n const myValidateForm = values => {\r\n const errors = {};\r\n\r\n if (listingRules) {\r\n try {\r\n const {\r\n listing, photos, rooms, supplements, openHouses, unmodifiedListing,\r\n } = transformRepeatable(values);\r\n\r\n const unModGroup = {\r\n umPhotos: selectedListing?.photos ?? [],\r\n umRooms: selectedListing?.rooms ?? [],\r\n umSupplements: selectedListing?.supplements ?? [],\r\n umOpenHouses: selectedListing?.openHouses ?? [],\r\n umParcels: selectedListing?.parcels ?? [],\r\n umDoors: selectedListing?.doors ?? [],\r\n };\r\n // B: for new validation files, some listing types do not require certain subtables.\r\n // B: the current order is listing, unmodifiedListing, photos, supplements, rooms\r\n\r\n const [photosChanged, photosChangedBool, supplementsChanged, supplementsChangedBool, roomsChanged, roomsChangedBool, openHousesChanged, openHousesChangedBool] = getChanged(unModGroup, photos, rooms, supplements, openHouses);\r\n setPhotosHaveChanged(photosChangedBool);\r\n setSupplementsHaveChanged(supplementsChangedBool);\r\n setRoomsHaveChanged(roomsChangedBool);\r\n setOpenHousesHaveChanged(openHousesChangedBool);\r\n\r\n const formName = listingType ?? editPageName;\r\n let res;\r\n switch (formName) {\r\n case 'Rental':\r\n case 'Residential':\r\n case 'Multifamily':\r\n case 'MobileHome':\r\n res = listingRules?.run(photosChanged, supplementsChanged, roomsChanged, openHousesChanged, listing, unmodifiedListing, photos, supplements, rooms, openHouses);\r\n break;\r\n case 'Commercial':\r\n case 'Farm':\r\n case 'Land':\r\n res = listingRules?.run(photosChanged, supplementsChanged, roomsChanged, openHousesChanged, listing, unmodifiedListing, photos, openHouses);\r\n break;\r\n case 'OpenHouses':\r\n res = listingRules?.run(photosChanged, supplementsChanged, roomsChanged, openHousesChanged, listing, unmodifiedListing, openHouses);\r\n break;\r\n default:\r\n res = listingRules?.run(listing, unmodifiedListing, photos, supplements, rooms);\r\n break;\r\n }\r\n\r\n const { fieldValidationResult, listingIsValid } = res.context.variableContainer;\r\n dispatch(setValidationResult(fieldValidationResult));\r\n if (!listingIsValid) {\r\n errors.listingIsValid = listingIsValid;\r\n }\r\n } catch (er) {\r\n rollbar.error('Error: Listing Validation', er, values);\r\n }\r\n }\r\n return errors;\r\n };\r\n\r\n const validateFigField = (figFieldName, figValidationValue) => {\r\n setValidateFieldName(figFieldName);\r\n setValidateFlag(true);\r\n setValidationValue(figValidationValue);\r\n };\r\n\r\n const fieldsUpdated = () => {\r\n setRunValidation(true);\r\n };\r\n\r\n useEffect(() => {\r\n setRunValidation(true);\r\n }, [repeatableSectionCount]);\r\n\r\n useEffect(() => {\r\n if (runValidation) {\r\n formRef?.current?.validateForm();\r\n setRunValidation(false);\r\n }\r\n }, [runValidation]);\r\n\r\n // Passing data from TAP table to the form\r\n const listingSelected = data => {\r\n if (data) {\r\n const dispatchData = {\r\n ...data,\r\n currentStatus: listingFormData.StandardStatus,\r\n };\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Tax Autopop Data...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n if (!isNull(selectedListing)) {\r\n setPreTaxAutoPopListing(selectedListing.listing);\r\n setWasTaxAutoPopped(true);\r\n }\r\n dispatch(loadTaxAutoPopSelected(dispatchData));\r\n }\r\n };\r\n\r\n // prevents form from submitting on enter key press\r\n const handleEnterKeyDown = keyEvent => {\r\n if ((keyEvent.charCode || keyEvent.keyCode) === 13) {\r\n keyEvent.preventDefault();\r\n }\r\n };\r\n\r\n // Handle custom header for supplements and photo sections\r\n const getCustomHeader = section => {\r\n if (section.sectionName === 'Supplements' || section.sectionName === 'Photos' || section.sectionName === 'Rooms' || section.sectionName === 'OpenHouses'\r\n || section.sectionName === 'Doors' || section.sectionName === 'Parcels' || section.sectionName === 'Units' || section.sectionName === 'History') {\r\n return (\r\n <>\r\n {section.sectionLabel}\r\n \r\n {sectionsPerRepeatableSection[section.sectionName]\r\n ? sectionsPerRepeatableSection[section.sectionName].length\r\n : 0}\r\n \r\n \r\n );\r\n }\r\n return section.sectionLabel;\r\n };\r\n\r\n // Will redirect user to view listings page or home page depending on the page operation type\r\n const handleDiscardChanges = e => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Discard Changes?',\r\n html: 'Your unsaved changes, including Auto Save data will be discarded.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n showDenyButton: true,\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg mr-2 swal-question-listing-discard-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-listing-discard-no',\r\n },\r\n }).then(result => {\r\n if (result.isConfirmed) {\r\n if (operationType) {\r\n e.preventDefault();\r\n if (autoSaveExists && autoSaveCriteria) {\r\n removeAutoSaveData();\r\n }\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n history.push(operationType === 'create' ? '/' : '/listings/view');\r\n }\r\n }\r\n });\r\n };\r\n\r\n const handlePreviousClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const previous = navItem.previousElementSibling;\r\n if (previous) {\r\n previous.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress - ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection - 1);\r\n }\r\n }\r\n };\r\n\r\n const handleNextClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const next = navItem.nextElementSibling;\r\n if (next) {\r\n next.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress + ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection + 1);\r\n }\r\n }\r\n };\r\n\r\n // updates row lock and displays an alert when changes are being overwritten by another user\r\n useEffect(() => {\r\n const tryRegainRowLock = async () => {\r\n try {\r\n const created = await createLock();\r\n if (!created) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Lock Lost',\r\n text: 'Your lock was lost and could not be regained.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-warning)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg swal-warning-listing-lockLost',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/listings/view');\r\n }\r\n });\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Listing tryRegainRowLock', err);\r\n }\r\n };\r\n\r\n if (operationType === 'edit' && !lockReleasedByCurrentUser.current) {\r\n if (checked && !locked) {\r\n tryRegainRowLock();\r\n return;\r\n }\r\n\r\n if (locked && !lockingAuthorized) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Changes Overwritten',\r\n text: `Your changes have been overwritten by ${lockedBy}.`,\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-warning-listing-changesOverwritten',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/listings/view');\r\n }\r\n });\r\n }\r\n }\r\n }, [locked, lockingAuthorized, lockedBy, operationType]);\r\n\r\n // used to return FormikField Components only when the formField would use a date/time picker\r\n const datePickerWhitelist = ['datetime', 'date', 'time'];\r\n const requiresDatePicker = childDataType => datePickerWhitelist.includes(childDataType);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {() => (\r\n <>\r\n {\r\n if (sortedErrors?.length > 0) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Validation Failed',\r\n html: `Please correct ${sortedErrors.length} validation errors and try again.`,\r\n confirmButtonText: 'Ok',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-validation',\r\n },\r\n });\r\n }\r\n }}\r\n />\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n {!listingCode?.includes('chg') && ( // TAP will not show on change forms\r\n \r\n setClearForm(false)}\r\n variant=\"info btn-sm d-none d-lg-block\"\r\n >\r\n \r\n Tax Autopop\r\n \r\n setClearForm(false)}\r\n variant=\"info btn-sm d-block d-lg-none\"\r\n tooltipText=\"Tax Autopop\"\r\n >\r\n \r\n \r\n \r\n )}\r\n {(operationType === 'edit' || operationType === 'create') && (\r\n <>\r\n \r\n \r\n Discard Changes\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {(operationType === 'create' || (standardStatus === 'I' && !listingCode?.includes('chg'))) && ( // decides whether to render button\r\n \r\n )}\r\n \r\n {isFormSubmitting\r\n ? (\r\n <>\r\n \r\n Saving...\r\n \r\n ) : (\r\n <>\r\n \r\n Submit\r\n \r\n )}\r\n \r\n \r\n {isFormSubmitting\r\n ? \r\n : }\r\n \r\n
    \r\n \r\n )}\r\n footer={orderedSections.length > 1\r\n ? (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Previous\r\n \r\n \r\n \r\n \r\n \r\n \r\n Next\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n )\r\n : null}\r\n >\r\n {\r\n setProgress((1 / orderedSections.length) * 100 * (orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1));\r\n setActiveSection(orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {pageStructure.map(section => (\r\n \r\n {section.sectionName !== 'Rooms' ? (\r\n <>\r\n

    {getCustomHeader(section)}

    \r\n {section.children.map(child => {\r\n if (child.isGroup) {\r\n return (\r\n \r\n );\r\n }\r\n if (requiresDatePicker(child.datatype)) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n {/* */}\r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateListingsForm;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParams, StringParam } from 'use-query-params';\r\n\r\nimport { loadListingById } from '@redux/modules/listing';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { getSelectedListingData } from '@redux/selectors/ListingSelector';\r\nimport { selectFormDefinition, selectListingCode } from '@redux/selectors/FormSelector';\r\n\r\nimport CreateListingsForm from '@components/form/forms/CreateListingsForm';\r\n\r\nconst CreateListingsPage = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const currListing = useSelector(getSelectedListingData);\r\n const listingCode = useSelector(selectListingCode);\r\n\r\n const formCreate = useMemo(() => location?.pathname.includes('create'), [location]);\r\n const formEdit = useMemo(() => location?.pathname.includes('edit'), [location]);\r\n\r\n const [urlParams, setUrlParams] = useQueryParams({ UniqueID: StringParam, listingType: StringParam });\r\n\r\n const whereClause = {\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n\r\n const alertUser = e => {\r\n e.preventDefault(); // cancel the event\r\n e.returnValue = ''; // chrome requires return value to be set\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('beforeunload', alertUser);\r\n\r\n if (urlParams?.listingType && (!currentFormDefinition?.length || (urlParams?.listingType !== listingCode))) {\r\n if (formCreate) {\r\n dispatch(loadFormDefinition('create', 'listings', urlParams?.listingType, null, 'listing'));\r\n }\r\n if (formEdit) {\r\n if (urlParams?.UniqueID) {\r\n whereClause.where.clause.push({ name: 'UniqueID', value: urlParams?.UniqueID });\r\n dispatch(loadFormDefinition('edit', 'listings', urlParams?.listingType, urlParams?.UniqueID, 'listing'));\r\n dispatch(loadListingById(whereClause));\r\n }\r\n }\r\n } else {\r\n const currUrl = location?.pathname?.split('/').pop();\r\n setUrlParams({ listingType: currUrl });\r\n }\r\n\r\n return () => window.removeEventListener('beforeunload', alertUser);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n const currUrl = location?.pathname?.split('/').pop();\r\n setUrlParams({ listingType: currUrl });\r\n if (currListing) {\r\n setUrlParams({ UniqueID: currListing?.UniqueID }, 'pushIn');\r\n }\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currListing) {\r\n if (!urlParams?.listingType) {\r\n setUrlParams({ UniqueID: currListing?.UniqueID }, 'pushIn');\r\n }\r\n }\r\n }, [currListing]);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n {formEdit ? 'Edit' : 'Create'}\r\n Listing\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default CreateListingsPage;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, {\r\n useEffect, useMemo, useRef, useState,\r\n} from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Formik, Form } from 'formik';\r\nimport { useRollbar, useRollbarPerson } from '@rollbar/react';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport LinearProgress from '@mui/material/LinearProgress';\r\n\r\nimport apiService from '@services/apiService';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport FormSearchBar from '@components/form/formComponents/formSearch/FormSearchBar';\r\nimport FormLoader from '@components/loaders/FormLoader';\r\n\r\nimport AgentLookupModal from '@components/form/formComponents/inputGroups/agentLookup/AgentLookupModal';\r\nimport FieldValidator from '@components/form/formHelpers/FieldValidator';\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\nimport FormikFieldUpdater from '@components/form/formHelpers/FormikFieldUpdater';\r\nimport LayoutGroupWrapper from '@components/form/formComponents/inputGroups/LayoutGroupWrapper';\r\nimport OfficeLookupModal from '@components/form/formComponents/inputGroups/officeLookup/OfficeLookupModal';\r\nimport RepeatableRoom from '@components/form/formComponents/repeatableRoom/RepeatableRoom';\r\nimport OnSubmitValidationError from '@components/form/formikComponents/OnSubmitValidationError';\r\n\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\n// import Debug from '@components/general/Debug';\r\n\r\nimport {\r\n getSortedErrors,\r\n selectComboValueDict,\r\n selectFormDefinition,\r\n selectInitialTouched,\r\n selectInitialValues,\r\n selectLookupNames,\r\n selectVisiblePageStructure,\r\n selectAllFields,\r\n getOrderedSections,\r\n selectRequiredPerSection,\r\n selectErrorsPerSection,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport { selectUploadedImages, selectSectionsPerRepeatableSection } from '@redux/selectors/ListingSelector';\r\nimport { getUserName, getUserMlsId } from '@redux/selectors/UserSelector';\r\nimport { selectOfficeFormData } from '@redux/selectors/FormDataSelector';\r\n\r\nimport {\r\n formSubmitted,\r\n loadComboBoxOptions,\r\n setValidationResult,\r\n} from '@redux/modules/formGeneration';\r\n\r\nimport { clearOffice } from '@redux/modules/office';\r\nimport SectionNav from '@components/smartAdminUI/SectionNav';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useIsMounted from '@hooks/useIsMounted';\r\nimport FormikField from '@components/form/FormikField';\r\n\r\nconst CreateOfficeForm = () => {\r\n const dispatch = useDispatch();\r\n const isMounted = useIsMounted();\r\n const formRef = useRef();\r\n const history = useHistory(); // use for redirection\r\n\r\n const officeRules = window.FlexRule.RuntimeEngine.fromJavaScript('OnePlatform', 'OfficeRules');\r\n\r\n const sectionsPerRepeatableSection = useSelector(selectSectionsPerRepeatableSection);\r\n const reqPerSection = useSelector(selectRequiredPerSection);\r\n const orderedSections = useSelector(getOrderedSections);\r\n const errPerSection = useSelector(selectErrorsPerSection);\r\n const agentLookup = useSelector(state => state.agent.agentLookup);\r\n const definitionType = useSelector(state => state.formGeneration.definitionType);\r\n const formIsLoading = useSelector(state => state.formGeneration.formIsLoading);\r\n const officeLookup = useSelector(state => state.office.officeLookup);\r\n const officeSelected = useSelector(state => state.office.currentOffice);\r\n const officeFormData = useSelector(selectOfficeFormData);\r\n const operationType = useSelector(state => state.formGeneration.operationType);\r\n const comboSetValueDict = useSelector(selectComboValueDict);\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const lookUpNames = useSelector(selectLookupNames);\r\n const initialTouched = useSelector(selectInitialTouched);\r\n const initialValues = useSelector(selectInitialValues);\r\n const pageStructure = useSelector(selectVisiblePageStructure);\r\n const allFields = useSelector(selectAllFields);\r\n const uploadedImages = useSelector(selectUploadedImages);\r\n const sortedErrors = useSelector(getSortedErrors);\r\n\r\n const [formSubmitting, setFormSubmitting] = useState(false);\r\n const [newComboValue, setNewComboValue] = useState({});\r\n const [runValidation, setRunValidation] = useState(false);\r\n const [validateFieldName, setValidateFieldName] = useState('');\r\n const [validateFlag, setValidateFlag] = useState(false);\r\n const [validationValue, setValidationValue] = useState('');\r\n const [progress, setProgress] = useState(((1 / orderedSections.length) * 100));\r\n const [activeSection, setActiveSection] = useState(1);\r\n\r\n const gaEventTracker = GAEventTracking('Error Office Form Submit');\r\n const username = useSelector(getUserName);\r\n const userMLSID = useSelector(getUserMlsId);\r\n\r\n const rollbar = useRollbar();\r\n useRollbarPerson({ id: userMLSID, username });\r\n\r\n const previousOperationType = usePrevious(operationType);\r\n\r\n const memoizedInitialValues = useMemo(() => initialValues, []);\r\n const rowLockEntity = useMemo(() => ({ type: 'office', id: officeSelected?.UniqueID }), [officeSelected]);\r\n\r\n const comboBubbleWrap = { setNewComboValue };\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n checked,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n rowLockingEnabled,\r\n } = useRowLock({ rowLockEntity, isEditOperation: operationType === 'edit', enableRowLocking: operationType === 'edit' });\r\n\r\n const lockReleasedByCurrentUser = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!currentFormDefinition?.length) return;\r\n\r\n if (lookUpNames?.lookupNames?.length) {\r\n dispatch(loadComboBoxOptions(lookUpNames, 'offices'));\r\n }\r\n\r\n formRef?.current?.validateForm();\r\n }, [currentFormDefinition]);\r\n\r\n useEffect(() => {\r\n // prevent the execution of this effect when going from edit mode to create mode;\r\n // current component will not be un-mounted yet when [operationType] gets updated in redux\r\n if (previousOperationType === 'edit' && operationType === 'create') return;\r\n\r\n if (operationType === 'create') {\r\n dispatch(clearOffice());\r\n formRef?.current?.resetForm();\r\n setRunValidation(true);\r\n }\r\n }, [operationType]);\r\n\r\n useEffect(() => {\r\n if (Object.keys(newComboValue).length > 0) {\r\n const newComboKeys = Object.keys(newComboValue);\r\n if (comboSetValueDict) {\r\n if (newComboKeys.length > 0) {\r\n const { fieldName, newValue } = newComboValue;\r\n const comboMutator = comboSetValueDict[fieldName];\r\n comboMutator(newValue);\r\n }\r\n }\r\n }\r\n }, [newComboValue]);\r\n\r\n const getDeltas = (formikState, unmodifiedEntry) => {\r\n const deltas = {};\r\n if (!formikState) return deltas;\r\n Object.entries(unmodifiedEntry).map(([key, value]) => {\r\n if (key in formikState && formikState?.[key] !== value) {\r\n deltas[key] = formikState?.[key];\r\n }\r\n return null;\r\n });\r\n return deltas;\r\n };\r\n\r\n const mergePhotoData = (formikState, uploadList = []) => {\r\n const mergedPhotos = uploadList.flatMap(images => {\r\n if (!images) return [];\r\n return images.map(singleImage => {\r\n const currentDisplayName = singleImage.displayName ?? '';\r\n const imageKey = singleImage?.key ?? singleImage?.UniqueID ?? singleImage?.displayName;\r\n\r\n if (`${currentDisplayName}`.includes('_thumbnail')) return null;\r\n if (singleImage.UniqueID) {\r\n // Handle existing photo.\r\n const { SortOrder, IsDeleted } = formikState[imageKey];\r\n if (IsDeleted) {\r\n // Mark photo as deleted.\r\n return {\r\n UniqueID: singleImage.UniqueID,\r\n SortOrder: singleImage.SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n // Update photo.\r\n const deltas = getDeltas(formikState[imageKey], singleImage);\r\n return {\r\n ...deltas,\r\n UniqueID: singleImage.UniqueID,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }\r\n // Handle new photo.\r\n const {\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n } = formikState[imageKey];\r\n if (IsDeleted) return null;\r\n return {\r\n URL,\r\n Description,\r\n SortOrder,\r\n IsDeleted,\r\n };\r\n }).filter(photo => photo !== null);\r\n });\r\n return mergedPhotos;\r\n };\r\n\r\n const convertDateToUTC = date => new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\r\n const getDateValue = value => {\r\n let formattedDate;\r\n if (value) {\r\n const dateUTC = convertDateToUTC(new Date(value));\r\n const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(dateUTC);\r\n const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(dateUTC);\r\n const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(dateUTC);\r\n formattedDate = `${year}-${month}-${day}`;\r\n }\r\n return formattedDate ?? '';\r\n };\r\n\r\n const getBitValue = value => {\r\n let bitValue;\r\n if (value != null && value !== '') {\r\n if (typeof value === 'string') {\r\n bitValue = value === 'true' ? 1 : 0;\r\n } else if (typeof value === 'boolean') {\r\n bitValue = value === true ? 1 : 0;\r\n } else if (typeof value === 'number') {\r\n bitValue = value;\r\n }\r\n }\r\n return bitValue ?? '';\r\n };\r\n\r\n const getStringValue = value => value ?? '';\r\n\r\n const getNumericValue = value => (value != null && value !== '' ? Number(value) : '');\r\n\r\n const getComboBoxValue = value => value ?? '';\r\n\r\n // TODO: move to utility module (used by listing/agent/office)\r\n const valueHasChanged = (fieldName, oldValue, newValue) => {\r\n const inputType = allFields[fieldName]?.InputType;\r\n const dataType = allFields[fieldName]?.DataType;\r\n switch (inputType) {\r\n case 'TextInput':\r\n if (dataType === 'datetime' || dataType === 'date') {\r\n return (getDateValue(oldValue) !== getDateValue(newValue));\r\n }\r\n if (dataType === 'bit') {\r\n return (getBitValue(oldValue) !== getBitValue(newValue));\r\n }\r\n if (dataType === 'string') {\r\n return (getStringValue(oldValue) !== getStringValue(newValue));\r\n }\r\n if (dataType === 'numeric' || dataType === 'decimal' || dataType === 'integer') {\r\n return (getNumericValue(oldValue) !== getNumericValue(newValue));\r\n }\r\n return (oldValue !== newValue);\r\n\r\n case 'ComboBox':\r\n return (getComboBoxValue(oldValue) !== getComboBoxValue(newValue));\r\n\r\n default:\r\n return (oldValue !== newValue);\r\n }\r\n };\r\n\r\n const handlePreviousClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const previous = navItem.previousElementSibling;\r\n if (previous) {\r\n previous.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress - ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection - 1);\r\n }\r\n }\r\n };\r\n\r\n const handleNextClick = () => {\r\n const tabNav = document.querySelector('.tab-nav');\r\n const tabActive = tabNav.querySelector('.active');\r\n if (tabActive) {\r\n const navItem = tabActive.parentNode;\r\n const next = navItem.nextElementSibling;\r\n if (next) {\r\n next.querySelector('a').click();\r\n window.scrollTo(0, 0);\r\n setProgress(progress + ((1 / orderedSections.length) * 100));\r\n setActiveSection(activeSection + 1);\r\n }\r\n }\r\n };\r\n\r\n const handleSubmit = async (values, { setSubmitting }) => {\r\n if (!(operationType === 'create') && !(operationType === 'edit')) return;\r\n\r\n setFormSubmitting(true);\r\n const { Photos, ...office } = values;\r\n\r\n const photosGroup = Photos\r\n ? mergePhotoData(Photos, uploadedImages)\r\n : null;\r\n\r\n // CREATE ONLY\r\n const postBody = {\r\n photos: photosGroup,\r\n };\r\n\r\n if (operationType === 'create') {\r\n postBody.office = { ...office };\r\n } else if (operationType === 'edit') {\r\n const officeData = {\r\n UniqueID: officeSelected.UniqueID,\r\n };\r\n\r\n Object.keys(office).map(key => {\r\n if (valueHasChanged(key, officeSelected[key], values[key])) {\r\n officeData[key] = values[key];\r\n }\r\n return null;\r\n });\r\n\r\n postBody.office = { ...officeData };\r\n }\r\n\r\n let uniqueID;\r\n try {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n icon: 'question',\r\n iconColor: 'var(--theme-warning)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-office-submit-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-office-submit-no',\r\n },\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n title: 'Submit Office?',\r\n text: 'Your changes will be reflected in Matrix™ within 10-15 minutes.',\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n if (operationType === 'create') {\r\n const result = await apiService.Office.insertOffice(postBody);\r\n uniqueID = result?.data?.UniqueID;\r\n } else if (operationType === 'edit') {\r\n uniqueID = officeSelected?.UniqueID;\r\n await apiService.Office.updateOffice(postBody);\r\n }\r\n\r\n dispatch(formSubmitted());\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Office Submitted',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n }).then(() => {\r\n history.push(uniqueID == null ? '/' : `/office/view?UniqueID=${uniqueID}`);\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n // If the component has been un-mounted meanwhile, we don't need to update local state anymore, nor display subsequent alerts.\r\n if (!isMounted) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Office Not Submitted',\r\n text: 'Office could not be submitted at this time. Please contact support.',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-office-submit',\r\n },\r\n });\r\n if (operationType === 'edit') gaEventTracker(`Edit - ${uniqueID}`, `${username}`);\r\n if (operationType === 'create') gaEventTracker(`Create - ${uniqueID}`, `${username}`);\r\n rollbar.error('Error: Office Form Submit', error, postBody);\r\n }\r\n setFormSubmitting(false);\r\n setSubmitting(false);\r\n };\r\n\r\n const onClickSubmit = (values, actions) => {\r\n if (rowLockingEnabled) return checkStatus(async () => handleSubmit(values, actions)); // check lock status before submitting\r\n return handleSubmit(values, actions);\r\n };\r\n\r\n const transformRepeatable = values => {\r\n const filledValues = { ...values };\r\n const existingLogics = officeRules.descriptions.logics; // existing fields that have validation rules\r\n const newValues = {};\r\n\r\n Object.entries(filledValues).forEach(([key, value]) => { // now handles removal of fields that do not have the validation logic set\r\n const newKeyLogic = `${key}Rules`;\r\n if (existingLogics.includes(newKeyLogic)) {\r\n newValues[key] = value;\r\n }\r\n });\r\n return { office: newValues };\r\n };\r\n\r\n const myValidateForm = values => {\r\n const errors = {};\r\n\r\n if (officeRules) {\r\n try {\r\n const { office, photos } = transformRepeatable(values);\r\n\r\n const res = officeRules.run(office, photos);\r\n\r\n const { fieldValidationResult, officeIsValid } = res.context.variableContainer;\r\n\r\n dispatch(setValidationResult(fieldValidationResult));\r\n\r\n if (!officeIsValid) {\r\n errors.officeIsValid = officeIsValid;\r\n }\r\n } catch (er) {\r\n rollbar.error('Error: Office Validation', er, values);\r\n }\r\n }\r\n return errors;\r\n };\r\n\r\n const validateFigField = (figFieldName, figValidationValue) => {\r\n setValidateFieldName(figFieldName);\r\n setValidateFlag(true);\r\n setValidationValue(figValidationValue);\r\n };\r\n\r\n const fieldsUpdated = () => {\r\n setRunValidation(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (runValidation) {\r\n formRef?.current?.validateForm();\r\n setRunValidation(false);\r\n }\r\n }, [runValidation]);\r\n\r\n // prevents form from submitting on enter key press\r\n const handleEnterKeyDown = keyEvent => {\r\n if ((keyEvent.charCode || keyEvent.keyCode) === 13) {\r\n keyEvent.preventDefault();\r\n }\r\n };\r\n\r\n const handleDiscardChanges = e => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Discard Changes?',\r\n html: 'Your changes will be discarded.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n showDenyButton: true,\r\n confirmButtonText: 'Yes, Continue',\r\n denyButtonText: 'No, Cancel',\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg mr-2 swal-question-office-discard-yes',\r\n denyButton: 'btn btn-primary btn-lg swal-question-office-discard-no',\r\n },\r\n }).then(result => {\r\n if (result.isConfirmed) {\r\n if (operationType) {\r\n e.preventDefault();\r\n removeLock();\r\n lockReleasedByCurrentUser.current = true;\r\n history.push(operationType === 'create' ? '/' : '/office/view');\r\n }\r\n }\r\n });\r\n };\r\n\r\n // updates row lock and displays an alert when changes are being overwritten by another user\r\n useEffect(() => {\r\n const tryRegainRowLock = async () => {\r\n try {\r\n const created = await createLock();\r\n if (!created) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Lock Lost',\r\n text: 'Your lock was lost and could not be regained.',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-warning)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg swal-warning-office-lockLost',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/office/view');\r\n }\r\n });\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Office tryRegainRowLock', err);\r\n }\r\n };\r\n\r\n if (operationType === 'edit' && !lockReleasedByCurrentUser.current) {\r\n if (checked && !locked) {\r\n tryRegainRowLock();\r\n return;\r\n }\r\n\r\n if (locked && !lockingAuthorized) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Changes Overwritten',\r\n text: `Your changes have been overwritten by ${lockedBy}.`,\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-warning-office-changesOverwritten',\r\n },\r\n }).then(resp => {\r\n if (resp.value) {\r\n history.push('/office/view');\r\n }\r\n });\r\n }\r\n }\r\n }, [locked, lockingAuthorized, lockedBy, operationType]);\r\n\r\n const datePickerWhitelist = ['datetime', 'date', 'time'];\r\n const requiresDatePicker = childDataType => datePickerWhitelist.includes(childDataType);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {() => (\r\n <>\r\n {\r\n if (sortedErrors?.length > 0) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Validation Failed',\r\n html: `Please correct ${sortedErrors.length} validation errors and try again.`,\r\n confirmButtonText: 'Ok',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-office-validation',\r\n },\r\n });\r\n }\r\n }}\r\n />\r\n
    \r\n \r\n \r\n {officeFormData?.OfficeMlsId ? officeFormData.OfficeMlsId : 'Office'}\r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n {officeFormData?.OfficeMlsId ? officeFormData.OfficeMlsId : 'Office'}\r\n \r\n )}\r\n panelToolbar={(\r\n <>\r\n \r\n \r\n Discard Changes\r\n \r\n \r\n \r\n \r\n \r\n {formSubmitting\r\n ? (\r\n <>\r\n \r\n Saving...\r\n \r\n ) : (\r\n <>\r\n \r\n Submit\r\n \r\n )}\r\n \r\n \r\n {formSubmitting ? : }\r\n \r\n \r\n )}\r\n footer={(\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Previous\r\n \r\n \r\n \r\n \r\n \r\n \r\n Next\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n )}\r\n >\r\n {\r\n setProgress((1 / orderedSections.length) * 100 * (orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1));\r\n setActiveSection(orderedSections.indexOf(orderedSections.find(x => x.sectionName === key)) + 1);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {pageStructure.map(section => (\r\n \r\n {section.sectionName !== 'Rooms' ? (\r\n <>\r\n

    {section.sectionLabel}

    \r\n {section.sectionName !== 'Rooms' && section.children.map(child => {\r\n if (child.isGroup) {\r\n return (\r\n \r\n );\r\n }\r\n if (requiresDatePicker(child.datatype)) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n {/* */}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateOfficeForm;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport {\r\n selectFormDefinition,\r\n selectFormDefinitionType,\r\n} from '@redux/selectors/FormSelector';\r\n\r\nimport CreateOfficeForm from '@components/form/forms/CreateOfficeForm';\r\n\r\nconst CreateOfficePage = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const currentFormDefinition = useSelector(selectFormDefinition);\r\n const currentFormDefinitionType = useSelector(selectFormDefinitionType);\r\n const [urlParamFormType, setUrlParamFormType] = useQueryParam('formType', StringParam); // listing type of current listing from CLF\r\n\r\n const alertUser = e => {\r\n e.preventDefault(); // cancel the event\r\n e.returnValue = ''; // chrome requires return value to be set\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('beforeunload', alertUser);\r\n\r\n if (urlParamFormType && (!currentFormDefinition?.length || (urlParamFormType !== currentFormDefinitionType))) {\r\n dispatch(loadFormDefinition('create', urlParamFormType));\r\n }\r\n\r\n return () => window.removeEventListener('beforeunload', alertUser);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n setUrlParamFormType('office');\r\n }\r\n }, [location]);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Create\r\n Office\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default CreateOfficePage;\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { setCurrentAgent } from '@redux/modules/agent';\r\nimport { getAgentSelected } from '@redux/selectors/AgentSelector';\r\n\r\nimport CreateAgentForm from '@components/form/forms/CreateAgentForm';\r\n\r\nconst EditAgentPage = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n const currAgent = useSelector(getAgentSelected);\r\n const [urlParam, setUrlParam] = useQueryParam('UniqueID', StringParam);\r\n\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n\r\n const alertUser = e => {\r\n e.preventDefault(); // cancel the event\r\n e.returnValue = ''; // chrome requires return value to be set\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('beforeunload', alertUser);\r\n\r\n if (urlParam) {\r\n jsonBody.where.clause.push({ name: 'UniqueID', value: urlParam });\r\n dispatch(loadFormDefinition('edit', 'agent', null, urlParam, 'agentACL'));\r\n dispatch(setCurrentAgent(jsonBody));\r\n }\r\n\r\n return () => window.removeEventListener('beforeunload', alertUser);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n if (currAgent) {\r\n setUrlParam(currAgent?.UniqueID);\r\n }\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currAgent) {\r\n if (location?.search === '' || location?.search !== currAgent?.UniqueID) {\r\n setUrlParam(currAgent?.UniqueID);\r\n }\r\n }\r\n }, [currAgent]);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Edit Agent\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default EditAgentPage;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { setCurrentOffice } from '@redux/modules/office';\r\nimport { getCurrentOffice } from '@redux/selectors/OfficeSelector';\r\n\r\nimport CreateOfficeForm from '@components/form/forms/CreateOfficeForm';\r\n\r\nconst EditOfficePageOG = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n const currOffice = useSelector(getCurrentOffice);\r\n\r\n const [urlParam, setUrlParam] = useQueryParam('UniqueID', StringParam); // unique ID of current listing from CLF\r\n\r\n const alertUser = e => {\r\n e.preventDefault(); // cancel the event\r\n e.returnValue = ''; // chrome requires return value to be set\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('beforeunload', alertUser);\r\n\r\n if (urlParam) {\r\n dispatch(loadFormDefinition('edit', 'office', null, urlParam, 'officeACL'));\r\n dispatch(setCurrentOffice(urlParam));\r\n }\r\n\r\n return () => window.removeEventListener('beforeunload', alertUser);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n if (currOffice) {\r\n setUrlParam(currOffice?.UniqueID);\r\n }\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currOffice) {\r\n if (location?.search === '' || location?.search !== currOffice?.UniqueID) {\r\n setUrlParam(currOffice?.UniqueID);\r\n }\r\n }\r\n }, [currOffice]);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Edit\r\n Office\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default EditOfficePageOG;\r\n","/* eslint-disable jsx-a11y/control-has-associated-label */\r\nimport React from 'react';\r\n\r\nimport Skeleton from '@mui/material/Skeleton';\r\n\r\nconst TableLoaderSmall = () => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default TableLoaderSmall;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst ListingActionButtons = ({\r\n viewClicked,\r\n copyClicked,\r\n auditClicked,\r\n currRow,\r\n isEditable,\r\n isCopiable,\r\n isAuditable,\r\n sizeSM,\r\n}) => {\r\n const onViewClick = () => viewClicked(currRow);\r\n const onCopyClick = () => copyClicked(currRow);\r\n const onAuditClick = () => auditClicked(currRow);\r\n\r\n return (\r\n <>\r\n {isEditable && (\r\n View Listing}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {isCopiable && (\r\n Copy Listing}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {isAuditable && (\r\n Audit Listing}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nListingActionButtons.propTypes = {\r\n viewClicked: PropTypes.func.isRequired,\r\n copyClicked: PropTypes.func.isRequired,\r\n auditClicked: PropTypes.func.isRequired,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n ListingID: PropTypes.string,\r\n }),\r\n isEditable: PropTypes.bool.isRequired,\r\n isCopiable: PropTypes.bool.isRequired,\r\n isAuditable: PropTypes.bool.isRequired,\r\n sizeSM: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default ListingActionButtons;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { getUserId, getUserName } from '@redux/selectors/UserSelector';\r\nimport { getImpersonationStatus } from '@redux/selectors/ImpersonationSelector';\r\n\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory, { PaginationProvider } from 'react-bootstrap-table2-paginator';\r\nimport filterFactory, { textFilter } from 'react-bootstrap-table2-filter';\r\nimport { isEmpty, isNull } from 'lodash';\r\n\r\nimport AgentAvatar from '@components/table/avatar/AgentAvatar';\r\nimport TableLoaderSmall from '@components/loaders/TableLoaderSmall';\r\nimport ListingTypeIcons from '@components/table/icons/ListingTypeIcons';\r\nimport ListingActionButtons from '@components/table/actionButtons/ListingActionButtons';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\n\r\nconst ListingsTableWidget = ({\r\n displayData,\r\n onListingSelect,\r\n}) => {\r\n const [slicedTableData, setSlicedTableData] = useState(displayData);\r\n const realUserName = useSelector(getUserName);\r\n const realUserId = useSelector(getUserId);\r\n const impersonationStatus = useSelector(getImpersonationStatus);\r\n const listingsLoading = useSelector(state => state.listing.editableListingLoading);\r\n const showBrokerListings = useSelector(state => state.listing.showBrokerListings);\r\n const hideAgentFullName = useSelector(state => !state.listing.showBrokerListings);\r\n const currentUser = useMemo(() => (impersonationStatus?.ImpersonationActive\r\n ? { userName: impersonationStatus.memberFullName, userId: impersonationStatus.memberUniqueID }\r\n : { userName: realUserName, userId: realUserId }\r\n ), [realUserName, realUserId, impersonationStatus]);\r\n const actionsFormatter = (cell, row) => (\r\n {}}\r\n auditClicked={() => {}}\r\n currRow={row}\r\n isCopiable={false}\r\n isEditable={row?.isEditable}\r\n isAuditable={false}\r\n sizeSM\r\n />\r\n );\r\n\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const filterByAgentKeys = (filterVal, data) => {\r\n const filteredData = data.filter(listing => {\r\n const listAgentKey = isNull(listing.ListAgentKeyNumeric) ? '' : listing.ListAgentKeyNumeric.toString();\r\n const coListAgentKey = isNull(listing.CoListAgentKeyNumeric) ? '' : listing.CoListAgentKeyNumeric.toString();\r\n return isNull(filterVal) || filterVal === ''\r\n ? true\r\n : listAgentKey.includes(filterVal) || coListAgentKey.includes(filterVal);\r\n });\r\n setSlicedTableData(filteredData.slice(0, 500));\r\n\r\n return filteredData;\r\n };\r\n\r\n useEffect(() => {\r\n if (isNull(currentUser.userId)) return;\r\n const userId = isNull(currentUser.userId) ? '' : currentUser.userId.toString();\r\n filterByAgentKeys(showBrokerListings ? null : userId, displayData);\r\n // TODO: Although it seems to work as expected, this should be revisited as it feels very hacky\r\n const btn = document.getElementById('hideAgentFullNameButton');\r\n btn.click();\r\n }, [currentUser, showBrokerListings, displayData]);\r\n\r\n const columns = useMemo(() => [\r\n {\r\n dataField: 'actions',\r\n text: ' ',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '30px' },\r\n },\r\n {\r\n dataField: 'UniqueID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ListingId',\r\n text: 'ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '40px' },\r\n },\r\n {\r\n dataField: 'StandardStatusVerb',\r\n text: 'Status',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '50px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'PropertyType',\r\n text: 'Type',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '40px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'UnparsedAddress',\r\n text: 'Address',\r\n title: true,\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n classes: 'text-ellipsis-175',\r\n },\r\n {\r\n dataField: 'City',\r\n text: 'City',\r\n title: true,\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n classes: 'text-ellipsis-100',\r\n },\r\n {\r\n dataField: 'ListAgentFullName',\r\n text: 'Agent',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n hidden: hideAgentFullName,\r\n sort: true,\r\n rows: '1',\r\n align: 'center',\r\n headerStyle: { width: '40px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'ListAgentKeyNumeric',\r\n text: 'keys',\r\n style: { display: 'none' },\r\n className: 'd-none',\r\n headerStyle: { display: 'none' },\r\n sort: false,\r\n searchable: false,\r\n filter: textFilter({\r\n onFilter: filterByAgentKeys,\r\n }),\r\n },\r\n {\r\n dataField: 'ModifiedDate',\r\n text: 'ModifiedDate',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n hidden: true,\r\n searchable: true,\r\n },\r\n ], [hideAgentFullName]);\r\n\r\n // Sets the default sort order to desc by ListingId\r\n const defaultSorted = [{\r\n dataField: 'ListingId',\r\n order: 'desc',\r\n }];\r\n\r\n const paginationOptions = {\r\n sizePerPage: 5,\r\n pageStartIndex: 1,\r\n hideSizePerPage: true, // Hide the sizePerPage dropdown always\r\n hidePageListOnlyOnePage: true, // Hide the pagination list when only one page\r\n showTotal: slicedTableData?.length > 0,\r\n };\r\n\r\n const CustomToggleList = ({\r\n onColumnToggle,\r\n }) => (\r\n
    \r\n onColumnToggle('ListAgentFullName')}\r\n >\r\n Agent\r\n \r\n
    \r\n );\r\n\r\n const listingsTable = ({ paginationTableProps }) => (\r\n \r\n {toolKit => (\r\n
    \r\n \r\n \r\n { slicedTableData && (\r\n \r\n )}\r\n
    \r\n )}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n { listingsTable }\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nListingsTableWidget.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onListingSelect: PropTypes.func.isRequired,\r\n onColumnToggle: PropTypes.func,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default ListingsTableWidget;\r\n","export default __webpack_public_path__ + \"static/media/residential.cafecd31.jpg\";","export default __webpack_public_path__ + \"static/media/multi.b7113201.jpg\";","export default __webpack_public_path__ + \"static/media/mobile.e34c5fdb.jpg\";","export default __webpack_public_path__ + \"static/media/land.43e4413f.jpg\";","export default __webpack_public_path__ + \"static/media/commercial.8ed1fe06.jpg\";","export default __webpack_public_path__ + \"static/media/farm.52c5c7ce.jpg\";","export default __webpack_public_path__ + \"static/media/rent.d110b332.jpg\";","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nimport Carousel from 'react-bootstrap/Carousel';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nimport ResidentialImage from '@images/createListing/residential.jpg';\r\nimport MultiImage from '@images/createListing/multi.jpg';\r\nimport MobileImage from '@images/createListing/mobile.jpg';\r\nimport LandImage from '@images/createListing/land.jpg';\r\nimport CommercialImage from '@images/createListing/commercial.jpg';\r\nimport FarmImage from '@images/createListing/farm.jpg';\r\nimport RentImage from '@images/createListing/rent.jpg';\r\n\r\nconst CreateListingWidget = () => {\r\n const dispatch = useDispatch();\r\n const handleClicked = e => {\r\n e.stopPropagation();\r\n const clickedItem = e?.currentTarget?.dataset?.id;\r\n if (clickedItem) {\r\n const [operationType, definitionType, listingType] = clickedItem.split('-');\r\n dispatch(loadFormDefinition(operationType, definitionType, listingType, null, 'listing'));\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n

    Residential

    \r\n

    A property that is owned for people to live in. This includes detached, semi-detached, row and condominium properties

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Multi-Family

    \r\n

    A listing where 2 - 4 units are being sold together, regardless of whether they are connected.

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Rental

    \r\n

    Residential properties listed for rent or lease. This includes all residential property sub-types.

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Mobile

    \r\n

    Mobile home on rented/leased land. Note: If a mobile home includes land with the sale it should be listed under detached residential

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Land

    \r\n

    A property that does not have a dwelling on it, including rural acreage parcels and vacant residential lots. Should include all land parcels regardless of their zoning

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Commercial

    \r\n

    Office, industrial, retail property and multi-family with 5 or more units being sold in a single transaction

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    Agribusiness

    \r\n

    A property where the primary purpose is agricultural

    \r\n \r\n \r\n Create\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default CreateListingWidget;\r\n","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nconst ListingsDropdown = props => {\r\n const dispatch = useDispatch();\r\n\r\n // loads form definitions based on the data attribute of the \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ListingsDropdown;\r\n","export default __webpack_public_path__ + \"static/media/prospects_white_tr.21d2f97c.svg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport prospectsIcon from '@images/logos/vendor/prospects_white_tr.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst ProspectsWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"prospects-icon\"\r\n

    \r\n Prospects CRM™ \r\n is the ONLY CRM that seamlessly integrates with your MLS listing and client data, creating all kinds of timesaving automations and premium engagement tools.\r\n

    \r\n {\r\n window.open('https://ca.prospects.com/prospects/logon.do?locale=en', '_blank');\r\n gaEventTracker('Opened Prospects', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n Prospects CRM™\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default ProspectsWidget;\r\n","export default __webpack_public_path__ + \"static/media/crea-logo.db5919ff.svg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport creaIcon from '@images/logos/vendor/crea-logo.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst CreaWebformsWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"crea-icon\"\r\n

    \r\n CREA WEBForms® \r\n is a digital end-to-end solution for all your real estate transactions.\r\n

    \r\n {\r\n window.open('https://webforms.realtorlink.ca', '_blank');\r\n gaEventTracker('Opened CREA Webforms', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n CREA WEBForms®\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default CreaWebformsWidget;\r\n","export default __webpack_public_path__ + \"static/media/cloudCMA-logo.0c2ab40e.svg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport cloudCMAIcon from '@images/logos/vendor/cloudCMA-logo.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst CloudCMAWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"CloudCMA-icon\"\r\n

    \r\n Cloud CMA \r\n is a tool to helps you build better Comparative Market Analysis reports and interactive presentations that win more listings.\r\n

    \r\n {\r\n window.open('https://cloudcma.com/real-estate-agents', '_blank');\r\n gaEventTracker('Opened CloudCMA', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n Cloud CMA\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default CloudCMAWidget;\r\n","import React, { useEffect, useState } from 'react';\r\nimport Moment from 'react-moment';\r\n\r\nimport Carousel from 'react-bootstrap/Carousel';\r\nimport Alert from 'react-bootstrap/Alert';\r\nimport Collapse from 'react-bootstrap/Collapse';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nconst today = Date.now();\r\n\r\nconst NotificationsCarousel = () => {\r\n const [index, setIndex] = useState(0);\r\n const [open, setOpen] = useState(false);\r\n const [notificationData, setNotificationData] = useState([{}]);\r\n\r\n const handleSelect = selectedIndex => {\r\n setIndex(selectedIndex);\r\n };\r\n\r\n useEffect(() => {\r\n fetch('./data/notifications.json')\r\n .then(response => response.json())\r\n .then(json => {\r\n setNotificationData(json.filter(notification => Date.parse(notification.expirests) > today));\r\n });\r\n }, []);\r\n\r\n return (\r\n <>\r\n 1}\r\n controls={notificationData.length > 1}\r\n >\r\n {notificationData.map(item => (\r\n \r\n \r\n \r\n \r\n \r\n {item.createdts}\r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {item.title}\r\n \r\n \r\n {item.createdts}\r\n \r\n \r\n
    \r\n {item.intro}\r\n {item.message && (\r\n <>\r\n  \r\n setOpen(!open)}\r\n aria-controls={item.id}\r\n aria-expanded={open}\r\n className=\"mt-1 mb-2 mr-2 ml-0\"\r\n size=\"sm\"\r\n >\r\n {open ? (\r\n <>\r\n Read Less\r\n \r\n \r\n ) : (\r\n <>\r\n Read More\r\n \r\n \r\n )}\r\n \r\n \r\n {/* eslint-disable-next-line react/no-danger */}\r\n
    \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationsCarousel;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { FormCheck } from 'react-bootstrap';\r\nimport { isNull } from 'lodash';\r\n\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport { VIEW_LISTING_CLICKED } from '@redux/constants/ActionTypes';\r\nimport { getAuditLog } from '@redux/modules/audit';\r\nimport { loadListingToCopyById, loadMyListings, toggleShowBrokerListings } from '@redux/modules/listing';\r\nimport { loadCityNames, loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { selectMyListings } from '@redux/selectors/ListingSelector';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport ListingsTableWidget from '@components/widget/ListingsTableWidget';\r\nimport CreateListingWidget from '@components/widget/CreateListingWidget';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport ListingsDropdown from '@components/dropdowns/ListingsDropdown';\r\nimport ProspectsWidget from '@components/widget/ProspectsWidget';\r\nimport CreaWebformsWidget from '@components/widget/CreaWebformsWidget';\r\nimport CloudCMAWidget from '@components/widget/CloudCMAWidget';\r\nimport NotificationsCarousel from '@components/notifications/NotificationsCarousel';\r\n\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst MemberDashboard = () => {\r\n const lookupCities = { lookupnames: ['Lookup_Property_Listing_City'] }; // hardcoded since cities lookup string is not changing\r\n const [displayResults, setDisplayResults] = useState([]);\r\n const { mainActions, isBroker } = useAcl();\r\n\r\n // const isAdmin = useMemo(() => aclString.includes('ADMIN'), [aclString]);\r\n // const aclIsEmpty = useMemo(() => aclString === '', [aclString]);\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const cityNames = useSelector(state => state.formGeneration.cityNames);\r\n const allListings = useSelector(selectMyListings);\r\n const showBrokerListings = useSelector(state => state.listing.showBrokerListings);\r\n const username = useSelector(getUserName);\r\n\r\n const gaEventTracker = GAEventTracking('User');\r\n\r\n const viewListing = displayListing => dispatch({\r\n type: VIEW_LISTING_CLICKED, data: displayListing,\r\n });\r\n\r\n useEffect(() => {\r\n if (username !== null) {\r\n gaEventTracker('Entry MemberDashboard', `${username}`);\r\n }\r\n });\r\n\r\n // retrieves city lookup table values on mount\r\n useEffect(() => {\r\n dispatch(loadCityNames(lookupCities));\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(loadMyListings());\r\n }, []);\r\n\r\n /*\r\n listener for search listings results and city name redux states\r\n finds city name that matches city code in lookup tables\r\n if the city item is active, city codes are replaced with their description (actual city name)\r\n update city values directly in allListings and then set displayResults\r\n */\r\n useEffect(() => {\r\n if (isNull(allListings)) return;\r\n (allListings ?? []).map((listing, index) => {\r\n // default to null\r\n let cityString = null;\r\n // translate city ID to description when available\r\n if (listing?.City && cityNames) {\r\n const cityItem = cityNames[listing.City];\r\n if (cityItem?.Active) {\r\n cityString = cityItem.Description;\r\n }\r\n }\r\n allListings[index].City = cityString;\r\n return null;\r\n });\r\n setDisplayResults(allListings);\r\n }, [allListings, cityNames]);\r\n\r\n // Build where clause with UniqueID to retrieve records for\r\n const buildWhereClause = uniqueID => {\r\n const whereClause = {\r\n where: {\r\n clause: [\r\n {\r\n name: 'UniqueID',\r\n value: uniqueID,\r\n },\r\n ],\r\n },\r\n };\r\n return whereClause;\r\n };\r\n\r\n const listingSelected = row => {\r\n viewListing(row);\r\n };\r\n\r\n const copyClicked = row => {\r\n dispatch(loadFormDefinition('create', 'listings', row?.PropertyType?.toLowerCase(), null, 'listing', true));\r\n const copyRequest = buildWhereClause(row.UniqueID);\r\n copyRequest.formName = row?.PropertyType?.toLowerCase();\r\n dispatch(loadListingToCopyById(copyRequest));\r\n };\r\n\r\n const auditClicked = row => {\r\n dispatch(getAuditLog({ tableName: 'Listing', uniqueID: row.UniqueID, entityID: row.ListingID }));\r\n history.push('/audit');\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n \r\n Dashboard\r\n

    \r\n
    \r\n \r\n
    \r\n {isBroker ? (\r\n <>\r\n
    \r\n dispatch(toggleShowBrokerListings(!showBrokerListings))}\r\n label=\"Brokerage Listings\"\r\n checked={showBrokerListings}\r\n id=\"brokerListingSwitch\"\r\n className=\"ml-3\"\r\n />\r\n ) : null\r\n }\r\n >\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {mainActions.ListingsCreate && (\r\n \r\n \r\n Create Listing\r\n \r\n )}\r\n \r\n
    \r\n \r\n )}\r\n >\r\n \r\n \r\n
    \r\n \r\n ) : (\r\n <>\r\n
    \r\n dispatch(toggleShowBrokerListings(!showBrokerListings))}\r\n label=\"Brokerage Listings\"\r\n checked={showBrokerListings}\r\n id=\"brokerListingSwitch\"\r\n className=\"ml-3\"\r\n />\r\n ) : null\r\n }\r\n >\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {mainActions.ListingsCreate && (\r\n \r\n \r\n Create Listing\r\n \r\n )}\r\n \r\n
    \r\n \r\n )}\r\n >\r\n \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default MemberDashboard;\r\n","import { isEmpty } from 'lodash';\r\nimport { getTimeElapsedSinceUTCDate } from '@helpers/Helpers';\r\nimport { createSelector } from 'reselect';\r\n\r\nconst buildLabels = totalNumberOfQuarters => {\r\n const currentYear = new Date().getFullYear();\r\n const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\r\n const yearQuarterArray = [];\r\n\r\n for (let year = 1990; year <= currentYear; year += 1) {\r\n quarters.forEach(quarter => {\r\n yearQuarterArray.push(`${quarter} ${year}`);\r\n });\r\n }\r\n\r\n return yearQuarterArray.slice(0, totalNumberOfQuarters);\r\n};\r\n\r\nconst buildYearLabels = () => {\r\n const currentYear = new Date().getFullYear();\r\n const yearArray = [];\r\n\r\n for (let year = 1990; year <= currentYear; year += 1) {\r\n yearArray.push(`${year}`);\r\n }\r\n\r\n return yearArray;\r\n};\r\n\r\nconst quarterlyAverageByYear = input => {\r\n const yearData = {};\r\n const result = [];\r\n\r\n input.forEach(item => {\r\n const year = item.period.split(' ')[1];\r\n const salesValue = item.sales;\r\n\r\n if (!yearData[year]) {\r\n yearData[year] = { total: 0, count: 0 };\r\n }\r\n\r\n yearData[year].total += salesValue;\r\n yearData[year].count += 1;\r\n });\r\n\r\n Object.entries(yearData).forEach(([, { total, count }]) => {\r\n const avgSales = total / count;\r\n result.push(avgSales);\r\n });\r\n\r\n return result;\r\n};\r\n\r\nconst totalByYear = input => {\r\n const result = [];\r\n const yearToSalesMap = {};\r\n input.forEach(item => {\r\n const year = item.period.slice(-4);\r\n if (yearToSalesMap[year] === undefined) {\r\n yearToSalesMap[year] = 0;\r\n }\r\n yearToSalesMap[year] += item.sales;\r\n });\r\n\r\n Object.keys(yearToSalesMap).forEach(year => {\r\n result.push(yearToSalesMap[year]);\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport const selectAggregateData = ({ dataPortal }) => dataPortal.aggregateData ?? [];\r\n\r\nexport const selectAggregateDataQuarterlyAveragesByYear = createSelector(\r\n selectAggregateData,\r\n aggregateData => {\r\n if (isEmpty(aggregateData)) return [];\r\n\r\n const labels = buildYearLabels();\r\n const tempSales = aggregateData.map(item => ({ period: Object.values(item)[0], sales: Object.values(item)[1] }));\r\n const tempAdjusted = aggregateData.map(item => ({ period: Object.values(item)[0], sales: Object.values(item)[2] }));\r\n const salesSummarizedByYear = quarterlyAverageByYear(tempSales);\r\n const adjustedSummarizedByYear = quarterlyAverageByYear(tempAdjusted);\r\n\r\n return {\r\n labels,\r\n sales: salesSummarizedByYear,\r\n adjusted: adjustedSummarizedByYear,\r\n };\r\n },\r\n);\r\n\r\nexport const selectAggregateDataFilteredQuarterlyAveragesByYear = createSelector(\r\n selectAggregateDataQuarterlyAveragesByYear,\r\n (state, { startDate, endDate }) => ({ startDate, endDate }),\r\n (aggregateData, dateRange) => {\r\n const startYear = new Date(dateRange.startDate).getFullYear();\r\n const endYear = new Date(dateRange.endDate).getFullYear();\r\n if (isEmpty(aggregateData) || startYear < 1970 || endYear < 1970) return [];\r\n const filteredLabelIndexes = [];\r\n const labels = buildYearLabels().filter((label, index) => {\r\n const year = parseInt(label, 10);\r\n if (year >= startYear && year <= endYear) {\r\n filteredLabelIndexes.push(index);\r\n return label;\r\n }\r\n return null;\r\n });\r\n const sales = filteredLabelIndexes.map(index => Object.values(aggregateData.sales)[index]);\r\n const adjusted = filteredLabelIndexes.map(index => Object.values(aggregateData.adjusted)[index]);\r\n return {\r\n labels,\r\n sales,\r\n adjusted,\r\n };\r\n },\r\n);\r\n\r\nexport const selectAggregateDataTotalsByQuarterByYear = createSelector(\r\n selectAggregateData,\r\n aggregateData => {\r\n if (isEmpty(aggregateData)) return [];\r\n\r\n const labels = buildLabels(aggregateData.length);\r\n const sales = aggregateData.map(item => Object.values(item)[1]);\r\n const adjusted = aggregateData.map(item => Object.values(item)[2]);\r\n\r\n return {\r\n labels,\r\n sales,\r\n adjusted,\r\n };\r\n },\r\n);\r\n\r\nexport const selectAggregateDataFilteredTotalsByQuarterByYear = createSelector(\r\n selectAggregateDataTotalsByQuarterByYear,\r\n (state, { startDate, endDate }) => ({ startDate, endDate }),\r\n (aggregateData, dateRange) => {\r\n const startYear = new Date(dateRange.startDate).getFullYear();\r\n const endYear = new Date(dateRange.endDate).getFullYear();\r\n if (isEmpty(aggregateData) || startYear < 1970 || endYear < 1970) return [];\r\n const filteredLabelIndexes = [];\r\n const labels = (buildLabels(aggregateData.length)).filter((label, index) => {\r\n const year = parseInt(label.slice(-4), 10);\r\n if (year >= startYear && year <= endYear) {\r\n filteredLabelIndexes.push(index);\r\n return label;\r\n }\r\n return null;\r\n });\r\n const sales = filteredLabelIndexes.map(index => Object.values(aggregateData.sales)[index]);\r\n const adjusted = filteredLabelIndexes.map(index => Object.values(aggregateData.adjusted)[index]);\r\n return {\r\n labels,\r\n sales,\r\n adjusted,\r\n };\r\n },\r\n);\r\n\r\nexport const selectAggregateDataTotalsByYear = createSelector(\r\n selectAggregateData,\r\n aggregateData => {\r\n if (isEmpty(aggregateData)) return [];\r\n const labels = buildYearLabels();\r\n const tempSales = aggregateData.map(item => ({ period: Object.values(item)[0], sales: Object.values(item)[1] }));\r\n const tempAdjusted = aggregateData.map(item => ({ period: Object.values(item)[0], sales: Object.values(item)[2] }));\r\n const salesTotalsByYear = totalByYear(tempSales);\r\n const adjustedTotalsByYear = totalByYear(tempAdjusted);\r\n return {\r\n labels,\r\n sales: salesTotalsByYear,\r\n adjusted: adjustedTotalsByYear,\r\n };\r\n },\r\n);\r\n\r\nexport const selectAggregateDataFilteredTotalsByYear = createSelector(\r\n selectAggregateDataTotalsByYear,\r\n (state, { startDate, endDate }) => ({ startDate, endDate }),\r\n (aggregateData, dateRange) => {\r\n const startYear = new Date(dateRange.startDate).getFullYear();\r\n const endYear = new Date(dateRange.endDate).getFullYear();\r\n if (isEmpty(aggregateData) || startYear < 1970 || endYear < 1970) return [];\r\n const filteredLabelIndexes = [];\r\n const labels = buildYearLabels().filter((label, index) => {\r\n const year = parseInt(label, 10);\r\n if (year >= startYear && year <= endYear) {\r\n filteredLabelIndexes.push(index);\r\n return label;\r\n }\r\n return null;\r\n });\r\n const sales = filteredLabelIndexes.map(index => Object.values(aggregateData.sales)[index]);\r\n const adjusted = filteredLabelIndexes.map(index => Object.values(aggregateData.adjusted)[index]);\r\n return {\r\n labels,\r\n sales,\r\n adjusted,\r\n };\r\n },\r\n);\r\n\r\nexport const selectMasterDataFileRequests = ({ dataPortal }) => dataPortal.masterDataFileRequests ?? [];\r\n\r\nexport const selectNonExpiredDataFileRequests = createSelector(\r\n selectMasterDataFileRequests,\r\n dataFileRequests => {\r\n if (isEmpty(dataFileRequests)) return [];\r\n return dataFileRequests.filter(result => result.DateLinkTimeToExpiry !== 'Expired');\r\n },\r\n);\r\n\r\nexport const selectUniqueDataFileRequests = createSelector(\r\n selectMasterDataFileRequests,\r\n masterDataFiles => {\r\n const uniqueDataFileRequests = [];\r\n masterDataFiles.forEach(df => {\r\n if (!uniqueDataFileRequests.find(request => request.SqlWhereClause === df.SqlWhereClause)) {\r\n uniqueDataFileRequests.push({\r\n UniqueID: df.UniqueID,\r\n SqlWhereClause: df.SqlWhereClause,\r\n UserCriteriaName: df.UserCriteriaName,\r\n JsonTree: df.JsonTree,\r\n DateCreated: new Date(df.DateCreated),\r\n DateCreatedString: df.DateCreated,\r\n DateCreatedTimeElapsed: getTimeElapsedSinceUTCDate(`${df.DateCreated}Z`),\r\n IsSavedSearchDeleted: df.IsSavedSearchDeleted,\r\n NumberOfRuns: 1,\r\n });\r\n } else {\r\n const requestIndex = uniqueDataFileRequests.findIndex(request => request.SqlWhereClause === df.SqlWhereClause);\r\n uniqueDataFileRequests[requestIndex].NumberOfRuns += 1;\r\n uniqueDataFileRequests[requestIndex].DateCreated = uniqueDataFileRequests[requestIndex].DateCreated > new Date(df.DateCreated) ? uniqueDataFileRequests[requestIndex].DateCreated : new Date(df.DateCreated);\r\n uniqueDataFileRequests[requestIndex].DateCreatedString = uniqueDataFileRequests[requestIndex].DateCreated > new Date(df.DateCreated) ? uniqueDataFileRequests[requestIndex].DateCreatedString : df.DateCreated;\r\n uniqueDataFileRequests[requestIndex].DateCreatedTimeElapsed = getTimeElapsedSinceUTCDate(`${uniqueDataFileRequests[requestIndex].DateCreatedString}Z`);\r\n }\r\n });\r\n return uniqueDataFileRequests.sort((a, b) => b.DateCreated - a.DateCreated);\r\n },\r\n);\r\n\r\nexport const selectNonDeletedDataFileRequests = createSelector(\r\n selectMasterDataFileRequests,\r\n masterDataFileRequests => {\r\n if (isEmpty(masterDataFileRequests)) return [];\r\n return masterDataFileRequests.filter(request => !request.IsDeleted);\r\n },\r\n);\r\n\r\nexport const selectNonDeletedDataFileSavedSearches = createSelector(\r\n selectUniqueDataFileRequests,\r\n uniqueDataFileRequests => {\r\n if (isEmpty(uniqueDataFileRequests)) return [];\r\n return uniqueDataFileRequests.filter(request => !request.IsSavedSearchDeleted);\r\n },\r\n);\r\n\r\nexport const selectLast25DataFileSavedSearches = createSelector(\r\n selectNonDeletedDataFileSavedSearches,\r\n nonDeletedSavedSearches => {\r\n if (isEmpty(nonDeletedSavedSearches)) return [];\r\n\r\n const last25SavedSearches = nonDeletedSavedSearches.filter((_, index) => index < 25);\r\n return last25SavedSearches;\r\n },\r\n);\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory, { PaginationProvider } from 'react-bootstrap-table2-paginator';\r\nimport { isNull } from 'lodash';\r\n\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport TableLoaderSmall from '@components/loaders/TableLoaderSmall';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\n\r\nconst DataFileSavedSearchesTableWidget = ({\r\n displayData,\r\n}) => {\r\n const headerSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = useMemo(() => [\r\n {\r\n dataField: 'UniqueID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'JsonTree',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreated',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreatedString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'UserCriteriaName',\r\n text: 'Name',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'NumberOfRuns',\r\n text: 'Runs',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n headerStyle: { width: '30px' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'DateCreatedTimeElapsed',\r\n text: 'Created',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n ], []);\r\n\r\n const expandRow = {\r\n onlyOneExpanding: true,\r\n showExpandColumn: true,\r\n expandByColumnOnly: true,\r\n expandColumnPosition: 'right',\r\n classes: 'text-center',\r\n renderer: row => (\r\n
    \r\n Criteria:\r\n  \r\n {row.SqlWhereClause}\r\n
    \r\n ),\r\n expandHeaderColumnRenderer: ({ isAnyExpands }) => {\r\n if (isAnyExpands) {\r\n return (\r\n Collapse All}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand All}\r\n >\r\n \r\n \r\n );\r\n },\r\n expandColumnRenderer: ({ expanded }) => {\r\n if (expanded) {\r\n return (\r\n Collapse}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand}\r\n >\r\n \r\n \r\n );\r\n },\r\n };\r\n\r\n const defaultSorted = [{\r\n dataField: 'DateCreated',\r\n order: 'desc',\r\n }];\r\n\r\n const paginationOptions = {\r\n sizePerPage: 5,\r\n pageStartIndex: 1,\r\n hideSizePerPage: true, // Hide the sizePerPage dropdown always\r\n hidePageListOnlyOnePage: true, // Hide the pagination list when only one page\r\n showTotal: displayData?.length > 0,\r\n };\r\n\r\n const dataFileSavedSearchesTable = ({ paginationTableProps }) => (\r\n \r\n {toolKit => (\r\n
    \r\n \r\n { displayData && (\r\n \r\n )}\r\n
    \r\n )}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n { dataFileSavedSearchesTable }\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nDataFileSavedSearchesTableWidget.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default DataFileSavedSearchesTableWidget;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nconst DataFileActionButtons = ({\r\n canEdit,\r\n canDownload,\r\n canCopy,\r\n canDelete,\r\n editClicked,\r\n downloadClicked,\r\n copyClicked,\r\n deleteClicked,\r\n currRow,\r\n sizeSM,\r\n}) => {\r\n const onEditClick = () => editClicked(currRow);\r\n const onDownloadClick = e => downloadClicked(e, currRow);\r\n const onCopyClick = () => copyClicked(currRow);\r\n const onDeleteClick = () => deleteClicked(currRow);\r\n\r\n return (\r\n <>\r\n {canCopy && (\r\n Copy Criteria}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {canDownload && currRow.ReadyForDownload && currRow.DateLinkExpiresString !== 'Expired' && (\r\n Download CSV}\r\n >\r\n onDownloadClick(e, currRow)}\r\n aria-label={`Download ${currRow.SqlWhereClause}`}\r\n >\r\n \r\n \r\n \r\n )}\r\n {canEdit && (\r\n Edit Name}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {canDelete && (\r\n Delete Crtiteria}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nDataFileActionButtons.propTypes = {\r\n canEdit: PropTypes.bool,\r\n canDownload: PropTypes.bool,\r\n canCopy: PropTypes.bool,\r\n canDelete: PropTypes.bool,\r\n editClicked: PropTypes.func,\r\n downloadClicked: PropTypes.func,\r\n copyClicked: PropTypes.func,\r\n deleteClicked: PropTypes.func,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n ReadyForDownload: PropTypes.bool,\r\n DateLinkExpiresString: PropTypes.string,\r\n SqlWhereClause: PropTypes.string,\r\n JsonTree: PropTypes.string,\r\n }),\r\n sizeSM: PropTypes.bool,\r\n};\r\n\r\nexport default DataFileActionButtons;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory, { PaginationProvider } from 'react-bootstrap-table2-paginator';\r\n\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n\r\nimport TableLoaderSmall from '@components/loaders/TableLoaderSmall';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport DataFileActionButtons from '@components/table/actionButtons/DataFileActionButtons';\r\nimport apiService from '@services/apiService';\r\n\r\nimport { isEmpty, isNull } from 'lodash';\r\n\r\nconst DataFileRequestsTableWidget = ({\r\n displayData,\r\n}) => {\r\n const filteredData = useMemo(() => displayData.filter(item => item.FileType !== 'N/A'), [displayData]);\r\n\r\n const onDownloadClicked = async (e, row) => {\r\n e.preventDefault();\r\n\r\n try {\r\n const response = await apiService.DataPortal.requestPresignedLink({ UniqueID: row.UniqueID, FileName: row.FileName, UserID: row.UserID });\r\n if (isEmpty(response.error)) {\r\n const s3Link = response;\r\n const link = document.createElement('a');\r\n link.href = s3Link;\r\n link.setAttribute('download', `${row.UserFileName}`);\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } else {\r\n throw new Error(response);\r\n }\r\n } catch (error) {\r\n // TODO: Rollbar this error\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Download Error',\r\n html: '

    There was an error downloading your file. Please contact Pillar 9 Support for assistance.

    ',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n },\r\n showConfirmButton: true,\r\n confirmButtonText: 'OK',\r\n });\r\n }\r\n };\r\n\r\n const headerSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const columns = useMemo(() => [\r\n {\r\n dataField: 'UniqueID',\r\n text: 'Unique ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateLinkExpiresString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreated',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreatedString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'UserID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ReadyForDownload',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'FileName',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'FileType',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '50px' },\r\n },\r\n {\r\n dataField: 'UserFileName',\r\n text: 'Name',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'FileSize',\r\n text: 'Size',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '50px' },\r\n formatter: cellContent => (cellContent === 'Waiting...'\r\n ?
    \r\n : cellContent),\r\n },\r\n {\r\n dataField: 'DateCreatedTimeElapsed',\r\n text: 'Created',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '100px' },\r\n },\r\n ], []);\r\n\r\n const expandRow = {\r\n onlyOneExpanding: true,\r\n showExpandColumn: true,\r\n expandByColumnOnly: true,\r\n expandColumnPosition: 'right',\r\n classes: 'text-center',\r\n renderer: row => (\r\n
    \r\n Criteria:\r\n  \r\n {row.SqlWhereClause}\r\n
    \r\n ),\r\n expandHeaderColumnRenderer: ({ isAnyExpands }) => {\r\n if (isAnyExpands) {\r\n return (\r\n Collapse All}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand All}\r\n >\r\n \r\n \r\n );\r\n },\r\n expandColumnRenderer: ({ expanded }) => {\r\n if (expanded) {\r\n return (\r\n Collapse}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand}\r\n >\r\n \r\n \r\n );\r\n },\r\n };\r\n\r\n // Sets the default sort order to desc by UniqueID\r\n const defaultSorted = [{\r\n dataField: 'UniqueID',\r\n order: 'desc',\r\n }];\r\n\r\n const paginationOptions = {\r\n sizePerPage: 5,\r\n pageStartIndex: 1,\r\n hideSizePerPage: true, // Hide the sizePerPage dropdown always\r\n hidePageListOnlyOnePage: true, // Hide the pagination list when only one page\r\n showTotal: displayData?.length > 0,\r\n };\r\n\r\n const dataFileRequestsTable = ({ paginationTableProps }) => (\r\n \r\n {toolKit => (\r\n
    \r\n \r\n { filteredData && (\r\n \r\n )}\r\n
    \r\n )}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n { dataFileRequestsTable }\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nDataFileRequestsTableWidget.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default DataFileRequestsTableWidget;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Row from 'react-bootstrap/Row';\r\nimport { Line } from 'react-chartjs-2';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n} from 'chart.js';\r\nimport Form from 'react-bootstrap/Form';\r\n\r\nconst AggregateDataChartWidget = ({\r\n displayData,\r\n}) => {\r\n ChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n );\r\n\r\n ChartJS.defaults.elements.line.tension = 0.3;\r\n ChartJS.defaults.font.family = '\"Poppins\", sans-serif';\r\n\r\n const [showFilteredTotalsByQuarterByYear, setShowFilteredTotalsByQuarterByYear] = useState({ sales: true, adjusted: true });\r\n\r\n const handleFilteredTotalsByQuarterByYearSalesToggled = () => {\r\n setShowFilteredTotalsByQuarterByYear({ ...showFilteredTotalsByQuarterByYear, sales: !showFilteredTotalsByQuarterByYear.sales });\r\n };\r\n\r\n const handleFilteredTotalsByQuarterByYearAdjustedToggled = () => {\r\n setShowFilteredTotalsByQuarterByYear({ ...showFilteredTotalsByQuarterByYear, adjusted: !showFilteredTotalsByQuarterByYear.adjusted });\r\n };\r\n\r\n const options = {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n plugins: {\r\n datalabels: {\r\n display: false,\r\n },\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: false,\r\n },\r\n },\r\n };\r\n\r\n const data = {\r\n labels: displayData.labels,\r\n datasets: [\r\n {\r\n label: 'Actual',\r\n data: displayData.sales,\r\n borderColor: 'rgb(255, 99, 132)',\r\n backgroundColor: 'rgba(255, 99, 132, 0.5)',\r\n },\r\n {\r\n label: 'Seasonally Adjusted',\r\n data: displayData.adjusted,\r\n borderColor: 'rgb(75, 192, 192)',\r\n backgroundColor: 'rgba(75, 192, 192, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n const filteredTotalsByQuarterByYearData = {\r\n ...data,\r\n datasets: data.datasets.filter(\r\n dataset => (\r\n dataset.label === 'Actual' && showFilteredTotalsByQuarterByYear.sales\r\n ) || (\r\n dataset.label === 'Seasonally Adjusted' && showFilteredTotalsByQuarterByYear.adjusted\r\n ),\r\n ),\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actual\r\n \r\n )}\r\n className=\"mr-6 fs-sm\"\r\n bsCustomPrefix={{ }}\r\n checked={showFilteredTotalsByQuarterByYear.sales}\r\n onChange={handleFilteredTotalsByQuarterByYearSalesToggled}\r\n />\r\n \r\n \r\n Seasonally Adjusted\r\n \r\n )}\r\n className=\"fs-sm\"\r\n checked={showFilteredTotalsByQuarterByYear.adjusted}\r\n onChange={handleFilteredTotalsByQuarterByYearAdjustedToggled}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nAggregateDataChartWidget.propTypes = {\r\n displayData: PropTypes.objectOf(\r\n PropTypes.shape({\r\n labels: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n selectLabels: PropTypes.arrayOf(PropTypes.shape({\r\n value: PropTypes.number.isRequired,\r\n label: PropTypes.string.isRequired,\r\n })).isRequired,\r\n sales: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n adjusted: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n }).isRequired,\r\n ).isRequired,\r\n};\r\n\r\nexport default AggregateDataChartWidget;\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport useAcl from '@hooks/useAcl';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\nimport {\r\n selectAggregateDataTotalsByQuarterByYear,\r\n selectMasterDataFileRequests,\r\n selectNonDeletedDataFileSavedSearches,\r\n} from '@redux/selectors/DataPortalSelector';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport DataFileSavedSearchesTableWidget from '@components/widget/DataFileSavedSearchesTableWidget';\r\nimport DataFileRequestsTableWidget from '@components/widget/DataFileRequestsTableWidget';\r\nimport AggregateDataChartWidget from '@components/widget/AggregateDataChartWidget';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Row from 'react-bootstrap/Row';\r\nimport { isEmpty } from 'lodash';\r\n\r\nconst DataPortalDashboard = () => {\r\n const { is3rdPartyDataPortalTransactionalUser, is3rdPartyDataPortalUser } = useAcl();\r\n const username = useSelector(getUserName);\r\n const dataFileSavedSearches = useSelector(selectNonDeletedDataFileSavedSearches);\r\n const dataFileRequests = useSelector(selectMasterDataFileRequests);\r\n const aggregateTotalsByQuarterByYear = useSelector(selectAggregateDataTotalsByQuarterByYear);\r\n\r\n const gaEventTracker = GAEventTracking('User');\r\n\r\n useEffect(() => {\r\n if (username !== null) {\r\n gaEventTracker('Entry DataPortalDashboard', `${username}`);\r\n }\r\n });\r\n\r\n // useEffect(() => console.log(aggregateTotalsByQuarterByYear), [aggregateTotalsByQuarterByYear]);\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n \r\n Dashboard\r\n

    \r\n
    \r\n \r\n {is3rdPartyDataPortalUser && (\r\n \r\n \r\n {!isEmpty(aggregateTotalsByQuarterByYear) && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n {is3rdPartyDataPortalTransactionalUser && (\r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default DataPortalDashboard;\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport MemberDashboard from '@components/dashboards/MemberDashboard';\r\nimport DataPortalDashboard from '@components/dashboards/DataPortalDashboard';\r\n\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\n// Landing page\r\nconst Dashboard = () => {\r\n const {\r\n aclIsEmpty,\r\n is3rdPartyDataPortalUser,\r\n } = useAcl();\r\n\r\n const username = useSelector(getUserName);\r\n\r\n const gaEventTracker = GAEventTracking('User');\r\n\r\n useEffect(() => {\r\n if (username !== null) {\r\n gaEventTracker('Entry Dashboard', `${username}`);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {!aclIsEmpty && (\r\n is3rdPartyDataPortalUser ? : \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Dashboard;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useParams } from 'react-router-dom';\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport {\r\n selectEntity,\r\n selectCallback,\r\n} from '@redux/selectors/RowLockSelector';\r\nimport {\r\n setRowLockCallback,\r\n} from '@redux/modules/rowLock';\r\nimport { isValidEntity } from '@utils/rowLock';\r\nimport isEqual from 'lodash/isEqual';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst RowLockPage = () => {\r\n const params = useParams(); // use for retrieving the parameters of the current route\r\n const dispatch = useDispatch();\r\n const reduxRowLockEntity = useSelector(selectEntity);\r\n const reduxRowLockCallback = useSelector(selectCallback);\r\n\r\n /* Build the rowLock entity based on received route parameters. */\r\n const rowLockEntity = useMemo(() => ({ type: params.entityType, id: parseInt(params.entityId, 10) }), [params]);\r\n const {\r\n checked,\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n lockedByMe,\r\n lastUpdatedOn,\r\n lastCheckedOn,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n takeoverLock,\r\n discardChanges,\r\n LockMessage,\r\n LockOwnerMessage,\r\n } = useRowLock({ rowLockEntity });\r\n\r\n const entitiesAreValidAndMatch = useMemo(() => isValidEntity(rowLockEntity) && isEqual(rowLockEntity, reduxRowLockEntity), [rowLockEntity, reduxRowLockEntity]);\r\n\r\n /* Check if there is any callback action waiting to be fired. */\r\n useEffect(() => {\r\n if (entitiesAreValidAndMatch && reduxRowLockCallback && locked && lockingAuthorized) {\r\n reduxRowLockCallback();\r\n dispatch(setRowLockCallback(null));\r\n }\r\n }, [entitiesAreValidAndMatch, reduxRowLockCallback, locked, lockingAuthorized]);\r\n\r\n if (!isValidEntity(rowLockEntity)) {\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    Invalid entity

    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n if (!checked) return null;\r\n\r\n if (!locked) {\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    This entity is not currently locked.

    \r\n\r\n {entitiesAreValidAndMatch && reduxRowLockCallback && (\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {lockingAuthorized\r\n ? (\r\n \r\n )\r\n : (\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default RowLockPage;\r\n","import React, { useState, forwardRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n} from 'chart.js';\r\nimport { Line, Bar } from 'react-chartjs-2';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport apiService from '@services/apiService';\r\nimport {\r\n selectAggregateDataFilteredQuarterlyAveragesByYear,\r\n selectAggregateDataFilteredTotalsByQuarterByYear,\r\n selectAggregateDataFilteredTotalsByYear,\r\n} from '@redux/selectors/DataPortalSelector';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport Form from 'react-bootstrap/Form';\r\nimport DropdownButton from 'react-bootstrap/DropdownButton';\r\nimport DatePicker from 'react-datepicker';\r\n\r\nconst AggregateDataPage = () => {\r\n const [startDate, setStartDate] = useState(new Date().setFullYear(new Date().getFullYear() - 11));\r\n const [endDate, setEndDate] = useState(new Date().setFullYear(new Date().getFullYear() - 1));\r\n const [showFilteredQuarterlyAveragesByYear, setShowFilteredQuarterlyAveragesByYear] = useState({ sales: true, adjusted: true });\r\n const [showFilteredTotalsByQuarterByYear, setShowFilteredTotalsByQuarterByYear] = useState({ sales: true, adjusted: true });\r\n const [showFilteredTotalsByYear, setShowFilteredTotalsByYear] = useState({ sales: true, adjusted: true });\r\n\r\n const handleFilteredQuarterlyAveragesByYearSalesToggled = () => {\r\n setShowFilteredQuarterlyAveragesByYear({ ...showFilteredQuarterlyAveragesByYear, sales: !showFilteredQuarterlyAveragesByYear.sales });\r\n };\r\n\r\n const handleFilteredQuarterlyAveragesByYearAdjustedToggled = () => {\r\n setShowFilteredQuarterlyAveragesByYear({ ...showFilteredQuarterlyAveragesByYear, adjusted: !showFilteredQuarterlyAveragesByYear.adjusted });\r\n };\r\n\r\n const handleFilteredTotalsByQuarterByYearSalesToggled = () => {\r\n setShowFilteredTotalsByQuarterByYear({ ...showFilteredTotalsByQuarterByYear, sales: !showFilteredTotalsByQuarterByYear.sales });\r\n };\r\n\r\n const handleFilteredTotalsByQuarterByYearAdjustedToggled = () => {\r\n setShowFilteredTotalsByQuarterByYear({ ...showFilteredTotalsByQuarterByYear, adjusted: !showFilteredTotalsByQuarterByYear.adjusted });\r\n };\r\n\r\n const handleFilteredTotalsByYearSalesToggled = () => {\r\n setShowFilteredTotalsByYear({ ...showFilteredTotalsByYear, sales: !showFilteredTotalsByYear.sales });\r\n };\r\n\r\n const handleFilteredTotalsByYearAdjustedToggled = () => {\r\n setShowFilteredTotalsByYear({ ...showFilteredTotalsByYear, adjusted: !showFilteredTotalsByYear.adjusted });\r\n };\r\n\r\n const filteredQuarterlyAveragesByYear = useSelector(state => selectAggregateDataFilteredQuarterlyAveragesByYear(state, { startDate, endDate }));\r\n const filteredTotalsByQuarterByYear = useSelector(state => selectAggregateDataFilteredTotalsByQuarterByYear(state, { startDate, endDate }));\r\n const filteredTotalsByYear = useSelector(state => selectAggregateDataFilteredTotalsByYear(state, { startDate, endDate }));\r\n\r\n ChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n );\r\n\r\n ChartJS.defaults.elements.line.tension = 0.3;\r\n ChartJS.defaults.font.family = 'Poppins, sans-serif';\r\n\r\n const options = {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n plugins: {\r\n datalabels: {\r\n display: false,\r\n },\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: false,\r\n },\r\n },\r\n };\r\n\r\n const quarterlyData = {\r\n chartTitle: 'Quarterly Residential Sales',\r\n labels: filteredTotalsByQuarterByYear.labels,\r\n datasets: [\r\n {\r\n label: 'Actual',\r\n data: filteredTotalsByQuarterByYear.sales,\r\n borderColor: 'rgb(255, 166, 87)',\r\n backgroundColor: 'rgba(255, 166, 87, 0.5)',\r\n },\r\n {\r\n label: 'Seasonally Adjusted',\r\n data: filteredTotalsByQuarterByYear.adjusted,\r\n borderColor: 'rgb(111, 174, 173)',\r\n backgroundColor: 'rgba(111, 174, 173, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n const yearlyData = {\r\n chartTitle: 'Annual Residential Sales',\r\n labels: filteredTotalsByYear.labels,\r\n datasets: [\r\n {\r\n label: 'Actual',\r\n data: filteredTotalsByYear.sales,\r\n borderColor: 'rgb(255, 99, 132)',\r\n backgroundColor: 'rgba(255, 99, 132, 0.5)',\r\n },\r\n {\r\n label: 'Seasonally Adjusted',\r\n data: filteredTotalsByYear.adjusted,\r\n borderColor: 'rgb(54, 162, 235)',\r\n backgroundColor: 'rgba(54, 162, 235, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n const quarterlyAveragesData = {\r\n chartTitle: 'Quarterly Average Residential Sales',\r\n labels: filteredQuarterlyAveragesByYear.labels,\r\n datasets: [\r\n {\r\n type: 'bar',\r\n label: 'Actual',\r\n data: filteredQuarterlyAveragesByYear.sales,\r\n borderColor: 'rgb(153, 102, 255)',\r\n backgroundColor: 'rgba(153, 102, 255, 0.5)',\r\n },\r\n {\r\n type: 'line',\r\n label: 'Seasonally Adjusted',\r\n data: filteredQuarterlyAveragesByYear.adjusted,\r\n borderColor: 'rgb(255, 205, 86)',\r\n backgroundColor: 'rgba(255, 205, 86, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n const filteredQuarterlyAveragesData = {\r\n ...quarterlyAveragesData,\r\n datasets: quarterlyAveragesData.datasets.filter(\r\n dataset => (\r\n dataset.label === 'Actual' && showFilteredQuarterlyAveragesByYear.sales\r\n ) || (\r\n dataset.label === 'Seasonally Adjusted' && showFilteredQuarterlyAveragesByYear.adjusted\r\n ),\r\n ),\r\n };\r\n\r\n const filteredTotalsByQuarterByYearData = {\r\n ...quarterlyData,\r\n datasets: quarterlyData.datasets.filter(\r\n dataset => (\r\n dataset.label === 'Actual' && showFilteredTotalsByQuarterByYear.sales\r\n ) || (\r\n dataset.label === 'Seasonally Adjusted' && showFilteredTotalsByQuarterByYear.adjusted\r\n ),\r\n ),\r\n };\r\n\r\n const filteredTotalsByYearData = {\r\n ...yearlyData,\r\n datasets: yearlyData.datasets.filter(\r\n dataset => (\r\n dataset.label === 'Actual' && showFilteredTotalsByYear.sales\r\n ) || (\r\n dataset.label === 'Seasonally Adjusted' && showFilteredTotalsByYear.adjusted\r\n ),\r\n ),\r\n };\r\n\r\n const onChange = dates => {\r\n const [start, end] = dates;\r\n setStartDate(start);\r\n setEndDate(end);\r\n };\r\n\r\n const handleDownloadAll = async () => {\r\n try {\r\n const response = await apiService.DataPortal.downloadAllAggregateData();\r\n // Create a temp URL for the file blob\r\n const fileUrl = window.URL.createObjectURL(new Blob([response]));\r\n // Create a temp link and click it to download the file\r\n const link = document.createElement('a');\r\n link.href = fileUrl;\r\n link.setAttribute('download', 'City of Calgary Quarterly Adjusted (all data).xlsx');\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n // TODO: RollBar this error\r\n console.error(error);\r\n }\r\n };\r\n\r\n const handleDownloadFiltered = async data => {\r\n try {\r\n const array = [];\r\n for (let i = 0; i < data.labels.length; i += 1) {\r\n const obj = {\r\n period: data.labels[i],\r\n sales: data.datasets[0].data[i],\r\n seasonallyAdjusted: data.datasets[1].data[i],\r\n };\r\n array.push(obj);\r\n }\r\n const response = await apiService.DataPortal.downloadFilteredAggregateData(array);\r\n // Create a temp URL for the file blob\r\n const fileUrl = window.URL.createObjectURL(new Blob([response]));\r\n // Create a temp link and click it to download the file\r\n const link = document.createElement('a');\r\n const startYear = new Date(startDate).getFullYear();\r\n const endYear = new Date(endDate).getFullYear();\r\n link.href = fileUrl;\r\n link.setAttribute('download', `City of Calgary Adjusted - ${data.chartTitle} (${startYear} - ${endYear}).xlsx`);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch (error) {\r\n // TODO: RollBar this error\r\n console.error(error);\r\n }\r\n };\r\n\r\n const DateWithAddOnCalendar = forwardRef(({\r\n className: _className, val, onClick, ...remaining\r\n }, ref) => (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n ));\r\n\r\n DateWithAddOnCalendar.propTypes = {\r\n className: PropTypes.string, val: PropTypes.string, onClick: PropTypes.func,\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Aggregate\r\n Data\r\n Calgary, Alberta\r\n

    \r\n
    \r\n \r\n
    \r\n

    \r\n Quarterly Adjusted\r\n Data and Chart (.xlsx)\r\n

    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n selected={startDate}\r\n onChange={onChange}\r\n startDate={startDate}\r\n endDate={endDate}\r\n minDate={new Date('1990/01/01')}\r\n maxDate={new Date()}\r\n showYearPicker\r\n dateFormat=\"yyyy\"\r\n yearItemNumber={16}\r\n selectsRange\r\n />\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n Export\r\n \r\n )}\r\n >\r\n handleDownloadFiltered(quarterlyData)}>\r\n \r\n Excel\r\n \r\n \r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actual\r\n \r\n )}\r\n className=\"mr-6 fs-sm\"\r\n bsCustomPrefix={{ }}\r\n checked={showFilteredTotalsByQuarterByYear.sales}\r\n onChange={handleFilteredTotalsByQuarterByYearSalesToggled}\r\n />\r\n \r\n \r\n Seasonally Adjusted\r\n \r\n )}\r\n className=\"fs-sm\"\r\n checked={showFilteredTotalsByQuarterByYear.adjusted}\r\n onChange={handleFilteredTotalsByQuarterByYearAdjustedToggled}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Export\r\n \r\n )}\r\n >\r\n handleDownloadFiltered(yearlyData)}>\r\n \r\n Excel\r\n \r\n \r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actual\r\n \r\n )}\r\n className=\"fs-sm mr-6\"\r\n checked={showFilteredTotalsByYear.sales}\r\n onChange={handleFilteredTotalsByYearSalesToggled}\r\n />\r\n \r\n \r\n Seasonally Adjusted\r\n \r\n )}\r\n className=\"fs-sm\"\r\n checked={showFilteredTotalsByYear.adjusted}\r\n onChange={handleFilteredTotalsByYearAdjustedToggled}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Export\r\n \r\n )}\r\n >\r\n handleDownloadFiltered(quarterlyAveragesData)}>\r\n \r\n Excel\r\n \r\n \r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actual\r\n \r\n )}\r\n checked={showFilteredQuarterlyAveragesByYear.sales}\r\n onChange={handleFilteredQuarterlyAveragesByYearSalesToggled}\r\n />\r\n \r\n \r\n Seasonally Adjusted\r\n \r\n )}\r\n checked={showFilteredQuarterlyAveragesByYear.adjusted}\r\n onChange={handleFilteredQuarterlyAveragesByYearAdjustedToggled}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AggregateDataPage;\r\n","import React from 'react';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst EditSingleValueModal = ({\r\n title,\r\n oldValueLabel,\r\n oldValue,\r\n newValueLabel,\r\n newValue,\r\n showModal,\r\n onHideModal,\r\n onNewValueChange,\r\n onCancelClick,\r\n onSaveClick,\r\n}) => (\r\n \r\n \r\n

    \r\n {title}\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n {oldValueLabel}\r\n \r\n \r\n \r\n {newValueLabel}\r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nEditSingleValueModal.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n oldValueLabel: PropTypes.string.isRequired,\r\n oldValue: PropTypes.string.isRequired,\r\n newValueLabel: PropTypes.string.isRequired,\r\n newValue: PropTypes.string.isRequired,\r\n showModal: PropTypes.bool.isRequired,\r\n onHideModal: PropTypes.func.isRequired,\r\n onNewValueChange: PropTypes.func.isRequired,\r\n onCancelClick: PropTypes.func.isRequired,\r\n onSaveClick: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default EditSingleValueModal;\r\n","import React, { useMemo, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport apiService from '@services/apiService';\r\nimport { updateUserFileName, deleteDataFileRequest } from '@redux/modules/dataPortal';\r\nimport { isEmpty, isUndefined } from 'lodash';\r\nimport DataFileActionButtons from '@components/table/actionButtons/DataFileActionButtons';\r\nimport EditSingleValueModal from '../modals/EditSingleValueModal';\r\n\r\nconst DataFileRequestsTable = ({\r\n displayData,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [editUserFileNameModalShow, setEditUserFileNameModalShow] = useState(false);\r\n const [currentUniqueId, setCurrentUniqueId] = useState(0);\r\n const [currentUserFileName, setCurrentUserFileName] = useState('');\r\n const [newUserFileName, setNewUserFileName] = useState('');\r\n\r\n const headerSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const handleCloseEditFileNameModal = () => setEditUserFileNameModalShow(false);\r\n\r\n const onEditClick = row => {\r\n setCurrentUniqueId(row.UniqueID);\r\n setCurrentUserFileName(row.UserFileName);\r\n setNewUserFileName('');\r\n setEditUserFileNameModalShow(true);\r\n };\r\n\r\n const onDeleteClicked = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n title: 'Delete Report Result?',\r\n text: 'Are you sure you wish to continue?',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'Yes, Delete',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn-danger btn-lg mr-2 swal-question-search-discard-yes',\r\n denyButton: 'btn-primary btn-lg swal-question-search-discard-no',\r\n },\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n dispatch(deleteDataFileRequest({ UniqueID: row.UniqueID }));\r\n // TODO: Determine if we want to let the user know that the request was deleted successfully\r\n // Swal.fire({\r\n // allowEnterKey: false,\r\n // allowEscapeKey: false,\r\n // allowOutsideClick: false,\r\n // position: 'center',\r\n // title: 'Report request deleted successfully!',\r\n // icon: 'success',\r\n // iconColor: 'var(--theme-success)',\r\n // showConfirmButton: false,\r\n // timer: 2000,\r\n // });\r\n }\r\n });\r\n };\r\n\r\n const handleUserFileNameChange = e => {\r\n setNewUserFileName(e.target.value);\r\n };\r\n\r\n const handleEditUserFileName = async () => {\r\n try {\r\n const response = await apiService.DataPortal.updateUserFileName({ UniqueID: currentUniqueId, UserFileName: newUserFileName });\r\n if (isEmpty(response.error)) {\r\n setEditUserFileNameModalShow(false);\r\n dispatch(updateUserFileName(currentUniqueId, newUserFileName));\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'File name updated successfully!',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n } else {\r\n throw new Error(response);\r\n }\r\n } catch (error) {\r\n // TODO: Rollbar this error\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Update Error',\r\n html: '

    There was an error updating your file name. Please contact Pillar 9 Support for assistance.

    ',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n },\r\n showConfirmButton: true,\r\n confirmButtonText: 'OK',\r\n });\r\n }\r\n };\r\n\r\n const onDownloadClicked = async (e, row) => {\r\n e.preventDefault();\r\n\r\n try {\r\n const response = await apiService.DataPortal.requestPresignedLink({ UniqueID: row.UniqueID, FileName: row.FileName, UserID: row.UserID });\r\n if (isEmpty(response.error)) {\r\n const s3Link = response;\r\n const link = document.createElement('a');\r\n link.href = s3Link;\r\n link.setAttribute('download', `${row.UserFileName}`);\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } else {\r\n throw new Error(response);\r\n }\r\n } catch (error) {\r\n // TODO: Rollbar this error\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Download Error',\r\n html: '

    There was an error downloading your file. Please contact Pillar 9 Support for assistance.

    ',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n },\r\n showConfirmButton: true,\r\n confirmButtonText: 'OK',\r\n });\r\n }\r\n };\r\n\r\n const actionsFormatter = (cell, row) => (\r\n 0 && !row.IsError}\r\n canDownload\r\n canCopy={false}\r\n canDelete={row.FileSize !== 'Waiting...'}\r\n downloadClicked={onDownloadClicked}\r\n editClicked={onEditClick}\r\n deleteClicked={onDeleteClicked}\r\n currRow={row}\r\n sizeSM\r\n />\r\n );\r\n\r\n const columns = useMemo(() => [\r\n {\r\n dataField: 'UniqueID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateLinkExpiresString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreated',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreatedString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'UserID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ReadyForDownload',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'FileName',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'FileType',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '150px' },\r\n },\r\n {\r\n dataField: 'UserFileName',\r\n text: 'Name',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n formatter: (cellContent, row) => (\r\n <>\r\n {!row.ReadyForDownload && row.FileSize === 'Waiting...' ? (\r\n
    \r\n ) : (cellContent)}\r\n \r\n ),\r\n },\r\n {\r\n dataField: 'SqlWhereClause',\r\n text: 'Criteria',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '200px' },\r\n formatter: cellContent =>

    {cellContent}

    ,\r\n },\r\n {\r\n dataField: 'FileSize',\r\n text: 'Size',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '100px' },\r\n formatter: cellContent => (cellContent === 'Waiting...'\r\n ?
    \r\n : cellContent),\r\n },\r\n {\r\n dataField: 'RecordCount',\r\n text: 'Records',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '100px' },\r\n formatter: cellContent => (isUndefined(cellContent)\r\n ?
    \r\n : cellContent),\r\n },\r\n {\r\n dataField: 'DateLinkTimeToExpiry',\r\n text: 'Expires in',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: false,\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreatedTimeElapsed',\r\n text: 'Created',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '150px' },\r\n },\r\n ], []);\r\n\r\n const expandRow = {\r\n onlyOneExpanding: true,\r\n showExpandColumn: true,\r\n expandByColumnOnly: true,\r\n expandColumnPosition: 'right',\r\n classes: 'text-center',\r\n renderer: row => (\r\n
    \r\n Criteria:\r\n  \r\n {row.SqlWhereClause}\r\n
    \r\n ),\r\n expandHeaderColumnRenderer: ({ isAnyExpands }) => {\r\n if (isAnyExpands) {\r\n return (\r\n Collapse All}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand All}\r\n >\r\n \r\n \r\n );\r\n },\r\n expandColumnRenderer: ({ expanded }) => {\r\n if (expanded) {\r\n return (\r\n Collapse}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand}\r\n >\r\n \r\n \r\n );\r\n },\r\n };\r\n\r\n const defaultSorted = [{\r\n dataField: 'UniqueID',\r\n order: 'desc',\r\n }];\r\n\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: 25,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {toolKit => (\r\n <>\r\n {displayData.length > 1 && }\r\n 1 ? paginationFactory(options) : null}\r\n {...toolKit.baseProps}\r\n defaultSorted={defaultSorted}\r\n />\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nDataFileRequestsTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n};\r\n\r\nexport default DataFileRequestsTable;\r\n","import React, { useMemo, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport EditSingleValueModal from '@components/modals/EditSingleValueModal';\r\nimport { isEmpty } from 'lodash';\r\nimport DataFileActionButtons from '@components/table/actionButtons/DataFileActionButtons';\r\nimport apiService from '@services/apiService';\r\nimport { updateUserCriteriaName } from '@redux/modules/dataPortal';\r\n\r\nconst DataFileRequestsQueueTable = ({\r\n displayData,\r\n onCopyClick,\r\n onDeleteClick,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const [editUserCriteriaNameModalShow, setEditUserCriteriaNameModalShow] = useState(false);\r\n const [currentSqlWhereClause, setCurrentSqlWhereClause] = useState('');\r\n const [currentUserCriteriaName, setCurrentUserCriteriaName] = useState('');\r\n const [newUserCriteriaName, setNewUserCriteriaName] = useState('');\r\n\r\n const headerSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const handleCloseEditCriteriaNameModal = () => setEditUserCriteriaNameModalShow(false);\r\n\r\n const handleOpenEditCriteriaNameModal = row => {\r\n setCurrentSqlWhereClause(row.SqlWhereClause);\r\n setCurrentUserCriteriaName(row.UserCriteriaName);\r\n setNewUserCriteriaName('');\r\n setEditUserCriteriaNameModalShow(true);\r\n };\r\n\r\n const handleUserCriteriaNameChange = event => {\r\n setNewUserCriteriaName(event.target.value);\r\n };\r\n\r\n const handleEditUserCriteriaName = async () => {\r\n try {\r\n const response = await apiService.DataPortal.updateUserCriteriaName({ SqlWhereClause: currentSqlWhereClause, UserCriteriaName: newUserCriteriaName });\r\n if (isEmpty(response.error)) {\r\n setEditUserCriteriaNameModalShow(false);\r\n dispatch(updateUserCriteriaName(currentSqlWhereClause, newUserCriteriaName));\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Saved criteria name updated successfully!',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n } else {\r\n throw new Error(response);\r\n }\r\n } catch (error) {\r\n // TODO: Rollbar this error\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Update Error',\r\n html: '

    There was an error updating your saved criteria name. Please contact Pillar 9 Support for assistance.

    ',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n },\r\n showConfirmButton: true,\r\n confirmButtonText: 'OK',\r\n });\r\n }\r\n };\r\n\r\n const onEditClick = row => handleOpenEditCriteriaNameModal(row);\r\n\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const columns = useMemo(() => [\r\n {\r\n dataField: 'UniqueID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'JsonTree',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreated',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'DateCreatedString',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '150px' },\r\n },\r\n {\r\n dataField: 'UserCriteriaName',\r\n text: 'Name',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'SqlWhereClause',\r\n text: 'Criteria',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '200px' },\r\n formatter: cellContent =>

    {cellContent}

    ,\r\n },\r\n {\r\n dataField: 'NumberOfRuns',\r\n text: 'Runs',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '100px' },\r\n },\r\n {\r\n dataField: 'DateCreatedTimeElapsed',\r\n text: 'Last Run',\r\n headerSortingClasses: headerSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '150px' },\r\n },\r\n ], []);\r\n\r\n const expandRow = {\r\n onlyOneExpanding: true,\r\n showExpandColumn: true,\r\n expandByColumnOnly: true,\r\n expandColumnPosition: 'right',\r\n classes: 'text-center',\r\n renderer: row => (\r\n
    \r\n Criteria:\r\n  \r\n {row.SqlWhereClause}\r\n
    \r\n ),\r\n expandHeaderColumnRenderer: ({ isAnyExpands }) => {\r\n if (isAnyExpands) {\r\n return (\r\n Collapse All}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand All}\r\n >\r\n \r\n \r\n );\r\n },\r\n expandColumnRenderer: ({ expanded }) => {\r\n if (expanded) {\r\n return (\r\n Collapse}\r\n >\r\n \r\n \r\n );\r\n }\r\n return (\r\n Expand}\r\n >\r\n \r\n \r\n );\r\n },\r\n };\r\n // Sets the default sort order to desc by DateCreated\r\n const defaultSorted = [{\r\n dataField: 'DateCreated',\r\n order: 'desc',\r\n }];\r\n\r\n // Buttons on the bottom left of the table that allow\r\n // the user to decide on how many rows per page should\r\n // be shown at one time.\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: 25,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {toolKit => (\r\n <>\r\n {displayData.length > 1 && }\r\n 1 ? paginationFactory(options) : null}\r\n {...toolKit.baseProps}\r\n defaultSorted={defaultSorted}\r\n />\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nDataFileRequestsQueueTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onCopyClick: PropTypes.func,\r\n onDeleteClick: PropTypes.func,\r\n};\r\n\r\nexport default DataFileRequestsQueueTable;\r\n","import { BootstrapConfig } from '@react-awesome-query-builder/bootstrap';\r\n\r\nconst InitialConfig = BootstrapConfig;\r\n\r\nconst Operators = {\r\n ...InitialConfig.operators,\r\n equal: {\r\n ...InitialConfig.operators.equal,\r\n label: 'equals',\r\n },\r\n not_equal: {\r\n ...InitialConfig.operators.not_equal,\r\n label: 'does not equal',\r\n labelForFormat: '!=',\r\n cardinality: 1,\r\n sqlOp: '!=',\r\n },\r\n less: {\r\n ...InitialConfig.operators.less,\r\n label: 'less than',\r\n },\r\n less_or_equal: {\r\n ...InitialConfig.operators.less_or_equal,\r\n label: 'less than or equal to',\r\n },\r\n greater: {\r\n ...InitialConfig.operators.greater,\r\n label: 'greater than',\r\n },\r\n greater_or_equal: {\r\n ...InitialConfig.operators.greater_or_equal,\r\n label: 'greater than or equal to',\r\n },\r\n between: {\r\n ...InitialConfig.operators.between,\r\n label: 'between',\r\n },\r\n not_between: {\r\n ...InitialConfig.operators.not_between,\r\n label: 'not between',\r\n },\r\n select_equals: {\r\n ...InitialConfig.operators.select_equals,\r\n label: 'equals',\r\n },\r\n select_not_equals: {\r\n ...InitialConfig.operators.select_not_equals,\r\n label: 'does not equal',\r\n labelForFormat: '!=',\r\n cardinality: 1,\r\n sqlOp: '!=',\r\n },\r\n select_any_in: {\r\n ...InitialConfig.operators.select_any_in,\r\n label: 'in',\r\n },\r\n select_not_any_in: {\r\n ...InitialConfig.operators.select_not_any_in,\r\n label: 'not in',\r\n },\r\n};\r\n\r\nexport default Operators;\r\n","import React from 'react';\r\nimport Select from 'react-select';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst CustomSelect = ({ listValues, value, setValue }) => {\r\n const options = listValues.map(val => ({\r\n label: val.title,\r\n value: val.value,\r\n }));\r\n\r\n const selectedOption = options.find(option => option.value === value);\r\n\r\n return (\r\n setValue(selected.value)}\r\n options={options}\r\n menuPortalTarget={document.querySelector('body')}\r\n closeMenuOnSelect\r\n placeholder=\"Choose one\"\r\n />\r\n );\r\n};\r\n\r\nCustomSelect.propTypes = {\r\n value: PropTypes.string,\r\n listValues: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n }),\r\n ).isRequired,\r\n setValue: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default CustomSelect;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport DatePicker from 'react-datepicker';\r\nimport { format, parse } from 'date-fns';\r\n\r\nconst CustomDatepicker = ({ value, setValue, dateFormat }) => {\r\n const DateWithAddOnCalendar = React.forwardRef(({\r\n className: _className, val, onClick, ...remaining\r\n }, ref) => (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n ));\r\n\r\n DateWithAddOnCalendar.propTypes = {\r\n className: PropTypes.string, val: PropTypes.string, onClick: PropTypes.func,\r\n };\r\n\r\n return (\r\n \r\n selected={!value ? null : parse(value, dateFormat, new Date())}\r\n onChange={date => setValue(date ? format(date, dateFormat) : null)}\r\n popperPlacement=\"bottom-end\"\r\n popperProps={{ strategy: 'fixed' }}\r\n minDate={new Date('1990/01/01')}\r\n maxDate={new Date()}\r\n showYearPicker={dateFormat === 'yyyy'}\r\n showYearDropdown={dateFormat !== 'yyyy'}\r\n dropdownMode=\"select\"\r\n />\r\n );\r\n};\r\n\r\nCustomDatepicker.propTypes = {\r\n value: PropTypes.string,\r\n setValue: PropTypes.func.isRequired,\r\n dateFormat: PropTypes.string,\r\n};\r\n\r\nexport default CustomDatepicker;\r\n","import React from 'react';\r\nimport { BootstrapConfig } from '@react-awesome-query-builder/bootstrap';\r\n\r\nimport Operators from './Operators';\r\nimport CustomSelect from './CustomSelect';\r\nimport CustomDatepicker from './CustomDatepicker';\r\n\r\nconst InitialConfig = BootstrapConfig;\r\n\r\nconst Config = {\r\n ...InitialConfig,\r\n settings: {\r\n ...InitialConfig.settings,\r\n maxNesting: 2,\r\n hideConjForOne: true,\r\n showNot: false,\r\n addRuleLabel: 'Add Criteria',\r\n addGroupLabel: 'Add Criteria Group',\r\n },\r\n operators: Operators,\r\n fields: {},\r\n widgets: {\r\n ...InitialConfig.widgets,\r\n number: {\r\n ...InitialConfig.widgets.number,\r\n type: 'number',\r\n sqlFormatValue: val => `'${val}'`,\r\n },\r\n select: {\r\n ...InitialConfig.widgets.select,\r\n factory: props => ,\r\n },\r\n date: {\r\n ...InitialConfig.widgets.date,\r\n factory: props => ,\r\n },\r\n },\r\n strictMode: false,\r\n};\r\n\r\nexport default Config;\r\n","import React, { useEffect, useCallback, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { createDataFileRequest, deleteDataFileSavedSearch } from '@redux/modules/dataPortal';\r\nimport { getUser } from '@redux/selectors/UserSelector';\r\nimport { selectNonDeletedDataFileRequests, selectNonDeletedDataFileSavedSearches } from '@redux/selectors/DataPortalSelector';\r\nimport { isUndefined, isNull } from 'lodash';\r\nimport { Query, Builder, Utils as QbUtils } from '@react-awesome-query-builder/bootstrap';\r\nimport '@react-awesome-query-builder/bootstrap/css/styles.css';\r\n\r\nimport Nav from 'react-bootstrap/Nav';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport Swal from 'sweetalert2';\r\nimport DataFileRequestsTable from '@components/table/DataFileRequestsTable';\r\nimport DataFileSavedSearchesTable from '@components/table/DataFileSavedSearchesTable';\r\n\r\nimport Config from './config/Config';\r\n\r\nconst queryValue = { id: QbUtils.uuid(), type: 'group' };\r\nconst config = Config;\r\n\r\nconst DataSearchPage = () => {\r\n const dispatch = useDispatch();\r\n\r\n const user = useSelector(getUser);\r\n const lookups = useSelector(state => state.dataPortal.lookups);\r\n const nonDeletedDataFileRequests = useSelector(selectNonDeletedDataFileRequests);\r\n const nonDeletedDataFileSavedSearches = useSelector(selectNonDeletedDataFileSavedSearches);\r\n\r\n const [userFileName, setUserFileName] = useState('');\r\n const [updatedConfig, setUpdatedConfig] = useState(config);\r\n const [queryBuilderState, setQueryBuilderState] = useState({\r\n tree: QbUtils.checkTree(QbUtils.loadTree(queryValue), config),\r\n config,\r\n });\r\n const [sqlWhereClause, setSqlWhereClause] = useState('');\r\n const [jsonLogic, setJsonLogic] = useState({});\r\n const [jsonTree, setJsonTree] = useState({});\r\n const [queryHasChildren, setQueryHasChildren] = useState(false);\r\n\r\n const [key, setKey] = useState('dataFileRequestsQueue');\r\n\r\n const initialTree = QbUtils.loadTree({\r\n id: QbUtils.uuid(),\r\n type: 'group',\r\n });\r\n\r\n useEffect(() => {\r\n if (isUndefined(lookups) || isNull(lookups)) return;\r\n setUpdatedConfig({\r\n ...config,\r\n fields: {\r\n Status: {\r\n type: 'select',\r\n label: 'Status',\r\n fieldName: 'Status',\r\n operators: ['select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n listValues: [\r\n { value: 'Sold', title: 'Sold' },\r\n { value: 'OffMarket', title: 'Off Market' },\r\n ],\r\n },\r\n },\r\n OffMarketDate: {\r\n type: 'date',\r\n label: 'Date',\r\n fieldName: 'OffMarketDate',\r\n operators: ['equal', 'not_equals', 'between', 'not_between', 'less', 'greater', 'less_or_equal', 'greater_or_equal'],\r\n defaultOperator: 'between',\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n dateFormat: 'yyyy-MM-dd',\r\n },\r\n },\r\n StateOrProvince: {\r\n type: 'select',\r\n label: 'Province',\r\n fieldName: 'Province',\r\n operators: ['select_equals'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n listValues: [\r\n { value: 'AB', title: 'Alberta' },\r\n ],\r\n },\r\n defaultOperator: 'select_equals',\r\n defaultValue: 'AB',\r\n },\r\n County: {\r\n type: 'select',\r\n label: 'County',\r\n fieldName: 'County',\r\n operators: ['select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n showSearch: true,\r\n listValues: lookups.countyNames,\r\n },\r\n },\r\n City: {\r\n type: 'select',\r\n label: 'Municipality',\r\n fieldName: 'Municipality',\r\n operators: ['select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n showSearch: true,\r\n listValues: lookups.cityNames,\r\n },\r\n },\r\n Subdivision: {\r\n type: 'select',\r\n label: 'Subdivision',\r\n fieldName: 'Subdivision',\r\n operators: ['select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n showSearch: true,\r\n listValues: lookups.subdivisionNames,\r\n },\r\n },\r\n PropertySubtype: {\r\n type: 'select',\r\n label: 'Property Subtype',\r\n fieldName: 'PropertySubtype',\r\n operators: ['select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n showSearch: true,\r\n listValues: lookups.propertySubTypes,\r\n },\r\n },\r\n YearBuilt: {\r\n type: 'number',\r\n label: 'Year Built',\r\n fieldName: 'YearBuilt',\r\n operators: ['equal', 'not_equals', 'between', 'not_between', 'less', 'greater', 'less_or_equal', 'greater_or_equal'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n min: 0,\r\n max: new Date().getFullYear(),\r\n },\r\n },\r\n ListPrice: {\r\n type: 'number',\r\n label: 'List Price',\r\n fieldName: 'ListPrice',\r\n operators: ['equal', 'not_equals', 'between', 'not_between', 'less', 'greater', 'less_or_equal', 'greater_or_equal'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n min: 0,\r\n },\r\n },\r\n SoldPrice: {\r\n type: 'number',\r\n label: 'Sold Price',\r\n fieldName: 'SoldPrice',\r\n operators: ['equal', 'not_equals', 'between', 'not_between', 'less', 'greater', 'less_or_equal', 'greater_or_equal'],\r\n valueSources: ['value'],\r\n fieldSettings: {\r\n min: 0,\r\n },\r\n },\r\n },\r\n types: {\r\n ...config.types,\r\n },\r\n });\r\n }, [lookups]);\r\n\r\n const onChange = useCallback(async (imTree, cfg, ignorePrevState = false) => {\r\n if (!ignorePrevState) {\r\n setQueryBuilderState(prevState => ({\r\n ...prevState,\r\n imTree,\r\n cfg,\r\n }));\r\n }\r\n setSqlWhereClause(QbUtils.sqlFormat(imTree, cfg));\r\n setJsonLogic(QbUtils.jsonLogicFormat(imTree, cfg));\r\n const tree = QbUtils.getTree(imTree);\r\n setJsonTree(tree);\r\n setQueryHasChildren(!isUndefined(tree.children1) && tree.children1.length > 0);\r\n }, [jsonTree]);\r\n\r\n const onRequestSubmitted = async () => {\r\n setKey('dataFileRequestsQueue');\r\n const jsonRequest = {\r\n request: {\r\n data: {\r\n UserID: user.MemberMlsId,\r\n UserEmailAddress: user.MemberEmail,\r\n SqlWhereClause: sqlWhereClause,\r\n JsonLogic: jsonLogic,\r\n JsonTree: jsonTree,\r\n UserFileName: userFileName,\r\n },\r\n },\r\n };\r\n\r\n dispatch(createDataFileRequest(jsonRequest));\r\n };\r\n\r\n const onClear = async (imTree, cfg) => {\r\n setQueryBuilderState(prevState => ({\r\n ...prevState,\r\n tree: initialTree,\r\n cfg,\r\n }));\r\n setUserFileName('');\r\n };\r\n\r\n const onCopySavedSearch = row => {\r\n let showError = false;\r\n let errorMessage = '';\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Copying your Search Criteria...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n }).then(async () => {\r\n try {\r\n const copyTree = QbUtils.loadTree(JSON.parse(row.JsonTree));\r\n if (QbUtils.isValidTree(copyTree)) {\r\n setQueryBuilderState({\r\n ...queryBuilderState,\r\n tree: copyTree,\r\n });\r\n } else {\r\n showError = true;\r\n errorMessage = 'Saved JSON tree is invalid';\r\n throw new Error(errorMessage);\r\n }\r\n } catch (error) {\r\n showError = true;\r\n errorMessage = `Error - ${error}`;\r\n }\r\n }).catch(error => {\r\n showError = true;\r\n errorMessage = `Error - Cannot copy saved criteria - ${error}`;\r\n }).finally(() => {\r\n if (showError) {\r\n Swal.fire({\r\n allowEnterKey: true,\r\n allowEscapeKey: true,\r\n allowOutsideClick: true,\r\n position: 'center',\r\n title: 'Copy Failed',\r\n text: 'An error occurred while copying your Search Criteria. Please try running the process again or inputting the criteria manually',\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-warning btn-lg mr-2 swal-question-agent-submit-yes',\r\n },\r\n showDenyButton: false,\r\n });\r\n // TODO: Add RollBar log here\r\n console.error(errorMessage);\r\n }\r\n });\r\n };\r\n\r\n const onDeleteSavedSearch = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n title: 'Delete Search Criteria?',\r\n text: 'Are you sure you wish to continue?',\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'Yes, Delete',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn-danger btn-lg mr-2 swal-question-search-discard-yes',\r\n denyButton: 'btn-primary btn-lg swal-question-search-discard-no',\r\n },\r\n }).then(async choice => {\r\n if (choice.isConfirmed) {\r\n const jsonRequest = { ...row };\r\n if (row.NumberOfRuns > 1) {\r\n jsonRequest.UniqueID = null;\r\n jsonRequest.UserID = user.MemberMlsId;\r\n jsonRequest.SqlWhereClause = row.SqlWhereClause;\r\n jsonRequest.NumberOfRuns = row.NumberOfRuns;\r\n } else {\r\n jsonRequest.UniqueID = row.UniqueID;\r\n }\r\n dispatch(deleteDataFileSavedSearch(jsonRequest));\r\n }\r\n });\r\n };\r\n\r\n const renderBuilder = useCallback(props => (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n ), []);\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Search\r\n Data\r\n

    \r\n
    \r\n \r\n \r\n
    \r\n Name\r\n setUserFileName(event.target.value)}\r\n />\r\n \r\n \r\n Generate Report\r\n \r\n \r\n \r\n Clear\r\n \r\n \r\n
    \r\n setKey(k)}\r\n >\r\n \r\n \r\n Recent Reports\r\n \r\n \r\n Saved Searches\r\n \r\n \r\n )}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DataSearchPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport { Form, Formik } from 'formik';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikField from '@components/form/FormikField';\r\nimport { trim } from 'lodash';\r\n\r\nconst AgentAdvancedSearch = ({ onSubmitClicked }) => {\r\n const agentSearchLoading = useSelector(state => state.agent.searchLoading);\r\n\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n clause: [],\r\n };\r\n const valueKeys = Object.keys(values);\r\n\r\n whereClause.clause = valueKeys.map(key => {\r\n if (values[key]) {\r\n return {\r\n name: key,\r\n value: trim(values[key]),\r\n };\r\n }\r\n return null;\r\n });\r\n\r\n whereClause.clause = whereClause.clause.filter(el => el !== null);\r\n\r\n return whereClause;\r\n };\r\n\r\n const handleSubmit = values => {\r\n const whereClause = buildWhereClause(values);\r\n const jsonBody = {\r\n action: 'search',\r\n where: whereClause,\r\n };\r\n\r\n onSubmitClicked(jsonBody);\r\n };\r\n\r\n return (\r\n \r\n {({ handleReset }) => (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {agentSearchLoading\r\n ? (\r\n <>\r\n \r\n Searching...\r\n \r\n ) : (\r\n <>\r\n \r\n Search\r\n \r\n )}\r\n \r\n \r\n \r\n Clear\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAgentAdvancedSearch.propTypes = {\r\n onSubmitClicked: PropTypes.func,\r\n};\r\n\r\nexport default AgentAdvancedSearch;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst AgentActionButtons = ({\r\n viewClicked,\r\n auditClicked,\r\n currRow,\r\n isEditable,\r\n isAuditable,\r\n}) => {\r\n const onViewClick = () => viewClicked(currRow);\r\n const onAuditClick = () => auditClicked(currRow);\r\n\r\n return (\r\n
    \r\n {isEditable && (\r\n \r\n \r\n \r\n )}\r\n {isAuditable && (\r\n \r\n \r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nAgentActionButtons.propTypes = {\r\n viewClicked: PropTypes.func.isRequired,\r\n auditClicked: PropTypes.func.isRequired,\r\n isAuditable: PropTypes.bool.isRequired,\r\n isEditable: PropTypes.bool.isRequired,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n }),\r\n};\r\n\r\nexport default AgentActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport AgentActionButtons from './actionButtons/AgentActionButtons';\r\nimport Button from '../smartAdminUI/Button';\r\n\r\nconst AgentsTable = ({\r\n displayData,\r\n onAgentSelect,\r\n onAuditClick,\r\n isModal = false,\r\n}) => {\r\n // NOTE: P9 mentioned that isCopiable will always be false so its not included\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '100px' },\r\n },\r\n {\r\n dataField: 'UniqueID',\r\n text: 'ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'MemberMlsId',\r\n text: 'MLS ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'MemberStatus',\r\n text: 'Status',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '70px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'MemberFirstName',\r\n text: 'First Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'MemberLastName',\r\n text: 'Last Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficeName',\r\n text: 'Office Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficePhone',\r\n text: 'Office Phone',\r\n },\r\n ];\r\n\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n \r\n {toolKit => (\r\n <>\r\n {displayData.length > 1 && }\r\n 1 ? paginationFactory(options) : null}\r\n {...toolKit.baseProps}\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAgentsTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onAgentSelect: PropTypes.func.isRequired,\r\n onAuditClick: PropTypes.func.isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default AgentsTable;\r\n","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { agentSearch, setCurrentAgent } from '@redux/modules/agent';\r\nimport { getSearchAgentResults } from '@redux/selectors/AgentSelector';\r\nimport { getAuditLog } from '@redux/modules/audit';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport AgentAdvancedSearch from '@components/form/forms/AgentAdvancedSearch';\r\nimport AgentsTable from '@components/table/AgentsTable';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport { isNull } from 'lodash';\r\n\r\nconst SearchAgentPage = () => {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const searchResults = useSelector(getSearchAgentResults);\r\n\r\n const agentSelected = row => {\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [\r\n {\r\n name: 'UniqueID',\r\n value: row.UniqueID,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n dispatch(setCurrentAgent(jsonBody));\r\n };\r\n\r\n const auditClicked = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Agent Audit Log...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(getAuditLog({ tableName: 'Agent', uniqueID: row.UniqueID, entityID: row.MemberMlsId }));\r\n history.push('/audit');\r\n };\r\n\r\n const onSubmitClicked = jsonBody => {\r\n dispatch(agentSearch(jsonBody));\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Search\r\n Agent\r\n

    \r\n
    \r\n
    \r\n
    \r\n dispatch(loadFormDefinition('create', 'agent', null, null, 'agentACL'))}>\r\n \r\n Create Agent\r\n \r\n )}\r\n >\r\n \r\n \r\n
    \r\n {!isNull(searchResults) && (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default SearchAgentPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport ListingTypeIcons from '@components/table/icons/ListingTypeIcons';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport ListingActionButtons from '@components/table/actionButtons/ListingActionButtons';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport AgentAvatar from '@components/table/avatar/AgentAvatar';\r\n\r\nconst ListingsTable = ({\r\n displayData,\r\n onListingSelect,\r\n onCopyClick,\r\n onAuditClick,\r\n isModal = false,\r\n}) => {\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: ' ',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '175px' },\r\n },\r\n {\r\n dataField: 'UniqueID',\r\n text: 'Unique ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'ListingID',\r\n text: 'ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '40px' },\r\n },\r\n {\r\n dataField: 'StandardStatusVerb',\r\n text: 'Status',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '70px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'PropertyType',\r\n text: 'Type',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '50px' },\r\n align: 'center',\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'UnparsedAddress',\r\n text: 'Address',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n classes: 'text-ellipsis-175',\r\n },\r\n {\r\n dataField: 'City',\r\n text: 'City',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n classes: 'text-ellipsis-150',\r\n },\r\n {\r\n dataField: 'ListAgentFullName',\r\n text: 'Listing Agent',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '150px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'CoListAgentFullName',\r\n text: 'Co-List Agent',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '150px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n ];\r\n\r\n // Sets the default sort order to desc by ListingId\r\n const defaultSorted = [{\r\n dataField: 'ListingId',\r\n order: 'desc',\r\n }];\r\n\r\n // Buttons on the bottom left of the table that allow\r\n // the user to decide on how many rows per page should\r\n // be shown at one time.\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n \r\n {toolKit => (\r\n <>\r\n {displayData.length > 1 && }\r\n 1 ? paginationFactory(options) : null}\r\n {...toolKit.baseProps}\r\n defaultSorted={defaultSorted}\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nListingsTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onListingSelect: PropTypes.func.isRequired,\r\n onCopyClick: PropTypes.func.isRequired,\r\n onAuditClick: PropTypes.func.isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default ListingsTable;\r\n","/*eslint-disable */\r\nimport { useEffect } from 'react';\r\nimport { useFormikContext } from 'formik';\r\n\r\nconst FormikHelper = ({\r\n buildWhereClause,\r\n formEdited,\r\n lookupNames,\r\n onSubmitClicked,\r\n setFormEdited,\r\n setSubmitFlag,\r\n submitFlag,\r\n submitTranslation,\r\n resetFlag,\r\n setResetFlag,\r\n}) => {\r\n const { dirty, values, resetForm } = useFormikContext();\r\n\r\n useEffect(() => {\r\n if (resetFlag === true) {\r\n resetForm(); // resets formik state\r\n setResetFlag(false);\r\n }\r\n }, [resetFlag]);\r\n\r\n useEffect(() => {\r\n if (dirty) {\r\n if (!formEdited) setFormEdited(true);\r\n } else if (formEdited) setFormEdited(false);\r\n }, [dirty]);\r\n\r\n useEffect(() => {\r\n if (submitFlag === true) {\r\n let submitValues = {};\r\n const keys = Object.keys(values);\r\n keys.forEach(k => {\r\n if (values[k] !== '') {\r\n const vKeys = Object.keys(values[k]);\r\n if (vKeys.length > 0) {\r\n if (lookupNames.lookupNames.find(f => f === k)) {\r\n const y = submitTranslation[k];\r\n submitValues = { ...submitValues, [y]: values[k] };\r\n } else {\r\n submitValues = { ...submitValues, [k]: values[k] };\r\n }\r\n }\r\n }\r\n });\r\n\r\n const whereClause = buildWhereClause(submitValues);\r\n const jsonBody = {\r\n where: whereClause,\r\n };\r\n onSubmitClicked(jsonBody);\r\n }\r\n return setSubmitFlag(false);\r\n }, [submitFlag]);\r\n\r\n return null;\r\n};\r\n\r\nexport default FormikHelper;\r\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Form, Formik } from 'formik';\r\n\r\nimport FormikInputGroup from '@components/smartAdminUI/input/FormikInputGroup';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport FormikHelper from '@components/form/formHelpers/FormikHelper';\r\n\r\nimport { loadComboBoxOptions } from '@redux/modules/formGeneration';\r\nimport { trim } from 'lodash';\r\n\r\nimport {\r\n setSearchCriteria,\r\n loadListingSearchResults,\r\n} from '@redux/modules/listing';\r\n\r\nimport { selectComboValueDict } from '@redux/selectors/FormSelector';\r\n// import { components } from 'react-select';\r\n\r\nconst submitTranslation = {\r\n Lookup_Property_Listing_City: 'City',\r\n Lookup_Property_Listing_PropertyType: 'PropertyType',\r\n Lookup_Property_Listing_StandardStatus: 'StandardStatus',\r\n Lookup_Property_Listing_StreetSuffix: 'StreetSuffix',\r\n};\r\n\r\nconst SearchCard = () => {\r\n const dispatch = useDispatch();\r\n\r\n const listingSearchLoading = useSelector(state => state.listing.searchLoading);\r\n\r\n const [comboClear, setComboClear] = useState(false);\r\n const [formEdited, setFormEdited] = useState(false);\r\n const [newComboValue, setNewComboValue] = useState({});\r\n const [resetFlag, setResetFlag] = useState(false);\r\n const [submitFlag, setSubmitFlag] = useState(false);\r\n\r\n const comboSetValueDict = useSelector(selectComboValueDict); // selector for combo dictionary in redux\r\n\r\n const comboBubbleWrap = {\r\n setNewComboValue,\r\n };\r\n\r\n // sets up the loading of combo values\r\n useEffect(() => {\r\n const newComboKeys = Object.keys(newComboValue);\r\n if (comboSetValueDict) {\r\n if (newComboKeys.length > 0) {\r\n const { fieldName, newValue } = newComboValue;\r\n const comboMutator = comboSetValueDict[fieldName];\r\n comboMutator(newValue);\r\n }\r\n }\r\n }, [newComboValue]);\r\n\r\n const lookupNames = { lookupNames: Object.keys(submitTranslation) };\r\n\r\n useEffect(() => {\r\n // API call to get combo box values on first render\r\n dispatch(loadComboBoxOptions(lookupNames));\r\n }, []);\r\n\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n clause: [],\r\n multiClause: [],\r\n };\r\n const multiValues = Object.keys(values).filter(val => val.toLocaleLowerCase() === 'standardstatus');\r\n const singleValues = Object.keys(values).filter(val => val.toLocaleLowerCase() !== 'standardstatus');\r\n singleValues.forEach(key => {\r\n if (values[key]) {\r\n whereClause.clause.push(\r\n {\r\n name: key,\r\n value: trim(values[key]),\r\n },\r\n );\r\n }\r\n });\r\n\r\n multiValues.forEach(key => {\r\n if (values[key]) {\r\n whereClause.multiClause.push(\r\n {\r\n name: key,\r\n value: trim(values[key]),\r\n },\r\n );\r\n }\r\n });\r\n return whereClause;\r\n };\r\n\r\n const formikSubmitClicked = values => {\r\n setSubmitFlag(true);\r\n dispatch(setSearchCriteria(values)); // save form values as search criteria in redux\r\n };\r\n\r\n const resetHandler = () => {\r\n setResetFlag(true); // resets formik state\r\n setComboClear(true); // resets combo values in FIG\r\n dispatch(setSearchCriteria('')); // resets search criteria values in state\r\n };\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const validateFigField = (x, y) => null; // will be used in future feature\r\n\r\n const handleSubmit = jsonBody => {\r\n dispatch(loadListingSearchResults(jsonBody));\r\n };\r\n\r\n return (\r\n formikSubmitClicked(values)}\r\n handleReset={resetHandler}\r\n initialValues={{\r\n ListingId: '',\r\n Lookup_Property_Listing_StandardStatus: '', // combo\r\n Lookup_Property_Listing_PropertyType: '', // combo\r\n StreetNumber: '',\r\n StreetName: '',\r\n Lookup_Property_Listing_StreetSuffix: '', // combo\r\n Lookup_Property_Listing_City: '', // combo\r\n }}\r\n >\r\n {() => (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default SearchCard;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport { VIEW_LISTING_CLICKED } from '@redux/constants/ActionTypes';\r\nimport { getAuditLog } from '@redux/modules/audit';\r\nimport { loadListingToCopyById } from '@redux/modules/listing';\r\nimport { loadCityNames, loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport ListingsTable from '@components/table/ListingsTable';\r\nimport SearchListings from '@components/form/forms/SearchListings';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport ListingsDropdown from '@components/dropdowns/ListingsDropdown';\r\nimport { isNull } from 'lodash';\r\n\r\nconst SearchListingsPage = () => {\r\n const updatedResults = []; // temp array to hold new values before adding to state\r\n const lookupCities = {\r\n lookupnames: ['Lookup_Property_Listing_City'],\r\n }; // hardcoded since cities lookup string is not changing\r\n\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const cityNames = useSelector(state => state.formGeneration.cityNames);\r\n const searchResults = useSelector(state => state.listing.searchListingsResults);\r\n\r\n const { mainActions } = useAcl();\r\n\r\n const viewListing = displayListing => dispatch({\r\n type: VIEW_LISTING_CLICKED, data: displayListing,\r\n });\r\n\r\n const [displayResults, setDisplayResults] = useState([]);\r\n\r\n // retrieves city lookup table values on mount\r\n useEffect(() => {\r\n dispatch(loadCityNames(lookupCities));\r\n }, []);\r\n\r\n /*\r\n listener for search listings results and city name redux states\r\n finds city name that matches city code in lookup tables\r\n if the city item is active, city codes are replaced with their description (actual city name)\r\n updated values are saved in displayResults state for display\r\n */\r\n useEffect(() => {\r\n if (searchResults?.length > 0) {\r\n searchResults.map(listing => {\r\n if (listing?.City && cityNames) {\r\n const cityItem = cityNames[listing.City];\r\n if (cityItem?.Active) {\r\n updatedResults.push({\r\n ...listing,\r\n City: cityItem.Description,\r\n });\r\n }\r\n setDisplayResults([...updatedResults]);\r\n } else { // Listings could be entirely blank but would still need to show up in the results table\r\n let newResults;\r\n if (listing?.City != null) {\r\n newResults = searchResults;\r\n } else {\r\n updatedResults.push({\r\n ...listing,\r\n City: '',\r\n });\r\n newResults = updatedResults;\r\n }\r\n setDisplayResults([...newResults]);\r\n }\r\n return null;\r\n });\r\n } else {\r\n setDisplayResults([]);\r\n }\r\n }, [searchResults, cityNames]);\r\n\r\n // Build where clause with UniqueID to retrieve records for\r\n const buildWhereClause = uniqueID => {\r\n const whereClause = {\r\n where: {\r\n clause: [\r\n {\r\n name: 'UniqueID',\r\n value: uniqueID,\r\n },\r\n ],\r\n },\r\n };\r\n return whereClause;\r\n };\r\n\r\n const listingSelected = row => {\r\n const currentListing = displayResults.find(listing => listing.UniqueID === row.UniqueID);\r\n viewListing(currentListing);\r\n };\r\n\r\n const copyClicked = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Copying Listing...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n const currentListing = displayResults.find(listing => listing.UniqueID === row.UniqueID);\r\n dispatch(loadFormDefinition('create', 'listings', currentListing?.PropertyType?.toLowerCase(), null, 'listing', true));\r\n const copyRequest = buildWhereClause(row.UniqueID);\r\n copyRequest.formName = currentListing?.PropertyType?.toLowerCase();\r\n dispatch(loadListingToCopyById(copyRequest));\r\n };\r\n\r\n const auditClicked = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Listing Audit Log...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(getAuditLog({ tableName: 'Listing', uniqueID: row.UniqueID, entityID: row.ListingID }));\r\n history.push('/audit');\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Search\r\n Listings\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {mainActions.ListingsCreate && (\r\n \r\n \r\n Create Listing\r\n \r\n )}\r\n \r\n
    \r\n \r\n )}\r\n >\r\n

    \r\n \r\n Please note that the search will only return listings you are authorized to see.\r\n

    \r\n \r\n \r\n
    \r\n {!isNull(searchResults) && (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default SearchListingsPage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\n/*\r\n SmartAdmin input group - default input element for forms\r\n \r\n\r\n Other props included in such as onChange and onClick functions will work as usual\r\n*/\r\n\r\nconst InputGroup = props => {\r\n const {\r\n id,\r\n label,\r\n placeholder,\r\n value,\r\n type,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n
    \r\n {!isEmpty(label) ? : null}\r\n \r\n
    \r\n );\r\n};\r\n\r\nInputGroup.propTypes = {\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n placeholder: PropTypes.string.isRequired,\r\n value: PropTypes.node,\r\n type: PropTypes.string.isRequired,\r\n};\r\n\r\nInputGroup.defaultProps = {\r\n id: '',\r\n label: null,\r\n};\r\n\r\nexport default InputGroup;\r\n","import React from 'react';\r\nimport Select from 'react-select';\r\n\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { searchOffices, clearOfficeSearch } from '@redux/modules/office';\r\n\r\nimport useObjectState from '@hooks/useObjectState';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport InputGroup from '@components/smartAdminUI/input/InputGroup';\r\n\r\nconst options = [\r\n { label: 'Active', value: 'A' },\r\n { label: 'Inactive', value: 'I' },\r\n { label: 'Pending', value: 'P' },\r\n { label: 'Suspended', value: 'S' },\r\n { label: 'Terminated', value: 'T' },\r\n];\r\n\r\nconst initialState = {\r\n OfficeMlsId: '',\r\n OfficeManagerMlsId: '',\r\n OfficeManagerFullName: '',\r\n officeName: '',\r\n OfficeCity: '',\r\n OfficeStatus: options[0],\r\n};\r\nconst OfficeAdvancedSearch = () => {\r\n const officeSearchLoading = useSelector(state => state.office.isLoading);\r\n\r\n // custom hook, takes a key:value pair an merges into state object (immutably)\r\n const [searchBarState, setSearchBarState] = useObjectState(initialState);\r\n const dispatch = useDispatch();\r\n\r\n const handleSubmit = e => {\r\n e.preventDefault();\r\n dispatch(searchOffices({\r\n ...searchBarState,\r\n OfficeStatus: searchBarState.OfficeStatus.value,\r\n }));\r\n };\r\n const handleReset = () => {\r\n setSearchBarState(initialState);\r\n dispatch(clearOfficeSearch());\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n setSearchBarState({ OfficeMlsId: target.value })}\r\n placeholder=\"\"\r\n />\r\n
    \r\n
    \r\n setSearchBarState({ OfficeManagerMlsId: target.value })}\r\n placeholder=\"\"\r\n />\r\n
    \r\n
    \r\n setSearchBarState({ OfficeManagerFullName: target.value })}\r\n placeholder=\"\"\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n setSearchBarState({ OfficeName: target.value })}\r\n placeholder=\"\"\r\n />\r\n
    \r\n
    \r\n setSearchBarState({ OfficeCity: target.value })}\r\n placeholder=\"\"\r\n />\r\n
    \r\n
    \r\n \r\n setSearchBarState({ OfficeStatus })}\r\n />\r\n
    \r\n
    \r\n \r\n \r\n \r\n Clear\r\n \r\n \r\n );\r\n};\r\n\r\nexport default OfficeAdvancedSearch;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from '@components/smartAdminUI/Button';\r\n\r\nconst OfficeActionButtons = ({\r\n viewClicked,\r\n auditClicked,\r\n currRow,\r\n isEditable,\r\n isAuditable,\r\n}) => {\r\n const onViewClick = () => viewClicked(currRow);\r\n const onAuditClick = () => auditClicked(currRow);\r\n\r\n return (\r\n
    \r\n {isEditable && (\r\n \r\n \r\n \r\n )}\r\n {isAuditable && (\r\n \r\n \r\n \r\n )}\r\n
    \r\n );\r\n};\r\nOfficeActionButtons.propTypes = {\r\n viewClicked: PropTypes.func.isRequired,\r\n auditClicked: PropTypes.func.isRequired,\r\n currRow: PropTypes.shape({\r\n UniqueID: PropTypes.number,\r\n }),\r\n isAuditable: PropTypes.bool.isRequired,\r\n isEditable: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default OfficeActionButtons;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport TableSearchInputGroup from '@components/smartAdminUI/input/TableSearchInputGroup';\r\nimport OfficeActionButtons from './actionButtons/OfficeActionButtons';\r\nimport Button from '../smartAdminUI/Button';\r\n\r\nconst OfficesTable = ({\r\n displayData,\r\n onOfficeSelect,\r\n onAuditClick,\r\n isModal = false,\r\n}) => {\r\n // NOTE: P9 mentioned that isCopiable will always be false so its not included\r\n const actionsFormatter = (cell, row) => (\r\n \r\n );\r\n\r\n const hdrSortClasses = (_column, sortOrder) => `sorting_${sortOrder}`;\r\n\r\n const columns = [\r\n {\r\n dataField: 'actions',\r\n text: '',\r\n formatter: actionsFormatter,\r\n headerStyle: { width: '110px' },\r\n },\r\n {\r\n dataField: 'UniqueID',\r\n text: 'ID',\r\n hidden: true,\r\n },\r\n {\r\n dataField: 'OfficeMlsId',\r\n text: 'MLS ID',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n headerStyle: { width: '110px' },\r\n },\r\n {\r\n dataField: 'OfficeStatus',\r\n text: 'Status',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n align: 'center',\r\n headerStyle: { width: '70px' },\r\n formatter: cellContent => (isEmpty(cellContent) ? '' : ),\r\n },\r\n {\r\n dataField: 'OfficeName',\r\n text: 'Name',\r\n headerSortingClasses: hdrSortClasses,\r\n headerAttrs: { className: 'sorting' },\r\n sort: true,\r\n },\r\n {\r\n dataField: 'OfficePhone',\r\n text: 'Phone',\r\n headerStyle: { width: '120px' },\r\n },\r\n {\r\n dataField: 'OfficeAOR',\r\n text: 'AOR',\r\n headerStyle: { width: '110px' },\r\n },\r\n ];\r\n\r\n const sizePerPageRenderer = ({\r\n options,\r\n currSizePerPage,\r\n onSizePerPageChange,\r\n }) => (\r\n
    \r\n {\r\n options.map(option => {\r\n const isSelect = currSizePerPage === `${option.page}`;\r\n return (\r\n onSizePerPageChange(option.page)}\r\n >\r\n {option.text}\r\n \r\n );\r\n })\r\n }\r\n
    \r\n );\r\n\r\n const customTotal = (from, to, size) => (\r\n \r\n  \r\n {`Showing rows ${from} to ${to} of ${size}`}\r\n \r\n );\r\n\r\n const options = {\r\n firstPageText: '<<',\r\n hidePageListOnlyOnePage: true,\r\n lastPageText: '>>',\r\n nextPageText: '>',\r\n paginationTotalRenderer: customTotal,\r\n prePageText: '<',\r\n showTotal: true,\r\n sizePerPageList: [],\r\n sizePerPage: isModal ? 5 : 10,\r\n sizePerPageRenderer,\r\n };\r\n\r\n return (\r\n \r\n {toolKit => (\r\n <>\r\n {displayData.length > 1 && }\r\n 1 ? paginationFactory(options) : null}\r\n {...toolKit.baseProps}\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nOfficesTable.propTypes = {\r\n displayData: PropTypes.arrayOf(PropTypes.shape()).isRequired,\r\n onOfficeSelect: PropTypes.func.isRequired,\r\n onAuditClick: PropTypes.func.isRequired,\r\n isModal: PropTypes.bool,\r\n};\r\n\r\nexport default OfficesTable;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { clearOfficeSearch, setCurrentOffice } from '@redux/modules/office';\r\nimport { getAuditLog } from '@redux/modules/audit';\r\nimport { selectSearchResults } from '@redux/selectors/OfficeSelector';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport OfficeAdvancedSearch from '@components/office/OfficeAdvancedSearch';\r\nimport OfficesTable from '@components/table/OfficesTable';\r\nimport { isNull } from 'lodash';\r\n\r\nconst SearchOfficePage = () => {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const searchResults = useSelector(selectSearchResults);\r\n // clears Office Redux state on unmount\r\n useEffect(() => () => dispatch(clearOfficeSearch()), []);\r\n\r\n const officeSelected = row => {\r\n dispatch(setCurrentOffice(row.UniqueID));\r\n };\r\n\r\n const auditClicked = row => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Office Audit Log...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(getAuditLog({ tableName: 'Office', uniqueID: row.UniqueID, entityID: row.OfficeMlsId }));\r\n history.push('/audit');\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n Search\r\n Offices\r\n

    \r\n
    \r\n
    \r\n
    \r\n dispatch(loadFormDefinition('create', 'office', null, null, 'officeACL'))}>\r\n \r\n Create Office\r\n \r\n )}\r\n >\r\n \r\n \r\n
    \r\n {!isNull(searchResults) && (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default SearchOfficePage;\r\n","/* eslint-disable jsx-a11y/control-has-associated-label */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Skeleton from '@mui/material/Skeleton';\r\n\r\nconst ViewLoader = ({ type }) => (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n { type === 'agent' ? (\r\n
    \r\n \r\n
    \r\n ) : (\r\n
    \r\n { type === 'listings' ? : }\r\n
    \r\n )}\r\n
    \r\n

    \r\n \r\n

    \r\n

    \r\n

    \r\n \r\n

    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n);\r\n\r\nViewLoader.propTypes = {\r\n type: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default ViewLoader;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { loadAgentPhoto, setCurrentAgent } from '@redux/modules/agent';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { getAgentSelected, selectAgentPreferredPhoto, selectAgentPreferredPhotoDetails } from '@redux/selectors/AgentSelector';\r\nimport { addTeamMember, removeTeamMember, searchTeamMember } from '@redux/modules/teamsManagement';\r\nimport { selectCanBeImpersonatedBy, selectCanImpersonate } from '@redux/selectors/TeamsManagementSelector';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport TeamMembersTable from '@components/table/TeamMembersTable';\r\nimport TeamLeadersTable from '@components/table/TeamLeadersTable';\r\nimport AgentLookupModal from '@components/form/formComponents/inputGroups/agentLookup/AgentLookupModal';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport ViewLoader from '@components/loaders/ViewLoader';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport sortBy from 'lodash/sortBy';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\nconst operationType = 'edit';\r\nconst definitionType = 'agent';\r\n\r\nconst agentAttributesWhiteList = [\r\n 'CellPhone',\r\n 'CompanyName',\r\n 'PrimaryWebsite',\r\n 'TerminationDate',\r\n 'MemberFax',\r\n 'MemberAddress1',\r\n 'MemberCity',\r\n 'MemberPostalCode',\r\n 'MemberPreferredPhone',\r\n 'MemberPreferredPhoneExt',\r\n 'OfficePhone',\r\n];\r\n\r\nconst ViewAgents = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const currAgent = useSelector(getAgentSelected);\r\n const currentAgentPhotoDetails = useSelector(selectAgentPreferredPhotoDetails);\r\n const currentAgentPhoto = useSelector(selectAgentPreferredPhoto);\r\n const canBeImpersonatedByData = useSelector(selectCanBeImpersonatedBy);\r\n const canImpersonateData = useSelector(selectCanImpersonate);\r\n const memoizedAgentEntries = useMemo(() => (currAgent ? Object.entries(currAgent) : []), [currAgent]);\r\n const memberName = useMemo(() => currAgent?.MemberFullName ?? currAgent?.MemberFirstName.concat(' ', currAgent?.MemberLastName), [currAgent]);\r\n\r\n const [currentAgentPhotoURL, setCurrentAgentPhotoURL] = useState(null);\r\n const [editButtonClicked, setEditButtonClicked] = useState(false);\r\n\r\n const [urlParam, setUrlParam] = useQueryParam('UniqueID', StringParam);\r\n\r\n const jsonBody = {\r\n action: 'select',\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n\r\n const rowLockEntity = useMemo(() => ({ type: 'agent', id: currAgent?.UniqueID }), [currAgent]);\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n lockedByMe,\r\n lastUpdatedOn,\r\n lastCheckedOn,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n takeoverLock,\r\n discardChanges,\r\n LockMessage,\r\n LockOwnerMessage,\r\n } = useRowLock({ rowLockEntity });\r\n\r\n const getCurrentAgentPhoto = photoURL => {\r\n dispatch(loadAgentPhoto(photoURL));\r\n };\r\n\r\n const onEditAgent = () => {\r\n if (currAgent) {\r\n dispatch(loadFormDefinition(operationType, definitionType, null, currAgent.UniqueID, 'agentACL'));\r\n }\r\n };\r\n\r\n const onClickEdit = () => {\r\n setEditButtonClicked(true);\r\n createLock(onEditAgent);\r\n };\r\n\r\n const {\r\n getAgentAcl,\r\n canEditForm,\r\n canAddTeamMember, canAddToTeam, canViewTeam, canEditTeam,\r\n isAllComplete,\r\n } = useAcl();\r\n const isAllAclComplete = isAllComplete();\r\n\r\n useEffect(() => {\r\n if (urlParam) {\r\n jsonBody.where.clause.push({ name: 'UniqueID', value: urlParam });\r\n dispatch(setCurrentAgent(jsonBody));\r\n }\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n if (currAgent) {\r\n setUrlParam(currAgent?.UniqueID, 'replaceIn');\r\n }\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currAgent?.UniqueID) {\r\n // Retrieve the teams details for current agent.\r\n dispatch(searchTeamMember({ targetMemberkey: currAgent.UniqueID }));\r\n\r\n // retrieves EDIT and COPY permissions for agent\r\n getAgentAcl({\r\n action: 'view',\r\n formname: 'Agent',\r\n uniqueId: currAgent.UniqueID,\r\n });\r\n\r\n // retrieves form permissions for agent\r\n getAgentAcl({\r\n action: 'forms',\r\n formname: 'Agent',\r\n uniqueId: currAgent.UniqueID,\r\n });\r\n\r\n if (location?.search === '' || location?.search !== currAgent?.UniqueID) {\r\n setUrlParam(currAgent?.UniqueID, 'replaceIn');\r\n }\r\n }\r\n }, [currAgent]);\r\n\r\n useEffect(() => {\r\n if (currentAgentPhotoDetails?.URL) {\r\n getCurrentAgentPhoto(currentAgentPhotoDetails.URL);\r\n }\r\n }, [currentAgentPhotoDetails]);\r\n\r\n useEffect(() => {\r\n if (currentAgentPhotoURL) URL.revokeObjectURL(currentAgentPhotoURL);\r\n if (currentAgentPhoto) setCurrentAgentPhotoURL(URL.createObjectURL(currentAgentPhoto));\r\n return () => currentAgentPhotoURL && URL.revokeObjectURL(currentAgentPhotoURL);\r\n }, [currentAgentPhoto]);\r\n\r\n const onAddMemberToCurrentAgentTeam = async member => {\r\n if (!(currAgent?.UniqueID && member?.UniqueID)) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Adding Member...',\r\n title: '',\r\n showConfirmButton: false,\r\n });\r\n\r\n try {\r\n const success = await dispatch(addTeamMember({ targetMemberkey: member.UniqueID, targetTeamKey: currAgent.UniqueID }));\r\n\r\n if (success) {\r\n Swal.fire({\r\n position: 'center',\r\n title: 'Member Added',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n });\r\n // Refresh the teams details for current agent.\r\n dispatch(searchTeamMember({ targetMemberkey: currAgent.UniqueID }));\r\n } else {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Added',\r\n html: `${member.MemberFullName} could not be added at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotAdded',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onAddMemberToCurrentAgentTeam', `${member.MemberFullName} Could not be added. Please contact support.`);\r\n }\r\n } catch (err) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Added',\r\n html: `${member.MemberFullName} could not be added at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotAdded',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onAddMemberToCurrentAgentTeam', err);\r\n }\r\n };\r\n\r\n const onAddCurrentAgentToTeam = async member => {\r\n if (!(currAgent?.UniqueID && member?.UniqueID)) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Adding Member...',\r\n title: '',\r\n showConfirmButton: false,\r\n });\r\n\r\n try {\r\n const success = await dispatch(addTeamMember({ targetMemberkey: currAgent.UniqueID, targetTeamKey: member.UniqueID }));\r\n\r\n if (success) {\r\n Swal.fire({\r\n position: 'center',\r\n title: 'Member Added',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n });\r\n // Refresh the teams details for current agent.\r\n dispatch(searchTeamMember({ targetMemberkey: currAgent.UniqueID }));\r\n } else {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Added',\r\n html: `${member.MemberFullName} could not be added at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotAdded',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onAddCurrentAgentToTeam', `${currAgent.MemberFullName} Could not be added. Please contact support.`);\r\n }\r\n } catch (err) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Added',\r\n html: `${member.MemberFullName} could not be added at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotAdded',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onAddCurrentAgentToTeam', err);\r\n }\r\n };\r\n\r\n const onRemoveMemberFromCurrentAgentTeam = async member => {\r\n if (!(currAgent?.UniqueID && member?.TeamMemberKeyNumeric)) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Removing Member...',\r\n title: '',\r\n showConfirmButton: false,\r\n });\r\n\r\n try {\r\n const success = await dispatch(removeTeamMember({ targetMemberkey: member.TeamMemberKeyNumeric, targetTeamKey: currAgent.UniqueID }));\r\n\r\n Swal.fire({\r\n position: 'center',\r\n title: 'Member Removed',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n });\r\n\r\n if (success) {\r\n // Refresh the teams details for current agent.\r\n dispatch(searchTeamMember({ targetMemberkey: currAgent.UniqueID }));\r\n } else {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Removed',\r\n html: `${member.MemberFullName} could not be removed at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotRemoved',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onRemoveMemberFromCurrentAgentTeam', `${member.MemberFullName} Could not be removed. Please contact support.`);\r\n }\r\n } catch (err) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Removed',\r\n html: `${member.MemberFullName} could not be removd at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotRemoved',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onRemoveMemberFromCurrentAgentTeam', err);\r\n }\r\n };\r\n\r\n const onRemoveCurrentAgentFromTeam = async member => {\r\n if (!(currAgent?.UniqueID && member?.TeamLeadKeyNumeric)) return;\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Removing Member...',\r\n title: '',\r\n showConfirmButton: false,\r\n });\r\n\r\n try {\r\n const success = await dispatch(removeTeamMember({ targetMemberkey: currAgent.UniqueID, targetTeamKey: member.TeamLeadKeyNumeric }));\r\n\r\n if (success) {\r\n // Refresh the teams details for current agent.\r\n Swal.fire({\r\n position: 'center',\r\n title: 'Member Removed',\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n });\r\n dispatch(searchTeamMember({ targetMemberkey: currAgent.UniqueID }));\r\n } else {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Removed',\r\n html: `${member.MemberFullName} could not be removed at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotRemoved',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onRemoveCurrentAgentFromTeam', `${currAgent.MemberFullName} Could not be removed. Please contact support.`);\r\n }\r\n } catch (err) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Member Not Removed',\r\n html: `${member.MemberFullName} could not be removed at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-agent-memberNotRemoved',\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.error('Error: View Agent onRemoveCurrentAgentFromTeam', err);\r\n }\r\n };\r\n\r\n if (currAgent) {\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n View\r\n Agent\r\n

    \r\n
    \r\n {!isAllAclComplete && !canEditForm ? (\r\n \r\n ) : (\r\n <>\r\n {locked && lockingAuthorized && !editButtonClicked && (\r\n \r\n )}\r\n {locked && !lockingAuthorized && (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n

    {memberName}

    \r\n

    {currAgent.OfficeName}

    \r\n

    \r\n \r\n {currAgent.MemberMlsId}\r\n

    \r\n { !isEmpty(currAgent.MemberDirectPhone) && (\r\n

    \r\n \r\n \r\n {currAgent.MemberDirectPhone}\r\n \r\n

    \r\n )}\r\n { !isEmpty(currAgent.MemberEmail) && (\r\n

    \r\n \r\n \r\n {currAgent.MemberEmail}\r\n \r\n

    \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n {canEditForm && (\r\n \r\n \r\n Edit\r\n \r\n )}\r\n \r\n )}\r\n >\r\n \r\n \r\n {sortBy(memoizedAgentEntries).map(([key, value]) => {\r\n if (!agentAttributesWhiteList.includes(key)) return null;\r\n if (value) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n })}\r\n {memoizedAgentEntries.length === 0 && 'No Values to Show'}\r\n \r\n
    {key.replace(/([a-z])([A-Z])/g, '$1 $2')}{value}
    \r\n \r\n
    \r\n
    \r\n
    \r\n {canViewTeam && (\r\n <>\r\n {canEditTeam && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n
    \r\n \r\n \r\n Add\r\n \r\n )\r\n )}\r\n >\r\n

    Who this agent can impersonate:

    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n Add\r\n \r\n )\r\n )}\r\n >\r\n

    Who can impersonate this agent:

    \r\n \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n )}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport default ViewAgents;\r\n","export default __webpack_public_path__ + \"static/media/ShowingTime.9d83d4d9.png\";","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSelector } from 'react-redux';\r\nimport { selectCurrentListing } from '@redux/selectors/ListingSelector';\r\nimport { getUserMlsId, getUserName } from '@redux/selectors/UserSelector';\r\nimport { getImpersonationStatus } from '@redux/selectors/ImpersonationSelector';\r\nimport md5 from 'md5';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport showingTimeIcon from '@images/logos/vendor/ShowingTime.png';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst ShowingTimeWidget = ({ disabled }) => {\r\n const currListing = useSelector(selectCurrentListing);\r\n // eslint-disable-next-line no-unused-vars\r\n const impersonationStatus = useSelector(getImpersonationStatus);\r\n const realUserMlsId = useSelector(getUserMlsId);\r\n const userMlsId = useMemo(() => (impersonationStatus?.ImpersonationActive ? impersonationStatus?.memberMlsId : realUserMlsId), [impersonationStatus]);\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n const getDateTimeNowUTC = () => new Date().toISOString();\r\n const getMD5Signature = () => md5(`${getDateTimeNowUTC() + currListing.ListingID + userMlsId}150535003-T2E8K4`);\r\n\r\n const getCurrentListingAddress = () => {\r\n const streetNumber = currListing.StreetNumber?.toString() ?? '';\r\n const streetName = currListing.StreetName;\r\n const streetSuffix = currListing.StreetSuffix?.toString() ?? '';\r\n const streetDirSuffix = currListing.StreetDirSuffix?.toString() ?? '';\r\n return `${streetNumber} ${streetName} ${streetSuffix} ${streetDirSuffix}`;\r\n };\r\n\r\n const getShowingTimeUrl = () => {\r\n if (!(currListing && userMlsId)) return null;\r\n return `https://setup-sso.showingtime.com/config?\r\n level=listing\r\n &siteid=${encodeURIComponent('CORE.PILLARNINE.I')}\r\n &mlsid=${encodeURIComponent('PILLARNINE')}\r\n &listingid=${encodeURIComponent(currListing.ListingID)}\r\n &userid=${encodeURIComponent(userMlsId)}\r\n &laid=${encodeURIComponent(currListing.ListAgentMlsId)}\r\n &listingoffice=${encodeURIComponent(currListing.ListOfficeMlsId)}\r\n &paddr=${encodeURIComponent(getCurrentListingAddress())}\r\n &pcity=${encodeURIComponent(currListing.City)}\r\n &pstate=${encodeURIComponent(currListing.StateOrProvince)}\r\n &pzip=${encodeURIComponent(currListing.PostalCode)}\r\n &price=${encodeURIComponent(currListing.ListPrice?.toString())}\r\n pstatus=${encodeURIComponent(currListing.StandardStatus)}\r\n &datetime=${encodeURIComponent(getDateTimeNowUTC())}\r\n &signature=${encodeURIComponent(getMD5Signature().toUpperCase())}`.replace(/\\s/g, '');\r\n };\r\n return (\r\n
    \r\n \"showing-time-icon\"\r\n

    \r\n ShowingTime \r\n products automate the showing scheduling and management process, simplify the report generating process, and deliver buyer leads.\r\n

    \r\n {\r\n const url = getShowingTimeUrl();\r\n if (url) {\r\n window.open(url, '_blank');\r\n gaEventTracker('Opened Showing Time', `${username}`);\r\n }\r\n }}\r\n variant=\"primary\"\r\n disabled={disabled}\r\n >\r\n \r\n ShowingTime\r\n \r\n
    \r\n );\r\n};\r\n\r\nShowingTimeWidget.propTypes = {\r\n disabled: PropTypes.bool,\r\n};\r\n\r\nexport default ShowingTimeWidget;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\nimport Swal from 'sweetalert2/src/sweetalert2';\r\nimport { useRollbar, useRollbarPerson } from '@rollbar/react';\r\n\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\nimport { getUserName, getUserMlsId } from '@redux/selectors/UserSelector';\r\nimport {\r\n checkForAutoSave,\r\n loadAutoSave,\r\n removeAutoSave,\r\n loadListingById,\r\n loadListingToCopyById,\r\n loadListingPhoto,\r\n loadListingPreferredPhotoDetails,\r\n reloadListingClicked,\r\n} from '@redux/modules/listing';\r\n\r\nimport { getAuditLog } from '@redux/modules/audit';\r\n\r\nimport {\r\n selectCurrentListing,\r\n selectCurrentListingPreferredPhotoDetails,\r\n selectCurrentListingPhoto,\r\n} from '@redux/selectors/ListingSelector';\r\n\r\nimport { listingDict } from '@redux/constants/GeneralConstants';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport useAcl from '@hooks/useAcl';\r\nimport useInterval from '@hooks/useInterval';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Modal from '@components/smartAdminUI/Modal';\r\nimport Input from '@components/smartAdminUI/input/InputGroup';\r\nimport ShowingTimeWidget from '@components/widget/ShowingTimeWidget';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\nimport ViewLoader from '@components/loaders/ViewLoader';\r\n\r\nimport Avatar from '@mui/material/Avatar';\r\nimport startCase from 'lodash/startCase';\r\nimport lowerCase from 'lodash/lowerCase';\r\nimport upperCase from 'lodash/upperCase';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport sortBy from 'lodash/sortBy';\r\n\r\nimport apiService from '@services/apiService';\r\n\r\nconst operationType = 'edit';\r\nconst definitionType = 'listings';\r\n\r\nconst listingAttributesWhiteList = [\r\n 'ListingID',\r\n 'PropertyType',\r\n 'UnparsedAddress',\r\n 'City',\r\n 'StateOrProvince',\r\n 'PostalCode',\r\n];\r\n\r\nconst statusTasks = {\r\n chgActive: true,\r\n chgPending: true,\r\n chgSold: true,\r\n chgExp: true,\r\n chgWithdrawn: true,\r\n chgTerm: true,\r\n};\r\n\r\nconst otherTasks = {\r\n chgDetails: true,\r\n chgPropertyType: true,\r\n chgLeased: true,\r\n chgMajor: true,\r\n chgDel: true,\r\n};\r\n\r\nconst otherTaskConfig = [\r\n {\r\n taskCode: 'chgDetails',\r\n iconClass: 'far fa-file-edit fa-2x',\r\n buttonText: 'Change Details',\r\n },\r\n {\r\n taskCode: 'chgPropType',\r\n iconClass: 'far fa-exclamation-triangle fa-2x',\r\n buttonText: 'Change Property Type',\r\n },\r\n {\r\n taskCode: 'chgLeased',\r\n iconClass: 'far fa-house-leave fa-2x',\r\n buttonText: 'Change to Leased',\r\n },\r\n {\r\n taskCode: 'chgMajor',\r\n iconClass: 'far fa-database fa-2x',\r\n buttonText: 'Major Correction',\r\n },\r\n {\r\n taskCode: 'chgDel',\r\n iconClass: 'far fa-trash-alt fa-2x',\r\n buttonText: 'Delete Listing',\r\n },\r\n];\r\n\r\nconst statusTaskConfig = [\r\n {\r\n taskCode: 'chgActive',\r\n buttonText: 'Active',\r\n },\r\n {\r\n taskCode: 'chgPending',\r\n buttonText: 'Pending',\r\n },\r\n {\r\n taskCode: 'chgSold',\r\n buttonText: 'Sold',\r\n },\r\n {\r\n taskCode: 'chgTerm',\r\n buttonText: 'Terminated',\r\n },\r\n {\r\n taskCode: 'chgExp',\r\n buttonText: 'Expired',\r\n },\r\n {\r\n taskCode: 'chgWithdrawn',\r\n buttonText: 'Withdrawn',\r\n },\r\n];\r\n\r\nconst ViewListings = () => {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const location = useLocation();\r\n\r\n const [autoSaveButtonClicked, setAutoSaveButtonClicked] = useState(false);\r\n const [otherBtnArr, setOtherBtnArr] = useState([]);\r\n const [taskBtnArr, setTaskBtnArr] = useState([]);\r\n const [currentListingPhotoUrl, setCurrentListingPhotoUrl] = useState(null);\r\n const [editButtonClicked, setEditButtonClicked] = useState(false);\r\n const [deleteButtonClicked, setDeleteButtonClicked] = useState(false);\r\n const [hideButton, setHideButton] = useState(true);\r\n const [inputString, setInputString] = useState(''); // for ensuring the user of listing deletion\r\n const [isFormLoading, setIsFormLoading] = useState(false);\r\n const [rowLockButtonClicked, setRowLockButtonClicked] = useState(false);\r\n const [canAccessShowingTime, setCanAccessShowingTime] = useState(false);\r\n const [canViewOpenHouses, setCanViewOpenHouses] = useState(false);\r\n\r\n const autoSaveExists = useSelector(state => state.listing.autoSaveExists);\r\n const currListing = useSelector(selectCurrentListing);\r\n const currentListingPhoto = useSelector(selectCurrentListingPhoto);\r\n const currentListingPreferredPhotoDetails = useSelector(selectCurrentListingPreferredPhotoDetails);\r\n\r\n const autoSaveCriteria = useMemo(() => ({ ResourceUnique: currListing?.UniqueID }), [currListing]);\r\n const rowLockEntity = useMemo(() => ({ type: 'listing', id: currListing?.UniqueID }), [currListing]);\r\n\r\n const [urlParam, setUrlParam] = useQueryParam('ListingID', StringParam);\r\n\r\n const listingCode = currListing?.PropertyType?.toString().toLowerCase();\r\n const listingType = useMemo(() => listingDict[listingCode], [listingCode]);\r\n const memoizedListingEntries = useMemo(() => (currListing ? Object.entries(currListing) : []), [currListing]);\r\n const username = useSelector(getUserName);\r\n const userMLSID = useSelector(getUserMlsId);\r\n\r\n const rollbar = useRollbar();\r\n useRollbarPerson({ id: userMLSID, username });\r\n\r\n const jsonBody = {\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n lockedByMe,\r\n lastUpdatedOn,\r\n lastCheckedOn,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n takeoverLock,\r\n discardChanges,\r\n LockMessage,\r\n LockOwnerMessage,\r\n } = useRowLock({ rowLockEntity });\r\n\r\n const checkAutoSave = () => {\r\n if (!autoSaveCriteria?.ResourceUnique) return;\r\n dispatch(checkForAutoSave(autoSaveCriteria));\r\n };\r\n\r\n useEffect(() => {\r\n checkAutoSave();\r\n }, [autoSaveCriteria]);\r\n\r\n /* If autoSave exists, then start to regularly check for autoSave changes. */\r\n useInterval(checkAutoSave, autoSaveExists ? (1000 * 60) : null);\r\n\r\n const {\r\n getListingAcl,\r\n canEditForm, canCopyForm, canAuditForm, formPermissions,\r\n isAllComplete,\r\n } = useAcl();\r\n const isAllAclComplete = isAllComplete();\r\n\r\n useEffect(() => {\r\n if (Object.keys(formPermissions).length > 0) {\r\n setCanAccessShowingTime(formPermissions.showingTime);\r\n setCanViewOpenHouses(formPermissions.openHouse);\r\n }\r\n }, [formPermissions]);\r\n\r\n useEffect(() => {\r\n if (urlParam) {\r\n jsonBody.where.clause.push({ name: 'ListingID', value: urlParam });\r\n dispatch(reloadListingClicked(jsonBody));\r\n }\r\n\r\n let otherButtons = Object.keys(otherTasks).map(key => {\r\n if (otherTasks[key]) return otherTaskConfig.find(btnCfg => btnCfg.taskCode === key);\r\n return null;\r\n });\r\n otherButtons = otherButtons.filter(btn => btn);\r\n setOtherBtnArr(otherButtons);\r\n\r\n let statusButtons = Object.keys(statusTasks).map(key => {\r\n if (statusTasks[key]) return statusTaskConfig.find(btnCfg => btnCfg.taskCode === key);\r\n return null;\r\n });\r\n statusButtons = statusButtons.filter(btn => btn);\r\n setTaskBtnArr(statusButtons);\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n setUrlParam(currListing?.ListingID, 'replaceIn');\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currListing?.UniqueID) {\r\n // retrieves EDIT, COPY and AUDITLOG permissions\r\n getListingAcl({\r\n action: 'view',\r\n uniqueId: currListing.UniqueID,\r\n });\r\n\r\n // retrieves forms accessible to user\r\n getListingAcl({\r\n action: 'forms',\r\n uniqueId: currListing.UniqueID,\r\n });\r\n\r\n if (location?.search === '' || location?.search !== currListing?.ListingID) {\r\n setUrlParam(currListing?.ListingID, 'replaceIn');\r\n }\r\n }\r\n }, [currListing]);\r\n\r\n // for confirming deletion of listing by having the user type the string \"delete\" to confirm\r\n const confirmInput = typedString => {\r\n setInputString(typedString);\r\n\r\n if (typedString === 'delete' && hideButton) {\r\n setHideButton(false); // set submit button to enabled\r\n }\r\n };\r\n\r\n // Build where clause with UniqueID to retrieve records for\r\n const buildWhereClause = values => {\r\n const whereClause = {\r\n where: {\r\n clause: [],\r\n },\r\n };\r\n const valueKeys = Object.keys(values);\r\n\r\n valueKeys.map(key => {\r\n if (key === 'UniqueID') {\r\n whereClause.where.clause.push(\r\n {\r\n name: key,\r\n value: values[key],\r\n },\r\n );\r\n }\r\n return null;\r\n });\r\n return whereClause;\r\n };\r\n\r\n const loadAutoSaveData = () => {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingCode, currListing?.UniqueID, 'listing')); // loads create listing page.\r\n dispatch(loadAutoSave(autoSaveCriteria));\r\n };\r\n\r\n const removeAutoSaveData = () => {\r\n dispatch(removeAutoSave(autoSaveCriteria));\r\n };\r\n\r\n /*\r\n When a listing is selected, form definition is loaded according to the PropertyType (listing type)\r\n Dispatch retrieves listing record based on UniqueID\r\n */\r\n const loadListingData = () => {\r\n dispatch(loadFormDefinition(operationType, definitionType, listingCode, currListing?.UniqueID, 'listing')); // loads create listing page.\r\n dispatch(loadListingById(buildWhereClause(currListing))); // dispatches call to get listing values\r\n };\r\n\r\n const onTakeoverRowLock = () => {\r\n setRowLockButtonClicked(true);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n\r\n if (autoSaveExists) setIsFormLoading(true);\r\n takeoverLock(() => {\r\n if (autoSaveExists) {\r\n loadAutoSaveData();\r\n }\r\n });\r\n };\r\n\r\n const onDiscardRowLock = () => {\r\n setRowLockButtonClicked(true);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n\r\n if (autoSaveExists) removeAutoSaveData();\r\n if (lockedByMe) {\r\n removeLock();\r\n } else {\r\n discardChanges();\r\n }\r\n };\r\n\r\n const onTakeoverAutoSave = () => {\r\n setAutoSaveButtonClicked(true);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(false);\r\n setRowLockButtonClicked(false);\r\n\r\n setIsFormLoading(true);\r\n createLock(loadAutoSaveData);\r\n };\r\n\r\n const onDiscardAutoSave = () => {\r\n setAutoSaveButtonClicked(true);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(false);\r\n setRowLockButtonClicked(false);\r\n\r\n removeAutoSaveData();\r\n };\r\n\r\n const onEditListing = () => {\r\n if (currListing) {\r\n loadListingData();\r\n }\r\n };\r\n\r\n const onDeleteListing = () => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Delete Listing?',\r\n html: `Are you sure you want to delete Listing ${currListing.ListingId}?`,\r\n iconHtml: '',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'Yes, Delete',\r\n denyButtonText: 'No, Cancel',\r\n showDenyButton: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn-danger btn-lg mr-2 swal-question-listing-discard-yes',\r\n denyButton: 'btn-primary btn-lg swal-question-listing-discard-no',\r\n },\r\n }).then(async result => {\r\n if (result.isConfirmed) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Deleting Listing...',\r\n title: '',\r\n showConfirmButton: false,\r\n });\r\n\r\n try {\r\n const response = await apiService.Listing.DeleteListingById({ UniqueID: currListing.UniqueID, PropertyType: currListing.PropertyType });\r\n const listingId = response?.Data?.ListingId;\r\n\r\n if (listingId) {\r\n setRowLockButtonClicked(false);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(true);\r\n setAutoSaveButtonClicked(false);\r\n\r\n if (autoSaveExists) removeAutoSaveData();\r\n if (lockedByMe) {\r\n removeLock();\r\n } else {\r\n discardChanges();\r\n }\r\n\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Listing Deleted',\r\n text: `Listing ${currListing.ListingId} has been deleted.`,\r\n icon: 'success',\r\n iconColor: 'var(--theme-success)',\r\n showConfirmButton: false,\r\n timer: 3000,\r\n }).then(() => {\r\n history.push('/');\r\n });\r\n } else {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Listing Not Deleted',\r\n text: `Listing ${currListing.ListingId} could not be deleted at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-delete',\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n title: 'Listing Not Deleted',\r\n text: `Listing ${currListing.ListingId} could not be deleted at this time. Please contact support.`,\r\n icon: 'error',\r\n iconColor: 'var(--theme-danger)',\r\n confirmButtonText: 'OK',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-danger btn-lg swal-fail-listing-delete',\r\n },\r\n });\r\n rollbar.error('Error: Listing Delete', err, currListing.ListingId);\r\n }\r\n } else {\r\n setRowLockButtonClicked(false);\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(true);\r\n setAutoSaveButtonClicked(false);\r\n\r\n if (autoSaveExists) removeAutoSaveData();\r\n if (lockedByMe) {\r\n removeLock();\r\n } else {\r\n discardChanges();\r\n }\r\n }\r\n });\r\n };\r\n\r\n const onCopyListing = () => {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Copying Listing...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(loadFormDefinition('create', 'listings', currListing?.PropertyType?.toLowerCase(), null, 'listing', true));\r\n const copyRequest = buildWhereClause(currListing);\r\n copyRequest.formName = currListing?.PropertyType?.toLowerCase();\r\n dispatch(loadListingToCopyById(copyRequest));\r\n };\r\n\r\n const getTaskDefinitions = taskName => {\r\n dispatch(loadFormDefinition(operationType, definitionType, taskName, currListing?.UniqueID, 'listing'));\r\n dispatch(loadListingById(buildWhereClause(currListing)));\r\n };\r\n\r\n const getCurrentListingPreferredPhotoDetails = uniqueID => {\r\n dispatch(loadListingPreferredPhotoDetails(uniqueID));\r\n };\r\n\r\n const getCurrentListingPhoto = photoId => {\r\n dispatch(loadListingPhoto(photoId));\r\n };\r\n\r\n const onClickEdit = () => {\r\n setEditButtonClicked(true);\r\n setDeleteButtonClicked(false);\r\n setRowLockButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n\r\n setIsFormLoading(true);\r\n createLock(onEditListing);\r\n };\r\n\r\n const onClickDelete = () => {\r\n setEditButtonClicked(false);\r\n setDeleteButtonClicked(true);\r\n setRowLockButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n\r\n setIsFormLoading(true);\r\n createLock(onDeleteListing);\r\n };\r\n\r\n const onClickTask = taskCode => () => {\r\n setEditButtonClicked(true);\r\n setDeleteButtonClicked(false);\r\n setRowLockButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n setIsFormLoading(true);\r\n createLock(() => getTaskDefinitions(taskCode));\r\n };\r\n\r\n // temporary placeholder for copy functions\r\n const onCopyClick = () => {\r\n setRowLockButtonClicked(false);\r\n setAutoSaveButtonClicked(false);\r\n setIsFormLoading(true);\r\n onCopyListing();\r\n };\r\n\r\n const onAuditClick = () => {\r\n if (currListing.UniqueID !== null) {\r\n Swal.fire({\r\n allowEnterKey: false,\r\n allowEscapeKey: false,\r\n allowOutsideClick: false,\r\n position: 'center',\r\n html: 'Loading Listing Audit Log...',\r\n title: '',\r\n showConfirmButton: false,\r\n timer: 2000,\r\n });\r\n dispatch(getAuditLog({ tableName: 'Listing', uniqueID: currListing?.UniqueID, entityID: currListing?.ListingID }));\r\n history.push('/audit');\r\n }\r\n };\r\n\r\n // update change form buttons and edit button visibility depending on ACL permissions\r\n useEffect(() => {\r\n if (!listingCode) return;\r\n\r\n let otherButtons = Object.keys(formPermissions).flatMap(key => {\r\n if (!formPermissions[key]) return [];\r\n return otherTaskConfig.find(btnCfg => btnCfg.taskCode === key);\r\n });\r\n otherButtons = otherButtons.filter(btn => btn).sort((a, b) => otherTaskConfig.indexOf(a) - otherTaskConfig.indexOf(b));\r\n setOtherBtnArr(otherButtons);\r\n\r\n let taskButtons = Object.keys(formPermissions).flatMap(key => {\r\n if (!formPermissions[key]) return [];\r\n return statusTaskConfig.find(btnCfg => btnCfg.taskCode === key);\r\n });\r\n taskButtons = taskButtons.filter(btn => btn).sort((a, b) => statusTaskConfig.indexOf(a) - statusTaskConfig.indexOf(b));\r\n setTaskBtnArr(taskButtons);\r\n }, [formPermissions, listingCode]);\r\n\r\n useEffect(() => {\r\n if (currListing?.UniqueID) {\r\n getCurrentListingPreferredPhotoDetails(currListing.UniqueID);\r\n }\r\n }, [currListing]);\r\n\r\n useEffect(() => {\r\n if (currentListingPreferredPhotoDetails?.URL) {\r\n getCurrentListingPhoto(currentListingPreferredPhotoDetails.URL);\r\n }\r\n }, [currentListingPreferredPhotoDetails]);\r\n\r\n useEffect(() => {\r\n if (currentListingPhotoUrl) URL.revokeObjectURL(currentListingPhotoUrl);\r\n if (currentListingPhoto) setCurrentListingPhotoUrl(URL.createObjectURL(currentListingPhoto));\r\n return () => currentListingPhotoUrl && URL.revokeObjectURL(currentListingPhotoUrl);\r\n }, [currentListingPhoto]);\r\n\r\n if (currListing) { // added check to avoid crash when home button was clicked.\r\n return (\r\n <>\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    Are you sure?

    \r\n

    You are about to permanently delete a listing and all its contents.

    \r\n
    \r\n
    \r\n
    \r\n

    \r\n Please confirm by typing\r\n delete\r\n below\r\n

    \r\n confirmInput(e.target.value)}\r\n />\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n

    \r\n \r\n View\r\n Listing\r\n

    \r\n
    \r\n {!isAllAclComplete && !canEditForm ? (\r\n \r\n ) : (\r\n <>\r\n {locked && lockingAuthorized && !autoSaveExists && !isFormLoading && !(editButtonClicked || deleteButtonClicked || rowLockButtonClicked || autoSaveButtonClicked) && (\r\n \r\n )}\r\n {locked && (!lockingAuthorized || (rowLockButtonClicked && isFormLoading)) && (\r\n \r\n )}\r\n {lockingAuthorized && (autoSaveExists || (autoSaveButtonClicked && isFormLoading)) && !rowLockButtonClicked && (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n

    \r\n {isEmpty(currListing.UnitNumber) ? '' : `${currListing.UnitNumber}, `}\r\n {`${currListing.StreetNumber} ${startCase(lowerCase(currListing.StreetName))} ${startCase(lowerCase(currListing.StreetSuffix))}`}\r\n {isEmpty(currListing.StreetDirSuffix) ? '' : ` ${upperCase(currListing.StreetDirSuffix)}`}\r\n

    \r\n

    \r\n {isEmpty(currListing.City) ? '' : `${startCase(currListing.City)}, `}\r\n {startCase(currListing.StateOrProvince) ?? ''}\r\n

    \r\n

    \r\n \r\n {currListing.ListingID}\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n {canEditForm && otherBtnArr.find(x => x.taskCode === 'chgDel') !== undefined && (\r\n \r\n \r\n Delete\r\n \r\n )}\r\n {canEditForm && (\r\n \r\n \r\n Edit\r\n \r\n )}\r\n {canCopyForm && (\r\n \r\n \r\n Copy\r\n \r\n )}\r\n {canAuditForm && (\r\n \r\n \r\n Audit\r\n \r\n )}\r\n \r\n )}\r\n >\r\n \r\n \r\n {\r\n sortBy(memoizedListingEntries).map(([key, value]) => {\r\n if (!listingAttributesWhiteList.includes(key)) {\r\n return null;\r\n }\r\n if (value) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n })\r\n }\r\n {memoizedListingEntries.length === 0 && 'No Values to Show'}\r\n \r\n
    {key.replace(/([a-z])([A-Z])/g, '$1 $2')}{ (key === 'PropertyType' ? listingType : value) }
    \r\n \r\n {canEditForm && taskBtnArr.length > 0 && (\r\n \r\n
    \r\n {taskBtnArr.map(element => (\r\n \r\n

    \r\n \r\n \r\n {`${element.buttonText}`}\r\n \r\n
    \r\n ))}\r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n {canEditForm && (\r\n
    \r\n {canAccessShowingTime && (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )}\r\n {canViewOpenHouses && (\r\n
    \r\n \r\n \r\n \r\n

    Open Houses

    \r\n \r\n
    \r\n
    \r\n )}\r\n {otherBtnArr.length > 0 && (\r\n // eslint-disable-next-line no-nested-ternary\r\n
    \r\n {otherBtnArr.find(x => x.taskCode !== 'chDel').length > 0 && (\r\n \r\n {otherBtnArr.map(element => (element.taskCode !== 'chgDel' && (\r\n \r\n \r\n

    {`${element.buttonText}`}

    \r\n \r\n )))}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )}\r\n \r\n )}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport default ViewListings;\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useQueryParam, StringParam } from 'use-query-params';\r\n\r\nimport { getCurrentOffice } from '@redux/selectors/OfficeSelector';\r\nimport { setCurrentOffice } from '@redux/modules/office';\r\nimport { loadFormDefinition } from '@redux/modules/formGeneration';\r\n\r\nimport useRowLock from '@hooks/useRowLock';\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nimport Button from '@components/smartAdminUI/Button';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport ViewLoader from '@components/loaders/ViewLoader';\r\n\r\nimport capitalize from 'lodash/capitalize';\r\nimport sortBy from 'lodash/sortBy';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport StatusBadges from '@components/badges/StatusBadges';\r\n\r\nconst officeAttributesWhiteList = [\r\n 'OfficeAssociationComments',\r\n 'OfficeEmail',\r\n 'OfficeFax',\r\n 'OfficeMailAddress',\r\n 'OfficeMailCity',\r\n 'OfficeMailPostalCode',\r\n 'OfficePhone',\r\n 'OfficePostalCodePlus4',\r\n 'OtherWebsite',\r\n 'SocialMediaWebsiteUrlOrId',\r\n 'TerminationDate',\r\n 'TollFree',\r\n 'WebFacebook',\r\n 'WebTwitter',\r\n];\r\n\r\nconst operationType = 'edit';\r\nconst definitionType = 'office';\r\n\r\nconst ViewOffices = () => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n\r\n const currOffice = useSelector(getCurrentOffice);\r\n\r\n const [editButtonClicked, setEditButtonClicked] = useState(false);\r\n\r\n const [urlParam, setUrlParam] = useQueryParam('UniqueID', StringParam); // unique ID of current listing from CLF\r\n\r\n const memoizedOfficeEntries = useMemo(() => (currOffice ? Object.entries(currOffice) : []), [currOffice]);\r\n const rowLockEntity = useMemo(() => ({ type: 'office', id: currOffice?.UniqueID }), [currOffice]);\r\n\r\n const {\r\n lockingAuthorized,\r\n locked,\r\n lockedBy,\r\n lockedByMe,\r\n lastUpdatedOn,\r\n lastCheckedOn,\r\n checkStatus,\r\n createLock,\r\n removeLock,\r\n takeoverLock,\r\n discardChanges,\r\n LockMessage,\r\n LockOwnerMessage,\r\n } = useRowLock({ rowLockEntity });\r\n\r\n const onEditOffice = () => {\r\n if (currOffice) {\r\n dispatch(loadFormDefinition(operationType, definitionType, null, currOffice?.UniqueID, 'officeACL'));\r\n }\r\n };\r\n\r\n const {\r\n getOfficeAcl,\r\n canEditForm,\r\n isAllComplete,\r\n } = useAcl();\r\n const isAllAclComplete = isAllComplete();\r\n\r\n useEffect(() => {\r\n if (urlParam) {\r\n dispatch(setCurrentOffice(urlParam));\r\n }\r\n }, []);\r\n\r\n /*\r\n This has to be done using location. Currently, when the user loads a form, it redirects the user to the\r\n create/edit page. When this happens, it clears out the path and search values in the location object.\r\n We can't memo the location and use that as a comparison, because technically the locations will be\r\n the same on the reload, so we can't reset the search value in the location object.\r\n */\r\n useEffect(() => {\r\n if (location?.search === '') {\r\n if (currOffice) {\r\n setUrlParam(currOffice?.UniqueID, 'replaceIn');\r\n }\r\n }\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (currOffice?.UniqueID) {\r\n // retrieves EDIT and COPY permissions for offices\r\n getOfficeAcl({\r\n action: 'view',\r\n formname: 'Office',\r\n uniqueId: currOffice.UniqueID,\r\n });\r\n\r\n // retrieves form permissions for offices\r\n getOfficeAcl({\r\n action: 'forms',\r\n formname: 'Office',\r\n uniqueId: currOffice.UniqueID,\r\n });\r\n\r\n if (location?.search === '' || location?.search !== currOffice?.UniqueID) {\r\n setUrlParam(currOffice?.UniqueID, 'replaceIn');\r\n }\r\n }\r\n }, [currOffice]);\r\n\r\n const onClickEdit = () => {\r\n setEditButtonClicked(true);\r\n createLock(onEditOffice);\r\n };\r\n\r\n if (currOffice) {\r\n return (\r\n <>\r\n
    \r\n

    \r\n \r\n View\r\n Office\r\n

    \r\n
    \r\n {!isAllAclComplete && !canEditForm ? (\r\n \r\n ) : (\r\n <>\r\n {locked && lockingAuthorized && !editButtonClicked && (\r\n \r\n )}\r\n {locked && !lockingAuthorized && !editButtonClicked && (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n

    {currOffice.OfficeName}

    \r\n

    \r\n \r\n {currOffice.OfficeMlsId}\r\n

    \r\n

    \r\n \r\n \r\n {currOffice.OfficePhone}\r\n \r\n

    \r\n

    \r\n \r\n \r\n {currOffice.OfficeAddress1}\r\n
    \r\n {`${capitalize(currOffice.OfficeCity)}, Alberta `}\r\n
    \r\n {currOffice.OfficePostalCode}\r\n
    \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Edit\r\n \r\n )\r\n )}\r\n >\r\n \r\n \r\n {sortBy(memoizedOfficeEntries).map(([key, value]) => {\r\n if (!officeAttributesWhiteList.includes(key)) return null;\r\n if (value) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n })}\r\n {memoizedOfficeEntries.length === 0 && 'No Values to Show'}\r\n \r\n
    {key.replace(/([a-z])([A-Z])/g, '$1 $2')}{value}
    \r\n \r\n
    \r\n
    \r\n \r\n )}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport default ViewOffices;\r\n","export default __webpack_public_path__ + \"static/media/corelogic-icon.dcafb25f.svg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport matrixIcon from '@images/logos/vendor/matrix_logo.png';\r\nimport corelogicIcon from '@images/logos/vendor/corelogic-icon.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst MatrixWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"matrix-icon\"\r\n

    \r\n \r\n \r\n \r\n \r\n

    \r\n

    \r\n MLS® System Powered By |\r\n \"corelogic-icon\"\r\n

    \r\n {\r\n window.open('https://matrix.pillarnine.com', '_blank');\r\n gaEventTracker('Opened Matrix', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n Matrix™\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default MatrixWidget;\r\n","export default \"data:image/png;base64,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\"","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst TrainingWidget = props => {\r\n const { url = '#' } = props;\r\n const username = useSelector(getUserName);\r\n const gaEventTracker = GAEventTracking('User');\r\n\r\n return (\r\n
    \r\n \r\n

    Guides & Videos, Training Courses and Webinars

    \r\n {\r\n if (url) {\r\n window.open(`${url}`, '_blank');\r\n gaEventTracker('Opened Training', `${username}`);\r\n }\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n Training Resources\r\n \r\n
    \r\n );\r\n};\r\n\r\nTrainingWidget.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nexport default TrainingWidget;\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport MatrixWidget from '@components/widget/MatrixWidget';\r\nimport TrainingWidget from '@components/widget/TrainingWidget';\r\n\r\nconst Matrix = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n Matrix™\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default Matrix;\r\n","export default __webpack_public_path__ + \"static/media/logop9map.7b4ffed6.png\";","export default __webpack_public_path__ + \"static/media/remaplist-placeholder.a72a8578.jpg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport REMapListIcon from '@images/logos/logop9map.png';\r\nimport REMapListPlaceholder from '@images/logos/remaplist-placeholder.jpg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst REMapListWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n <>\r\n
    \r\n \"REMapList-icon\"\r\n

    \r\n REMapList™ \r\n is an intuitive mapping tool using data from the Matrix™ and other data sources to provide members with a dynamic mapping experience.\r\n

    \r\n {\r\n window.open('https://maps.pillarnine.com', '_blank');\r\n gaEventTracker('Opened REMapList', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n REMapList™\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default REMapListWidget;\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport REMapListWidget from '@components/widget/REMapListWidget';\r\n\r\nconst REMapList = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n REMapList™\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default REMapList;\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport CreaWebformsWidget from '@components/widget/CreaWebformsWidget';\r\n\r\nconst CREAWEBForms = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n CREA\r\n WEBForms®\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default CREAWEBForms;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport creaIcon from '@images/logos/vendor/crea-logo.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst CreaDDFWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"CREA-icon\"\r\n

    \r\n CREA DDF® \r\n is a managed service to share listings with multiple third-party websites, while providing access to more listings for your own website.\r\n

    \r\n {\r\n window.open('https://www.crea.ca/technology/realtor-ca-for-realtors/realtor-ca-tools/realtor-ca-ddf', '_blank');\r\n gaEventTracker('Opened CREA DDF', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n CREA DDF®\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default CreaDDFWidget;\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport CreaDDFWidget from '@components/widget/CreaDDFWidget';\r\n\r\nconst CREADDF = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n CREA\r\n DDF®\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n

    \r\n CREA has created a Data Distribution Facility (DDF®) to enable CREA's members to easily disseminate MLS® listing content to&nbps;\r\n multiple websites, and to ensure that MLS® listing content that is displayed on these websites is accurate, up to date, and uses CREA's trademarks correctly.\r\n

    \r\n

    \r\n You can use the DDF® to share your listings with other REALTORS®, with Franchisors, as well as approved real estate advertising websites. You can also receive a feed of listing content from the DDF® for display on your own website.\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default CREADDF;\r\n","export default __webpack_public_path__ + \"static/media/logoprospectscrmwhite2.aa66b88a.png\";","export default __webpack_public_path__ + \"static/media/applebadge.2e842790.svg\";","export default __webpack_public_path__ + \"static/media/google-play-badge.c39ff0cc.svg\";","import React from 'react';\r\n\r\nimport prospectsIcon from '@images/logos/vendor/logoprospectscrmwhite2.png';\r\nimport appleIcon from '@images/logos/applebadge.svg';\r\nimport googleIcon from '@images/logos/google-play-badge.svg';\r\n\r\nconst ProspectsMobileWidget = () => (\r\n
    \r\n \"prospects-mobile-icon\"\r\n

    \r\n Prospects Mobile gives you the tools you need to stay connected to critical listing data and client activities while you're on the go.\r\n

    \r\n \r\n \"Apple\r\n \r\n \r\n \"Google\r\n \r\n
    \r\n);\r\n\r\nexport default ProspectsMobileWidget;\r\n","import React from 'react';\r\n\r\nimport ProspectsWidget from '@components/widget/ProspectsWidget';\r\nimport ProspectsMobileWidget from '@components/widget/ProspectsMobileWidget';\r\nimport TrainingWidget from '@components/widget/TrainingWidget';\r\nimport Panel from '@components/smartAdminUI/Panel';\r\n\r\nconst Prospects = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n Prospects\r\n \r\n Powered by CoreLogic\r\n \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n

    \r\n Members! Did you know that as part of your Pillar 9™ fees you have access to the \r\n Premium Level Pro version\r\n  of all of Prospects tools?\r\n

    \r\n

    \r\n Prospects CRM provides you with all the tools you need to succeed and\r\n thrive in a highly competitive market. Manage your contacts and your\r\n everyday business better than ever with this powerful CRM that's\r\n designed for real estate professionals. \r\n

    \r\n

    \r\n Learn more about Prospects here: \r\n \r\n Prospects CRM. Build Stronger Relationships, Accelerate your\r\n Business\r\n \r\n

    \r\n
    \r\n \r\n

    Access & Login

    \r\n

    \r\n To log into Prospects, visit \r\n \r\n Prospects.com\r\n \r\n  \r\n and click the red login button in the top right corner. Then, enter your public ID, authenticator password, and your 4 digit pin number (the same way you log into Matrix™).\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default Prospects;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport spinIcon from '@images/logos/vendor/spin_logo.gif';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst SpinWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"spin-icon\"\r\n

    Land titles data products, registered survey plans, township images, survey control markers, soil capability information and other land information.

    \r\n {\r\n window.open('https://alta.registries.gov.ab.ca/spinii/logon.aspx', '_blank');\r\n gaEventTracker('Opened Spin', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n className=\"pos-right\"\r\n >\r\n \r\n Spin2\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default SpinWidget;\r\n","export default \"data:image/gif;base64,R0lGODlhXAA/ALMAAP///0SDharHyGGXmODq642ztMja2/L39/7+/nSjpQAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABcAD8AAAT/EMhJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJfBEEicRgWjA0R4TCIMDtdgfWayfr5SYKAi13IDwYDIK4wHAACbwJQb1y2IZ9BGVfexsECV16Gn0CQHcBA1VvBgUFHARbAQWEGQYBjCGbKVmfFHcbfY8EHpOhHAUBqjICW2wadwOtLYd/LrNdvBdbsTJPuSiOXALDGVvKYqVemh5kj2dxy0cHh1xVIk/bXWfYE+M4nYgocJiPA9iHsQezeRZpxiTIiSvUmRSvngAG1sEi569SBS3Lrm3wFwDYCkcJJFzqQqYAgXMTkPGbYGCbQV9c/+z5axcjEL9zEEkCuCUh2YFkE15NCZCAzMyGGBwZjIEJ5CRue0wq46Lq1p5mJmcycgRv57kEmy7OMVAuxMg1dcxMeEnzVqxXjLQ1RLUmliOJkDImg1MA3BcTBxgOcAaQ6IEDE9fw4gKHKABwUGPSBDiFkEZBXqpu+PnrILtH0UJ5Ick10yZHdwJTWDfA2hwAF2uGAAmzgklB3Sx0kQa6NIXTOyvQUfEkk8dxqNpVo3vhCTaqGCaRglERCs2qPZ8F+5LvQpqQyi1cdCid0sboIxIExIldRBqM3UXAAhs+RCfw5T9A2RI7PQdkit0vpy4/w936+PPr38+/v/8bCAQo4BCABBYYoHsGJnigfwL+B0QEADs=\"","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport SpinWidget from '@components/widget/SpinWidget';\r\n\r\nconst Spin = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n Spin2\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default Spin;\r\n","export default __webpack_public_path__ + \"static/media/spacelist_logo.c6e3d303.svg\";","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getUserName } from '@redux/selectors/UserSelector';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport spacelistIcon from '@images/logos/vendor/spacelist_logo.svg';\r\nimport GAEventTracking from '@components/tracking/GAEventTracking';\r\n\r\nconst SpacelistWidget = () => {\r\n const gaEventTracker = GAEventTracking('User');\r\n const username = useSelector(getUserName);\r\n\r\n return (\r\n
    \r\n \"spacelist-icon\"\r\n

    \r\n Spacelist™ \r\n is an interactive mapping tool to search billions of square feet of commercial real estate listings for free.\r\n

    \r\n {\r\n window.open('https://www.spacelist.ca', '_blank');\r\n gaEventTracker('Opened Spacelist', `${username}`);\r\n }}\r\n variant=\"primary\"\r\n >\r\n \r\n Spacelist™\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default SpacelistWidget;\r\n","import AuditLogPage from '@containers/auditLog/AuditLogPage';\r\nimport CondoManagementPage from '@containers/condo/CondoManagementPage';\r\nimport CreateAgentPage from '@containers/agent/CreateAgentPage';\r\nimport CreateListingsPage from '@containers/listing/CreateListingsPage';\r\nimport CreateOfficePageOG from '@containers/office/CreateOfficePageOG';\r\nimport EditAgentPage from '@containers/agent/EditAgentPage';\r\nimport EditOfficePageOG from '@containers/office/EditOfficePageOG';\r\nimport Dashboard from '@containers/dashboard/Dashboard';\r\nimport RowLockPage from '@components/rowLock/RowLockPage';\r\nimport AggregateDataPage from '@containers/dataPortal/aggregateData/AggregateDataPage';\r\nimport DataSearchPage from '@containers/dataPortal/transactionalData/dataSearch/DataSearchPage';\r\nimport SearchAgentPage from '@containers/agent/SearchAgentPage';\r\nimport SearchListingsPage from '@containers/listing/SearchListingsPage';\r\nimport SearchOfficePage from '@containers/office/SearchOfficePage';\r\nimport ViewAgentPage from '@containers/agent/ViewAgentPage';\r\nimport ViewListingPage from '@containers/listing/ViewListingsPage';\r\nimport ViewOfficePage from '@containers/office/ViewOfficePage';\r\nimport Matrix from '@containers/vendorApps/matrix/Matrix';\r\nimport REMapList from '@containers/vendorApps/remaplist/REMapList';\r\nimport CREAWEBForms from '@containers/vendorApps/crea/CREAWEBForms';\r\nimport CREADDF from '@containers/vendorApps/crea/CREADDF';\r\nimport Prospects from '@containers/vendorApps/prospects/Prospects';\r\nimport Spin from '@containers/vendorApps/spin/Spin';\r\nimport Spacelist from '@containers/vendorApps/spacelist/SpaceList';\r\nimport CloudCMA from '@containers/vendorApps/cloudcma/CloudCMA';\r\nimport RECA from '@containers/resources/RECA';\r\nimport PostalCodeLookup from '@containers/resources/PostalCodeLookup';\r\nimport Training from '@containers/resources/Training';\r\n\r\nexport default [\r\n {\r\n id: 'dashboard_page',\r\n path: '/',\r\n breadcrumbPath: '/',\r\n name: 'Home',\r\n Component: Dashboard,\r\n requiredAcl: 'EVERYONE',\r\n },\r\n {\r\n id: 'aggregate_data_page',\r\n path: '/data/aggregate',\r\n breadcrumbPath: '/data/aggregate',\r\n name: 'Aggregate Data',\r\n Component: AggregateDataPage,\r\n requiredAcl: 'DPA',\r\n },\r\n {\r\n id: 'data_search_page',\r\n path: '/data/search',\r\n breadcrumbPath: '/data/search',\r\n name: 'Search Data',\r\n Component: DataSearchPage,\r\n requiredAcl: 'DPT',\r\n },\r\n {\r\n id: 'create_agent_page',\r\n path: '/agent/create',\r\n breadcrumbPath: '/agent/create',\r\n name: 'Create Agent',\r\n Component: CreateAgentPage,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'edit_agent_page',\r\n path: '/agent/edit',\r\n breadcrumbPath: '/agent/edit',\r\n name: 'Edit Agent',\r\n Component: EditAgentPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'search_agent_page',\r\n path: '/agent/search',\r\n breadcrumbPath: '/agent/search',\r\n name: 'Search Agents',\r\n Component: SearchAgentPage,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'view_agent_page',\r\n path: '/agent/view',\r\n breadcrumbPath: '/agent/view',\r\n name: 'View Agent',\r\n Component: ViewAgentPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'audit_log_page',\r\n path: '/audit',\r\n breadcrumbPath: '/audit',\r\n name: 'Audit Log',\r\n Component: AuditLogPage,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'condo_management_page',\r\n path: '/condo',\r\n breadcrumbPath: '/condo',\r\n name: 'Condo Management',\r\n Component: CondoManagementPage,\r\n requiredAcl: 'ADMIN',\r\n },\r\n {\r\n id: 'create_listings_page',\r\n path: '/listings/create/:listingType',\r\n breadcrumbPath: '/listings/create',\r\n name: 'Create Listing',\r\n Component: CreateListingsPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'edit_listings_page',\r\n path: '/listings/edit/:listingType',\r\n breadcrumbPath: '/listings/edit',\r\n name: 'Edit Listing',\r\n Component: CreateListingsPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'search_listings_page',\r\n path: '/listings/search',\r\n breadcrumbPath: '/listings/search',\r\n name: 'Search Listings',\r\n Component: SearchListingsPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'view_listings_page',\r\n path: '/listings/view',\r\n breadcrumbPath: '/listings/view',\r\n name: 'View Listing',\r\n Component: ViewListingPage,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'search_office_page',\r\n path: '/office/search',\r\n breadcrumbPath: '/office/search',\r\n name: 'Search Office',\r\n Component: SearchOfficePage,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'create_office_page',\r\n path: '/office/create',\r\n breadcrumbPath: '/office/create',\r\n name: 'Create Office',\r\n Component: CreateOfficePageOG,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'edit_office_page',\r\n path: '/office/edit',\r\n breadcrumbPath: '/office/edit',\r\n name: 'Edit Office',\r\n Component: EditOfficePageOG,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'view_office_page',\r\n path: '/office/view',\r\n breadcrumbPath: '/office/view',\r\n name: 'View Office',\r\n Component: ViewOfficePage,\r\n requiredAcl: 'STAFF',\r\n },\r\n {\r\n id: 'row_lock_page',\r\n path: '/rowLock/:entityType/:entityId',\r\n breadcrumbPath: '/rowLock',\r\n name: 'Row Lock',\r\n Component: RowLockPage,\r\n requiredAcl: 'ADMIN',\r\n },\r\n {\r\n id: 'matrix_page',\r\n path: '/matrix',\r\n breadcrumbPath: '/matrix',\r\n name: 'Matrix',\r\n Component: Matrix,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'remaplist_page',\r\n path: '/remaplist',\r\n breadcrumbPath: '/remaplist',\r\n name: 'REMapList',\r\n Component: REMapList,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'creawebforms_page',\r\n path: '/crea/webforms',\r\n breadcrumbPath: '/crea/webforms',\r\n name: 'CREA WEBForms',\r\n Component: CREAWEBForms,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'creaddf_page',\r\n path: '/crea/ddf',\r\n breadcrumbPath: '/crea/ddf',\r\n name: 'CREA DDF',\r\n Component: CREADDF,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'prospects_page',\r\n path: '/prospects',\r\n breadcrumbPath: '/prospects',\r\n name: 'Prospects',\r\n Component: Prospects,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'spin_page',\r\n path: '/spin',\r\n breadcrumbPath: '/spin',\r\n name: 'Spin2',\r\n Component: Spin,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'spacelist_page',\r\n path: '/spacelist',\r\n breadcrumbPath: '/spacelist',\r\n name: 'Spacelist',\r\n Component: Spacelist,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'cloudcma_page',\r\n path: '/cloudcma',\r\n breadcrumbPath: '/cloudcma',\r\n name: 'Cloud CMA',\r\n Component: CloudCMA,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'postalcodelookup_page',\r\n path: '/resources/postalcodelookup',\r\n breadcrumbPath: 'resources/postalcodelookup',\r\n name: 'Postal Code Lookup',\r\n Component: PostalCodeLookup,\r\n requiredAcl: 'EVERYONE',\r\n },\r\n {\r\n id: 'reca_page',\r\n path: '/resources/reca',\r\n breadcrumbPath: '/resources/reca',\r\n name: 'RECA',\r\n Component: RECA,\r\n requiredAcl: 'ASSIST',\r\n },\r\n {\r\n id: 'training_page',\r\n path: '/resources/training',\r\n breadcrumbPath: '/training',\r\n name: 'Training',\r\n Component: Training,\r\n requiredAcl: 'ASSIST',\r\n },\r\n];\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport SpacelistWidget from '@components/widget/SpacelistWidget';\r\n\r\nconst SpaceList = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n Spacelist\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default SpaceList;\r\n","import React from 'react';\r\n\r\nimport Panel from '@components/smartAdminUI/Panel';\r\nimport CloudCMAWidget from '@components/widget/CloudCMAWidget';\r\nimport TrainingWidget from '@components/widget/TrainingWidget';\r\n\r\nconst CloudCMA = () => (\r\n <>\r\n
    \r\n

    \r\n \r\n Cloud CMA\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n);\r\n\r\nexport default CloudCMA;\r\n","import React from 'react';\r\n\r\nconst PostalCodeLookup = () => (\r\n
    \r\n
    \r\n

    \r\n \r\n Postal Code Lookup\r\n \r\n Powered by Canada Post\r\n \r\n

    \r\n
    \r\n
    \r\n);\r\n\r\nexport default PostalCodeLookup;\r\n","import React from 'react';\r\n\r\nconst RECA = () => (\r\n
    \r\n
    \r\n

    \r\n \r\n RECA\r\n Resources\r\n \r\n Tools, Guides and Standards\r\n \r\n

    \r\n
    \r\n
    \r\n);\r\n\r\nexport default RECA;\r\n","import React from 'react';\r\n\r\nconst Training = () => (\r\n
    \r\n
    \r\n

    \r\n \r\n Training\r\n

    \r\n
    \r\n
    \r\n);\r\n\r\nexport default Training;\r\n","import React, { useState } from 'react';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Button from 'react-bootstrap/Button';\r\nimport useAcl from '@hooks/useAcl';\r\n\r\nconst appSettings = require('../../../appsettings.json');\r\n\r\nconst Footer = () => {\r\n const { aclIsEmpty, is3rdPartyDataPortalUser } = useAcl();\r\n const [showTerms, setShowTerms] = useState(false);\r\n const [okButtonDisabled, setOkButtonDisabled] = useState(true);\r\n\r\n const handleScroll = e => {\r\n const bottom = e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight;\r\n\r\n if (bottom) setOkButtonDisabled(false);\r\n else setOkButtonDisabled(true);\r\n };\r\n\r\n return (\r\n <>\r\n {is3rdPartyDataPortalUser && (\r\n <>\r\n setShowTerms(!showTerms)}\r\n onShow={() => setOkButtonDisabled(true)}\r\n backdrop=\"static\"\r\n size=\"xl\"\r\n scrollable\r\n >\r\n \r\n \r\n \r\n PILLAR 9™ - Terms of Service\r\n \r\n \r\n \r\n \r\n

    Data Disclaimer

    \r\n

    Information is deemed reliable but is NOT guaranteed accurate.

    \r\n {/* eslint-disable-next-line max-len */}\r\n

    The Listing Agent(s) who creates the Listing is responsible for the Listing information to be accurate and shall use their best efforts to transfer copyright title for photographs and other copyrightable material to the Pillar 9™.

    \r\n

    No warranties or representations are made by PILLAR 9™or our partners.

    \r\n

    Authorized Use

    \r\n
      \r\n
    1. \r\n The information contained on the PILLAR 9™ MLS® System is confidential and shall not be distributed to unauthorized persons (including other real estate boards) or used in any unauthorized manner.\r\n The Shareholders agree that information and data contained on the PILLAR 9™ MLS® System may only be used in an Authorized manner.\r\n
    2. \r\n
    3. \r\n

      For the purposes of this Agreement:

      \r\n
        \r\n
      1. \r\n

        “Authorized Use” or “Authorized manner” “of the MLS® System means:

        \r\n
          \r\n
        1. The extraction of data from the MLS® System by Members in good standing necessary to assist them in representing their Clients/Customers or specific identified customers in the Trade of real property;
        2. \r\n {/* eslint-disable-next-line max-len */}\r\n
        3. The ability of Members in good standing to remove reference to the Listing Brokerage and Listing Associate when representing specific clients, or specific identified customers in the Trade of real estate; and
        4. \r\n
        5. Any specific use authorized in writing by the Corporation.
        6. \r\n
        \r\n
      2. \r\n
      3. \r\n

        “Unauthorized Use” of the MLS® System is any use not set out in the above section and includes, but is not limited to:

        \r\n
          \r\n
        1. The sale or distribution of any portion of the MLS® System to any third parties;
        2. \r\n
        3. \r\n Use of the MLS® System for direct or personal contact or communication with another Member’s Client/Customer when the status of a listing on PILLAR 9™ MLS® System is marked as either Expired (X),\r\n or Terminated (T) or and the Member knows or ought to know that a written service agreement has been or is in place. \r\n
        4. \r\n
        5. \r\n Any general or institutional advertising of a Member’s services through radio, television, open houses, or other means of reaching a large group of the public not directed specifically to persons having had\r\n a written service agreement that is now either expired (X) or terminated (T) or any contact or communication that was specifically requested or initiated by the Client/Customer, is not deemed to be an unauthorized\r\n use of the MLS® System. \r\n
        6. \r\n
        7. No use is unauthorized if consented to in writing by the Corporation. Anyone requesting such consent is required to meet all requirements as determined by the Corporation. 
        8. \r\n
        9. \r\n The Corporation shall be responsible for ensuring the enforcement of agreements that set out the authorized use of data from the MLS®\r\n System by third parties or to take necessary means to prevent unauthorized use.\r\n
        10. \r\n
        \r\n
      4. \r\n
      \r\n
    4. \r\n
    \r\n

    Ownership and Copyright

    \r\n
      \r\n
    1. \r\n PILLAR 9™ is the owner of the copyright in its MLS® SYSTEM database. The MLS® SYSTEM database is a licensed product for the exclusive use of Members and other authorized users and any use of this\r\n data for any unauthorized purpose is prohibited. The right to use, reproduce or download the data is subject to the authority of PILLAR 9™ and is limited to the specific uses permitted by PILLAR 9™.\r\n
    2. \r\n
    3. \r\n Members shall comply with, observe, and be bound by all restrictions, copyright notices, or other limitations of access to the PILLAR 9™  MLS® SYSTEM database and use thereof as may be adopted\r\n by the Directors from time to time.\r\n
    4. \r\n
    5. A member, in submitting Listing information to PILLAR 9™, consents to such use of that information as PILLAR 9™ determines. 
    6. \r\n
    7. \r\n

      The Member shall advise and obtain the Principal’s consent that: 

      \r\n
        \r\n
      1. \r\n All information concerning the Agency Agreement, the properties affected thereby, and the transactions thereunder shall be made available not only to all other Members but also to any\r\n third-party authorized users with whom PILLAR 9™ has a contract and their Principals;\r\n
      2. \r\n
      3. PILLAR 9™ may, at its option, advertise in any medium, including the Internet, any properties listed on the MLS® SYSTEM database; 
      4. \r\n
      5. PILLAR 9™ may retain and distribute the listing information indefinitely and may compile and publish any statistical analysis, including historical MLS® SYSTEM data, on such information. 
      6. \r\n
      \r\n
    8. \r\n
    9. \r\n PILLAR 9™ shall not be responsible for any indirect, special, or consequential damages or any other obligation or liability arising out of, or in any way connected with, the MLS® SYSTEM database including,\r\n but not limited to, computer failure or interruption, or negligence. \r\n
    10. \r\n
    11. The Directors may from time to time establish fees for use of the PILLAR 9™  MLS® SYSTEM information.
    12. \r\n
    \r\n

    Cookies

    \r\n

    When you use P9 Analytics, PILLAR 9™ uses Cookies to track your interactions, usage, and patterns in order to better understand and meet your preferences, to provide you with a customized experience.

    \r\n

    PILLAR 9™ uses third-party technology for tracking and in doing so, a third-party Cookie may be placed or recognized by your browser.

    \r\n

    Accessibility

    \r\n

    PILLAR 9™ strives to ensure that its applications and content are accessible to persons with disabilities including users of screen reader technology.

    \r\n

    WCAG 2.0 Level AA is used as a guide for developing online experiences that serve all of our users.

    \r\n

    Please be aware that our efforts to maintain accessibility and usability are ongoing.

    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n )}\r\n {!aclIsEmpty && !is3rdPartyDataPortalUser && (\r\n <>\r\n setShowTerms(!showTerms)}\r\n onShow={() => setOkButtonDisabled(true)}\r\n backdrop=\"static\"\r\n size=\"xl\"\r\n scrollable\r\n >\r\n \r\n \r\n \r\n PILLAR 9™ - Terms of Service\r\n \r\n \r\n \r\n \r\n

    Data Disclaimer

    \r\n

    Information is deemed reliable but is NOT guaranteed accurate.

    \r\n {/* eslint-disable-next-line max-len */}\r\n

    The Listing Agent(s) who creates the Listing is responsible for the Listing information to be accurate and shall use their best efforts to transfer copyright title for photographs and other copyrightable material to the Pillar 9™.

    \r\n

    No warranties or representations are made by PILLAR 9™or our partners.

    \r\n

    Authorized Use

    \r\n
      \r\n
    1. \r\n The information contained on the PILLAR 9™ MLS® System is confidential and shall not be distributed to unauthorized persons (including other real estate boards) or used in any unauthorized manner.\r\n The Shareholders agree that information and data contained on the PILLAR 9™ MLS® System may only be used in an Authorized manner.\r\n
    2. \r\n
    3. \r\n

      For the purposes of this Agreement:

      \r\n
        \r\n
      1. \r\n

        “Authorized Use” or “Authorized manner” “of the MLS® System means:

        \r\n
          \r\n
        1. The extraction of data from the MLS® System by Members in good standing necessary to assist them in representing their Clients/Customers or specific identified customers in the Trade of real property;
        2. \r\n {/* eslint-disable-next-line max-len */}\r\n
        3. The ability of Members in good standing to remove reference to the Listing Brokerage and Listing Associate when representing specific clients, or specific identified customers in the Trade of real estate; and
        4. \r\n
        5. Any specific use authorized in writing by the Corporation.
        6. \r\n
        \r\n
      2. \r\n
      3. \r\n

        “Unauthorized Use” of the MLS® System is any use not set out in the above section and includes, but is not limited to:

        \r\n
          \r\n
        1. The sale or distribution of any portion of the MLS® System to any third parties;
        2. \r\n
        3. \r\n Use of the MLS® System for direct or personal contact or communication with another Member’s Client/Customer when the status of a listing on PILLAR 9™ MLS® System is marked as either Expired (X),\r\n or Terminated (T) or and the Member knows or ought to know that a written service agreement has been or is in place. \r\n
        4. \r\n
        5. \r\n Any general or institutional advertising of a Member’s services through radio, television, open houses, or other means of reaching a large group of the public not directed specifically to persons having had\r\n a written service agreement that is now either expired (X) or terminated (T) or any contact or communication that was specifically requested or initiated by the Client/Customer, is not deemed to be an unauthorized\r\n use of the MLS® System. \r\n
        6. \r\n
        7. No use is unauthorized if consented to in writing by the Corporation. Anyone requesting such consent is required to meet all requirements as determined by the Corporation. 
        8. \r\n
        9. \r\n The Corporation shall be responsible for ensuring the enforcement of agreements that set out the authorized use of data from the MLS®\r\n System by third parties or to take necessary means to prevent unauthorized use.\r\n
        10. \r\n
        \r\n
      4. \r\n
      \r\n
    4. \r\n
    \r\n

    Ownership and Copyright

    \r\n
      \r\n
    1. \r\n PILLAR 9™ is the owner of the copyright in its MLS® SYSTEM database. The MLS® SYSTEM database is a licensed product for the exclusive use of Members and other authorized users and any use of this\r\n data for any unauthorized purpose is prohibited. The right to use, reproduce or download the data is subject to the authority of PILLAR 9™ and is limited to the specific uses permitted by PILLAR 9™.\r\n
    2. \r\n
    3. \r\n Members shall comply with, observe, and be bound by all restrictions, copyright notices, or other limitations of access to the PILLAR 9™  MLS® SYSTEM database and use thereof as may be adopted\r\n by the Directors from time to time.\r\n
    4. \r\n
    5. A member, in submitting Listing information to PILLAR 9™, consents to such use of that information as PILLAR 9™ determines. 
    6. \r\n
    7. \r\n

      The Member shall advise and obtain the Principal’s consent that: 

      \r\n
        \r\n
      1. \r\n All information concerning the Agency Agreement, the properties affected thereby, and the transactions thereunder shall be made available not only to all other Members but also to any\r\n third-party authorized users with whom PILLAR 9™ has a contract and their Principals;\r\n
      2. \r\n
      3. PILLAR 9™ may, at its option, advertise in any medium, including the Internet, any properties listed on the MLS® SYSTEM database; 
      4. \r\n
      5. PILLAR 9™ may retain and distribute the listing information indefinitely and may compile and publish any statistical analysis, including historical MLS® SYSTEM data, on such information. 
      6. \r\n
      \r\n
    8. \r\n
    9. \r\n PILLAR 9™ shall not be responsible for any indirect, special, or consequential damages or any other obligation or liability arising out of, or in any way connected with, the MLS® SYSTEM database including,\r\n but not limited to, computer failure or interruption, or negligence. \r\n
    10. \r\n
    11. The Directors may from time to time establish fees for use of the PILLAR 9™  MLS® SYSTEM information.
    12. \r\n
    \r\n

    Cookies

    \r\n

    When you use OnePlatform, PILLAR 9™ uses Cookies to track your interactions, usage, and patterns in order to better understand and meet your preferences, to provide you with a customized experience.

    \r\n

    PILLAR 9™ uses third-party technology for tracking and in doing so, a third-party Cookie may be placed or recognized by your browser.

    \r\n

    Accessibility

    \r\n

    PILLAR 9™ strives to ensure that its applications and content are accessible to persons with disabilities including users of screen reader technology.

    \r\n

    WCAG 2.0 Level AA is used as a guide for developing online experiences that serve all of our users.

    \r\n

    Please be aware that our efforts to maintain accessibility and usability are ongoing.

    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import React from 'react';\r\nimport Moment from 'react-moment';\r\n\r\nconst dateToFormat = Date.now();\r\n\r\nconst Today = () => (\r\n \r\n {dateToFormat}\r\n \r\n);\r\n\r\nexport default Today;\r\n","import { useState, useEffect } from 'react';\r\n\r\nconst useDelayedRender = delay => {\r\n const [delayed, setDelayed] = useState(true);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => setDelayed(false), delay);\r\n return () => clearTimeout(timeout);\r\n }, []);\r\n\r\n return fn => !delayed && fn();\r\n};\r\n\r\nexport default useDelayedRender;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport agent from '@services/apiService';\r\nimport useInterval from '@hooks/useInterval';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useDelayedRender from '@hooks/useDelayedRender';\r\nimport { checkAuthStatus, checkAuthExpiry, heartBeat } from '@redux/reducers/application/Authentication';\r\n\r\nimport {\r\n CLAREITY_LOGIN,\r\n} from '@redux/constants/ActionTypes';\r\n\r\nconst CHECK_AUTH_EXPIRY_COOKIE_INTERVAL_DELAY = 1000 * 60; // 1 minute\r\nconst SESSION_MODAL_RENDER_DELAY = 2000; // 2 seconds\r\nconst CHECK_EXPIRY_ON_NEGATIVE_REMAINING_TIME_DELAY = 2000; // 2 seconds\r\n\r\nconst AppSessionModal = () => {\r\n const dispatch = useDispatch();\r\n const authChecked = useSelector(({ authentication }) => authentication.authChecked);\r\n const isLoadingAuth = useSelector(({ authentication }) => authentication.isLoadingAuth);\r\n const isAuthenticated = useSelector(({ authentication }) => authentication.isAuthenticated);\r\n const isAuthExpiryCookiePresent = useSelector(({ authentication }) => authentication.isAuthExpiryCookiePresent);\r\n const prevIsAuthExpiryCookiePresent = usePrevious(isAuthExpiryCookiePresent);\r\n const isAuthCloseToExpiry = useSelector(({ authentication }) => authentication.isAuthCloseToExpiry);\r\n const minutesLeftToAuthExpiry = useSelector(({ authentication }) => authentication.minutesLeftToAuthExpiry);\r\n const delayedRender = useDelayedRender(SESSION_MODAL_RENDER_DELAY);\r\n const [isSessionRefresh, setIsSessionRefresh] = useState(false);\r\n const [showSessionRefreshModal, setShowSessionRefreshModal] = useState(false);\r\n const [showSessionExpiredModal, setShowSessionExpiredModal] = useState(false);\r\n const isSwalOpen = useSelector(state => state.utility.isSwalOpen);\r\n\r\n useInterval(() => dispatch(checkAuthExpiry()), !isSessionRefresh && authChecked && isAuthenticated && !isLoadingAuth ? CHECK_AUTH_EXPIRY_COOKIE_INTERVAL_DELAY : null);\r\n\r\n useEffect(() => {\r\n if (prevIsAuthExpiryCookiePresent && !isAuthExpiryCookiePresent) {\r\n dispatch(checkAuthStatus());\r\n }\r\n }, [isAuthExpiryCookiePresent]);\r\n\r\n useEffect(() => {\r\n if (minutesLeftToAuthExpiry === -1) {\r\n setTimeout(() => dispatch(checkAuthExpiry()), CHECK_EXPIRY_ON_NEGATIVE_REMAINING_TIME_DELAY);\r\n }\r\n }, [minutesLeftToAuthExpiry]);\r\n\r\n useEffect(() => {\r\n if (isAuthCloseToExpiry && authChecked && isAuthenticated && !isLoadingAuth) {\r\n setShowSessionRefreshModal(true);\r\n } else {\r\n setShowSessionRefreshModal(false);\r\n }\r\n\r\n if (authChecked && !isAuthenticated && !isLoadingAuth) {\r\n setShowSessionExpiredModal(true);\r\n } else {\r\n setShowSessionExpiredModal(false);\r\n }\r\n }, [isAuthCloseToExpiry, authChecked, isAuthenticated, isLoadingAuth]);\r\n\r\n const onRefreshSession = async () => {\r\n try {\r\n setIsSessionRefresh(true);\r\n await dispatch(heartBeat());\r\n dispatch(checkAuthExpiry());\r\n setIsSessionRefresh(false);\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('Error: Session onRefreshSession', err);\r\n }\r\n };\r\n\r\n const onReauthenticate = () => {\r\n dispatch({ type: CLAREITY_LOGIN, payload: agent.Auth.ClareityLogin() });\r\n };\r\n\r\n // Use a delayed render so that we would avoid displaying the modal right before a Clareity redirection to login page.\r\n return delayedRender(() => (\r\n <>\r\n {/* Modal responsible for alerting the user that the application session will expire soon */}\r\n \r\n {!isSwalOpen && isAuthCloseToExpiry && (\r\n <>\r\n \r\n Application Session\r\n \r\n \r\n {minutesLeftToAuthExpiry > 0\r\n ? `Your session is about to expire in ${minutesLeftToAuthExpiry} minute${minutesLeftToAuthExpiry > 1 ? 's' : ''}.`\r\n : 'Your session is about to expire in less than a minute.'}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {/* Modal responsible for alerting the user that the application session has expired */}\r\n \r\n \r\n Application Session\r\n \r\n \r\n Your login session has expired.\r\n \r\n \r\n \r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nexport default AppSessionModal;\r\n","import { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useIdleTimer } from 'react-idle-timer';\r\nimport { setUserIdleStatus } from '@redux/modules/user';\r\n\r\nconst IDLE_TIMER_TIMEOUT = 1000 * 60 * 5; // 5 minutes\r\n\r\nconst useUserActivityCheck = () => {\r\n const dispatch = useDispatch();\r\n\r\n const onIdle = () => {\r\n dispatch(setUserIdleStatus(true));\r\n };\r\n\r\n const onActive = () => {\r\n dispatch(setUserIdleStatus(false));\r\n };\r\n\r\n const { isIdle: getIdleStatus } = useIdleTimer({\r\n timeout: IDLE_TIMER_TIMEOUT,\r\n onIdle,\r\n onActive,\r\n events: [\r\n 'keydown',\r\n 'mousedown',\r\n 'touchstart',\r\n 'MSPointerDown',\r\n ],\r\n });\r\n\r\n useEffect(() => {\r\n dispatch(setUserIdleStatus(getIdleStatus()));\r\n }, []);\r\n};\r\n\r\nexport default useUserActivityCheck;\r\n","import { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getUserIdleStatus } from '@redux/selectors/UserSelector';\r\nimport { heartBeat } from '@redux/reducers/application/Authentication';\r\nimport useInterval from '@hooks/useInterval';\r\nimport usePrevious from '@hooks/usePrevious';\r\n\r\nconst HEARTBEAT_INTERVAL_DELAY = 1000 * 60 * 5; // 5 minutes\r\n\r\nconst useHeartBeat = () => {\r\n const dispatch = useDispatch();\r\n const authChecked = useSelector(({ authentication }) => authentication.authChecked);\r\n const isLoadingAuth = useSelector(({ authentication }) => authentication.isLoadingAuth);\r\n const isAuthenticated = useSelector(({ authentication }) => authentication.isAuthenticated);\r\n const isAuthCloseToExpiry = useSelector(({ authentication }) => authentication.isAuthCloseToExpiry);\r\n const isIdle = useSelector(getUserIdleStatus);\r\n const prevIsIdle = usePrevious(isIdle);\r\n const heartBeatEnabled = !isIdle && authChecked && isAuthenticated && !isLoadingAuth && !isAuthCloseToExpiry;\r\n\r\n useInterval(() => dispatch(heartBeat()), heartBeatEnabled ? HEARTBEAT_INTERVAL_DELAY : null);\r\n\r\n useEffect(() => {\r\n dispatch(heartBeat());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (prevIsIdle && heartBeatEnabled) {\r\n dispatch(heartBeat());\r\n }\r\n }, [isIdle, heartBeatEnabled]);\r\n};\r\n\r\nexport default useHeartBeat;\r\n","import { createSelector } from 'reselect';\r\nimport { HubConnectionState } from '@microsoft/signalr';\r\n\r\nexport const selectSignalRConnection = createSelector(({ signalR }) => signalR && signalR.connection, result => result);\r\nexport const selectSignalRContext = createSelector(({ signalR }) => signalR, result => result);\r\nexport const selectSignalRConnectionId = createSelector(({ signalR }) => signalR.connection && signalR.connection.connectionId, result => result);\r\nexport const selectSignalRIsConnected = createSelector(({ signalR }) => signalR.connection && signalR.connection.state === HubConnectionState.Connected, result => result);\r\n","import { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { updateDataFileRequests } from '@redux/modules/dataPortal';\r\nimport {\r\n selectSignalRConnection,\r\n selectSignalRContext,\r\n selectSignalRIsConnected,\r\n} from '@redux/selectors/SignalRConnectionSelector';\r\nimport useAcl from './useAcl';\r\n\r\nconst useSignalRConnection = () => {\r\n const dispatch = useDispatch();\r\n const hubContext = useSelector(selectSignalRContext);\r\n const hubConnection = useSelector(selectSignalRConnection);\r\n const isSignalRConnected = useSelector(selectSignalRIsConnected);\r\n const { aclIsEmpty, is3rdPartyDataPortalUser, is3rdPartyDataPortalTransactionalUser } = useAcl();\r\n\r\n useEffect(() => {\r\n if (!hubConnection) return;\r\n if (aclIsEmpty) return;\r\n\r\n const handleRequestStatusUpdatedEvent = () => {\r\n hubConnection.on('RequestStatusUpdated', dataFileRequestJsonString => {\r\n const dataFileRequest = JSON.parse(dataFileRequestJsonString);\r\n dispatch(updateDataFileRequests(dataFileRequest, 'RequestStatusUpdated'));\r\n });\r\n };\r\n\r\n const handleSavedCriteriaDeletedEvent = () => {\r\n hubConnection.on('SavedCriteriaDeleted', dataFileRequestJsonString => {\r\n const dataFileRequest = JSON.parse(dataFileRequestJsonString);\r\n dispatch(updateDataFileRequests(dataFileRequest, 'SavedCriteriaDeleted'));\r\n });\r\n };\r\n\r\n const handleUserCriteriaNameChangedEvent = () => {\r\n hubConnection.on('UserCriteriaNameChanged', dataFileRequestJsonString => {\r\n const dataFileRequest = JSON.parse(dataFileRequestJsonString);\r\n dispatch(updateDataFileRequests(dataFileRequest, 'UserCriteriaNameChanged'));\r\n });\r\n };\r\n\r\n if (isSignalRConnected) {\r\n // DataPortal related SignalR events go here\r\n if (is3rdPartyDataPortalUser) {\r\n if (is3rdPartyDataPortalTransactionalUser) {\r\n handleRequestStatusUpdatedEvent();\r\n handleSavedCriteriaDeletedEvent();\r\n handleUserCriteriaNameChangedEvent();\r\n }\r\n } else {\r\n // TODO: Add Listing/Agent/Office related SignalR events here\r\n }\r\n }\r\n }, [hubConnection, aclIsEmpty]);\r\n\r\n return {\r\n hubConnection,\r\n hubConnectionId: hubConnection && hubConnection.connectionId,\r\n hubContext,\r\n isSignalRConnected,\r\n };\r\n};\r\n\r\nexport default useSignalRConnection;\r\n","export default __webpack_public_path__ + \"static/media/P9LogoBlack.ff9ca553.png\";","import React, {\r\n createContext,\r\n useEffect,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { selectSignalRContext } from '@redux/selectors/SignalRConnectionSelector';\r\nimport { startSignalRConnection, stopSignalRConnection } from '@redux/modules/signalR';\r\n\r\nexport const SignalRConnectionContext = createContext({ hubContext: null });\r\n\r\nconst SignalRConnectionProvider = ({ children }) => {\r\n const dispatch = useDispatch();\r\n const hubContext = useSelector(selectSignalRContext);\r\n\r\n useEffect(() => {\r\n dispatch(startSignalRConnection());\r\n return () => {\r\n if (hubContext.connection) {\r\n dispatch(stopSignalRConnection(hubContext.connection));\r\n }\r\n };\r\n }, []);\r\n\r\n // Uncomment for debugging purposes only\r\n // useEffect(() => {\r\n // if (isNull(hubContext.connection)) return;\r\n // console.log('signalr connection started =>', hubContext.connection);\r\n // }, [hubContext]);\r\n //\r\n // useEffect(() => {\r\n // if (hubContext.state === HubConnectionState.Connected) {\r\n // console.log('Connected');\r\n // } else if (hubContext.state === HubConnectionState.Disconnected) {\r\n // console.log('Disconnected');\r\n // }\r\n // }, [hubContext.state]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nSignalRConnectionProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\nexport default SignalRConnectionProvider;\r\n","import React, { useEffect, useState } from 'react';\r\nimport {\r\n Switch, Route, useHistory, useLocation, Redirect,\r\n} from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Provider, ErrorBoundary } from '@rollbar/react';\r\nimport ReactGA from 'react-ga';\r\n\r\nimport apiService from '@services/apiService';\r\n\r\nimport { loadUser } from '@redux/modules/user';\r\nimport {\r\n loadDataFileRequests,\r\n loadAggregateData,\r\n loadDataPortalLookups,\r\n} from '@redux/modules/dataPortal';\r\nimport { checkAuthStatus } from '@redux/reducers/application/Authentication';\r\nimport { REDIRECT, CLAREITY_LOGIN } from '@redux/constants/ActionTypes';\r\nimport { getUser } from '@redux/selectors/UserSelector';\r\n\r\nimport Header from '@components/general/header/Header';\r\nimport ReqImpersonation from '@components/impersonation/ReqImpersonation';\r\nimport Sidebar from '@components/general/sideBar/Sidebar';\r\nimport RoutesWithCrumbs from '@components/routes/RoutesWithCrumbs';\r\nimport routes from '@components/routes/routes';\r\nimport Footer from '@components/general/footer/Footer';\r\nimport Today from '@components/general/today/Today';\r\nimport AppSession from '@components/auth/AppSessionModal';\r\n\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useAcl from '@hooks/useAcl';\r\nimport useUserActivityCheck from '@hooks/useUserActivityCheck';\r\nimport useHeartBeat from '@hooks/useHeartBeat';\r\nimport useSignalRConnection from '@hooks/useSignalRConnection';\r\n\r\nimport P9LogoPrint from '@images/logos/P9LogoBlack.png';\r\n\r\nimport SignalRConnectionProvider from '@providers/SignalRConnectionProvider';\r\nimport { isEmpty, isNull } from 'lodash';\r\n\r\nReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS_ID);\r\n\r\nconst rollbarConfig = {\r\n accessToken: process.env.REACT_APP_ROLLBAR_ACCESS_TOKEN,\r\n environment: process.env.REACT_APP_ENVIRONMENT,\r\n server: {\r\n code_version: process.env.REACT_APP_VERSION,\r\n },\r\n};\r\n\r\nconst App = () => {\r\n useUserActivityCheck();\r\n useHeartBeat();\r\n const { redirectTo, clareityUrl } = useSelector(({ utility }) => utility);\r\n const authChecked = useSelector(({ authentication }) => authentication.authChecked);\r\n const isLoadingAuth = useSelector(({ authentication }) => authentication.isLoadingAuth);\r\n const isAuthenticated = useSelector(({ authentication }) => authentication.isAuthenticated);\r\n const user = useSelector(getUser);\r\n const prevIsAuthenticated = usePrevious(isAuthenticated);\r\n\r\n const history = useHistory();\r\n const location = useLocation();\r\n const dispatch = useDispatch();\r\n const {\r\n aclIsEmpty,\r\n aclString,\r\n getMainAcl,\r\n is3rdPartyDataPortalUser,\r\n is3rdPartyDataPortalAggregateUser,\r\n is3rdPartyDataPortalTransactionalUser,\r\n isAdmin,\r\n } = useAcl();\r\n\r\n const [isAppInit, setIsAppInit] = useState(true); // used to control rendering on app start-up\r\n const [routePaths, setRoutePaths] = useState(null);\r\n\r\n useSignalRConnection();\r\n\r\n useEffect(() => {\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n }, []);\r\n\r\n // Get all DataPortal lookups\r\n useEffect(() => {\r\n dispatch(loadDataPortalLookups());\r\n }, []);\r\n\r\n // Check authentication status with every route change.\r\n useEffect(() => {\r\n dispatch(checkAuthStatus());\r\n }, [location]);\r\n\r\n useEffect(() => {\r\n if (!isAppInit) return;\r\n if (!authChecked || isLoadingAuth) return;\r\n\r\n if (!isAuthenticated) {\r\n // redirect to Clareity Login\r\n dispatch({ type: CLAREITY_LOGIN, payload: apiService.Auth.ClareityLogin() });\r\n return;\r\n }\r\n\r\n setIsAppInit(false);\r\n }, [isAppInit, isAuthenticated, isLoadingAuth, authChecked]);\r\n\r\n useEffect(() => {\r\n if (!authChecked || isLoadingAuth) return;\r\n if (!prevIsAuthenticated && isAuthenticated) {\r\n // retrieve main ACL permissions\r\n getMainAcl({ action: 'view' });\r\n // load user identity\r\n dispatch(loadUser());\r\n }\r\n }, [isAuthenticated, isLoadingAuth, authChecked]);\r\n\r\n useEffect(() => {\r\n // TODO: Correct this once proper ACL is in place for DataPortal users\r\n if (aclIsEmpty && !is3rdPartyDataPortalUser) return;\r\n if (isNull(user)) return;\r\n if (isEmpty(user.MemberMlsId)) return;\r\n\r\n if (is3rdPartyDataPortalTransactionalUser) {\r\n const jsonRequest = {\r\n request: {\r\n data: {\r\n UserID: user.MemberMlsId,\r\n },\r\n },\r\n };\r\n dispatch(loadDataFileRequests(jsonRequest));\r\n dispatch(loadAggregateData());\r\n } else if (is3rdPartyDataPortalAggregateUser) {\r\n dispatch(loadAggregateData());\r\n }\r\n }, [user, aclIsEmpty]);\r\n\r\n // redirect has been returned and has data,\r\n useEffect(() => {\r\n if (redirectTo) {\r\n history.push(redirectTo);\r\n dispatch({ type: REDIRECT });\r\n }\r\n }, [redirectTo]);\r\n\r\n // follow url returned by API, needs to be in seperate redirect to avoid doubling entries to\r\n useEffect(() => {\r\n if (clareityUrl) window.location.href = clareityUrl;\r\n }, [clareityUrl]);\r\n\r\n // prepare routePaths dictionary object\r\n useEffect(() => {\r\n if (routePaths === null) {\r\n const pathDict = Object.assign({}, ...routes.map(x => ({ [x.breadcrumbPath]: x.name })));\r\n setRoutePaths(pathDict);\r\n }\r\n }, [routePaths]);\r\n\r\n const redirectToOnePlatform = () => {\r\n window.location.href = process.env.REACT_APP_OP_URL;\r\n };\r\n\r\n if (isAppInit) return null;\r\n\r\n return (\r\n <>\r\n {!aclIsEmpty && !isAdmin && !is3rdPartyDataPortalUser && redirectToOnePlatform()}\r\n {!aclIsEmpty && (isAdmin || is3rdPartyDataPortalUser) && (\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \"P9\r\n \r\n \r\n \r\n {routes.map(({\r\n path, Component, requiredAcl, id,\r\n }) => (\r\n (!aclIsEmpty && (aclString.includes(requiredAcl) || requiredAcl === 'EVERYONE')) && (\r\n \r\n \r\n \r\n )\r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { BrowserRouter, Route } from 'react-router-dom';\r\nimport { QueryParamProvider } from 'use-query-params';\r\nimport store from './redux/store';\r\n\r\nimport App from './containers/app/App';\r\nimport Maintenance from './containers/maintenance/Maintenance';\r\n\r\n// Add plugins here to be available globally\r\nimport '@css/vendor.bundle.css';\r\nimport '@css/dataTables/datatables.css';\r\nimport '@css/app.bundle.css';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport '@css/skins/skin-master.css';\r\nimport '@css/custom.css';\r\n\r\nconst maintenanceMode = false;\r\n\r\nReactDOM.render((\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n), document.getElementById('root'));\r\n"],"sourceRoot":""}