{"version":3,"file":"index-C0Z8iPiV.js","sources":["../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/currency_selector/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/price_dropdown/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/area_size_dropdown/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/categories_selector/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/countries_selector/index.ts","../../../node_modules/lodash/groupBy.js","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/cities_selector/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/share/box/components/copy_button/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/share/box/index.ts","../../../app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/index.ts"],"sourcesContent":["import {\n InputSelector as BaseInputSelector,\n JSSelectPicker,\n Selector as BaseSelector,\n} from \"components/js_selectpicker/base\"\n\n\ntype Selector = BaseSelector & {\n container: string\n}\n\ntype InputSelector = BaseInputSelector & {\n container?: string\n}\n\nconst default_selector = {\n scope: \".cell--buildings--overseas-marketing--filter--form__currency_wrapper\",\n main: \".cell--buildings--overseas-marketing--filter--form__currency\",\n arrow: \".select2-selection__arrow b[role=\\\"presentation\\\"]\",\n first_option: \"option:nth-of-type(1)\",\n container: \".select2-container\",\n}\n\n\nexport class CurrencySelector extends JSSelectPicker {\n protected selector: Selector\n\n protected $container: JQuery\n\n constructor(selector?: InputSelector) {\n const merged_selector = Object.assign({}, default_selector, selector)\n\n super(merged_selector)\n this.selector = merged_selector\n\n this.$container = this.$scope.find(this.selector.container)\n }\n\n public hkdSelected(): boolean {\n return this.$el.val() === \"HKD\"\n }\n\n protected onChange(val: unknown): void {\n this.emit(\"val_change\", val)\n }\n\n protected extra_select2_options(): Select2.Options {\n // https://stackoverflow.com/a/35895710/838346\n return {\n dropdownAutoWidth: true,\n width: \"auto\",\n }\n }\n}\n\n\nconst Factory = {\n create(selector?: InputSelector): CurrencySelector {\n return new CurrencySelector(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\nimport { Page } from \"app/multi_device\"\nimport isBlankStr from \"underscore.string/isBlank\"\nimport {\n PriceDropdown,\n InputSelector as BaseInputSelector,\n} from \"components/dropdown_menu/desktop/price_dropdown\"\nimport {\n CurrencySelector,\n Factory as CurrencySelectorFactory,\n} from \"../currency_selector/index\"\n\nexport type InputSelector = BaseInputSelector & {\n scope?: JQuery | string\n main?: JQuery | string\n min_select?: JQuery | string\n max_select?: JQuery | string\n toggle?: JQuery | string\n dropdown?: JQuery | string\n min_wrapper?: JQuery | string\n max_wrapper?: JQuery | string\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell--buildings--overseas-marketing--filter\",\n main: \".cell--buildings--overseas-marketing--filter--form__price-dropdown-container\",\n min_select: \".filter-option-min\",\n max_select: \".filter-option-max\",\n toggle: \".dropdown-with-input-toggle\",\n dropdown: \".dropdown-menu-with-input\",\n max_wrapper: \".filter-option--price-max\",\n min_wrapper: \".filter-option--price-min\",\n angle: \".btn i\",\n}\n\nexport class SAPriceDropdown extends PriceDropdown {\n protected name: string\n\n protected currency_selector?: CurrencySelector\n\n protected has_url_params = false\n\n constructor(selector?: InputSelector){\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n super(merged_selector)\n\n this.name = \"SA_page_price_dropdown_blueprint\"\n\n this.currency_selector = CurrencySelectorFactory.create()\n\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString)\n\n if (urlParams.get(\"overseas_properties_listing_search_criteria_set[maximum_price]\") || urlParams.get(\"overseas_properties_listing_search_criteria_set[minimum_price]\")) {\n this.has_url_params = true\n }\n }\n\n public show(): void {\n this.$el.addClass(\"shown\")\n }\n\n public hide(): void {\n this.$el.removeClass(\"shown\")\n }\n\n protected selected_currency_price_dropdown(): JQuery {\n return this.$dropdown.filter(\"[data-currency=\" + this.currency_selector?.val() + \"]\")\n }\n\n // override functions below for special case handling\n protected showDropdown(): void {\n this.selected_currency_price_dropdown().show()\n }\n protected hideDropdown(): void {\n this.$dropdown.hide()\n }\n protected updateMinChosenPlaceHolder(): void {\n const min_selected_el = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.min_select).find(\"option:selected\")\n if ( !isNaN( parseInt(min_selected_el.val(), 10) ) ){\n this.$min_wrapper.find(\"input\").attr(\"placeholder\", min_selected_el.text())\n }\n else{\n this.$min_wrapper.find(\"input\").attr(\"placeholder\", this.$min_select.data(\"placeholder\"))\n }\n }\n protected updateMaxChosenPlaceHolder(): void {\n const max_selected_el = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.max_select).find(\"option:selected\")\n if ( !isNaN( parseInt(max_selected_el.val(), 10) ) ){\n this.$max_wrapper.find(\"input\").attr(\"placeholder\", max_selected_el.text())\n }\n else{\n this.$max_wrapper.find(\"input\").attr(\"placeholder\", this.$max_select.data(\"placeholder\"))\n }\n }\n protected convertValueToLabel(): string {\n let min_value = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.min_select).val()\n let max_value = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.max_select).val()\n\n if (this.has_url_params) {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n\n min_value = (urlParams.get(\"overseas_properties_listing_search_criteria_set[minimum_price]\")?.toString())\n max_value = (urlParams.get(\"overseas_properties_listing_search_criteria_set[maximum_price]\")?.toString())\n\n this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.max_select).find(\"option[value=\" + max_value +\"]\").prop(\"selected\", true)\n this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.min_select).find(\"option[value=\" + min_value +\"]\").prop(\"selected\", true)\n\n this.has_url_params = false\n }\n\n if (!isBlankStr(min_value) && !isBlankStr(max_value)) {\n return `${this.convert(min_value)} - ${this.convert(max_value)}`\n }\n else if (!isBlankStr(min_value)){\n return `> ${this.convert(min_value)}`\n }\n else if ( !isBlankStr(max_value) ){\n return `< ${this.convert(max_value)}`\n }\n else {\n return this.$selected_text.data(\"original-text\")\n }\n }\n public count(): number {\n const min_select = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.min_select)\n const max_select = this.selected_currency_price_dropdown().find(DEFAULT_SELECTOR.max_select)\n\n return [max_select, min_select].reduce((memo, $el) => {\n const selected = $el.find(\"option:selected\")\n const first = $el.find(\"option:first\")\n if (selected.length === 1 && selected.is(first)){\n return memo\n }\n\n return memo + 1\n }, 0)\n\n }\n}\n\n\nconst Factory = {\n create(selector?: InputSelector): SAPriceDropdown {\n if (! Page.isForDesktop() && ! Page.isForTablet()){\n throw new Error(\"Desktop.PriceDropdownContainer called for incorrect page version\")\n }\n return new SAPriceDropdown(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\nimport { Page } from \"app/multi_device\"\nimport {\n AreaSizeDropdown,\n InputSelector as BaseInputSelector,\n} from \"components/dropdown_menu/desktop/area_size_dropdown\"\n\nexport type InputSelector = BaseInputSelector & {\n scope?: JQuery | string\n main?: JQuery | string\n min_select?: JQuery | string\n max_select?: JQuery | string\n toggle?: JQuery | string\n dropdown?: JQuery | string\n min_wrapper?: JQuery | string\n max_wrapper?: JQuery | string\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell--buildings--overseas-marketing--filter\",\n main: \".cell--buildings--overseas-marketing--filter--form__area-size-dropdown-container\",\n min_select: \".filter-option-min\",\n max_select: \".filter-option-max\",\n toggle: \".dropdown-with-input-toggle\",\n dropdown: \".dropdown-menu-with-input\",\n max_wrapper: \".filter-option--gross-max\",\n min_wrapper: \".filter-option--gross-min\",\n angle: \".btn i\",\n}\n\n\nexport class BuyRentDesktopAreaSizeDropdown extends AreaSizeDropdown {\n protected name: string\n\n constructor(selector?: InputSelector){\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n super(merged_selector)\n\n this.name = \"SA_page_area_size_dropdown_blueprint\"\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n if (! Page.isForDesktop() && ! Page.isForTablet()){\n throw new Error(\"Desktop.SA_area_size_dropdown.AreaSizeDropDown called for incorrect page version\")\n }\n return new BuyRentDesktopAreaSizeDropdown(selector)\n },\n}\n\nexport {\n Factory,\n Factory as default,\n}\n","\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\nimport {\n onClickOutside,\n} from \"plugins/vanilla-clickout\"\n\n\ninterface Selector {\n scope: string | JQuery\n main: string | JQuery\n menu: string | JQuery\n button: string | JQuery\n selected_text: string | JQuery\n selector: string | JQuery\n category_selector_item: string | JQuery\n}\ninterface InputSelector {\n scope?: string | JQuery\n main?: string | JQuery\n menu?: string | JQuery\n button?: string | JQuery\n selected_text?: string | JQuery\n selector?: string | JQuery\n category_selector_item?: string | JQuery\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell--buildings--overseas-marketing--filter\",\n main: \".cell--buildings--overseas-marketing--filter--form__categories\",\n menu: \".cell--buildings--overseas-marketing--filter--form__categories--menu\",\n button: \".cell--buildings--overseas-marketing--filter--form__categories--button\",\n selected_text: \".cell--buildings--overseas-marketing--filter--form--selected--text\",\n selector: \".cell--buildings--overseas-marketing--filter--form__categories-selector\",\n category_selector_item: \".cell--buildings--overseas-marketing--filter--form__categories-selector-item\",\n}\n\n\nexport class CategoriesSelector extends EventEmitter {\n protected selector: Selector\n protected $scope: JQuery\n protected $el: JQuery\n protected $button: JQuery\n protected $menu: JQuery\n protected $selector: JQuery\n protected $selected_text: JQuery\n protected $category_selector_item: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n this.$scope = $(this.selector.scope)\n this.$el = this.$scope.find(this.selector.main)\n this.$button = this.$el.find(this.selector.button)\n this.$menu = this.$el.find(this.selector.menu)\n this.$selector = this.$el.find(this.selector.selector)\n this.$selected_text = this.$el.find(this.selector.selected_text)\n this.$category_selector_item = this.$el.find(this.selector.category_selector_item)\n\n this.bind_action()\n this.created()\n }\n\n public getSelectedText(){\n return this.getSelectedItem().parents(\".radio\").find(\"label\").text()\n }\n public getSelectedValue(){\n return this.getSelectedItem().val()\n }\n\n public isDefault(): boolean {\n return this.getSelectedValue() === \"new_developments\"\n }\n\n public reset(): void {\n this.$el.find(\"input[type=radio]:radio[value=new_developments]\").prop(\"checked\", true)\n this.updateSelectedText()\n }\n\n protected onClick(): void {\n this.toggle()\n }\n protected toggle(){\n if (this.$menu.is(\":visible\")){\n this.close()\n }\n else{\n this.open()\n }\n return this\n }\n protected open(){\n this.$menu.show()\n return this\n }\n protected close(){\n this.$menu.hide()\n return this\n }\n protected onClickout(){\n this.close()\n }\n protected getSelectedItem(){\n return this.$category_selector_item.filter(\":checked\")\n }\n protected updateSelectedText(){\n this.$selected_text.text(this.getSelectedText())\n }\n protected bind_action(){\n this.$button.on(\"click\", () => {\n this.onClick()\n })\n\n this.$selector.on(\"change\", () => {\n this.updateSelectedText()\n this.onClickout()\n this.emit(\"val_change\")\n })\n\n onClickOutside(this.$el[0] as HTMLElement, () => {\n this.onClickout()\n })\n }\n protected created(){\n this.updateSelectedText()\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new CategoriesSelector(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\nimport _keyBy from \"lodash/keyBy\"\nimport _propertyOf from \"lodash/propertyOf\"\nimport $ from \"jquery\"\nimport {\n onClickOutside,\n} from \"plugins/vanilla-clickout\"\nimport \"multiple-select\"\nimport {EventEmitter} from \"events\"\n\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n\ninterface Selector {\n scope: string | Element | JQuery\n wrapper: string | Element | JQuery\n main: string | Element | JQuery\n data: string | Element | JQuery\n input: string | Element | JQuery\n checked: string | Element | JQuery\n container: string | Element | JQuery\n display_checked: string | Element | JQuery\n checked_group: string | Element | JQuery\n menu: string | Element | JQuery\n}\nexport interface InputSelector {\n scope?: string | Element | JQuery\n wrapper?: string | Element | JQuery\n main?: string | Element | JQuery\n data?: string | Element | JQuery\n input?: string | Element | JQuery\n checked?: string | Element | JQuery\n container?: string | Element | JQuery\n display_checked?: string | Element | JQuery\n checked_group?: string | Element | JQuery\n menu?: string | Element | JQuery\n}\n\nconst default_selector = {\n scope: \".cell--buildings--overseas-marketing--filter\",\n wrapper: \".cell--buildings--overseas-marketing--filter--form__countries_wrapper\",\n main: \".cell--buildings--overseas-marketing--filter--form__countries\",\n data: \".cell--buildings--overseas-marketing--filter__data-country-city\",\n input: \".ms-search input\",\n checked: \"input[type='checkbox']:checked\",\n container: \".ms-drop\",\n display_checked: \".ms-drop .ms-selected input[type='checkbox']:checked\",\n checked_group: \".ms-drop li.group input[type='checkbox']:checked\",\n menu: \".ms-drop ul\",\n}\n\nconst min_string = (str = \"\") => str.toLowerCase().replace(/\\s+/, \"\")\nconst is_substr = (str: string, substr: string) => str.indexOf(substr) >= 0\nconst getProperty = (obj: object, key_string: string) => {\n return key_string.split(\".\").reduce((scope, key) => _propertyOf(scope)(key), obj)\n}\n\n\nclass CountriesSelector extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $wrapper: JQuery\n protected $el: JQuery\n\n protected $data: JQuery\n protected height: number\n protected country_data: {\n [index: string]: {\n slug: string,\n name: string,\n }\n }\n\n protected $menu: JQuery\n protected $input: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$scope = $(this.selector.scope)\n\n this.$wrapper = (typeof this.selector.wrapper === \"string\") ?\n this.$scope.find(this.selector.wrapper) :\n this.$scope.find(this.selector.wrapper)\n\n this.$el = (typeof this.selector.main === \"string\") ?\n this.$wrapper.find(this.selector.main) :\n this.$wrapper.find(this.selector.main)\n\n this.$data = $(this.selector.data)\n\n this.height = Math.round(($(window).height() || 0) * 0.6)\n this.country_data = {}\n\n this.$menu = this.$scope.find(this.selector.menu)\n this.$input = this.$scope.find(this.selector.input)\n\n if (this.$el.length !== 1){\n captureMessage(\n `this.$el initialize with 0 / >1 element is unexpected: ${this.$el.length}`,\n {\n source_file_path: \"app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/cities_selector/index.ts\",\n element_paths: this.$el.toArray().map((suspect_el) => {\n const rightArrowParents = [] as string[]\n $(suspect_el).parents().addBack().not(\"html\").each((_idx, el) => {\n let entry = el.tagName.toLowerCase()\n if (el.id.length > 0) {\n entry += \"#\" + el.id.trim()\n }\n if (el.className) {\n entry += \".\" + el.className.trim().replace(/ /g, \".\")\n }\n rightArrowParents.push(entry)\n })\n return rightArrowParents.join(\" \")\n }).join(\"\\n\"),\n }\n )\n throw new Error(\"cities_selector initialize with 0 / >1 element\")\n }\n\n this.created()\n this.bind_action()\n\n return this\n }\n\n public isDefault(){\n return this.$wrapper.find(\"input[type=\\\"checkbox\\\"]:checked\").length === 0\n }\n public reset(){\n this.$el.find(\"option\").prop(\"selected\", false)\n this.$el.multipleSelect(\"uncheckAll\")\n }\n public selected_items(){\n return this.$el.val()\n }\n\n protected created(){\n try{\n this.country_data = _keyBy(JSON.parse(this.$data.text()).countries, \"slug\")\n }\n catch (e){\n this.country_data = {}\n }\n\n this.$el.multipleSelect(this.multipleSelectOptions())\n\n this.$menu.height(this.height)\n\n this.close()\n return this\n }\n\n protected bind_action(){\n this.$el.on(\"change\", () => {\n this.onChange()\n })\n this.$input.on(\"keydown\", (e) => {\n this.onKeyDown(e)\n })\n onClickOutside(this.$scope[0] as HTMLElement, () => {\n this.onClickout()\n })\n }\n protected filterFunction(item: {value: string}, text: string){\n const key = item.value\n return [\n getProperty(this.country_data, `${key}.name_in_current_locale`),\n ].some((name) => {\n return is_substr(min_string(name), min_string(text))\n })\n }\n protected groupFilterFunction(item: {parentElement: {textContent: string}}, text: string){\n return is_substr(min_string(item.parentElement.textContent), text)\n }\n protected close(){\n this.$el.multipleSelect(\"close\")\n }\n protected onClick(){\n this.emit(\"click\")\n }\n protected onChange(){\n this.emit(\"val_change\")\n }\n protected onClear(){\n this.$el.multipleSelect(\"filter\")\n }\n protected onClickout(){\n this.close()\n }\n protected onKeyDown(e){\n if (e.keyIdentifier === \"Enter\" || e.keyCode === 13){\n e.preventDefault()\n }\n }\n\n protected multipleSelectOptions(): object {\n const that = this\n\n return {\n multiple: true,\n width: \"100%\",\n filter: true,\n clearAll: I18n.t(\"simple_form.placeholders.listing_search.clear_all\"),\n clearAllPosition: \"after_selected_area\",\n pickoutSelected: true,\n selectAll: false,\n multipleSelectFilteredOnly: false,\n multipleWidth: 200,\n maxHeight: \"auto\",\n minimumCountSelected: 0,\n allSelected: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.countries.all_items_selected\"),\n countSelected: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.countries.n_items_selected\"),\n placeholder: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.criteria.country\"),\n input_placeholder: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.buttons.search_countries\"),\n noMatchesFound: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.countries.none_found\"),\n filterFunction: (item, text) => {\n return this.filterFunction(item, text)\n },\n groupFilterFunction(item, text){\n return that.groupFilterFunction(item, text)\n },\n onClick(){\n that.onClick()\n },\n onOptgroupClick(){\n that.onClick()\n },\n hasPNGArrow: false,\n }\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new CountriesSelector(Object.assign({}, default_selector, selector))\n },\n}\n\nexport {\n Factory,\n CountriesSelector,\n}\n","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nmodule.exports = groupBy;\n","\nimport _keyBy from \"lodash/keyBy\"\nimport _groupBy from \"lodash/groupBy\"\nimport _propertyOf from \"lodash/propertyOf\"\nimport $ from \"jquery\"\nimport {\n onClickOutside,\n} from \"plugins/vanilla-clickout\"\nimport \"multiple-select\"\nimport {EventEmitter} from \"events\"\n\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n\ninterface Selector {\n scope: string | Element | JQuery\n wrapper: string | Element | JQuery\n main: string | Element | JQuery\n data: string | Element | JQuery\n input: string | Element | JQuery\n checked: string | Element | JQuery\n container: string | Element | JQuery\n display_checked: string | Element | JQuery\n checked_group: string | Element | JQuery\n menu: string | Element | JQuery\n}\nexport interface InputSelector {\n scope?: string | Element | JQuery\n wrapper?: string | Element | JQuery\n main?: string | Element | JQuery\n data?: string | Element | JQuery\n input?: string | Element | JQuery\n checked?: string | Element | JQuery\n container?: string | Element | JQuery\n display_checked?: string | Element | JQuery\n checked_group?: string | Element | JQuery\n menu?: string | Element | JQuery\n}\n\nconst default_selector = {\n scope: \".cell--buildings--overseas-marketing--filter\",\n wrapper: \".cell--buildings--overseas-marketing--filter--form__cities_wrapper\",\n main: \".cell--buildings--overseas-marketing--filter--form__cities\",\n data: \".cell--buildings--overseas-marketing--filter__data-country-city\",\n input: \".ms-search input\",\n checked: \"input[type='checkbox']:checked\",\n container: \".ms-drop\",\n display_checked: \".ms-drop .ms-selected input[type='checkbox']:checked\",\n checked_group: \".ms-drop li.group input[type='checkbox']:checked\",\n menu: \".ms-drop ul\",\n}\n\nconst min_string = (str = \"\") => str.toLowerCase().replace(/\\s+/, \"\")\nconst is_substr = (str: string, substr: string) => str.indexOf(substr) >= 0\nconst getProperty = (obj: object, key_string: string) => {\n return key_string.split(\".\").reduce((scope, key) => _propertyOf(scope)(key), obj)\n}\n\n\nclass CitiesSelector extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $wrapper: JQuery\n protected $el: JQuery\n\n protected $data: JQuery\n protected height: number\n protected city_data: {\n [index: string]: {\n country_slug: string,\n id: string,\n name_en: string,\n name_zh_cn: string,\n name_zh_hk: string,\n name_zh_tw: string,\n name_in_current_locale: string,\n }\n }\n\n protected $menu: JQuery\n protected $input: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$scope = $(this.selector.scope)\n\n this.$wrapper = (typeof this.selector.wrapper === \"string\") ?\n this.$scope.find(this.selector.wrapper) :\n this.$scope.find(this.selector.wrapper)\n\n this.$el = (typeof this.selector.main === \"string\") ?\n this.$wrapper.find(this.selector.main) :\n this.$wrapper.find(this.selector.main)\n\n this.$data = $(this.selector.data)\n\n this.height = Math.round(($(window).height() || 0) * 0.6)\n this.city_data = {}\n\n this.$menu = this.$scope.find(this.selector.menu)\n this.$input = this.$scope.find(this.selector.input)\n\n if (this.$el.length !== 1){\n captureMessage(\n `this.$el initialize with 0 / >1 element is unexpected: ${this.$el.length}`,\n {\n source_file_path: \"app/assets/javascripts/concepts/buildings/overseas_marketing/filter_bar/desktop/cities_selector/index.ts\",\n element_paths: this.$el.toArray().map((suspect_el) => {\n const rightArrowParents = [] as string[]\n $(suspect_el).parents().addBack().not(\"html\").each((_idx, el) => {\n let entry = el.tagName.toLowerCase()\n if (el.id.length > 0) {\n entry += \"#\" + el.id.trim()\n }\n if (el.className) {\n entry += \".\" + el.className.trim().replace(/ /g, \".\")\n }\n rightArrowParents.push(entry)\n })\n return rightArrowParents.join(\" \")\n }).join(\"\\n\"),\n }\n )\n throw new Error(\"cities_selector initialize with 0 / >1 element\")\n }\n\n this.created()\n this.bind_action()\n\n return this\n }\n public lock_inputs(){\n // The dom elements are dynamic created and removed\n // Thus impossible to cache them\n this.$el.multipleSelect(\"disable\")\n return this.$el.\n find(\"input[type='checkbox'], input[type='text']\").\n prop( \"disabled\", true )\n }\n public unlock_inputs(){\n // The dom elements are dynamic created and removed\n // Thus impossible to cache them\n this.$el.multipleSelect(\"enable\")\n return this.$el.\n find(\"input[type='checkbox'], input[type='text']\").\n prop( \"disabled\", false )\n }\n public isDefault(){\n return this.$wrapper.find(\"input[type=\\\"checkbox\\\"]:checked\").length === 0\n }\n public reset(){\n this.$el.find(\"option\").prop(\"selected\", false)\n this.$el.multipleSelect(\"uncheckAll\")\n }\n\n public repopulate_city_options(country_slugs: string[] = []){\n this.$el.filter(\"select\").empty()\n\n const city_data_grouped_by_country = _groupBy(this.city_data, \"country_slug\")\n\n if (country_slugs.length > 0){\n Object.entries(city_data_grouped_by_country).forEach(([country_slug, city_data]) => {\n if (country_slugs.includes(country_slug)) {\n const $optgroup = $(\"\").attr(\"label\", this.country_data()[country_slug].name_in_current_locale)\n\n this.$el.filter(\"select\").append($optgroup)\n city_data.forEach((city, key) => {\n $optgroup.append($(\"\").attr(\"value\", city.id).text(city.name_in_current_locale))\n })\n }\n })\n this.unlock_inputs()\n }else{\n this.lock_inputs()\n }\n\n this.$el.multipleSelect(\"refresh\")\n\n // if (this.$el.find(\"option\").length > 0){\n // this.unlock_inputs()\n // }else{\n // this.lock_inputs()\n // }\n }\n\n protected parsed_city_country_data(){\n return JSON.parse(this.$data.text())\n }\n\n protected country_data(){\n return _keyBy(this.parsed_city_country_data().countries, \"slug\")\n }\n\n protected created(){\n try{\n this.city_data = _keyBy(this.parsed_city_country_data().cities, \"id\")\n }\n catch (e){\n this.city_data = {}\n }\n\n this.$el.multipleSelect(this.multipleSelectOptions())\n\n this.$menu.height(this.height)\n\n this.close()\n return this\n }\n\n\n protected bind_action(){\n this.$el.on(\"change\", () => {\n this.onChange()\n })\n this.$input.on(\"keydown\", (e) => {\n this.onKeyDown(e)\n })\n onClickOutside(this.$scope[0] as HTMLElement, () => {\n this.onClickout()\n })\n }\n protected filterFunction(item: {value: string}, text: string){\n const key = item.value\n return [\n getProperty(this.city_data, `${key}.name_en`),\n getProperty(this.city_data, `${key}.name_zh_tw`),\n getProperty(this.city_data, `${key}.name_zh_cn`),\n ].some((name) => {\n return is_substr(min_string(name), min_string(text))\n })\n }\n protected groupFilterFunction(item: {parentElement: {textContent: string}}, text: string){\n return is_substr(min_string(item.parentElement.textContent), text)\n }\n protected close(){\n this.$el.multipleSelect(\"close\")\n }\n protected onClick(){\n this.emit(\"click\")\n }\n protected onChange(){\n this.emit(\"val_change\")\n }\n protected onClear(){\n this.$el.multipleSelect(\"filter\")\n }\n protected onClickout(){\n this.close()\n }\n protected onKeyDown(e){\n if (e.keyIdentifier === \"Enter\" || e.keyCode === 13){\n e.preventDefault()\n }\n }\n\n protected multipleSelectOptions(): object {\n const that = this\n\n return {\n multiple: true,\n width: \"100%\",\n filter: true,\n clearAll: I18n.t(\"simple_form.placeholders.listing_search.clear_all\"),\n clearAllPosition: \"after_selected_area\",\n pickoutSelected: true,\n selectAll: false,\n multipleSelectFilteredOnly: false,\n multipleWidth: 200,\n maxHeight: \"auto\",\n minimumCountSelected: 0,\n allSelected: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.cities.all_items_selected\"),\n countSelected: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.cities.n_items_selected\"),\n placeholder: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.criteria.city\"),\n input_placeholder: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.buttons.search_cities\"),\n noMatchesFound: I18n.t(\"concepts.buildings.overseas_marketing.filter_bar.placeholder.cities.none_found\"),\n filterFunction: (item, text) => {\n return this.filterFunction(item, text)\n },\n groupFilterFunction(item, text){\n return that.groupFilterFunction(item, text)\n },\n onClick(){\n that.onClick()\n },\n onOptgroupClick(){\n that.onClick()\n },\n hasPNGArrow: false,\n }\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new CitiesSelector(Object.assign({}, default_selector, selector))\n },\n}\n\nexport {\n Factory,\n CitiesSelector,\n}\n","import {\n CopyBtn,\n InputSelector as BaseInputSelector,\n} from \"components/buttons/copy_btn\"\nimport Notifier from \"app/notifier\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n\nconst default_selector = {\n button: \".cell--buildings-overseas-marketing--share--box--url-share\",\n}\n\n\nclass CopyUrlButtonBluePrint extends CopyBtn {\n constructor(selector: BaseInputSelector){\n const merged_selector = Object.assign({}, default_selector, selector)\n super(merged_selector)\n }\n\n protected onSuccess(e: ClipboardJS.Event){\n Notifier.showSuccess(I18n.t(\"concepts.buildings.overseas_marketing.share.notifier.url_copied\"), 3000)\n super.onSuccess(e)\n }\n}\n\nconst Factory = {\n create(selector: BaseInputSelector){\n return new CopyUrlButtonBluePrint(selector)\n },\n}\n\nexport {\n Factory as default,\n Factory,\n}\n","\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\nimport CopyButton from \"./components/copy_button/index\"\n\n\ninterface Selector {\n main: string\n wechat_btn: string\n wechat_close: string\n url_share: string\n}\ninterface InputSelector {\n main?: string\n wechat_btn?: string\n wechat_close?: string\n url_share?: string\n}\n\nconst default_selector = {\n main: \".cell--buildings-overseas-marketing--share--box\",\n wechat_btn: \".cell--buildings-overseas-marketing--share--box--wechat-button\",\n wechat_close: \".cell--buildings-overseas-marketing--share--box--wechat-overlay--close\",\n url_share: \".cell--buildings-overseas-marketing--share--box--url-share\",\n}\n\n\nclass ListingShareModal extends EventEmitter {\n private selector: Selector\n private $el: JQuery\n private $wechat_btn: JQuery\n private $wechat_close: JQuery\n private $url_share: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, default_selector, selector)\n this.$el = $(this.selector.main)\n this.$el = $(this.selector.main)\n this.$wechat_btn = this.$el.find(this.selector.wechat_btn)\n this.$wechat_close = this.$el.find(this.selector.wechat_close)\n\n this.$url_share = this.$el.find(this.selector.url_share)\n\n this.bind_action()\n }\n\n protected bind_action(){\n this.$wechat_btn.on(\"click\", (e) => {\n e.preventDefault()\n $(\"body\").addClass(\"page--filter--js-expanded\")\n this.$el.addClass(\"cell--buildings-overseas-marketing--share--box--wechat-show\")\n })\n\n this.$wechat_close.on(\"click\", (e) => {\n e.preventDefault()\n $(\"body\").removeClass(\"page--filter--js-expanded\")\n this.$el.removeClass(\"cell--buildings-overseas-marketing--share--box--wechat-show\")\n })\n\n this.$url_share.each((_idx, link) => {\n const $link = $(link)\n CopyButton.create({\n scope: this.$el,\n button: $link,\n })\n })\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new ListingShareModal(selector)\n },\n}\n\nexport {\n Factory as default,\n Factory,\n}\n","\nimport $ from \"jquery\"\nimport serialize from \"form-serialize\"\nimport { EventEmitter } from \"events\"\n\nimport {\n SAPriceDropdown as PriceDropdown,\n Factory as PriceDropdownFactory,\n} from \"./price_dropdown/index\"\nimport {\n BuyRentDesktopAreaSizeDropdown,\n Factory as AreaSizeDropdownFactory,\n} from \"./area_size_dropdown/index\"\nimport {\n CategoriesSelector,\n Factory as CategoriesSelectorFactory,\n} from \"./categories_selector/index\"\nimport {\n CurrencySelector,\n Factory as CurrencySelectorFactory,\n} from \"./currency_selector/index\"\nimport {\n CountriesSelector,\n Factory as CountriesSelectorFactory,\n} from \"./countries_selector/index\"\nimport {\n Factory as CitiesSelectorFactory,\n CitiesSelector,\n} from \"./cities_selector/index\"\n\nimport param from \"jquery-param\"\nimport URI from \"urijs\"\n\nimport q_ajax_3 from \"app/utils/q_ajax/q_ajax_3\"\nimport Modal from \"app/modal/show-modal\"\n\nimport BuildingsOverseasMarketingShareBox from \"concepts/buildings/overseas_marketing/share/box\"\nimport I18n from \"plugins/i18n-js\"\nimport * as Routes from \"plugins/js-routes\"\n\n\ninterface Selector {\n main: string | JQuery\n form: string | JQuery\n countries_selector: string | JQuery\n cities_selector: string | JQuery\n\n share_btn: string | JQuery\n reset_btn: string | JQuery\n}\nexport interface InputSelector {\n main?: string | JQuery\n form?: string | JQuery\n countries_selector?: string | JQuery\n cities_selector?: string | JQuery\n\n share_btn?: string | JQuery\n reset_btn?: string | JQuery\n}\nconst DEFAULT_SELECTOR = {\n main: \".cell--buildings--overseas-marketing--filter\",\n form: \".cell--buildings--overseas-marketing--filter--form\",\n countries_selector: \".cell--buildings--overseas-marketing--filter--form__countries\",\n cities_selector: \".cell--buildings--overseas-marketing--filter--form__cities\",\n\n share_btn: \".cell--buildings--overseas-marketing--filter--form-share\",\n reset_btn: \".cell--buildings--overseas-marketing--filter--form-reset\",\n}\n\n\nconst FILTER_CHANGE = \"with-state-filter-changed\"\nconst INPUT_DISABLE = \"with-input-disabled\"\n\n\nexport class DesktopFilter extends EventEmitter {\n protected selector: Selector\n\n protected $el: JQuery\n protected $countries_selector?: JQuery\n protected $cities_selector?: JQuery\n\n protected $reset_btn?: JQuery\n protected $share_btn?: JQuery\n\n protected $form?: JQuery\n\n protected price_dropdown?: PriceDropdown\n protected area_size_dropdown?: BuyRentDesktopAreaSizeDropdown\n protected categories_selector?: CategoriesSelector\n\n protected currency_selector?: CurrencySelector\n protected cities_selector?: CitiesSelector\n protected countries_selector?: CountriesSelector\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n this.$el = $(this.selector.main)\n\n if (! this._is_noop_mode()) {\n this.$reset_btn = this.$el.find(this.selector.reset_btn)\n this.$share_btn = this.$el.find(this.selector.share_btn)\n\n this.$form = this.$el.find(this.selector.form)\n this.$countries_selector = this.$el.find(this.selector.countries_selector)\n this.$cities_selector = this.$el.find(this.selector.cities_selector)\n\n this.price_dropdown = PriceDropdownFactory.create({scope: this.$el})\n this.area_size_dropdown = AreaSizeDropdownFactory.create({scope: this.$el})\n this.categories_selector = CategoriesSelectorFactory.create({scope: this.$el})\n\n this.currency_selector = CurrencySelectorFactory.create()\n\n if (this.$countries_selector.length > 0) {\n this.countries_selector = CountriesSelectorFactory.create({\n scope: this.$el,\n main: this.$countries_selector,\n })\n }\n\n if (this.$cities_selector.length > 0) {\n this.cities_selector = CitiesSelectorFactory.create({\n scope: this.$el,\n main: this.$cities_selector,\n })\n }\n }\n\n this.created()\n this.bind_action()\n }\n\n public getSelectedText(): string {\n if (this._is_noop_mode()) { return \"\" }\n if (this.categories_selector == null) { return \"\" }\n\n return this.categories_selector.getSelectedText()\n }\n public get_form_data(): unknown {\n if (this.$form == null) { return {} }\n\n return serialize((this.$form[0] as HTMLFormElement), {hash: true}) || {}\n }\n public setAsLoaded(): void {\n this.$el.removeClass(INPUT_DISABLE)\n }\n public get_form_url(): string {\n if (this.$form == null) { return \"\" }\n\n return this.$form.attr(\"action\")\n }\n public setAsLoading(): void {\n this.$el.addClass(INPUT_DISABLE)\n }\n public getSelectedCategory(): void {\n if (this._is_noop_mode()) { return }\n if (this.categories_selector == null) { return }\n\n return this.categories_selector.getSelectedValue()\n }\n protected created(): void {\n this.toggleFilterStatus()\n this.togglePriceDropdown()\n\n if (this.countries_selector){\n this.cities_selector?.repopulate_city_options()\n }\n }\n protected bind_action(): void {\n if (this._is_noop_mode()) { return }\n\n if (this.price_dropdown == null) { return }\n this.price_dropdown.on(\"val_change\", () => {\n this.toggleFilterStatus()\n this.emit(\"val_change\")\n })\n if (this.area_size_dropdown == null) { return }\n this.area_size_dropdown.on(\"val_change\", () => {\n this.toggleFilterStatus()\n this.emit(\"val_change\")\n })\n if (this.categories_selector == null) { return }\n this.categories_selector.on(\"val_change\", () => {\n this.toggleFilterStatus()\n this.emit(\"category_change\")\n })\n if (this.$reset_btn == null) { return }\n this.$reset_btn.on(\"click\", (e) => {\n e.preventDefault()\n this.onResetClick()\n })\n if (this.$share_btn == null) { return }\n this.$share_btn.on(\"click\", (e) => {\n e.preventDefault()\n this.onShareClick()\n })\n\n this.currency_selector?.on(\"val_change\", () => {\n this.togglePriceDropdown()\n this.toggleFilterStatus()\n this.emit(\"val_change\")\n })\n\n this.cities_selector?.on(\"val_change\", () => {\n this.toggleFilterStatus()\n this.emit(\"val_change\")\n })\n\n if (this.countries_selector){\n this.countries_selector.on(\"val_change\", () => {\n this.toggleFilterStatus()\n this.cities_selector?.repopulate_city_options(this.countries_selector?.selected_items() || [])\n })\n }\n }\n protected togglePriceDropdown(): void {\n if (this.currency_selector == null) { return }\n if (this.price_dropdown == null) { return }\n\n this.price_dropdown.show()\n this.price_dropdown.reset()\n }\n protected onShareClick(): unknown {\n const overseas_properties_listing_search_criteria_set_params =\n (this.get_form_data() as any).overseas_properties_listing_search_criteria_set\n Modal.showLoadingIndicator()\n\n if (overseas_properties_listing_search_criteria_set_params[\"spacious_country_slugs\"]) {\n overseas_properties_listing_search_criteria_set_params[\"spacious_country_slugs\"] = (overseas_properties_listing_search_criteria_set_params[\"spacious_country_slugs\"]).toString()\n }\n const url_object = URI(Routes.apps_spacious_website_partials_city_level_overseas_properties_landing_page_share_modal_path())\n url_object.query(\n param({\n locale: I18n.locale,\n overseas_properties_listing_search_criteria_set: overseas_properties_listing_search_criteria_set_params,\n })\n )\n\n return q_ajax_3({\n url: url_object.toString(),\n method: \"GET\",\n dataType: \"HTML\",\n })\n .then(({data}) => {\n Modal.hideTopModal()\n Modal.showModalWithContent(data)\n BuildingsOverseasMarketingShareBox.create()\n })\n }\n protected toggleFilterStatus(): void {\n if (this.count() === 0){\n this.$el.removeClass(FILTER_CHANGE)\n }\n else{\n this.$el.addClass(FILTER_CHANGE)\n }\n }\n protected count(): number {\n if (this._is_noop_mode()) { return 0 }\n\n let count = 0\n\n count += this.price_dropdown?.count() || 0\n count += this.area_size_dropdown?.count() || 0\n\n if (this.countries_selector && !this.countries_selector.isDefault()) {\n count += 1\n }\n\n if (this.cities_selector && !this.cities_selector.isDefault()) {\n count += 1\n }\n\n if (this.categories_selector && !this.categories_selector.isDefault()) {\n count += 1\n }\n\n return count\n }\n protected reset(): void {\n if (this.price_dropdown == null) { return }\n if (this.area_size_dropdown == null) { return }\n\n this.price_dropdown.reset()\n this.area_size_dropdown.reset()\n this.cities_selector?.reset()\n this.countries_selector?.reset()\n this.categories_selector?.reset()\n }\n protected onValChange(): void {\n this.toggleFilterStatus()\n }\n protected onResetClick(): void {\n this.reset()\n this.toggleFilterStatus()\n this.emit(\"val_change\")\n }\n\n protected _is_noop_mode(): boolean {\n return this.$el.length === 0\n }\n}\n\nconst Factory = {\n _instance: null as null | DesktopFilter,\n instance(selector?: InputSelector): null | DesktopFilter {\n if (this._instance != null) { return this._instance }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector): DesktopFilter {\n return new DesktopFilter(selector)\n },\n}\n\nexport {\n Factory,\n}\n"],"names":["default_selector","CurrencySelector","JSSelectPicker","selector","merged_selector","val","Factory","DEFAULT_SELECTOR","SAPriceDropdown","PriceDropdown","CurrencySelectorFactory","queryString","urlParams","_a","min_selected_el","max_selected_el","min_value","max_value","_b","isBlankStr","min_select","memo","$el","selected","first","Page","BuyRentDesktopAreaSizeDropdown","AreaSizeDropdown","CategoriesSelector","EventEmitter","$","onClickOutside","min_string","str","is_substr","substr","getProperty","obj","key_string","scope","key","_propertyOf","CountriesSelector","captureMessage","suspect_el","rightArrowParents","_idx","el","entry","_keyBy","item","text","name","that","I18n","baseAssignValue","require$$0","createAggregator","require$$1","objectProto","hasOwnProperty","groupBy","result","value","groupBy_1","CitiesSelector","country_slugs","city_data_grouped_by_country","_groupBy","country_slug","city_data","$optgroup","city","CopyUrlButtonBluePrint","CopyBtn","Notifier","ListingShareModal","link","$link","CopyButton","FILTER_CHANGE","INPUT_DISABLE","DesktopFilter","PriceDropdownFactory","AreaSizeDropdownFactory","CategoriesSelectorFactory","CountriesSelectorFactory","CitiesSelectorFactory","serialize","e","overseas_properties_listing_search_criteria_set_params","Modal","url_object","URI","Routes.apps_spacious_website_partials_city_level_overseas_properties_landing_page_share_modal_path","param","q_ajax_3","data","BuildingsOverseasMarketingShareBox","count","_c"],"mappings":"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","x_google_ignoreList":[5]}