{"version":3,"file":"modules/unsubscribeMain-ba8ebb6ca5f98d141dc1.js","mappings":"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","sources":["webpack:///./scripts/components/checkbox/index.js","webpack:///./scripts/constants/googleAnalyticsCustomDimension.js","webpack:///./scripts/constants/routes.js","webpack:///./scripts/dataTransferObjects/googleAnalyticsEvent.js","webpack:///./scripts/enums/loadingStatus.js","webpack:///./scripts/features/marketingCampaign/redux/initialState.js","webpack:///./scripts/features/marketingCampaign/redux/slices.js","webpack:///./scripts/features/marketingCampaign/apis/postsMarketingCampaign.js","webpack:///./scripts/features/marketingCampaign/redux/epics.js","webpack:///./scripts/features/marketingCampaign/index.js","webpack:///./scripts/features/userProfile/constants/sessionStorageConstants.js","webpack:///./scripts/features/userProfile/enums/favoriteType.js","webpack:///./scripts/features/userProfile/redux/selectors.js","webpack:///./scripts/features/userProfile/redux/initialState.js","webpack:///./scripts/features/userProfile/redux/slices.js","webpack:///./scripts/pages/marketingCampaign/components/unsubscribeEventHandler.js","webpack:///./scripts/pages/marketingCampaign/unsubscribe.js","webpack:///./scripts/features/userProfile/apis/getUserProfile.js","webpack:///./scripts/features/userProfile/apis/getUserFavorites.js","webpack:///./scripts/features/userProfile/apis/saveFavorite.js","webpack:///./scripts/features/userProfile/apis/deleteFavorite.js","webpack:///./scripts/features/userProfile/services/getHousingProductType.js","webpack:///./scripts/features/userProfile/models/specProductType.js","webpack:///./scripts/features/userProfile/models/planProductType.js","webpack:///./scripts/features/userProfile/models/communityProductType.js","webpack:///./scripts/features/userProfile/redux/epics.js","webpack:///./scripts/redux/rootEpics.js","webpack:///./scripts/features/userProfile/services/getFavoriteFromState.js","webpack:///./scripts/redux/store.js","webpack:///./scripts/utils/camelCase.js","webpack:///./scripts/utils/urlExtension.js"],"sourcesContent":["import { fromEvent, map, filter, distinctUntilChanged } from \"rxjs\";\r\nimport { store$ } from \"@redux/store\";\r\n\r\nconst hasValue = (value) => !!value;\r\nclass CheckboxGroup {\r\n constructor(element){\r\n this.element = element;\r\n this.checkbox$ = fromEvent(element, 'change').pipe(\r\n map((event) => event.target),\r\n map((target) => target.closest('[data-group]')),\r\n map((parent) => Array.from(parent?.querySelectorAll(':checked'))?.map(option => option.value)))\r\n }\r\n \r\n setSelector(selector){\r\n // if we provide a selector in the constructor, we will use it to sync the checkboxes with the store's value.\r\n if(selector){\r\n const onStoreChange$ = store$.pipe(map(selector), filter(hasValue), distinctUntilChanged());\r\n onStoreChange$.subscribe(checkboxes => {\r\n // get all the checkboxes in the group\r\n this.element?.querySelectorAll('[type=\"checkbox\"]').forEach((checkbox) => {\r\n const value = checkbox.value;\r\n checkbox.checked = Boolean(checkboxes[value])\r\n });\r\n });\r\n }\r\n }\r\n\r\n getObservable(){\r\n return this.checkbox$;\r\n }\r\n}\r\n\r\nexport default CheckboxGroup;","export default class GoogleAnalyticsCustomDimensions {\r\n static MarketId() {\r\n return new GoogleAnalyticsCustomDimensions('marketId');\r\n }\r\n\r\n static PartnerName() {\r\n return new GoogleAnalyticsCustomDimensions('partnerName');\r\n }\r\n\r\n static BuilderCorporation() {\r\n return new GoogleAnalyticsCustomDimensions('builderCorp');\r\n }\r\n\r\n static CommunityName() {\r\n return new GoogleAnalyticsCustomDimensions('communityName');\r\n }\r\n\r\n static City() {\r\n return new GoogleAnalyticsCustomDimensions('city');\r\n }\r\n\r\n static PageType() {\r\n return new GoogleAnalyticsCustomDimensions('pageType');\r\n }\r\n\r\n static PartnerId() {\r\n return new GoogleAnalyticsCustomDimensions('partnerId');\r\n }\r\n\r\n static MarketName() {\r\n return new GoogleAnalyticsCustomDimensions('marketName');\r\n }\r\n\r\n static CommunityId() {\r\n return new GoogleAnalyticsCustomDimensions('communityId');\r\n }\r\n\r\n static UserId() {\r\n return new GoogleAnalyticsCustomDimensions('i_uid');\r\n }\r\n\r\n static CurrentPageNumber() {\r\n return new GoogleAnalyticsCustomDimensions('currentPageNumber');\r\n }\r\n\r\n static NeustarResponse() {\r\n return new GoogleAnalyticsCustomDimensions('n_response');\r\n }\r\n\r\n static OffMarket() {\r\n return new GoogleAnalyticsCustomDimensions('OffMarket');\r\n }\r\n\r\n static BuilderId() {\r\n return new GoogleAnalyticsCustomDimensions('builderId');\r\n }\r\n\r\n static BrandName() {\r\n return new GoogleAnalyticsCustomDimensions('brandName');\r\n }\r\n\r\n static PlanId() {\r\n return new GoogleAnalyticsCustomDimensions('planId');\r\n }\r\n\r\n static SpecId() {\r\n return new GoogleAnalyticsCustomDimensions('specId');\r\n }\r\n\r\n static IsPaid() {\r\n return new GoogleAnalyticsCustomDimensions('IsPaid');\r\n }\r\n\r\n static MatchingResults() {\r\n return new GoogleAnalyticsCustomDimensions('matchingResults');\r\n }\r\n\r\n static Counties() {\r\n return new GoogleAnalyticsCustomDimensions('counties');\r\n }\r\n\r\n static Location() {\r\n return new GoogleAnalyticsCustomDimensions('location');\r\n }\r\n\r\n static PriceReduction() {\r\n return new GoogleAnalyticsCustomDimensions('priceReduction');\r\n }\r\n\r\n static SearchWithinMapActivated() {\r\n return new GoogleAnalyticsCustomDimensions('searchWithinMapActivated');\r\n }\r\n\r\n constructor(dimension) {\r\n this.dimension = dimension;\r\n }\r\n\r\n getName() {\r\n return this.dimension;\r\n }\r\n}\r\n","/**\r\n * The idea for this filter is to have a centralized list of all routes used in the front-end,\r\n * Using destructuring assignment and tree-shaking, we can only load those routes that we need\r\n * making sure that if the routes change in the future, we can easily update them in the front-end\r\n * without requiring changes in multiple places\r\n *\r\n * an example of how to load routes can be seen below:\r\n *\r\n * import { getTypeaheadOptions } from 'constants/routes'\r\n */\r\n\r\n/*\r\n * Gets the value of the `href` attribute of the `base` element in the HTML document.\r\n * If the `base` element does not exist or does not have an `href` attribute, `baseElementUrl` will be `undefined`.\r\n *\r\n * Using document.querySelector('base').href could induce error in the code if the base element does not exist\r\n * or the href attribute is undefined, as it fallbacks to the document's fallback base URL, which is the current\r\n * Document's URL.\r\n */\r\nconst baseElementUrl = document.querySelector('base')?.attributes?.href?.value;\r\n\r\n/*\r\n * Object that contains properties that can be useful for configuring the API requests\r\n * or other network requests in the application.\r\n */\r\nconst configuration = {\r\n baseUrl: baseElementUrl || window.location.origin,\r\n};\r\n\r\nexport const getAdConfiguration = `${configuration.baseUrl}/ajax/getadconfiguration`;\r\nexport const getBreadcrumbContent = `${configuration.baseUrl}/ajax/getonpagebreadcrumb`;\r\nexport const getCommunitiesResults = `${configuration.baseUrl}/ajax/getResults`;\r\nexport const getHousingProductSnippetContent = `${configuration.baseUrl}/ajax/gethousingproductsnippetscontent`;\r\nexport const getListingCounts = `${configuration.baseUrl}/ajax/getResultCounts`;\r\nexport const getOnPageContent = `${configuration.baseUrl}/ajax/gethousingproductlocationcontentajax`;\r\nexport const getResultFacets = `${configuration.baseUrl}/ajax/getResultFacets`;\r\nexport const getTypeaheadOptions = `${configuration.baseUrl}/gettypeaheadoptions`;\r\nexport const leadsBasicCommunitySubmission = `${configuration.baseUrl}/ajax/leads/basiccommunitysubmission/`;\r\nexport const leadsBasicPlanSubmission = `${configuration.baseUrl}/ajax/leads/basicplansubmission/`;\r\nexport const leadsBasicSpecSubmission = `${configuration.baseUrl}/ajax/leads/basicspecsubmission/`;\r\nexport const leadsBasicListingSubmission = `${configuration.baseUrl}/ajax/leads/basiclistingsubmission/`;\r\nexport const leadsGetRecommendedCommunities = `${configuration.baseUrl}/ajax/leads/getrecommendedcommunities/`;\r\nexport const leadsPaidCommunitySubmission = `${configuration.baseUrl}/ajax/leads/paidcommunitysubmission/`;\r\nexport const leadsPaidPlanSubmission = `${configuration.baseUrl}/ajax/leads/paidplansubmission/`;\r\nexport const leadsPaidSpecSubmission = `${configuration.baseUrl}/ajax/leads/paidspecsubmission/`;\r\nexport const leadsRecommendedCommunitySubmission = `${configuration.baseUrl}/ajax/leads/recommendedcommunitysubmission/`;\r\nexport const mapGetCommunitiesPoints = `${configuration.baseUrl}/ajax/communities/getcommunitypoints`;\r\nexport const mapGetHomesPoints = `${configuration.baseUrl}/ajax/homes/gethomepoints`;\r\nexport const totalDeliveryValueCommunityLogger = `${configuration.baseUrl}/communitylogger`;\r\nexport const totalDeliveryValuePlanLogger = `${configuration.baseUrl}/planlogger`;\r\nexport const totalDeliveryValueSpecLogger = `${configuration.baseUrl}/speclogger`;\r\nexport const userDeleteFavorite = `${configuration.baseUrl}/user/deleteFavorite`;\r\nexport const userGetProfile = `${configuration.baseUrl}/getUserProfile`;\r\nexport const userProfileGetFavorites = `${configuration.baseUrl}/getUserFavorites`;\r\nexport const userSaveFavorite = `${configuration.baseUrl}/user/saveFavorite`;\r\nexport const marketingcampaignUnsubscribe = `${configuration.baseUrl}/marketingcampaign/unsubscribemarketingcampaign`;\r\nexport const marketingcampaignUnsubscribeFeedback = `${configuration.baseUrl}/marketingcampaign/unsubscribefeedback`;\r\nexport const googleOneTapLogin = `${configuration.baseUrl}/ajax/googleOneTapLogin`;\r\nexport const getCommunityNearbyListingsInfo = `${configuration.baseUrl}/ajax/getcommunitynearbylistings`;\r\nexport const getBuildablePlanNearbylistingsInfo = `${configuration.baseUrl}/ajax/getbuildableplannearbylistings`;\r\nexport const getPlanNearbyListingsInfo = `${configuration.baseUrl}/ajax/getplannearbylistings`;\r\nexport const getSpecNearbyListingsInfo = `${configuration.baseUrl}/ajax/getspecnearbylistings`;\r\nexport const listingCounts = `${configuration.baseUrl}/learn/dynamic/getlistingcounts`;\r\nexport const getArticleSuggestions = `${configuration.baseUrl}/learn/dynamic/getarticlesuggestions`;\r\nexport const getCommunitiesForYou = `${configuration.baseUrl}/learn/dynamic/getcommunitiesforyou`;\r\nexport const getHomesForYou = `${configuration.baseUrl}/learn/dynamic/gethomesforyou`;\r\nexport const getMetroSpecificArticles = `${configuration.baseUrl}/learn/dynamic/getmetroarearelatedarticles`;\r\nexport const getMostRecentArticles = `${configuration.baseUrl}/learn/dynamic/getmostrecentarticles`\r\nexport const blogRequestAccessToCacheManager = `${configuration.baseUrl}/util/blogcachemanager/requestaccess`;\r\nexport const deleteItemInAllServers = `${configuration.baseUrl}/util/cachemanager/deleteiteminallservers`;\r\nexport const purgeCdnCache = `${configuration.baseUrl}/util/purge-cdn-cache`;\r\nexport const learningCenter = `${configuration.baseUrl}/learn/`;\r\nexport const getArticleSearchResults = `${configuration.baseUrl}/learn/dynamic/getresults/`;\r\nexport const getArticleCountResults = `${configuration.baseUrl}/learn/dynamic/getcountsresults/`;\r\nexport const searchCommunitySitePlans = `${configuration.baseUrl}/ajax/searchcommunitysiteplans`;\r\nexport const getCommunityInteractiveSitePlanMarkers = `${configuration.baseUrl}/ajax/getcommunityinteractivesiteplanmarkers`;\r\nexport const getCommunitySummaryCard = `${configuration.baseUrl}/ajax/getcommunitysummarycard`;\r\nexport const getHousingUnitSummaryCard = `${configuration.baseUrl}/ajax/gethousingunitsummarycard`;","class GoogleAnalyticsEvent {\r\n constructor(category, action, label, customDimensions = {}) {\r\n this.eventCategory = category;\r\n this.eventAction = action;\r\n this.eventLabel = label;\r\n this.event = 'GAEvent';\r\n\r\n // Use this property to add custom dimensions that are part of the\r\n // event you are tracking. These properties will be pushed to the data layer.\r\n Object.assign(this, customDimensions);\r\n }\r\n}\r\n\r\nexport default GoogleAnalyticsEvent;","/* \r\n Defines a LoadingStatus object with four static properties: failed, idle, loading, and succeeded.\r\n The statuses indicates the state of an asynchronous operation.\r\n\r\n It provides the methods for creating and retrieving instances of the object.\r\n*/\r\nexport default class LoadingStatus {\r\n /**\r\n * This is a static getter function that returns an instance of the \"Failed\" loading status.\r\n * This status indicates the asynchronous operation has finished but returned an error.\r\n *\r\n * @returns it returns the instance of the class with the name `'failed'`.\r\n */\r\n static get Failed() {\r\n return this.getInstance('failed');\r\n }\r\n\r\n /**\r\n * This is a static getter function that returns an instance of the \"Idle\" loading status.\r\n * This status indicates the asynchronous operation is not started.\r\n *\r\n * @returns it returns the instance of the class with the name `'idle'`.\r\n */\r\n static get Idle() {\r\n return this.getInstance('idle');\r\n }\r\n\r\n /**\r\n * This is a static getter function that returns an instance of the \"Loading\" loading status.\r\n * This status indicates the asynchronous operation has started but it hasn't finished.\r\n *\r\n * @returns it returns the instance of the class with the name `'loading'`.\r\n */\r\n static get Loading() {\r\n return this.getInstance('loading');\r\n }\r\n\r\n /**\r\n * This is a static getter function that returns an instance of the \"Succeeded\" loading status.\r\n * This status indicates the asynchronous operation has finished without errors.\r\n *\r\n * @returns it returns the instance of the class with the name `'succeeded'`.\r\n */\r\n static get Succeeded() {\r\n return this.getInstance('succeeded');\r\n }\r\n\r\n static fromKey(key) {\r\n const statusMap = {\r\n failed: LoadingStatus.Failed,\r\n idle: LoadingStatus.Idle,\r\n loading: LoadingStatus.Loading,\r\n succeeded: LoadingStatus.Succeeded,\r\n };\r\n return statusMap[key];\r\n }\r\n\r\n /**\r\n * This function returns an instance of the LoadingStatus class based on a given key, creating a new\r\n * instance if one does not already exist.\r\n *\r\n * @param key - a unique identifier used to create and retrieve instances of the LoadingStatus class.\r\n * It is used to ensure that only one instance of the LoadingStatus class is created for each unique key value.\r\n *\r\n * @returns returns an instance of the `LoadingStatus` class with the specified `key`.\r\n * If an instance with the specified `key` already exists, it returns that instance instead of creating a new one.\r\n */\r\n static getInstance(key) {\r\n if (!this.instances[key]) {\r\n this.instances[key] = new LoadingStatus(key);\r\n }\r\n return this.instances[key];\r\n }\r\n\r\n constructor(name) {\r\n this.name = name;\r\n }\r\n\r\n toString() {\r\n return `${this.name}`;\r\n }\r\n}\r\n\r\nObject.defineProperty(LoadingStatus, 'instances', { value: {} });\r\n","import LoadingStatus from 'enums/loadingStatus';\r\n\r\nconst initialState = {\r\n isFetchingUnsubscribe: LoadingStatus.Idle,\r\n isFetchingUnsubscribeFeedback: LoadingStatus.Idle,\r\n};\r\n\r\nexport default initialState;","import LoadingStatus from 'enums/loadingStatus';\r\nimport { createSlice } from '@reduxjs/toolkit';\r\nimport initialState from './initialState';\r\n\r\nconst marketingCampaignPreferencesSlice = createSlice({\r\n name: 'marketingCampaignPreferences',\r\n initialState,\r\n reducers: {\r\n fetchUnsubscribe: (state) => {\r\n state.isFetchingUnsubscribe = LoadingStatus.Loading;\r\n },\r\n fetchUnsubscribeSucces: (state) => {\r\n state.isFetchingUnsubscribe = LoadingStatus.Succeeded;\r\n },\r\n fetchUnsubscribeError: (state) => {\r\n state.isFetchingUnsubscribe = LoadingStatus.Failed;\r\n },\r\n fetchUnsubscribeFeedback: (state) => {\r\n state.isFetchingUnsubscribeFeedback = LoadingStatus.Loading;\r\n },\r\n fetchUnsubscribeFeedbackSucces: (state) => {\r\n state.isFetchingUnsubscribeFeedback = LoadingStatus.Succeeded;\r\n },\r\n fetchUnsubscribeFeedbackError: (state) => {\r\n state.isFetchingUnsubscribeFeedback = LoadingStatus.Failed;\r\n }\r\n },\r\n});\r\n\r\nexport default marketingCampaignPreferencesSlice;","import { fromFetch } from 'rxjs/fetch';\r\nimport { marketingcampaignUnsubscribe, marketingcampaignUnsubscribeFeedback } from 'constants/routes'\r\n\r\n/**\r\n * updatePreferences: method to POST the update preferences of marketing campaigns\r\n * @param {object} payload payload with the information for the command.\r\n */\r\nexport const unsubscribeMarketingCampaign$ = (payload) => {\r\n const url = marketingcampaignUnsubscribe;\r\n\r\n return fromFetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n unsubscribeMarketingCampaignCommand: payload\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * submitUnsubscribeFeedback: method to POST the usubscribe feedback of marketing campaigns.\r\n * @param {object} payload payload with the information for the command.\r\n */\r\nexport const unsubscribeFeedback$ = (payload) => {\r\n const url = marketingcampaignUnsubscribeFeedback;\r\n\r\n return fromFetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n submitUnsubscribeFeedbackCommand: payload\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n }\r\n });\r\n}\r\n","import { catchError, of, switchMap } from 'rxjs';\r\nimport { ofType } from 'redux-observable';\r\nimport { unsubscribeMarketingCampaign$, unsubscribeFeedback$ } from '../apis/postsMarketingCampaign';\r\nimport unsubcribeSlice from './slices';\r\n\r\nconst actions = unsubcribeSlice.actions;\r\n\r\n/**\r\n * Epic to POST the unsubscribe perferences\r\n * You can see a list of the preferences chosen \r\n * from the menu in the unsubscribe page\r\n */\r\nexport const unsubscribeEpic = (action$) =>\r\n action$.pipe(\r\n ofType(actions.fetchUnsubscribe.type),\r\n switchMap((action) => {\r\n const payload = {...action.payload};\r\n return unsubscribeMarketingCampaign$(payload).pipe(\r\n switchMap(() => of(actions.fetchUnsubscribeSucces())),\r\n catchError(() => of(actions.fetchUnsubscribeError())),\r\n );\r\n })\r\n );\r\n\r\n \r\n/**\r\n * Epic to POST the unsubscribe perferences\r\n * You can see a list of the preferences chosen \r\n * from the menu in the unsubscribe page\r\n */\r\nexport const unsubscribeFeedbackEpic = (action$) =>\r\naction$.pipe(\r\n ofType(actions.fetchUnsubscribeFeedback.type),\r\n switchMap((action) => {\r\n const payload = {...action.payload};\r\n return unsubscribeFeedback$(payload).pipe(\r\n switchMap(() => of(actions.fetchUnsubscribeSucces())),\r\n catchError(() => of(actions.fetchUnsubscribeError())),\r\n );\r\n })\r\n);","import { epic$, store } from '@redux/store';\r\nimport marketingCampaignPreferencesSlice from './redux/slices'\r\nimport { unsubscribeEpic, unsubscribeFeedbackEpic } from './redux/epics';\r\n\r\nepic$.next(unsubscribeEpic);\r\nepic$.next(unsubscribeFeedbackEpic);\r\n\r\nconst { actions, reducer } = marketingCampaignPreferencesSlice;\r\nstore.injectReducer('marketingCampaignPreferences', reducer);\r\nexport {\r\n actions as marketingCampaignPreferencesActions,\r\n reducer as marketingCampaignPreferencesReducers,\r\n}\r\n","export const pendingSavesSessionStorageKey = 'pendingFavorites';\r\nexport const favoritesSessionStorageKey = 'favorites';\r\n","/**\r\n * FavoriteType enum\r\n * Contains the different types of favorites that can be saved.\r\n */\r\nexport default class FavoriteType {\r\n static get Plan() {\r\n return this.getInstance('HomePlan');\r\n }\r\n\r\n static get Spec() {\r\n return this.getInstance('HomeSpec');\r\n }\r\n\r\n static get Community() {\r\n return this.getInstance('Community');\r\n }\r\n\r\n static get Builder() {\r\n return this.getInstance('Builder');\r\n }\r\n\r\n static fromKey(key) {\r\n const typeMap = {\r\n plan: FavoriteType.Plan,\r\n spec: FavoriteType.Spec,\r\n community: FavoriteType.Community,\r\n builder: FavoriteType.Builder,\r\n };\r\n return typeMap[key.toLowerCase()];\r\n }\r\n\r\n static getInstance(key) {\r\n if (!this.instances[key]) {\r\n this.instances[key] = new FavoriteType(key);\r\n }\r\n return this.instances[key];\r\n }\r\n\r\n constructor(type) {\r\n this.type = type;\r\n }\r\n\r\n toString() {\r\n return `${this.type}`;\r\n }\r\n}\r\n\r\nObject.defineProperty(FavoriteType, 'instances', { value: {} });\r\n","import { createSelector } from '@reduxjs/toolkit';\r\n\r\nexport const selectIsLoggedIn = (state) => state?.userProfile?.isLogin;\r\nexport const selectFavorites = (state) => state?.userProfile?.favorites;\r\nexport const selectPendingSaves = (state) => state?.userProfile?.pendingSaves;\r\nexport const selectIsProfileFavoritesLoaded = (state) => state?.userProfile?.isProfileFavoritesLoaded;\r\nexport const selectUserId = (state) => state?.userProfile?.userId;\r\nexport const selectEmail = (state) => state?.userProfile?.email;\r\nexport const selectName = (state) => state?.userProfile?.name;\r\nexport const selectPhone = (state) => state?.userProfile?.phone;\r\nexport const selectZip = (state) => state?.userProfile?.zip;\r\nexport const selectlivesOutside = (state) => state?.userProfile?.livesOutside;\r\n\r\nexport const selectNeustarStatus = (state) => state?.userProfile?.neustarStatus;\r\nexport const selectNeustarSegment = (state) => state?.userProfile?.neustarInformation?.s;\r\nexport const selectNeustarZip = (state) => state?.userProfile?.neustarInformation?.z;\r\nexport const selectNeustarAge = (state) => state?.userProfile?.neustarInformation?.a;\r\nexport const selectNeustarGender = (state) => state?.userProfile?.neustarInformation?.g;\r\nexport const selectNeustarInformation = (state) => state?.userProfile?.neustarInformation;\r\n\r\nexport const selectUserLocationCity = (state) => state?.userProfile?.userLocation?.userCity;\r\nexport const selectUserLocationCountry = (state) => state?.userProfile?.userLocation?.userCountry;\r\nexport const selectUserLocationMarketId = (state) => state?.userProfile?.userLocation?.userMarketId;\r\nexport const selectUserLocationState = (state) => state?.userProfile?.userLocation?.userState;\r\nexport const selectUserLocationZipCode = (state) => state?.userProfile?.userLocation?.userZipCode;\r\n\r\n/**\r\n * @public\r\n * selectGoogleOneTapLibraryLoadingStatus: returns the loading status of the Google One Tap Library.\r\n * @param {Object} state of the Redux store.\r\n *\r\n * @returns the loading status of the Google One Tap Library.\r\n */\r\nexport const selectGoogleOneTapLibraryLoadingStatus = (state) =>\r\n state?.authentication?.googleOneTapLibraryLoadingStatus;\r\n\r\n/** this selector is intended to expose useful properties when the user use the save to favorites feature\r\n * but it is not logged in.\r\n */\r\nexport const selectUserIdAndPendingSaves = createSelector(selectUserId, selectPendingSaves, (userId, pendingSaves) => ({\r\n userId,\r\n pendingSaves,\r\n}));\r\n\r\n/* It is using the `createSelector` function from the `@reduxjs/toolkit`\r\nlibrary to create a memoized selector. It takes in multiple input selectors\r\n(`selectUserLocationCity`, `selectUserLocationCountry`, `selectUserLocationMarketId`,\r\n`selectUserLocationState`, `selectUserLocationZipCode`) and a result function. */\r\nexport const selectUserLocation = createSelector(\r\n selectUserLocationCity,\r\n selectUserLocationCountry,\r\n selectUserLocationMarketId,\r\n selectUserLocationState,\r\n selectUserLocationZipCode,\r\n (userLocationCity, userLocationCountry, userLocationMarketId, userLocationState, userLocationZipCode) => ({\r\n userLocationCity,\r\n userLocationCountry,\r\n userLocationMarketId,\r\n userLocationState,\r\n userLocationZipCode,\r\n })\r\n);\r\n\r\n/** this selector is intended to expose all the properties that should be included as common tracking properties.\r\n * the idea behind this is tha here should be placed the selectors/props that are usually used in tracking events.\r\n * then the consumers will filter and take the props they need, this will just serve the information.\r\n */\r\nexport const selectUserProfileTrackingCommonProperties = createSelector(\r\n selectUserId,\r\n selectEmail,\r\n selectName,\r\n selectPhone,\r\n selectZip,\r\n selectlivesOutside,\r\n selectFavorites,\r\n selectNeustarSegment,\r\n selectNeustarZip,\r\n selectNeustarAge,\r\n selectNeustarGender,\r\n selectIsLoggedIn,\r\n (\r\n userId,\r\n email,\r\n name,\r\n phone,\r\n zip,\r\n livesOutside,\r\n favorites,\r\n neustarSegment,\r\n neustarZip,\r\n neustarAge,\r\n neustarGender,\r\n isLoggedIn\r\n ) => ({\r\n userId,\r\n email,\r\n name,\r\n phone,\r\n zip,\r\n livesOutside,\r\n favorites,\r\n neustarSegment,\r\n neustarZip,\r\n neustarAge,\r\n neustarGender,\r\n isLoggedIn,\r\n })\r\n);\r\n","import LoadingStatus from \"enums/loadingStatus\";\r\nimport { favoritesSessionStorageKey, pendingSavesSessionStorageKey } from \"../constants/sessionStorageConstants\";\r\n\r\n// Read \"pendingSaves\" session storage on initial load\r\nconst pendingSavesData= sessionStorage.getItem(pendingSavesSessionStorageKey, false);\r\n// Assign value to a list\r\nconst pendingSaves = pendingSavesData ? JSON.parse(pendingSavesData) : [];\r\n\r\n// Read \"favorites\" information on initial load\r\nconst favoritesData = sessionStorage.getItem(favoritesSessionStorageKey, false);\r\nconst favorites = favoritesData ? JSON.parse(favoritesData) : [];\r\n\r\nexport default {\r\n name: '',\r\n email: '',\r\n phone: '',\r\n zip: '',\r\n livesOutside: false,\r\n pendingSaves,\r\n favorites,\r\n hasUserOptedIntoRecommendationEmail: true,\r\n realtorQuestion : '',\r\n neustarStatus: LoadingStatus.Idle.toString()\r\n}","import { createSlice } from '@reduxjs/toolkit';\r\nimport { camelCaseObjectKeys } from 'utils/camelCase';\r\nimport LoadingStatus from 'enums/loadingStatus';\r\nimport userProfileInitialState from './initialState';\r\n\r\nconst userProfileSlice = createSlice({\r\n name: 'userProfile',\r\n initialState: userProfileInitialState,\r\n reducers: {\r\n apply: (state, action) => \r\n // return the new state with camel case object keys and isLoading set to false\r\n {\r\n\r\n const profile = camelCaseObjectKeys(action.payload);\r\n\r\n state.email = profile.email;\r\n state.id = profile.id;\r\n state.imageProfile = profile.imageProfile;\r\n state.isLogin = profile.isLogin;\r\n state.links = profile.links;\r\n state.livesOutside = profile.livesOutside;\r\n state.name = profile.name?.trim().replace(/\\s+/g, ' ');\r\n state.phone = profile.phone;\r\n state.preferredContactMethod = profile.preferredContactMethod;\r\n state.hasUserOptedIntoRecommendationEmail = profile.hasUserOptedIntoRecommendationEmail;\r\n state.realtorQuestion = profile.realtorQuestion;\r\n state.userId = profile.userId;\r\n state.userLocation = profile.userLocation;\r\n state.zip = profile.zip;\r\n state.isLoading = false;\r\n },\r\n applyFavorites: (state, action) => {\r\n const payload = camelCaseObjectKeys(action.payload);\r\n state.favorites = payload?.favorites;\r\n state.isProfileFavoritesLoaded = true;\r\n },\r\n update: (state, action) => {\r\n const userInfo = {...state, ...action.payload};\r\n state.name = userInfo.name?.trim().replace(/\\s+/g, ' ');\r\n state.email = userInfo.email;\r\n state.phone = userInfo.phone;\r\n state.zip = userInfo.zip;\r\n state.livesOutside = userInfo.livesOutside;\r\n state.preferredContactMethod = userInfo.preferredContactMethod || state.preferredContactMethod;\r\n state.hasUserOptedIntoRecommendationEmail = userInfo.hasUserOptedIntoRecommendationEmail ??\r\n state.hasUserOptedIntoRecommendationEmail;\r\n state.realtorQuestion = userInfo.realtorQuestion || state.realtorQuestion;\r\n },\r\n fetch: (state) => {\r\n state.isLoading = true;\r\n },\r\n handleError: (state) => {\r\n state.isLoading = false;\r\n },\r\n saveFavorite: (state, action) => {\r\n // check if the action.payload.id is already in the pendingSaves array, if not, add it.\r\n const pendingSaveExists = state.pendingSaves.some((favorite) => \r\n Number(favorite.listingInformation.id) === Number(action.payload.listingInformation.id)\r\n );\r\n\r\n if (!pendingSaveExists) {\r\n\r\n // add the favorite to the pending array, in case the API call fails or the user is logged out\r\n // and we need to retry the API call once the user logs in.\r\n state.pendingSaves.push(action.payload);\r\n }\r\n\r\n },\r\n deleteFavorite: () => {},\r\n deleteFavoriteFullfilled: (state, action) => {\r\n const payload = action.payload;\r\n state.favorites = state.favorites.filter((favorite) => favorite.listingId !== payload.listingId);\r\n },\r\n saveFavoriteFulfilled: (state, action) => {\r\n const newFavorite = action.payload.data.favorite;\r\n\r\n // remove the favorite from the pending array\r\n state.pendingSaves = state.pendingSaves.filter(\r\n (favorite) => Number(favorite.listingInformation.id) !== Number(newFavorite.listingId)\r\n );\r\n \r\n const favoriteExists = state.favorites.find((favorite) => favorite.listingId === newFavorite.listingId);\r\n \r\n if (!favoriteExists) {\r\n // add the favorite to the favorites array\r\n state.favorites = [...state.favorites, newFavorite];\r\n }\r\n },\r\n updateNeustarInformation: (state, action) => {\r\n const neustarInformation = action.payload;\r\n state.neustarInformation = neustarInformation;\r\n state.neustarStatus = LoadingStatus.Succeeded.toString()\r\n },\r\n}});\r\n\r\nconst authenticationSlice = createSlice({\r\n name: 'authentication',\r\n initialState: {\r\n isAuthLibraryLoaded: false,\r\n isAuthModalOpen: false,\r\n googleOneTapLibraryLoadingStatus: null,\r\n },\r\n reducers: {\r\n authLibraryLoaded: (state) => {\r\n state.isAuthLibraryLoaded = true;\r\n },\r\n authLibraryErrored: (state) => {\r\n state.isAuthLibraryLoaded = false;\r\n },\r\n googleOneTapLibraryLoadingStatus: (state, action) => {\r\n state.googleOneTapLibraryLoadingStatus = action.payload.name;\r\n },\r\n },\r\n});\r\n\r\nconst modalSlice = createSlice({\r\n name: 'modal',\r\n initialState: {\r\n isAuthModalOpen: false\r\n },\r\n reducers: {\r\n onOpen: (state) => {\r\n state.isAuthModalOpen = true;\r\n },\r\n onClose: (state) => {\r\n state.isAuthModalOpen = false;\r\n }\r\n },\r\n});\r\n\r\n// Extract the action creators object and the reducer\r\nexport { userProfileSlice, authenticationSlice, modalSlice };\r\n","import CheckboxGroup from '@components/checkbox';\r\nimport { store, store$ } from '@redux/store';\r\nimport { marketingCampaignPreferencesActions } from 'features/marketingCampaign';\r\nimport { selectEmail, selectIsLoggedIn } from 'features/userProfile';\r\nimport { filter, fromEvent, map, mergeMap, of, partition, take, tap } from 'rxjs';\r\n\r\nconst inputEmail = document.querySelector('#emailUnsubscribe');\r\nconst emailPattern = new RegExp(inputEmail.dataset.pattern);\r\nconst submitButton = document.querySelector('[data-btn-unsubscribe]');\r\nconst submitButtonClick$ = fromEvent(submitButton, 'click');\r\nconst isValidEmail$ = submitButtonClick$.pipe(map(() => emailPattern.test(inputEmail.value)));\r\nconst [showUnsubscribeFeedbackForm$, showEmailErrorMessage$] = partition(isValidEmail$, isValid => isValid);\r\nconst marketingCampaignPreferences = document.querySelector('[data-marketing-campaign-preferences]');\r\nconst checkboxGroup = new CheckboxGroup(marketingCampaignPreferences);\r\nconst checkboxGroupChange$ = checkboxGroup.getObservable();\r\nconst unsubscribeAllInput = document.querySelector('[data-unsubscribe-all]');\r\nconst unsubscribeAllInputChange$ = fromEvent(unsubscribeAllInput, 'change').pipe(map((event) => event.target.checked));\r\nconst onUserLogIn$ = store$.pipe(filter(selectIsLoggedIn), map(selectEmail), take(1));\r\nconst unsubscribeFeedbackItems = document.querySelector('[data-unsubscribe-feedback-items]');\r\nconst feedbackItemsClick$ = fromEvent(unsubscribeFeedbackItems, 'click').pipe(map((event) => event.target));\r\n\r\nconst feedbackCustomOptionHandler = (target) => {\r\n const customOptionInput = document.querySelector('#otherFeedback');\r\n if (target.dataset.category === 'Other') {\r\n customOptionInput.disabled = false;\r\n customOptionInput.classList.add('able');\r\n } else {\r\n customOptionInput.disabled = true;\r\n customOptionInput.value = '';\r\n }\r\n}\r\n\r\nconst enableSubmitFeedbackButton = () => {\r\n const unsubscribeFeedbackSubmit = document.querySelector('[data-unsubscribe-feedback-submit]');\r\n unsubscribeFeedbackSubmit.disabled = false;\r\n}\r\n\r\nconst updateCheckboxStatus = function(statusValue){\r\n marketingCampaignPreferences.querySelectorAll('[type=\"checkbox\"]').forEach((checkbox) => {\r\n checkbox.checked = statusValue;\r\n });\r\n}\r\n\r\nconst turnOffUnSubscribeAllInput = () => { \r\n const unsubscribeAll = document.querySelector('[data-unsubscribe-all]');\r\n if (unsubscribeAll) {\r\n unsubscribeAll.checked = false;\r\n }\r\n};\r\n \r\nconst showEmailErrorMessage = () => {\r\n const errorElement = document.querySelector('[data-unsubscribe-error-message]');\r\n errorElement.removeAttribute('hidden');\r\n inputEmail.classList.add('error');\r\n}\r\n\r\n/** *\r\n * Remove the hidden attribute of the span element containing the error text for the input \r\n * where the custom feedback comment is added.\r\n * Also add the error class to add the corresponding styles to an input with error.\r\n */\r\nconst showCommentErrorMessage = () => {\r\n const errorElement = document.querySelector('[data-unsubscribe-feedback-error-message]');\r\n errorElement.removeAttribute('hidden');\r\n const customOptionInput = document.querySelector('#otherFeedback');\r\n customOptionInput.classList.add('error');\r\n}\r\n\r\nconst showThankYouMessage = () => {\r\n const thankYouMessage = document.querySelector('[data-unsubscribe-thanks]');\r\n const unsubscribeFeedbackForm = document.querySelector('[data-unsubscribe-feedback]');\r\n\r\n thankYouMessage.removeAttribute('hidden');\r\n unsubscribeFeedbackForm.setAttribute('hidden', '');\r\n}\r\n\r\nconst submitUnsubscribeFeedback = () => {\r\n const unsubscribeFeedback = document.querySelector('[data-unsubscribe-feedback-items]');\r\n const customOptionInput = document.querySelector('#otherFeedback');\r\n const userEmail = sessionStorage.getItem('email');\r\n const chosenMarketingCampaigns = JSON.parse(sessionStorage.getItem('marketingCampaigns'));\r\n\r\n const reasons = Array.from(\r\n unsubscribeFeedback.querySelectorAll(':checked'))?.map(option => ({\r\n category: option.dataset.category,\r\n text: customOptionInput.value || option.value \r\n }));\r\n\r\n const payload = {\r\n unsubscribeReasons: reasons,\r\n email: userEmail,\r\n marketingCampaigns: chosenMarketingCampaigns\r\n };\r\n\r\n store.dispatch(marketingCampaignPreferencesActions.fetchUnsubscribeFeedback(payload));\r\n}\r\n\r\n/** *\r\n * Checks if the data required to send the unsubscribe feedback is being fulfilled.\r\n * 1. Any radio buttom is checked\r\n * 2. If the radio buttom with the \"Other\" option is checked, it must not have an empty input at the \r\n * time of sending it.\r\n */\r\nconst shouldShowThankYouMessage = () => {\r\n const customOptionInput = document.querySelector('#otherFeedback');\r\n const currentInput = unsubscribeFeedbackItems.querySelector(':checked');\r\n const isCustomCategory = currentInput.dataset.category === 'Other' && customOptionInput.value.trim().length > 0;\r\n \r\n return isCustomCategory || currentInput.dataset.category !== 'Other';\r\n}\r\n\r\nconst showUnsubscribeFeedbackForm = () => {\r\n const unsubscribeFeedbackForm = document.querySelector('[data-unsubscribe-feedback]');\r\n const formContainer = document.querySelector('[data-unsubscribe-container]');\r\n\r\n unsubscribeFeedbackForm.removeAttribute('hidden');\r\n formContainer.setAttribute('hidden', '');\r\n\r\n const unsubscribeFeedbackSubmit = document.querySelector('[data-unsubscribe-feedback-submit]');\r\n const unsubscribeFeedbackSubmitClick$ = fromEvent(unsubscribeFeedbackSubmit, 'click');\r\n\r\n const isValidFeedbackComment$ = unsubscribeFeedbackSubmitClick$.pipe(\r\n map(shouldShowThankYouMessage)\r\n );\r\n const [submitUnsubscribeFeedback$, showCommentErrorMessage$] = partition(isValidFeedbackComment$, isValid => isValid);\r\n submitUnsubscribeFeedback$.pipe(\r\n tap(showThankYouMessage)\r\n ).subscribe(submitUnsubscribeFeedback);\r\n showCommentErrorMessage$.subscribe(showCommentErrorMessage);\r\n\r\n const unsubscribeFeedbackSkip = document.querySelector('[data-unsubscribe-feedback-skip]');\r\n const unsubscribeFeedbackSkipClick$ = fromEvent(unsubscribeFeedbackSkip, 'click');\r\n unsubscribeFeedbackSkipClick$.subscribe(showThankYouMessage);\r\n}\r\n\r\nconst unsubscribeMarketingPreferences = () => {\r\n const email = document.querySelector('#emailUnsubscribe');\r\n const payload = {\r\n marketingCampaigns: Array.from(\r\n marketingCampaignPreferences.querySelectorAll(':checked'))?.map(option => option.value),\r\n email: email?.value\r\n };\r\n\r\n store.dispatch(marketingCampaignPreferencesActions.fetchUnsubscribe(payload));\r\n sessionStorage.setItem('email', payload.email);\r\n sessionStorage.setItem('marketingCampaigns', JSON.stringify(payload.marketingCampaigns));\r\n}\r\n\r\nconst unsubscribeEmailField = (email) => {\r\n const emailValue = email || '';\r\n inputEmail.setAttribute(\"value\", emailValue);\r\n}\r\n\r\nconst updateUpdatePreferencesButton = (disabled) => { \r\n submitButton.disabled = disabled;\r\n}\r\n\r\nonUserLogIn$.subscribe(unsubscribeEmailField);\r\ncheckboxGroupChange$.pipe(\r\n mergeMap((event) => {\r\n updateUpdatePreferencesButton(event.length === 0);\r\n turnOffUnSubscribeAllInput();\r\n return of(event);\r\n })\r\n).subscribe();\r\nshowEmailErrorMessage$.subscribe(showEmailErrorMessage);\r\nshowUnsubscribeFeedbackForm$.pipe(\r\n mergeMap((event) => {\r\n showUnsubscribeFeedbackForm();\r\n unsubscribeMarketingPreferences();\r\n return of(event);\r\n })\r\n)\r\n.subscribe();\r\nunsubscribeAllInputChange$.pipe(\r\n mergeMap((event) => {\r\n updateUpdatePreferencesButton(!event)\r\n updateCheckboxStatus(event);\r\n return of(event);\r\n })\r\n).subscribe();\r\nfeedbackItemsClick$.pipe(\r\n mergeMap((event) => {\r\n enableSubmitFeedbackButton();\r\n feedbackCustomOptionHandler(event);\r\n return of(event);\r\n })\r\n).subscribe();\r\n","require('features/marketingCampaign');\r\nrequire('./components/unsubscribeEventHandler');","import { fromFetch } from 'rxjs/fetch';\r\nimport UrlExtensions from 'utils/urlExtension';\r\n\r\n/**\r\n * @private\r\n *\r\n * The function returns a the User profile URL.\r\n *\r\n * @returns user profile URL string with parameters for the user's profile page, including IP address.\r\n */\r\nfunction getUserProfileUrl() {\r\n const location = window.location;\r\n const path = '/getUserProfile';\r\n const ip = UrlExtensions.getParameterValue(location, 'ip');\r\n\r\n const url = UrlExtensions.setParameters(path, {\r\n ip,\r\n });\r\n return url;\r\n}\r\n\r\nexport default fromFetch(getUserProfileUrl(),\r\n {\r\n 'credentials': 'include',\r\n headers: {\r\n 'Accept': 'application/json',\r\n }\r\n });\r\n","import { fromFetch } from 'rxjs/fetch';\r\nimport { userProfileGetFavorites } from 'constants/routes';\r\n\r\nexport default fromFetch(userProfileGetFavorites, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n // disabling cache to always get the latest favorites\r\n 'Cache-Control': 'no-cache',\r\n 'Accept': 'application/json',\r\n },\r\n});\r\n","import { switchMap, map } from 'rxjs';\r\nimport { fromFetch } from 'rxjs/fetch';\r\nimport { userSaveFavorite } from 'constants/routes';\r\nimport { camelCaseObjectKeys } from 'utils/camelCase';\r\n\r\nfunction saveUserFavorite(payload) {\r\n const url = `${userSaveFavorite}`;\r\n\r\n return fromFetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify(payload),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n },\r\n }).pipe(\r\n switchMap((response) => response.json()),\r\n map((response) => camelCaseObjectKeys(response))\r\n );\r\n}\r\n\r\nexport default saveUserFavorite;\r\n","import { switchMap } from 'rxjs';\r\nimport { fromFetch } from 'rxjs/fetch';\r\nimport { userDeleteFavorite } from 'constants/routes';\r\n\r\nfunction deleteUserFavorite(id) {\r\n const url = `${userDeleteFavorite}?id=${id}`;\r\n\r\n return fromFetch(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n },\r\n }).pipe(switchMap((response) => response.json()));\r\n}\r\n\r\nexport default deleteUserFavorite;\r\n","import FavoriteType from \"../enums/favoriteType\";\r\nimport SpecProductType from \"../models/specProductType\";\r\nimport PlanProductType from \"../models/planProductType\";\r\nimport CommunityProductType from \"../models/communityProductType\";\r\n\r\nconst housingProductConstructor = new Map();\r\n\r\nhousingProductConstructor.set(FavoriteType.Spec.toString(), SpecProductType);\r\nhousingProductConstructor.set(FavoriteType.Plan.toString(), PlanProductType);\r\nhousingProductConstructor.set(FavoriteType.Community.toString(), CommunityProductType)\r\n\r\n/**\r\n * Returns the class constructor with the listing information according to the type.\r\n *\r\n * @param type - The type of listing (Spec, plan, community).\r\n * @param listingInformation - The listing (Spec, plan, community) information.\r\n */\r\n\r\nexport default (type, listingInformation) => {\r\n const generator = housingProductConstructor.get(type);\r\n \r\n if (!generator) {\r\n return null;\r\n }\r\n \r\n return new generator.prototype.constructor(listingInformation);\r\n };\r\n ","import GoogleAnalyticsEvent from 'dataTransferObjects/googleAnalyticsEvent';\r\nimport GoogleAnalyticsCustomDimensions from 'constants/googleAnalyticsCustomDimension';\r\n\r\nconst tdvEvents = 'TDV Events';\r\n\r\n/* Creates a new instance for housing product type. */\r\nexport default class SpecProductType {\r\n constructor(listing) {\r\n this.id = listing.id;\r\n this.brandName = listing.brandName;\r\n this.communityName = listing.communityName;\r\n this.communityId = listing.communityId;\r\n this.isBasic = listing.isBasic === \"true\";\r\n }\r\n\r\n /**\r\n * This function returns a new GoogleAnalyticsEvent object with the event category, event action,\r\n * event label and custom dimensions set.\r\n * @returns A new instance of the GoogleAnalyticsEvent class for favorites.\r\n */\r\n getFavoriteGoogleAnalyticsEvent() {\r\n const customDimensions = { \r\n [GoogleAnalyticsCustomDimensions.SpecId().getName()] :\r\n this.id,\r\n [GoogleAnalyticsCustomDimensions.BrandName().getName()] :\r\n this.brandName,\r\n [GoogleAnalyticsCustomDimensions.CommunityName().getName()] :\r\n this.communityName,\r\n [GoogleAnalyticsCustomDimensions.CommunityId().getName()] :\r\n this.communityId,\r\n [GoogleAnalyticsCustomDimensions.IsPaid().getName()] :\r\n !this.isBasic,\r\n };\r\n return new GoogleAnalyticsEvent(tdvEvents, 'SRP Listing Card', 'Listing Saved', customDimensions);\r\n }\r\n}\r\n","import GoogleAnalyticsEvent from 'dataTransferObjects/googleAnalyticsEvent';\r\nimport GoogleAnalyticsCustomDimensions from 'constants/googleAnalyticsCustomDimension';\r\n\r\nconst tdvEvents = 'TDV Events';\r\n\r\n/* Creates a new instance for housing product type. */\r\nexport default class PlanProductType {\r\n constructor(listing) {\r\n this.brandName = listing.brandName;\r\n this.communityName = listing.communityName;\r\n this.id = listing.id;\r\n this.communityId = listing.communityId;\r\n this.isBasic = listing.isBasic === \"true\";\r\n }\r\n\r\n /**\r\n * This function returns a new GoogleAnalyticsEvent object with the event category, event action,\r\n * event label and custom dimensions set.\r\n * @returns A new instance of the GoogleAnalyticsEvent class for favorites.\r\n */\r\n getFavoriteGoogleAnalyticsEvent() {\r\n const customDimensions = { \r\n [GoogleAnalyticsCustomDimensions.BrandName().getName()] :\r\n this.brandName,\r\n [GoogleAnalyticsCustomDimensions.CommunityName().getName()] :\r\n this.communityName,\r\n [GoogleAnalyticsCustomDimensions.PlanId().getName()] :\r\n this.id,\r\n [GoogleAnalyticsCustomDimensions.CommunityId().getName()] :\r\n this.communityId,\r\n [GoogleAnalyticsCustomDimensions.IsPaid().getName()] : \r\n !this.isBasic,\r\n };\r\n return new GoogleAnalyticsEvent(tdvEvents, 'SRP Listing Card', 'Listing Saved', customDimensions);\r\n }\r\n}\r\n","import GoogleAnalyticsEvent from 'dataTransferObjects/googleAnalyticsEvent';\r\nimport GoogleAnalyticsCustomDimensions from 'constants/googleAnalyticsCustomDimension';\r\n\r\nconst tdvEvents = 'TDV Events';\r\n\r\n/* Creates a new instance of a community listing. */\r\nexport default class CommunityProductType {\r\n constructor(listing) {\r\n this.brandName = listing.brandName;\r\n this.name = listing.name;\r\n this.id = listing.id;\r\n this.isBasic = listing.isBasic === \"true\";\r\n }\r\n\r\n /**\r\n * This function returns a new GoogleAnalyticsEvent object with the event category, event action, and\r\n * event label set.\r\n * @returns A new instance of the GoogleAnalyticsEvent class.\r\n */\r\n getFavoriteGoogleAnalyticsEvent() {\r\n const customDimensions = { \r\n [GoogleAnalyticsCustomDimensions.BrandName().getName()] :\r\n this.brandName,\r\n [GoogleAnalyticsCustomDimensions.CommunityName().getName()] :\r\n this.name,\r\n [GoogleAnalyticsCustomDimensions.CommunityId().getName()] :\r\n this.id,\r\n [GoogleAnalyticsCustomDimensions.IsPaid().getName()] : \r\n !this.isBasic,\r\n };\r\n return new GoogleAnalyticsEvent(tdvEvents, 'SRP Listing Card', 'Listing Saved', customDimensions);\r\n }\r\n}\r\n","import { catchError, from, of, mergeMap, switchMap, map, filter } from 'rxjs';\r\nimport { ofType } from 'redux-observable';\r\nimport getUserProfile$ from '../apis/getUserProfile';\r\nimport getUserFavorites$ from '../apis/getUserFavorites';\r\nimport { userProfileSlice } from './slices';\r\nimport saveUserFavorite from '../apis/saveFavorite';\r\nimport deleteUserFavorite from '../apis/deleteFavorite';\r\nimport getFavoriteFromState from '../services/getFavoriteFromState';\r\nimport housingProductConstructor from '../services/getHousingProductType';\r\n\r\nconst actions = userProfileSlice.actions;\r\n\r\n// this epic requests the profile data for logged in users.\r\nexport const fetchUserProfileEpic = (action$) =>\r\n action$.pipe(\r\n ofType(actions.fetch.type),\r\n switchMap(() =>\r\n getUserProfile$.pipe(\r\n switchMap((response) => from(response.json()).pipe(mergeMap((data) =>\r\n of(actions.apply(data))))),\r\n catchError((err) => of(actions.handleError(err)))\r\n )\r\n )\r\n );\r\n\r\n// this epic requests the profile data for logged in users.\r\nexport const fetchUserFavoritesEpic = (action$) =>\r\n action$.pipe(\r\n ofType(actions.apply.type),\r\n filter((action) => action.payload && action.payload.IsLogin === true),\r\n switchMap(() =>\r\n getUserFavorites$.pipe(\r\n switchMap((response) => from(response.json()).pipe(mergeMap((data) =>\r\n of(actions.applyFavorites(data))))),\r\n catchError((err) => of(actions.handleError(err)))\r\n )\r\n )\r\n );\r\n\r\n// this epic is triggered when the user profile is loaded\r\n// it loads the user's favorites into the favorites slice.\r\nexport const getUserFavoritesEpic = (action$) =>\r\n action$.pipe(\r\n ofType(actions.apply.type),\r\n map((action) => actions.loadFavorites(action.payload))\r\n );\r\n\r\n// this epic is triggered when the user clicks on the favorite icon on a card \r\n// that is not already a favorite. \r\nexport const saveFavoriteEpic = (action$, state$) => \r\naction$.pipe( \r\n ofType(actions.saveFavorite.type),\r\n filter(() => state$.value?.userProfile?.isLogin),\r\n mergeMap((action) => { \r\n const { listingInformation, type, url, userId } = action.payload;\r\n const housingProductType = housingProductConstructor(type, listingInformation);\r\n const saveInformation = {\r\n id: listingInformation.id,\r\n type,\r\n url,\r\n userId\r\n };\r\n return saveUserFavorite(saveInformation).pipe(\r\n switchMap((data) => of(actions.saveFavoriteFulfilled({data, housingProductType})))\r\n );\r\n}));\r\n\r\n// this epic is triggered when the user clicks on the favorite icon on a card\r\n// that is already a favorite.\r\nexport const deleteFavoriteEpic = (action$, state$) =>\r\n action$.pipe(\r\n ofType(actions.deleteFavorite.type),\r\n switchMap((action) => {\r\n const payload = action.payload;\r\n \r\n // get the favorite from the state that matches the action.payload.id\r\n const favorite = getFavoriteFromState(state$.value, Number(payload.listingInformation.id));\r\n\r\n return deleteUserFavorite(favorite.id).pipe(\r\n switchMap(() => of(actions.deleteFavoriteFullfilled(favorite)))\r\n );\r\n }));","import { BehaviorSubject, mergeMap } from 'rxjs';\r\nimport { \r\n fetchUserProfileEpic,\r\n saveFavoriteEpic, \r\n deleteFavoriteEpic,\r\n fetchUserFavoritesEpic,\r\n} from 'features/userProfile';\r\nimport { combineEpics } from 'redux-observable';\r\n\r\nconst combinedUserProfileEpic = combineEpics(\r\n fetchUserProfileEpic,\r\n saveFavoriteEpic,\r\n deleteFavoriteEpic,\r\n fetchUserFavoritesEpic,\r\n );\r\n// Exports the Observable of 'epic' to allow other modules to dynamically register their epic.\r\nexport const epic$ = new BehaviorSubject(combinedUserProfileEpic);\r\n\r\nexport const rootEpic = (action$, state$) => epic$.pipe(mergeMap((epic) => epic(action$, state$)));","\r\n\r\n// this function is used to get the favorite from the state that matches the id of the action.payload.id\r\nexport default function getFavoriteFromState(state, id) {\r\n return state.userProfile?.favorites?.find((fav) => fav.listingId === id);\r\n }","import { distinctUntilChanged, from } from 'rxjs';\r\nimport { createEpicMiddleware } from 'redux-observable';\r\nimport { combineReducers, configureStore } from '@reduxjs/toolkit';\r\nimport dynamicMiddlewares from 'redux-dynamic-middlewares'\r\nimport { rootEpic } from './rootEpics';\r\n\r\n// Register global reducers if needed.\r\nconst staticReducers = {};\r\n\r\n// Function need to allow other modules to dynamically register their reducers.\r\nfunction createReducer(asyncReducers) {\r\n return combineReducers({\r\n ...staticReducers,\r\n ...asyncReducers,\r\n });\r\n}\r\n\r\n// Epic Middleware allow RxJS to work with Redux via Redux-Observable.\r\nconst epicMiddleware = createEpicMiddleware();\r\n\r\n// Creates, configure, and export the global store.\r\nexport const store = configureStore({\r\n reducer: staticReducers,\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(epicMiddleware).concat(dynamicMiddlewares),\r\n});\r\n\r\n// Observable store that notifies the latest changes.\r\n\r\nexport const store$ = from(store).pipe(distinctUntilChanged());\r\n// Add a dictionary to keep track of the registered async reducers.\r\nstore.asyncReducers = {};\r\n\r\n// Create an inject reducer function.\r\n// This function adds the async reducer, and creates a new combined reducer.\r\nstore.injectReducer = (key, asyncReducer) => {\r\n store.asyncReducers[key] = asyncReducer;\r\n store.replaceReducer(createReducer(store.asyncReducers));\r\n};\r\n\r\n// Run the root 'epic'.\r\nepicMiddleware.run(rootEpic);\r\nexport { epic$ } from './rootEpics';\r\n","/**\r\n * Recursively converts object keys to camel case\r\n */\r\nexport const camelCaseObjectKeys = (object) => {\r\n if (typeof object !== 'object' || !object) {\r\n return object;\r\n }\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n const camelCaseObject = camelCaseArray(object) || {};\r\n\r\n if (object && !camelCaseObject.length) {\r\n Object.keys(object).forEach((key) => {\r\n const camelCaseKey = key.charAt(0).toLowerCase() + key.slice(1);\r\n camelCaseObject[camelCaseKey] = camelCaseObjectKeys(object[key]);\r\n });\r\n }\r\n\r\n return camelCaseObject;\r\n};\r\n\r\n/**\r\n * Recursively converts object keys to camel case\r\n * This function just change the properties of your object, not the value or the types of your properties.\r\n */\r\nexport const camelCaseArray = (object) => {\r\n if (Array.isArray(object)) {\r\n object.forEach((element, index) => {\r\n object[index] = camelCaseObjectKeys(element);\r\n });\r\n return object;\r\n }\r\n\r\n return null;\r\n};\r\n","/**\r\n * A utility class for working with URLs.\r\n */\r\nexport default class UrlExtensions {\r\n\r\n /**\r\n * Gets the subdirectory of a URL.\r\n * @param {URL} url - The URL to get the subdirectory from.\r\n * @returns {string|null} The subdirectory of the URL, or null if there is none.\r\n */\r\n static getSubdirectory(url) {\r\n const firstSegment = url.pathname?.split('/')?.[1];\r\n const subdirectory = firstSegment || null;\r\n\r\n return subdirectory;\r\n }\r\n\r\n /**\r\n * Removes the query string from a URL.\r\n * @param {string} url - The URL to remove the query string from.\r\n * @returns {string} The URL without the query string.\r\n */\r\n static removeQueryString(url) {\r\n if(!url){\r\n return url;\r\n }\r\n \r\n const urlWithoutQueryString = url?.split('?')[0];\r\n return urlWithoutQueryString;\r\n }\r\n\r\n /**\r\n * Gets the value of a query parameter from a URL.\r\n * @param {URL} url - The URL to get the parameter value from.\r\n * @param {string} parameter - The name of the parameter to get the value of.\r\n * @returns {string|null} The value of the parameter, or null if it doesn't exist.\r\n */\r\n static getParameterValue(url, parameter) {\r\n const searchParams = new URLSearchParams(url.search);\r\n return searchParams.get(parameter) ?? null;\r\n }\r\n\r\n /**\r\n * Gets the value of a query parameter from the URL hash.\r\n * @param {URL} url - The URL to get the parameter value from.\r\n * @param {string} parameter - The name of the parameter to get the value of.\r\n * @returns {string|null} The value of the parameter, or null if it doesn't exist.\r\n */\r\n static getParameterValueFromHash(url, parameter) {\r\n const search = url.hash.replace('#', '?');\r\n const searchParams = new URLSearchParams(search);\r\n return searchParams.get(parameter) ?? null;\r\n }\r\n\r\n /**\r\n * Sets query parameters on a URL.\r\n * @param {string} url - The URL to set the parameters on.\r\n * @param {Object.} parameters - An object containing the parameter names and values to set.\r\n * @returns {string} The URL with the new parameters set.\r\n */\r\n static setParameters(url, parameters) {\r\n const separator = url.includes('?') ? '&' : '?';\r\n const query = [];\r\n Object.keys(parameters).forEach((key) => {\r\n const value = parameters[key];\r\n if (value !== null) {\r\n query.push(`${key}=${encodeURIComponent(value)}`);\r\n }\r\n });\r\n\r\n if (query.length) {\r\n return `${url}${separator}${query.join('&')}`;\r\n }\r\n\r\n return `${url}`;\r\n }\r\n}\r\n"],"names":["hasValue","value","constructor","element","this","checkbox$","pipe","event","target","closest","parent","Array","from","querySelectorAll","map","option","setSelector","selector","store$","subscribe","checkboxes","forEach","checkbox","checked","Boolean","getObservable","GoogleAnalyticsCustomDimensions","static","dimension","getName","baseElementUrl","document","querySelector","attributes","href","configuration","window","location","origin","getBreadcrumbContent","getCommunitiesResults","getHousingProductSnippetContent","getListingCounts","getOnPageContent","getResultFacets","getTypeaheadOptions","leadsBasicCommunitySubmission","leadsBasicPlanSubmission","leadsBasicSpecSubmission","leadsBasicListingSubmission","leadsGetRecommendedCommunities","leadsPaidCommunitySubmission","leadsPaidPlanSubmission","leadsPaidSpecSubmission","leadsRecommendedCommunitySubmission","mapGetCommunitiesPoints","mapGetHomesPoints","totalDeliveryValueCommunityLogger","totalDeliveryValuePlanLogger","totalDeliveryValueSpecLogger","userDeleteFavorite","userProfileGetFavorites","userSaveFavorite","marketingcampaignUnsubscribe","marketingcampaignUnsubscribeFeedback","googleOneTapLogin","getCommunityNearbyListingsInfo","getBuildablePlanNearbylistingsInfo","getPlanNearbyListingsInfo","getSpecNearbyListingsInfo","listingCounts","getArticleSuggestions","getCommunitiesForYou","getHomesForYou","getMetroSpecificArticles","getMostRecentArticles","blogRequestAccessToCacheManager","deleteItemInAllServers","purgeCdnCache","learningCenter","getArticleSearchResults","getArticleCountResults","searchCommunitySitePlans","getCommunityInteractiveSitePlanMarkers","getCommunitySummaryCard","getHousingUnitSummaryCard","category","action","label","customDimensions","eventCategory","eventAction","eventLabel","Object","assign","LoadingStatus","Failed","getInstance","Idle","Loading","Succeeded","key","failed","idle","loading","succeeded","instances","name","toString","defineProperty","isFetchingUnsubscribe","isFetchingUnsubscribeFeedback","initialState","reducers","fetchUnsubscribe","state","fetchUnsubscribeSucces","fetchUnsubscribeError","fetchUnsubscribeFeedback","fetchUnsubscribeFeedbackSucces","fetchUnsubscribeFeedbackError","actions","action$","type","switchMap","payload","url","method","body","JSON","stringify","unsubscribeMarketingCampaignCommand","headers","unsubscribeMarketingCampaign$","of","catchError","submitUnsubscribeFeedbackCommand","unsubscribeFeedback$","store","reducer","pendingSavesSessionStorageKey","favoritesSessionStorageKey","FavoriteType","Plan","Spec","Community","Builder","plan","spec","community","builder","toLowerCase","selectIsLoggedIn","userProfile","isLogin","selectFavorites","favorites","selectPendingSaves","pendingSaves","selectIsProfileFavoritesLoaded","isProfileFavoritesLoaded","selectUserId","userId","selectEmail","email","selectNeustarStatus","neustarStatus","selectGoogleOneTapLibraryLoadingStatus","authentication","googleOneTapLibraryLoadingStatus","selectUserIdAndPendingSaves","selectUserLocation","userLocation","userCity","userCountry","userMarketId","userState","userZipCode","userLocationCity","userLocationCountry","userLocationMarketId","userLocationState","userLocationZipCode","selectUserProfileTrackingCommonProperties","phone","zip","livesOutside","neustarInformation","s","z","a","g","neustarSegment","neustarZip","neustarAge","neustarGender","isLoggedIn","pendingSavesData","sessionStorage","getItem","parse","favoritesData","hasUserOptedIntoRecommendationEmail","realtorQuestion","userProfileSlice","apply","profile","camelCase","id","imageProfile","links","trim","replace","preferredContactMethod","isLoading","applyFavorites","update","userInfo","fetch","handleError","saveFavorite","some","favorite","Number","listingInformation","push","deleteFavorite","deleteFavoriteFullfilled","filter","listingId","saveFavoriteFulfilled","newFavorite","data","find","updateNeustarInformation","authenticationSlice","isAuthLibraryLoaded","isAuthModalOpen","authLibraryLoaded","authLibraryErrored","modalSlice","onOpen","onClose","inputEmail","emailPattern","RegExp","dataset","pattern","submitButton","isValidEmail$","test","showUnsubscribeFeedbackForm$","showEmailErrorMessage$","isValid","marketingCampaignPreferences","checkboxGroupChange$","unsubscribeAllInput","unsubscribeAllInputChange$","onUserLogIn$","unsubscribeFeedbackItems","feedbackItemsClick$","showCommentErrorMessage","removeAttribute","classList","add","showThankYouMessage","thankYouMessage","unsubscribeFeedbackForm","setAttribute","submitUnsubscribeFeedback","unsubscribeFeedback","customOptionInput","userEmail","chosenMarketingCampaigns","reasons","text","unsubscribeReasons","marketingCampaigns","marketingCampaignPreferencesActions","shouldShowThankYouMessage","currentInput","length","updateUpdatePreferencesButton","disabled","emailValue","unsubscribeAll","turnOffUnSubscribeAllInput","formContainer","unsubscribeFeedbackSubmit","isValidFeedbackComment$","submitUnsubscribeFeedback$","showCommentErrorMessage$","unsubscribeFeedbackSkip","showUnsubscribeFeedbackForm","setItem","unsubscribeMarketingPreferences","statusValue","feedbackCustomOptionHandler","ip","getUserProfileUrl","response","json","housingProductConstructor","Map","set","listing","brandName","communityName","communityId","isBasic","getFavoriteGoogleAnalyticsEvent","combinedUserProfileEpic","getUserProfile","mergeMap","err","state$","housingProductType","generator","get","prototype","saveInformation","fav","IsLogin","getUserFavorites","epic$","BehaviorSubject","rootEpic","epic","staticReducers","epicMiddleware","middleware","getDefaultMiddleware","concat","asyncReducers","injectReducer","asyncReducer","replaceReducer","combineReducers","run","camelCaseObjectKeys","object","camelCaseObject","camelCaseArray","keys","camelCaseKey","charAt","slice","isArray","index","UrlExtensions","firstSegment","pathname","split","urlWithoutQueryString","parameter","URLSearchParams","search","hash","parameters","separator","includes","query","encodeURIComponent","join"],"sourceRoot":""}