{"version":3,"file":"base-DaZW3EJz.js","sources":["../../../app/assets/javascripts/components/dropdown_menu/base.ts"],"sourcesContent":["\nimport $ from \"jquery\"\nimport log from \"plugins/loglevel/index\"\nimport {EventEmitter} from \"events\"\n\nexport interface Selector {\n scope: string | Element | JQuery\n main: string | Element | JQuery\n\n min_select: string | Element | JQuery\n max_select: string | Element | JQuery\n}\nexport interface InputSelector {\n scope?: string | Element | JQuery\n main?: string | Element | JQuery\n\n min_select?: string | Element | JQuery\n max_select?: string | Element | JQuery\n}\nconst DEFAULT_SELECTOR = {\n scope: \".cell-listing-filter\",\n main: \"#filter-option-price-container\",\n\n min_select: \".filter-option-min\",\n max_select: \".filter-option-max\",\n}\n\n\ninterface Options {\n run_post_initialization: boolean\n}\ninterface InputOptions {\n run_post_initialization?: boolean\n}\nconst DefaultOptions = {\n run_post_initialization: true,\n}\n\n\nclass MinMaxSelect extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $el: JQuery\n\n protected $min_select: JQuery\n protected $max_select: JQuery\n\n constructor(selector?: InputSelector, options?: InputOptions) {\n const opts: Options = Object.assign({}, DefaultOptions, options)\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n this.$scope = $(this.selector.scope)\n\n this.$el = this.$scope.find(this.selector.main)\n\n this.$min_select = this.$el.find(this.selector.min_select)\n this.$max_select = this.$el.find(this.selector.max_select)\n\n this.renewMaxOptions()\n\n if (this.$el.length === 0){\n log.error(`scope: ${this.selector.scope}, main: ${this.selector.main}`)\n throw new Error(\"two select init with null element\")\n }\n\n if (opts.run_post_initialization) {\n this.bind_action()\n }\n }\n\n public reset(){\n this.$min_select.val(\"\")\n this.$max_select.val(\"\")\n this.renewMaxOptions()\n }\n public isDefault(){\n return [this.$max_select, this.$min_select].every(($el) => {\n const selected = $el.find(\"option:selected\")\n const first = $el.find(\"option:first\")\n return selected.length === 1 && selected.is(first)\n })\n }\n public count(){\n return [this.$max_select, this.$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 protected bind_action(): void{\n this.$el.on(\"change\", (e) => {\n this.onChange(e)\n })\n }\n protected onChange(e: Event){\n const target = e.target\n const min_value = parseInt(this.$min_select.val(), 10) || null\n const max_value = parseInt(this.$max_select.val(), 10) || null\n\n if ( min_value !== null && max_value !== null && (min_value > max_value)){\n this.updateMinGtMax()\n }\n if (this.$min_select.is(target)){\n this.renewMaxOptions()\n }\n }\n protected updateMinGtMax(){\n const min_value = parseInt(this.$min_select.val(), 10)\n this.$max_select.val(min_value)\n }\n protected renewMaxOptions(){\n const min_value = parseInt(this.$min_select.val(), 10) || null\n\n // do nothing as min_value is set to `Minimum`\n if (min_value === null){\n // make all option available\n this.$max_select.find(\"option\").prop(\"disabled\", false)\n return\n }\n\n this.$max_select.find(\"option\").toArray().forEach((el) => {\n const val = parseInt((el as HTMLOptionElement).value, 10) || null\n if (val !== null){\n if (val < min_value){\n el.setAttribute(\"disabled\", \"disabled\")\n }\n else{\n el.removeAttribute(\"disabled\")\n }\n }\n })\n }\n}\n\n\nconst Factory = {\n create(selector?: InputSelector){\n return new MinMaxSelect(selector)\n },\n}\n\n\nexport {\n Factory as default,\n MinMaxSelect,\n DEFAULT_SELECTOR,\n}\n"],"names":["DEFAULT_SELECTOR","DefaultOptions","MinMaxSelect","EventEmitter","selector","options","opts","$","log","$el","selected","first","memo","e","target","min_value","max_value","el","val"],"mappings":"oHAmBA,MAAMA,EAAmB,CACvB,MAAQ,uBACR,KAAQ,iCAER,WAAY,qBACZ,WAAY,oBACd,EASMC,EAAiB,CACrB,wBAAyB,EAC3B,EAGA,MAAMC,UAAqBC,EAAAA,YAAa,CAStC,YAAYC,EAA0BC,EAAwB,CAC5D,MAAMC,EAAgB,OAAO,OAAO,CAAA,EAAIL,EAAgBI,CAAO,EAa3D,GAZE,MAAA,EAEN,KAAK,SAAW,OAAO,OAAO,CAAC,EAAGL,EAAkBI,CAAQ,EAC5D,KAAK,OAASG,EAAE,KAAK,SAAS,KAAK,EAEnC,KAAK,IAAM,KAAK,OAAO,KAAK,KAAK,SAAS,IAAI,EAE9C,KAAK,YAAc,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,EACzD,KAAK,YAAc,KAAK,IAAI,KAAK,KAAK,SAAS,UAAU,EAEzD,KAAK,gBAAgB,EAEjB,KAAK,IAAI,SAAW,EAClB,MAAAC,EAAA,MAAM,UAAU,YAAK,SAAS,MAAK,YAAW,YAAK,SAAS,KAAM,EAChE,IAAI,MAAM,mCAAmC,EAGjDF,EAAK,yBACP,KAAK,YAAY,CACnB,CAGK,OAAO,CACP,KAAA,YAAY,IAAI,EAAE,EAClB,KAAA,YAAY,IAAI,EAAE,EACvB,KAAK,gBAAgB,CAAA,CAEhB,WAAW,CACT,MAAA,CAAC,KAAK,YAAa,KAAK,WAAW,EAAE,MAAOG,GAAQ,CACnD,MAAAC,EAAWD,EAAI,KAAK,iBAAiB,EACrCE,EAAQF,EAAI,KAAK,cAAc,EACrC,OAAOC,EAAS,SAAW,GAAKA,EAAS,GAAGC,CAAK,CAAA,CAClD,CAAA,CAEI,OAAO,CACL,MAAA,CAAC,KAAK,YAAa,KAAK,WAAW,EAAE,OAAO,CAACC,EAAMH,IAAQ,CAC1D,MAAAC,EAAWD,EAAI,KAAK,iBAAiB,EACrCE,EAAQF,EAAI,KAAK,cAAc,EACrC,OAAIC,EAAS,SAAW,GAAKA,EAAS,GAAGC,CAAK,EACrCC,EAGFA,EAAO,GACb,CAAC,CAAA,CAGI,aAAmB,CAC3B,KAAK,IAAI,GAAG,SAAWC,GAAM,CAC3B,KAAK,SAASA,CAAC,CAAA,CAChB,CAAA,CAEO,SAASA,EAAS,CAC1B,MAAMC,EAASD,EAAE,OACXE,EAAY,SAAS,KAAK,YAAY,IAAI,EAAG,EAAE,GAAK,KACpDC,EAAY,SAAS,KAAK,YAAY,IAAI,EAAG,EAAE,GAAK,KAErDD,IAAc,MAAQC,IAAc,MAASD,EAAYC,GAC5D,KAAK,eAAe,EAElB,KAAK,YAAY,GAAGF,CAAM,GAC5B,KAAK,gBAAgB,CACvB,CAEQ,gBAAgB,CACxB,MAAMC,EAAY,SAAS,KAAK,YAAY,MAAO,EAAE,EAChD,KAAA,YAAY,IAAIA,CAAS,CAAA,CAEtB,iBAAiB,CACzB,MAAMA,EAAY,SAAS,KAAK,YAAY,IAAI,EAAG,EAAE,GAAK,KAG1D,GAAIA,IAAc,KAAK,CAErB,KAAK,YAAY,KAAK,QAAQ,EAAE,KAAK,WAAY,EAAK,EACtD,MAAA,CAGG,KAAA,YAAY,KAAK,QAAQ,EAAE,UAAU,QAASE,GAAO,CACxD,MAAMC,EAAM,SAAUD,EAAyB,MAAO,EAAE,GAAK,KACzDC,IAAQ,OACNA,EAAMH,EACLE,EAAA,aAAa,WAAY,UAAU,EAGtCA,EAAG,gBAAgB,UAAU,EAEjC,CACD,CAAA,CAEL"}