{"version":3,"mappings":"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","names":["DEFAULT_SELECTOR","Factory","selector","instance","ListingsCarousel","merged_selector","ActiveSwitches","default_selector","OverlayToggle","GoogleMapDiv","u","Promise","map_el","LeafletMapTileLayer","AssetsInfoStore","map_tile_layer","icon_image_data","lat_str","lng_str","lat","lng","center","LeafletSettings","baidu_latlng","Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op","dom_id","DomIdGenerator","marker_icon","leaflet_map","AppMapZoomLevels","obj","map","factory","init","_once","Carousel","PicturesAndMap","sele","$el","$","e","q_ajax_3","serialize","Notifier","I18n","Google_event","PageInstance","GA4_Event","Modal","RemoteSubmitForm$1","CELL_CLASS_NAME","CELL_INITIALIZED_CLASS_NAME","el","RemoteSubmitForm","Components","Box","show","building_id","Routes.new_brochure_request_building_path","data","Buildings_Brochure_Request_Modal","DEFAULT_POPOVER_OPTIONS","options","$scope","$radio","$form_container","$option_row","$tooltip","target","input","popover_options","Routes.privacy_policy_page_path","idx","ContactInfo","$contact_name_input","$contact_email_address_input","$contact_phone_number_input","local_contact_info_data","getContactInfoData","isPresentString","IntlTelInput","ContactInfoPrefilling","YahooGemini_Conversions","SendSpaciousEnquiryButton","listing_id","Routes.apps_spacious_website_partials_single_overseas_residential_project_share_modal_path","ListingSearchShareBox","RejectionReasons","PAGE_EXPAND_CLASS","$forms","body_el","$one_form","$additional_message_input","$reject_promotions_container","$reject_promotions_input","$submit_button","intlTelInput","WaitObjectByPathPromise","phone_input_el","callback","countryCode","__vitePreload","isValidPhoneNumber","contact_email_address_input_val","contact_phone_number_dial_code_text","contact_phone_number_input_val","Formatter","contact_name_input_val","additional_message_val","reject_promotions_input_val","submit_btn_el","valid_contact_email_address_input_val","valid_contact_phone_number_input_val","isSignedIn","create_user","result_type","CreateUserResultTypes","trackSignUp","refreshAndUpdateComponentPromise","shortlist","captureMessage","createListingContactRequests","createListingContactRequestResultTypes","setContactInfoData","Goals","FacebookPixel_Event","initShareModal","whatever","captureException","Authentication_manager","$contact_btns_container","$contact_call_btns","$whatsapp_call_btn","message_no_login_no_contact_phone","$this","Auth_state","Auth_action","on_sign_in_event_listener","slot_name","Auth_callback_queue","Page","ShowPhoneNumberButton","ContactRequestBox","$overlay","$photo","$close_btn","openCarousel","Routes.floor_plans_building_path","FloorPlan"],"ignoreList":[],"sources":["../../../app/assets/javascripts/concepts/new_development_buildings/pictures_and_map_browser/tabbed/mark-switch-active.ts","../../../app/assets/javascripts/concepts/new_development_buildings/pictures_and_map_browser/tabbed/overlay-toggle.ts","../../../app/assets/javascripts/concepts/new_development_buildings/pictures_and_map_browser/tabbed/google-map.ts","../../../app/assets/javascripts/concepts/new_development_buildings/pictures_and_map_browser/tabbed/index.ts","../../../app/assets/javascripts/concepts/buildings/brochure/request/box/components/remote_submit_form/index.ts","../../../app/assets/javascripts/concepts/buildings/brochure/request/box/components/index.ts","../../../app/assets/javascripts/concepts/buildings/brochure/request/box/index.ts","../../../app/assets/javascripts/concepts/buildings/brochure/request/modal/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/contact_info/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/contact_info_prefilling/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/send_spacious_enquiry_button/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/share_modal/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/remote_submit_form/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/components/show_phone_number_button/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/contact/request/box/index.ts","../../../app/assets/javascripts/concepts/new_development_buildings/floor_plan/index.ts"],"sourcesContent":["\nimport {\n ActiveSwitches,\n InputSelector,\n} from \"components/picture_and_map_browser/mark_swtich_active\"\nimport ListingsCarousel from \"concepts/listings/carousel\"\n\nconst DEFAULT_SELECTOR = {\n overlay: \".cell--new-development-buildings--pictures-and-map-browser--tabbed__overlay\",\n switches_anchors: \".cell--new-development-buildings--pictures-and-map-browser--tabbed__switch\",\n page: \".cell--overlay-on-page\",\n}\n\n\nconst Factory = {\n _instance: null as null | ActiveSwitches,\n instance(selector?: InputSelector){\n if (this._instance != null) {\n return this._instance\n }\n\n const instance = this.create(selector)\n this._instance = instance\n instance.on(\"switch_click\", () => {\n // Fix for not auto sliding carousel after tab switched\n if (instance.getCurrentMode() === \"pictures\") {\n ListingsCarousel.startCycling()\n }\n })\n return this._instance\n },\n create(selector?: InputSelector){\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n return new ActiveSwitches(merged_selector)\n },\n}\n\nexport default Factory\n","\nimport {\n OverlayToggle,\n InputSelector,\n} from \"components/picture_and_map_browser/overlay_toggle\"\n\n\nconst default_selector = {\n close_btn: \".cell--new-development-buildings--pictures-and-map-browser--tabbed__overlay__btn-close\",\n full_btns: \".cell--new-development-buildings--pictures-and-map-browser--tabbed__btn-make-full-screen\",\n overlay: \".cell--new-development-buildings--pictures-and-map-browser--tabbed__overlay\",\n}\n\nconst Factory = {\n _instance: null as null | OverlayToggle,\n instance(selector?: InputSelector){\n if (this._instance != null) {\n return this._instance\n }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n const merged_selector = Object.assign({}, default_selector, selector)\n return new OverlayToggle(merged_selector)\n },\n}\n\nexport default Factory\n","\nimport u from \"umbrellajs\"\nimport Promise from \"plugins/bluebird/index\"\nimport L from \"plugins/leaflet\"\n\nimport AssetsInfoStore from \"app/assets_info_store\"\n\nimport LeafletMapTileLayer from \"app/map/leaflet/map_tile_layer\"\nimport LeafletSettings from \"app/map/leaflet/settings\"\nimport AppMapZoomLevels from \"app/map/zoom_levels\"\n\nimport DomIdGenerator from \"app/utils/dom_id_generator\"\n\nimport Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op from \"app/geometry/coordinates/value_from_wgs84_to_gsj02_conversion/operation\"\n\nimport OverlayToggle from \"./overlay-toggle\"\nimport ActiveSwitches from \"./mark-switch-active\"\n\n\n\ninterface Selector {\n scope: string\n maps: string\n}\n\ninterface InputSelector {\n scope?: string\n maps?: string\n}\n\nconst default_selector = {\n scope: \".cell--new-development-buildings--pictures-and-map-browser--tabbed\",\n maps: \".js-google-map\",\n}\n\n\ninterface MapEntry {\n map: L.Map,\n center: L.LatLng,\n map_tile_layer: L.TileLayer & {\n _update?: () => void\n },\n}\n\n\nclass GoogleMapDiv {\n private selector: Selector\n\n private $scope: UmbrellaInstance\n private $maps: UmbrellaInstance\n\n private maplist: MapEntry[]\n\n constructor(selector?: InputSelector) {\n this.selector = Object.assign({}, default_selector, selector)\n this.$scope = u(this.selector.scope)\n this.$maps = this.$scope.find(this.selector.maps)\n\n this.maplist = []\n\n this.created()\n this.bind_action()\n }\n\n private created(){\n return Promise.all(this.$maps.nodes.map((map_el) => {\n // If we add map tile layer AFTER creating map object\n // The location of tile layer is drifted on load\n // To workaround this we create tile layer first and\n // pass it on map object creation\n return Promise.all([\n LeafletMapTileLayer.getNewTileLayerPromise(),\n AssetsInfoStore.fetch(\"map/markers/s-spacious.png\"),\n ])\n .spread((map_tile_layer, icon_image_data) => {\n const lat_str = map_el.getAttribute(\"data-lat\")\n const lng_str = map_el.getAttribute(\"data-lng\")\n if (lat_str == null || lng_str == null) { return }\n\n const lat = parseFloat(lat_str)\n const lng = parseFloat(lng_str)\n\n let center: L.LatLng = L.latLng(lat, lng)\n if (LeafletSettings.get_use_baidu_maps()) {\n const baidu_latlng = (new Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op({\n latitude: lat,\n longitude: lng,\n })).call()\n\n center = L.latLng(baidu_latlng.latitude, baidu_latlng.longitude)\n }\n\n const dom_id = DomIdGenerator.generateNewId()\n // Set new ID if applicable\n if (dom_id !== map_el.id) { map_el.setAttribute(\"id\", dom_id) }\n\n const marker_icon = L.icon({\n iconUrl: icon_image_data.url,\n iconSize: [25, 29],\n })\n\n const leaflet_map = LeafletSettings.get_use_baidu_maps() ?\n L.map(dom_id, {\n center: center,\n zoom: 17,\n minZoom: AppMapZoomLevels.min,\n maxZoom: AppMapZoomLevels.max,\n zoomControl: true,\n\n wheelPxPerZoomLevel: 210,\n\n layers: [\n map_tile_layer,\n ],\n })\n :\n L.map(dom_id, {\n center: center,\n\n zoom: 17,\n minZoom: AppMapZoomLevels.min,\n maxZoom: AppMapZoomLevels.max,\n zoomControl: true,\n\n // Has to be true, or labels doesn't follow panning\n markerZoomAnimation: true,\n zoomAnimation: false,\n inertia: false,\n\n wheelPxPerZoomLevel: 210,\n\n layers: [\n map_tile_layer,\n ],\n })\n\n L.marker(center, {\n icon: marker_icon,\n }).addTo(leaflet_map)\n this.maplist.push({map: leaflet_map, center, map_tile_layer})\n })\n }))\n }\n private bind_action(){\n OverlayToggle.instance().on(\"switch_mode:mode_switched\", () => {\n this.resize()\n })\n ActiveSwitches.instance().on(\"switch_click\", () => {\n this.resize()\n })\n\n return this\n }\n private resize(){\n // setTimeout to makesure it is the last event handler\n // damn components/widgets/switch_mode\n setTimeout(() => {\n this.maplist.forEach((obj) => {\n const {map, center, map_tile_layer} = obj\n map.setView(center, 17, {\n animate: false,\n })\n map.invalidateSize({\n animate: false,\n debounceMoveend: true,\n })\n if (typeof map_tile_layer._update === \"function\") {\n map_tile_layer._update()\n }\n })\n }, 0)\n }\n}\n\n\nconst factory = {\n _instance: null as null | GoogleMapDiv,\n instance(selector?: InputSelector){\n\n if (this._instance != null){\n return this._instance\n }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n return new GoogleMapDiv(selector)\n },\n}\n\nexport default factory\n","// magic `index` in CommonJS pattern\n// it can be required by just requiring the folder\n// also for assets pipeline :)\nimport ActiveSwitches from \"./mark-switch-active\"\nimport GoogleMapDiv from \"./google-map\"\nimport OverlayToggle from \"./overlay-toggle\"\nimport Carousel from \"concepts/new_development_buildings/carousel/index\"\nimport _once from \"lodash/once\"\n\nconst init = _once(() => {\n ActiveSwitches.instance()\n OverlayToggle.instance()\n GoogleMapDiv.instance()\n Carousel.init()\n})\n\nexport default { init }\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport serialize from \"form-serialize\"\n\nimport I18n from \"plugins/i18n-js\"\n// endregion External Modules\n\n// Private Modules\nimport Google_event from \"app/tracking/google/event\"\nimport GA4_Event from \"app/tracking/google/google_analytics_4/event\"\nimport PageInstance from \"app/page_instance/index\"\nimport Modal from \"app/modal/show-modal\"\nimport Notifier from \"app/notifier/index\"\n\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\ninterface Selector {\n scope: string | JQuery | Element\n main: string\n}\ninterface InputSelector {\n scope?: string | JQuery | Element\n main?: string\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell--buildings--brochure--request--box\",\n main: \".cell--buildings--brochure--request--box_remote-submit-form\",\n}\n\n\nconst init = (selector?: InputSelector) => {\n const sele: Selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n const $scope = $(sele.scope)\n const $el = $scope.find(sele.main)\n\n\n $el.on(\"submit\", (e) => {\n e.preventDefault()\n\n q_ajax_3({\n url: $el.attr(\"action\"),\n method: \"POST\",\n data: serialize(($el[0] as HTMLFormElement), {hash: true}),\n })\n .then(() => {\n Notifier.showSuccess(I18n.t(\"concepts.buildings.brochure.request.box.notifier.success\"))\n Google_event.track({\n category: PageInstance.currentPageNameForTracking(),\n action: \"Overseas Brochure Request\",\n options: {\n eventLabel: \"Overseas Brochure Request - Submitted\",\n },\n })\n\n GA4_Event.track({\n event_name: \"op_brochure_request_submitted\",\n options: {\n page: PageInstance.currentPageNameForTracking(),\n },\n })\n Modal.hideTopModal()\n })\n .catch(() => {\n Notifier.showError(I18n.t(\"concepts.buildings.brochure.request.box.notifier.error\"))\n })\n .done()\n })\n}\n\nexport default {init}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport RemoteSubmitForm from \"./remote_submit_form\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--buildings--brochure--request--box\"\nconst CELL_INITIALIZED_CLASS_NAME = `${CELL_CLASS_NAME}--js-spacious-initialized`\n\nconst init = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n if (el.classList.contains(CELL_INITIALIZED_CLASS_NAME)) { return }\n el.classList.add(CELL_INITIALIZED_CLASS_NAME)\n\n RemoteSubmitForm.init({\n scope: el,\n })\n })\n}\n\nexport default {\n init,\n}\n","\nimport Components from \"./components/index\"\n\nconst init = () => {\n Components.init()\n}\n\nexport default {\n init,\n}\n","\nimport q_ajax_3 from \"app/utils/q_ajax/q_ajax_3\"\n\nimport $ from \"jquery\"\nimport Modal from \"app/modal/show-modal\"\nimport Box from \"concepts/buildings/brochure/request/box/index\"\n\n\nimport I18n from \"plugins/i18n-js\"\nimport * as Routes from \"plugins/js-routes\"\n\n\nconst CELL_CLASS_NAME = \"cell--buildings--brochure--request--modal\"\n\nconst show = (building_id: number | string) => {\n q_ajax_3(\n {\n url: Routes.new_brochure_request_building_path(I18n.locale, building_id),\n method: \"GET\",\n dataType: \"html\",\n },\n {\n error_tracking_options: {\n endpoint_identifier:\n \"concepts/buildings/brochure/request/modal#show\",\n },\n }\n )\n .then(({data}) => {\n if ($(CELL_CLASS_NAME).length !== 0) {\n return\n }\n\n Modal.showModalWithContent(data, {customContent: true})\n Box.init()\n })\n}\n\nexport default {show}\n","\nimport $ from \"jquery\"\n\nimport \"bootstrap3-tooltip\"\nimport \"bootstrap3-popover\"\n\nimport I18n from \"plugins/i18n-js\"\nimport * as Routes from \"plugins/js-routes\"\n\ninterface Selector {\n scope: string | HTMLElement\n listings_ids: string\n radio: string\n form_container: string\n option_row: string\n tooltip: string | HTMLElement,\n}\ninterface InputSelector {\n scope?: string | HTMLElement\n listings_ids?: string\n radio?: string\n form_container?: string\n option_row?: string\n tooltip?: string | HTMLElement,\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-new-development-contact-request-box\",\n listings_ids: \".cell-new-development-contact-request-box__contact-info__selectors\",\n radio: \"input[name=\\\"listing_id\\\"]:radio\",\n form_container: \".cell-new-development-contact-request-box__contact-form__container\",\n option_row: \".cell-new-development-contact-request-box__contact-info__option-row\",\n tooltip: \".cell--listing-contact-request-box--tooltip\",\n}\n\ninterface InputOptions {\n popover_options?: Bootstrap3Popover.Options,\n}\n\nconst DEFAULT_POPOVER_OPTIONS = {\n placement: \"auto\",\n}\n\nconst init = (selector?: InputSelector, options?: InputOptions) => {\n const sele: Selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n const $scope = $(sele.scope)\n\n const $listings_ids = $scope.find(sele.listings_ids)\n const $radio = $listings_ids.find(sele.radio)\n const $form_container = $scope.find(sele.form_container)\n const $option_row = $scope.find(sele.option_row)\n const $tooltip = $scope.find(sele.tooltip)\n\n $radio.on(\"change\", ({target}) => {\n const input = target as HTMLInputElement\n\n $form_container\n .removeClass(\"active\") // Deactivate all items\n .filter(`.${input.value}`)\n .addClass(\"active\") // Activate only the selected one\n $option_row\n .removeClass(\"active\") // Deactivate all rows\n .filter(`.${input.value}`)\n .addClass(\"active\") // Activate only the selected one\n })\n\n const popover_options = Object.assign(\n {},\n DEFAULT_POPOVER_OPTIONS,\n options == null ? {} : options.popover_options,\n {\n container: sele.scope,\n content: I18n.t(\"concepts.listings.contact.request.box.sentences.tooltip_html\",\n {\n privacy_link: Routes.privacy_policy_page_path({locale: I18n.locale}),\n },\n ),\n html: \"true\",\n },\n )\n\n // add listener to each popup link\n $tooltip.each((idx, el) => {\n $(el).popover(popover_options)\n })\n\n $option_row.on(\"click\", ({target}) => {\n // # Check the newly clicked radio button\n $(target).find(sele.radio)\n .prop(\"checked\", true)\n .trigger(\"change\")\n })\n}\n\nexport default {init}\n","\nimport u from \"umbrellajs\"\nimport IntlTelInput from \"plugins/intl_tel_input/index\"\n\nimport {\n getContactInfoData,\n} from \"app/local_storages/contact_info_storage/index\"\n\nimport {\n isPresentString,\n} from \"app/utils/type_checking/index\"\n\n\ninterface InputSelector {\n scope?: string | HTMLElement,\n\n contact_name_input?: string | HTMLElement,\n contact_email_address_input?: string | HTMLElement,\n contact_phone_number_input?: string | HTMLElement,\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-new-development-contact-request-box\",\n\n contact_name_input:\n \".cell-new-development-contact-request-box__input-contact_name\",\n contact_email_address_input:\n \".cell-new-development-contact-request-box__input-contact_email_address\",\n contact_phone_number_input:\n \".cell-new-development-contact-request-box__input-contact_phone_number\",\n}\n\n\nconst init = (selector?: InputSelector) => {\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n const $scope = u(merged_selector.scope)\n const $contact_name_input = $scope.find(\n merged_selector.contact_name_input,\n )\n const $contact_email_address_input = $scope.find(\n merged_selector.contact_email_address_input,\n )\n const $contact_phone_number_input = $scope.find(\n merged_selector.contact_phone_number_input,\n )\n\n const local_contact_info_data = getContactInfoData()\n\n if (local_contact_info_data.contact_name != null &&\n !isPresentString(($contact_name_input.first() as HTMLInputElement).value)) {\n\n ($contact_name_input.first() as HTMLInputElement).value =\n local_contact_info_data.contact_name\n }\n if (local_contact_info_data.contact_email_address != null &&\n !isPresentString(($contact_email_address_input.first() as HTMLInputElement).value)) {\n\n ($contact_email_address_input.first() as HTMLInputElement).value =\n local_contact_info_data.contact_email_address\n }\n if (local_contact_info_data.contact_phone_number != null &&\n !isPresentString(($contact_phone_number_input.first() as HTMLInputElement).value)) {\n\n ($contact_phone_number_input.first() as HTMLInputElement).value =\n local_contact_info_data.contact_phone_number\n }\n\n IntlTelInput.init().done()\n}\n\nexport default { init }\n","\nimport u from \"umbrellajs\"\n\nimport YahooGemini_Conversions from \"app/tracking/yahoo_gemini/conversions\"\n\ninterface Selector {\n scope: string | HTMLElement\n btn: string\n}\ninterface InputSelector {\n scope?: string | HTMLElement\n btn?: string\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-new-development-contact-request-box\",\n btn: \".cell-new-development-contact-request-box__btn-submit\",\n}\nconst init = (selector?: InputSelector) => {\n const sele = Object.assign({}, DEFAULT_SELECTOR, selector)\n const $scope = u(sele.scope)\n const $btn = $scope.find(sele.btn)\n\n $btn.on(\"click\", () => {\n YahooGemini_Conversions.SendSpaciousEnquiry.track()\n })\n}\n\nexport default {init}\n\n","\nimport q_ajax_3 from \"app/utils/q_ajax/q_ajax_3\"\nimport Modal from \"app/modal/show-modal\"\nimport ListingSearchShareBox from \"concepts/listings/share/box/index\"\n\n\nimport I18n from \"plugins/i18n-js\"\nimport * as Routes from \"plugins/js-routes\"\n\n\nconst init = ({listing_id}: {listing_id: string | number}): void => {\n return q_ajax_3({\n url: Routes.apps_spacious_website_partials_single_overseas_residential_project_share_modal_path({\n locale: I18n.locale,\n listing_id: listing_id,\n }),\n method: \"GET\",\n dataType: \"html\",\n })\n .then(({data}) => {\n Modal.hideTopModal()\n Modal.showModalWithContent(data)\n ListingSearchShareBox.create()\n })\n .done()\n}\n\nexport { init }\n","\nimport u from \"umbrellajs\"\nimport IntlTelInput from \"plugins/intl_tel_input\"\nimport Promise from \"plugins/bluebird\"\nimport {\n init as initShareModal,\n} from \"concepts/new_development_buildings/contact/request/box/components/share_modal/index\"\n\nimport Authentication_manager from \"app/authentication/manager\"\nimport Notifier from \"app/notifier/index\"\nimport shortlist from \"app/listings/shortlist\"\nimport Formatter from \"app/numbers/formatter\"\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n\nimport Goals from \"app/tracking/goals/track\"\nimport FacebookPixel_Event from \"app/tracking/facebook-pixel/event\"\n\nimport {\n refreshAndUpdateComponentPromise,\n} from \"app/authentication/remote_state\"\n\nimport {\n create as create_user,\n ResultTypeEnums as CreateUserResultTypes,\n} from \"app/resources/users/create/index\"\n\nimport {\n getContactInfoData,\n setContactInfoData,\n} from \"app/local_storages/contact_info_storage\"\n\nimport {\n create as createListingContactRequests,\n ResultTypeEnums as createListingContactRequestResultTypes,\n} from \"app/resources/listing_contact_requests/create/index\"\n\nimport {\n captureMessage,\n captureException,\n} from \"app/error_reporting\"\n\nimport {\n isPresentString,\n} from \"app/utils/type_checking\"\n\nimport {\n isSignedIn,\n} from \"app/authentication/state\"\n\nimport {\n trackSignUp,\n} from \"app/authentication/tracking\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\nconst RejectionReasons = {\n ERROR_REPORTED: \"ERROR_REPORTED\",\n FAILURE_CASE_HANDLED: \"FAILURE_CASE_HANDLED\",\n}\n\ninterface InputSelector {\n scope?: string | HTMLElement,\n\n form?: string | HTMLElement,\n\n contact_name_input?: string | HTMLElement,\n contact_email_address_input?: string | HTMLElement,\n contact_phone_number_input?: string | HTMLElement,\n contact_phone_number_dial_code?: string | HTMLElement,\n additional_message_input?: string | HTMLElement,\n reject_promotions_container?: string | HTMLElement,\n reject_promotions_input?: string | HTMLElement,\n\n submit_button?: string,\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-new-development-contact-request-box\",\n\n form: \"form\",\n\n contact_name_input:\n \".cell-new-development-contact-request-box__input-contact_name\",\n contact_email_address_input:\n \".cell-new-development-contact-request-box__input-contact_email_address\",\n contact_phone_number_input:\n \".cell-new-development-contact-request-box__input-contact_phone_number\",\n contact_phone_number_dial_code:\n \".iti__selected-dial-code\",\n additional_message_input:\n \".cell-new-development-contact-request-box__input--message\",\n reject_promotions_container:\n \".cell-new-development-contact-request-box__reject_promotions--container\",\n reject_promotions_input:\n \".cell-new-development-contact-request-box__reject_promotions\",\n submit_button: \"input[type=\\\"submit\\\"]\",\n}\n\nconst PAGE_EXPAND_CLASS = \"page--filter--freeze\"\n\nconst init = (selector?: InputSelector) => {\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n const $scope = u(merged_selector.scope)\n const $forms = $scope.find(merged_selector.form)\n const body_el = document.querySelector(\"body\") as HTMLElement\n\n $forms.each((el) => {\n const $one_form = u(el)\n\n const listing_id = $one_form.data(\"listing-id\")\n\n const $contact_name_input =\n $one_form.find(merged_selector.contact_name_input)\n const $contact_email_address_input =\n $one_form.find(merged_selector.contact_email_address_input)\n const $contact_phone_number_input =\n $one_form.find(merged_selector.contact_phone_number_input)\n const $additional_message_input =\n $one_form.find(merged_selector.additional_message_input)\n\n const $reject_promotions_container =\n $one_form.find(merged_selector.reject_promotions_container)\n const $reject_promotions_input =\n $one_form.find(merged_selector.reject_promotions_input)\n\n const $submit_button =\n $one_form.find(\n merged_selector.submit_button,\n )\n\n IntlTelInput.getIntlTelInput()\n .then((intlTelInput) => {\n WaitObjectByPathPromise(\"window._spacious_main_css_loaded\")\n .then(() => {\n $contact_phone_number_input.each((phone_input_el) => {\n intlTelInput(phone_input_el, {\n loadUtilsOnInit: () => import(\"intl-tel-input/build/js/utils\"),\n allowDropdown: true,\n autoInsertDialCode: true,\n autoPlaceholder: \"polite\",\n nationalMode: false,\n separateDialCode: true,\n\n localizedCountries: (I18n.t(\"plugins.intl_tel_input.iso2_code\") as any),\n preferredCountries: [\n \"hk\",\n \"tw\",\n \"cn\",\n \"mo\",\n \"jp\",\n \"us\",\n \"gb\",\n ],\n initialCountry: \"auto\",\n geoIpLookup: (callback: (c: string) => void) => {\n q_ajax_3({\n url: \"/my_country_code\",\n method: \"GET\",\n dataType: \"json\",\n })\n .then(({data}) => {\n const countryCode = (data?.country_code) ? data.country_code : \"\"\n callback(countryCode)\n })\n .catch(() => {\n // Do nothing\n })\n .done()\n },\n })\n\n u(phone_input_el).on(\"open:countrydropdown\", () => {\n body_el.classList.add(PAGE_EXPAND_CLASS)\n })\n\n u(phone_input_el).on(\"close:countrydropdown\", () => {\n body_el.classList.remove(PAGE_EXPAND_CLASS)\n })\n })\n })\n .done()\n })\n\n $one_form.on(\"submit\", (e) => {\n e.preventDefault()\n\n import(\n \"libphonenumber-js\"\n )\n .then(({isValidNumber: isValidPhoneNumber}) => {\n const local_contact_info_data = getContactInfoData()\n\n const contact_email_address_input_val: string | null =\n ($contact_email_address_input.first() as HTMLInputElement).value\n const contact_phone_number_dial_code_text: string | null =\n $one_form.find(merged_selector.contact_phone_number_dial_code).text()\n const contact_phone_number_input_val: string | null =\n Formatter.phoneNumber(\n ($contact_phone_number_input.first() as HTMLInputElement).value,\n contact_phone_number_dial_code_text,\n )\n\n const contact_name_input_val: string | null =\n ($contact_name_input.first() as HTMLInputElement).value\n const additional_message_val: string | null =\n ($additional_message_input.first() as HTMLInputElement).value\n const reject_promotions_input_val: boolean =\n ($reject_promotions_input.first() as HTMLInputElement).checked\n\n $submit_button.each((submit_btn_el) => {\n (submit_btn_el as HTMLInputElement).disabled = true\n })\n\n if (! isPresentString(contact_email_address_input_val)) {\n Notifier.showError(\n I18n.t(\"js.app.notifier.defaults.input_email_address_invalid\"),\n )\n $submit_button.each((submit_btn_el) => {\n (submit_btn_el as HTMLInputElement).disabled = false\n })\n return\n }\n if (! isPresentString(contact_phone_number_input_val)) {\n Notifier.showError(\n I18n.t(\"js.app.notifier.defaults.input_phone_no_invalid\"),\n )\n $submit_button.each((submit_btn_el) => {\n (submit_btn_el as HTMLInputElement).disabled = false\n })\n return\n }\n if (contact_phone_number_input_val == null || !isValidPhoneNumber(contact_phone_number_input_val)) {\n Notifier.showError(\n I18n.t(\"js.app.notifier.defaults.input_phone_no_invalid\"),\n )\n $submit_button.each((submit_btn_el) => {\n (submit_btn_el as HTMLInputElement).disabled = false\n })\n return\n }\n\n // Some hack to make flow happy zzz\n const valid_contact_email_address_input_val: string =\n contact_email_address_input_val || \"\"\n const valid_contact_phone_number_input_val: string =\n contact_phone_number_input_val || \"\"\n\n Promise.resolve()\n .then(() => {\n if (isSignedIn()) {\n return Promise.resolve()\n }\n\n return create_user({\n authentication_handle: local_contact_info_data.user_authentication_handle || valid_contact_email_address_input_val,\n email_address: valid_contact_email_address_input_val,\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 shortlist(listing_id, {\n show_auth_modal_on_fail: false,\n })\n return\n case CreateUserResultTypes.CONFLICT:\n return\n default:\n captureMessage(\n `unexpected/unhandled result_type: <${result_type}>`,\n {\n source_file_path:\n \"concepts/new_development_buildings/contact/request/box/components/remote_submit_form/index\",\n }\n )\n throw RejectionReasons.ERROR_REPORTED\n }\n })\n })\n .then(() => {\n return createListingContactRequests({\n user_authentication_handle: local_contact_info_data.user_authentication_handle || valid_contact_email_address_input_val,\n\n listing_id: listing_id,\n\n listing_contact_request_attributes: {\n requester_name:\n contact_name_input_val,\n\n requester_email_address:\n valid_contact_email_address_input_val,\n\n requester_phone_number:\n valid_contact_phone_number_input_val,\n\n additional_message:\n additional_message_val,\n },\n reject_promotions: reject_promotions_input_val,\n })\n })\n .then(({result_type, data}) => {\n if (result_type === createListingContactRequestResultTypes.UNAUTHENTICATED) {\n Notifier.showWarning(I18n.t(\"devise.failure.unauthenticated\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n if (result_type === createListingContactRequestResultTypes.UNAUTHORIZED) {\n Notifier.showWarning(I18n.t(\"app_resources.listing_contact_requests_create.errors.unauthorized\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n // Since enquiry already sent\n // We prevent further enquiries to be created\n // And no modal shown\n if (result_type === createListingContactRequestResultTypes.CONFLICTING_RESOURCE_ALREADY_EXISTS) {\n Notifier.showWarning(I18n.t(\"app_resources.listing_contact_requests_create.errors.conflicting_resource_already_exists\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n if (result_type === createListingContactRequestResultTypes.LISTING_CONTACT_EMAIL_OR_PHONE_ABSENT) {\n Notifier.showWarning(I18n.t(\"app_resources.listing_contact_requests_create.errors.contact_email_or_phone_absent\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n if (result_type === createListingContactRequestResultTypes.INVALID_CONTACT_PHONE_NUMBER) {\n Notifier.showError(I18n.t(\"app_resources.listing_contact_requests_create.errors.invalid_contact_phone_number\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n if (result_type !== createListingContactRequestResultTypes.SUCCESS) {\n captureMessage(\n `unexpected result_type from createListingContactRequests: ${result_type}`,\n {\n source_file_path:\n \"concepts/new_development_buildings/contact/request/box/components/remote_submit_form/index\",\n valid_contact_email_address_input_val:\n valid_contact_email_address_input_val,\n valid_contact_phone_number_input_val:\n valid_contact_phone_number_input_val,\n }\n )\n throw RejectionReasons.ERROR_REPORTED\n }\n\n return data\n })\n .then(() => {\n // Update cached contact info\n if (isPresentString(contact_name_input_val)) {\n setContactInfoData({\n contact_name: contact_name_input_val,\n })\n }\n if (isPresentString(contact_email_address_input_val)) {\n setContactInfoData({\n contact_email_address: contact_email_address_input_val,\n })\n }\n if (contact_phone_number_input_val != null && isPresentString(contact_phone_number_input_val) && isValidPhoneNumber(contact_phone_number_input_val)) {\n setContactInfoData({\n contact_phone_number: contact_phone_number_input_val,\n })\n }\n\n Goals.ListingContactByEmail.track(\n Goals.ListingContactByEmail.PropertyTypeLabels.OVERSEAS,\n )\n FacebookPixel_Event.trackCustomEvent(\"OP-EmailEnquiry\")\n\n Notifier.showSuccess(I18n.t(\"js.app.notifier.listing_contact_request.successfully_submitted\"))\n\n initShareModal({\n listing_id: listing_id,\n })\n })\n .catch((whatever) => {\n $submit_button.each((submit_btn_el) => {\n (submit_btn_el as HTMLInputElement).disabled = false\n })\n\n if (whatever === RejectionReasons.FAILURE_CASE_HANDLED) { return }\n\n Notifier.showError(I18n.t(\"js.app.notifier.defaults.form_submit_failed\"))\n\n if (whatever === RejectionReasons.ERROR_REPORTED) { return }\n\n if (whatever instanceof Error) {\n captureException(\n whatever,\n {\n source_file_path:\n \"concepts/new_development_buildings/contact/request/box/components/remote_submit_form/index\",\n }\n )\n return\n }\n\n captureMessage(\n `rejected w/ something unexpected: ${whatever}`,\n {\n source_file_path:\n \"concepts/new_development_buildings/contact/request/box/components/remote_submit_form/index\",\n }\n )\n })\n .done()\n })\n })\n\n Authentication_manager.on(\"sign_up:success:action\", () => {\n $reject_promotions_container.html(\"\")\n })\n\n Authentication_manager.on(\"sign_in:success:action\", () => {\n $reject_promotions_container.html(\"\")\n })\n })\n}\n\n\nexport default {init}\n","\nimport u from \"umbrellajs\"\n\nimport Modal from \"app/modal/show-modal\"\nimport YahooGemini_Conversions from \"app/tracking/yahoo_gemini/conversions\"\nimport Auth_state from \"app/authentication/state\"\nimport Auth_action from \"app/authentication/action\"\nimport Auth_callback_queue from \"app/authentication/callback_queue\"\nimport Goals from \"app/tracking/goals/track\"\nimport Notifier from \"app/notifier/index\"\nimport { Page } from \"app/multi_device\"\n\n\ninterface Selector {\n scope: string | HTMLElement\n contact_btns_container: string\n whatsapp_call_btn: string\n contact_call_btn: string\n}\ninterface InputSelector {\n scope?: string | HTMLElement\n contact_btns_container?: string\n whatsapp_call_btn?: string\n contact_call_btn?: string\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-new-development-contact-request-box\",\n contact_btns_container: \".cell-new-development-contact-request-box--contact-phone--buttons\",\n whatsapp_call_btn: \".cell-new-development-contact-request-box--contact-button--whatsapp\",\n contact_call_btn: \".cell-new-development-contact-request-box--contact-button--call\",\n}\n\n\nconst init = (selector?: InputSelector) => {\n const sele = Object.assign({}, DEFAULT_SELECTOR, selector)\n const $scope = u(sele.scope)\n const $contact_btns_container = $scope.find(sele.contact_btns_container)\n const $contact_call_btns = $scope.find(sele.contact_call_btn)\n const $whatsapp_call_btn = $scope.find(sele.whatsapp_call_btn)\n\n const message_no_login_no_contact_phone = $scope.data(\"message-no-login-no-contact-phone\")\n\n $whatsapp_call_btn.on(\"click\", (e) => {\n const $this = u(e.currentTarget as HTMLElement)\n\n e.preventDefault()\n\n if (Auth_state.isSignedOut()){\n Notifier.showWarning(message_no_login_no_contact_phone)\n Auth_action.showSignUpModal()\n\n const on_sign_in_event_listener = () => {\n window.location.href = $this.attr(\"href\")\n }\n\n const slot_name = `cell-new-development-contact-request-box--contact-button--whatsapp__${(new Date()).getTime()}`\n Auth_callback_queue.add(on_sign_in_event_listener, slot_name)\n\n // # If not signed in in 5 mins, no autobutton reveal\n setTimeout(() => {\n Auth_callback_queue.remove(slot_name)\n }, 5 * 60 * 1000)\n return\n }\n\n window.location.href = $this.attr(\"href\")\n })\n\n $contact_call_btns.on(\"click\", (e) => {\n e.preventDefault()\n\n YahooGemini_Conversions.SendPhoneEnquiry.track()\n\n if (Auth_state.isSignedOut()){\n Notifier.showWarning(message_no_login_no_contact_phone)\n Auth_action.showSignUpModal()\n\n const on_sign_in_event_listener = () => {\n if (Page.isForDesktop()){\n e.preventDefault()\n\n $contact_btns_container.addClass(\"show_number\")\n }else{\n Modal.hideTopModal()\n Modal.showModalWithContent(\n $scope.find(\"#modal-cell-new-development-contact-request-box--contact-phone--buttons\").html(),\n {customContent: true, hideOverflowMobileFixClass: true}\n )\n }\n\n Goals.ListingContactSuccessByPhone.track(\n Goals.ListingContactSuccessByPhone.PropertyTypeLabels.OVERSEAS,\n )\n }\n\n const slot_name = `cell-new-development-contact-request-box__show_contact_phone__${(new Date()).getTime()}`\n Auth_callback_queue.add(on_sign_in_event_listener, slot_name)\n\n // # If not signed in in 5 mins, no autobutton reveal\n setTimeout(() => {\n Auth_callback_queue.remove(slot_name)\n }, 5 * 60 * 1000)\n return\n }\n\n if (Page.isForDesktop()){\n e.preventDefault()\n\n $contact_btns_container.addClass(\"show_number\")\n }else{\n Modal.hideTopModal()\n Modal.showModalWithContent(\n $scope.find(\"#modal-cell-new-development-contact-request-box--contact-phone--buttons\").html(),\n {customContent: true, hideOverflowMobileFixClass: true}\n )\n }\n\n Goals.ListingContactSuccessByPhone.track(\n Goals.ListingContactSuccessByPhone.PropertyTypeLabels.OVERSEAS,\n )\n })\n}\n\nexport default {init}\n","\nimport u from \"umbrellajs\"\n\nimport ContactInfo from \"./components/contact_info/index\"\nimport ContactInfoPrefilling from \"./components/contact_info_prefilling/index\"\nimport SendSpaciousEnquiryButton from \"./components/send_spacious_enquiry_button/index\"\nimport RemoteSubmitForm from \"./components/remote_submit_form/index\"\nimport ShowPhoneNumberButton from \"./components/show_phone_number_button/index\"\n\nconst CELL_CLASS_NAME = \"cell-new-development-contact-request-box\"\nconst CELL_INITIALIZED_CLASS_NAME = `${CELL_CLASS_NAME}--js-spacious-initialized`\n\nconst init = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n\n if (el.classList.contains(CELL_INITIALIZED_CLASS_NAME)) { return }\n\n ContactInfo.init({scope: el})\n ContactInfoPrefilling.init({scope: el})\n SendSpaciousEnquiryButton.init({scope: el})\n ShowPhoneNumberButton.init({scope: el})\n RemoteSubmitForm.init({scope: el})\n\n el.classList.add(CELL_INITIALIZED_CLASS_NAME)\n })\n}\n\nexport default {\n init,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\n\nimport I18n from \"plugins/i18n-js\"\nimport * as Routes from \"plugins/js-routes\"\n// endregion External Modules\n\n// Private Modules\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// Private Modules\n\n// region Public Components\nimport Carousel from \"concepts/buildings/images/carousel/index\"\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst DEFAULT_SELECTOR = {\n scope: \".cell--buildings--floorplan--with-photo\",\n overlay: \".page-section--overseas-real-estate-projects-floorplan-photos--overlay\",\n photo: \".page-section--overseas-real-estate-projects-floorplan-photos-section_photo\",\n close_btn: \".page-section--overseas-real-estate-projects-floorplan-photos--overlay__close-btn\",\n}\n\nconst init = () => {\n const $scope = u(DEFAULT_SELECTOR.scope)\n const $overlay = u(DEFAULT_SELECTOR.overlay)\n const $photo = u(DEFAULT_SELECTOR.photo)\n const $close_btn = u(DEFAULT_SELECTOR.close_btn)\n\n $photo.on(\"click\", (e) => {\n const $this = u(e.currentTarget as HTMLElement)\n const building_id = $this.data(\"building-id\")\n openCarousel(building_id)\n })\n\n $close_btn.on(\"click\", () =>\n $overlay.each((el) => {\n el.style.display = \"none\"\n })\n )\n\n function openCarousel(building_id: number | string) {\n $overlay.each((el) => {\n el.style.display = \"initial\"\n })\n\n q_ajax_3({\n // # The only path that cannot be generated from current url\n url: Routes.floor_plans_building_path(I18n.locale, building_id),\n method: \"GET\",\n dataType: \"html\",\n })\n .then(({data}) => {\n $overlay.find(\".page-section--overseas-real-estate-projects-floorplan-photos--overlay__body\").html(data)\n Carousel.init()\n })\n .done()\n }\n}\n\nexport default {init}\n"],"file":"assets/index-XG6ReXbT.js"}