{"version":3,"mappings":"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","names":["RejectionReasons","Button","serialized_form_data_listing_search","AppSearchFilter","_compact","local_contact_info_data","getContactInfoData","isPresentString","Auth_callback_queue","getLastContactInfoSyncPromise","Auth_action","$modal","authentication_box","email_address","setContactInfoData","create_listing_search_inputs_for_debug","Promise","Modal","isSignedIn","create_user","result_type","CreateUserResultTypes","trackSignUp","refreshAndUpdateComponentPromise","captureMessage","inputs","create_listing_search","data","http_response_status_code","CreateListingSearchResultTypes","ListingSearchOperations","Google_Event","FacebookPixel_Event","PageInstance","GA4_Event","Cookies","AppSearchFilter_CookiesKeys","Concierge_Timer","__vitePreload","Routes","q_ajax_3","I18n","ListingSearchShareBox","whatever","RecordWithSameCriteriaExistModal","OnlyDefaultCriteriaDetectedModal","captureException","value","Factory","init","SaveManager","index"],"ignoreList":[],"sources":["../../../app/assets/javascripts/concepts/listings/searches/filter_bar/desktop/save-search-button/index.ts"],"sourcesContent":["\nimport Promise from \"plugins/bluebird/index\"\nimport _compact from \"lodash/compact\"\nimport Cookies from \"plugins/cookies-js/index\"\n\nimport q_ajax_3 from \"app/utils/q_ajax/q_ajax_3\"\n\nimport Modal from \"app/modal/show-modal\"\nimport Google_Event from \"app/tracking/google/event\"\nimport GA4_Event from \"app/tracking/google/google_analytics_4/event\"\nimport FacebookPixel_Event from \"app/tracking/facebook-pixel/event\"\nimport Auth_action from \"app/authentication/action\"\nimport Auth_callback_queue from \"app/authentication/callback_queue\"\nimport Concierge_Timer from \"app/concierge/timer\"\nimport PageInstance from \"app/page_instance/index\"\nimport ListingSearchOperations from \"app/listings/search/operations\"\n\nimport SaveManager from \"concepts/listings/searches/saved/manager\"\n\nimport {\n refreshAndUpdateComponentPromise,\n} from \"app/authentication/remote_state\"\n\nimport {\n getLastContactInfoSyncPromise,\n} from \"app/authentication/contact_info_caching\"\n\nimport {\n captureMessage,\n captureException,\n} from \"app/error_reporting/index\"\n\nimport {\n getContactInfoData,\n setContactInfoData,\n} from \"app/local_storages/contact_info_storage/index\"\n\nimport {\n create as create_user,\n ResultTypeEnums as CreateUserResultTypes,\n} from \"app/resources/users/create/index\"\n\nimport {\n isPresentString,\n} from \"app/utils/type_checking\"\n\nimport {\n isSignedIn,\n} from \"app/authentication/state\"\n\nimport {\n create as create_listing_search,\n Inputs as CreateListingSearchInputs,\n ResultTypeEnums as CreateListingSearchResultTypes,\n ListingSearchDataSourceLevelTwoIdentifier,\n} from \"app/resources/listing_search/create/index\"\n\nimport {\n trackSignUp,\n} from \"app/authentication/tracking\"\n\nimport {\n CookiesKeys as AppSearchFilter_CookiesKeys,\n Filter as AppSearchFilter,\n} from \"app/search/filter\"\n\nimport ListingSearchShareBox from \"concepts/listings/searches/share/box/index\"\n\nimport RecordWithSameCriteriaExistModal from \"apps/spacious_website/components/listing_search/listing_search_creation_failure_message_modals/record_with_same_criteria_exist\"\nimport OnlyDefaultCriteriaDetectedModal from \"apps/spacious_website/components/listing_search/listing_search_creation_failure_message_modals/only_default_criteria_detected\"\n\nimport I18n from \"plugins/i18n-js\"\n\n\nconst RejectionReasons = {\n ERROR_REPORTED: \"ERROR_REPORTED\",\n ONLY_DEFAULT_CRITERIA_DETECTED: \"ONLY_DEFAULT_CRITERIA_DETECTED\",\n RECORD_WITH_SAME_CRITERIA_EXIST: \"RECORD_WITH_SAME_CRITERIA_EXIST\",\n}\n\n\nclass Button {\n protected data_source_level_two_identifier = null as null | ListingSearchDataSourceLevelTwoIdentifier\n\n\n public onSaveClick() {\n const serialized_form_data_listing_search = AppSearchFilter.getFilterOptions()\n serialized_form_data_listing_search.neighbourhood_ids =\n _compact(serialized_form_data_listing_search.neighbourhood_ids)\n\n const local_contact_info_data = getContactInfoData()\n\n if (! isPresentString(local_contact_info_data.contact_email_address)) {\n // Show something\n Auth_callback_queue.add(() => {\n getLastContactInfoSyncPromise()\n .then(() => this.onSaveClick())\n .done()\n }, \"event:save_search\")\n\n Auth_action.showSignUpModal({\n enable_account_already_exists_error_message: false,\n })\n .then(({$modal, authentication_box}) => {\n authentication_box.on(\"sign_up:fail:account_conflict\", ({email_address}) => {\n $modal.modal(\"hide\")\n // Retry AFTER setting local contact email\n setContactInfoData({\n contact_email_address: email_address,\n })\n this.onSaveClick()\n })\n })\n .done()\n return\n }\n\n let create_listing_search_inputs_for_debug = {}\n Promise.resolve()\n .then(() => {\n Modal.showLoadingIndicator()\n\n if (isSignedIn()) {\n return Promise.resolve()\n }\n\n return create_user({\n authentication_handle:\n local_contact_info_data.user_authentication_handle ||\n local_contact_info_data.contact_email_address ||\n \"\",\n email_address:\n local_contact_info_data.contact_email_address || \"\",\n sign_in_on_success: true,\n })\n .then(({result_type}) => {\n switch (result_type) {\n case CreateUserResultTypes.SUCCESS:\n trackSignUp()\n refreshAndUpdateComponentPromise().done()\n return\n case CreateUserResultTypes.CONFLICT:\n case CreateUserResultTypes.PARAMS_INVALID:\n return\n default:\n captureMessage(\n `unexpected/unhandled result_type: <${result_type}>`,\n {\n source_file_path:\n \"app/assets/javascripts/concepts/listings/contact/button/events/index\",\n }\n )\n throw RejectionReasons.ERROR_REPORTED\n }\n })\n })\n .then(() => {\n const inputs: CreateListingSearchInputs = {\n // Need `||` to make flow happy\n user_authentication_handle:\n local_contact_info_data.user_authentication_handle ||\n local_contact_info_data.contact_email_address ||\n \"\",\n\n listing_search_attributes: serialized_form_data_listing_search,\n source_identifier:\n \"concepts/listings/searches/filter_bar/desktop/save-search-button#onSaveClick\",\n }\n if (this.data_source_level_two_identifier != null) {\n inputs.listing_search_data_source_level_two_identifier = this.data_source_level_two_identifier\n }\n create_listing_search_inputs_for_debug = inputs\n return create_listing_search(inputs)\n })\n .then(({result_type, data, http_response_status_code}) => {\n switch (result_type) {\n case CreateListingSearchResultTypes.SUCCESS:\n // show success modal\n return data\n case CreateListingSearchResultTypes.INVALID:\n return\n case CreateListingSearchResultTypes.UNAUTHENTICATED:\n return\n case CreateListingSearchResultTypes.RECORD_WITH_SAME_CRITERIA_EXIST:\n throw RejectionReasons.RECORD_WITH_SAME_CRITERIA_EXIST\n case CreateListingSearchResultTypes.ONLY_DEFAULT_CRITERIA_DETECTED:\n throw RejectionReasons.ONLY_DEFAULT_CRITERIA_DETECTED\n default:\n captureMessage(\n `unexpected/unhandled result_type from create_listing_search: <${result_type}>`,\n Object.assign({\n source_file_path:\n \"concepts/listings/searches/filter_bar/desktop/save-search-button/index\",\n http_response_status_code: http_response_status_code,\n }, create_listing_search_inputs_for_debug),\n )\n throw RejectionReasons.ERROR_REPORTED\n }\n })\n .then((data) => {\n if (ListingSearchOperations.is_high_value_search(serialized_form_data_listing_search)){\n Google_Event.track({\n category: \"Remarketing\",\n action: \"User Interested In >50m Properties\",\n })\n\n FacebookPixel_Event.track({\n category: \"Remarketing\",\n name: \"User Interested In >50m Properties\",\n })\n }\n\n Google_Event.track({\n category: PageInstance.currentPageNameForTracking(),\n action: \"Save Search\",\n options: {\n eventLabel: \"Save Search - Saved\",\n },\n })\n\n GA4_Event.track({\n event_name: \"saved_search\",\n options: {\n page: PageInstance.currentPageNameForTracking(),\n },\n })\n\n Cookies.set(\n AppSearchFilter_CookiesKeys.SAVED,\n true,\n {\n // # expire in 1 day\n expires: 24 * 60 * 60,\n },\n )\n Concierge_Timer.clearTimer()\n\n return Promise.resolve(\n import(\n \"plugins/js-routes\"\n )\n )\n .then((Routes) => {\n return q_ajax_3({\n url: Routes.show_one_apps_spacious_website_partials_listing_search_creation_success_message_modals_path({\n // Not sure how to infer data type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listing_search_id: (data as any).listing_search.id,\n locale: I18n.locale,\n }),\n method: \"GET\",\n dataType: \"html\",\n })\n })\n })\n .then(({data}) => {\n Modal.hideTopModal()\n Modal.showModalWithContent(data)\n ListingSearchShareBox.create()\n Google_Event.track({\n category: PageInstance.currentPageNameForTracking(),\n action: \"Share Search Modal (After Saving Search)\",\n options: {\n eventLabel: \"Share Search Modal (After Saving Search) Pop Up\",\n },\n })\n\n GA4_Event.track({\n event_name: \"share_search_modal_displayed\",\n options: {\n page: PageInstance.currentPageNameForTracking(),\n label: \"after_saved_search\",\n },\n })\n })\n .catch((whatever) => {\n Modal.hideLoadingIndicator()\n\n if (whatever === RejectionReasons.ERROR_REPORTED) { return }\n if (whatever === RejectionReasons.RECORD_WITH_SAME_CRITERIA_EXIST) {\n RecordWithSameCriteriaExistModal.show()\n return\n }\n if (whatever === RejectionReasons.ONLY_DEFAULT_CRITERIA_DETECTED) {\n OnlyDefaultCriteriaDetectedModal.show()\n return\n }\n\n if (whatever instanceof Error) {\n captureException(\n whatever,\n {\n source_file_path:\n \"concepts/listings/searches/filter_bar/desktop/save-search-button/index\",\n }\n )\n return\n }\n\n captureMessage(\n whatever.toString(),\n {\n source_file_path:\n \"concepts/listings/searches/filter_bar/desktop/save-search-button/index\",\n }\n )\n })\n .done()\n }\n\n public setListingSearchDataSourceLevelTwoIdentifierAs(value: ListingSearchDataSourceLevelTwoIdentifier) {\n this.data_source_level_two_identifier = value\n }\n}\n\nconst Factory = {\n _instance: null as null | Button,\n instance(): Button {\n if (this._instance != null) {\n return this._instance\n }\n\n this._instance = new Button()\n return this._instance\n },\n}\n\nconst init = (): void => {\n SaveManager.on(\"save_click:action\", () => {\n Factory.instance().onSaveClick()\n })\n}\n\nexport default {init}\nexport {\n Factory,\n ListingSearchDataSourceLevelTwoIdentifier,\n}\n"],"file":"assets/index-BVaSn-wi.js"}