{"version":3,"file":"5174.js?id=2f27d8ea3d1bba3f","mappings":"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","sources":["webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue?216a","webpack://website-js/./src/models/Filter.ts","webpack://website-js/./src/utils/DOMUtils.ts","webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue","webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue?1a73","webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue?c3ea","webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue?7c07","webpack://website-js/./src/components/product-table/ProductTableHeaderItem.vue?51e2"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.product-table-header-item{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding-right:5px;position:relative}.product-table-header-item .uk-icon{flex:none;display:flex;align-items:center;justify-content:flex-end}.product-table-header-item .progress-linear{position:absolute;left:-10px;top:-10px;right:-10px}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import DropdownItem from './DropdownItem';\r\nimport { ProductSearchResultProduct } from './Product';\r\n\r\nexport interface FilterModel {\r\n rootcategory?: string;\r\n categories?: string[];\r\n includedescendantcategories?: boolean;\r\n fields?: FilterModelField[];\r\n selections?: FilterRequestSelection[];\r\n offset?: number;\r\n count?: number;\r\n searchphrase?: string;\r\n totalcount?: number;\r\n hitcount?: number;\r\n hits?: FilterModelHit[];\r\n sortoptions?: SortOption[];\r\n restrictdoctypes?: string[];\r\n translations?: { [key: string]: string };\r\n usefuzzymatch?: boolean;\r\n usecontentrelationsasselection?: boolean;\r\n contentrelationnodeid?: string;\r\n}\r\n\r\nexport interface FilterModelHit {\r\n id: string;\r\n docId: number;\r\n title: string;\r\n score: number;\r\n fields: { [key: string]: string[] };\r\n metadata: HitMetaData;\r\n type: string;\r\n}\r\n\r\nexport interface HitMetaData {\r\n id: string;\r\n title: string;\r\n image: string;\r\n url: string;\r\n product: ProductSearchResultProduct;\r\n relatedid?: string;\r\n}\r\n\r\nexport interface FieldValueOption {\r\n value: string;\r\n label?: string;\r\n count: number;\r\n}\r\n\r\nexport interface FilterRequestSelection {\r\n path: string;\r\n label?: string;\r\n values?: string[];\r\n minvalue?: number | null;\r\n maxvalue?: number | null;\r\n}\r\n\r\nexport interface FilterModelField {\r\n path: string;\r\n type: CustomIndexConfigFieldType;\r\n label?: string;\r\n values?: FieldValueOption[];\r\n treevalues?: any;\r\n minvalue?: number | null;\r\n maxvalue?: number | null;\r\n minmaxvatrate?: number | null;\r\n maxcount?: number | null;\r\n}\r\n\r\nexport interface SortOption {\r\n field: string;\r\n reverse: boolean;\r\n type: SortOptionType;\r\n}\r\n\r\nexport enum SortOptionType {\r\n SCORE = 0,\r\n DOC = 1,\r\n STRING = 3,\r\n INT = 4,\r\n FLOAT = 5,\r\n LONG = 6,\r\n DOUBLE = 7,\r\n SHORT = 8,\r\n CUSTOM = 9,\r\n BYTE = 10,\r\n STRING_VAL = 11,\r\n}\r\n\r\nexport interface ProductListOptions {\r\n sortoptions: DropdownItem[];\r\n selectedsortoption: string;\r\n pagelimitoptions: number[];\r\n selectedpagelimitoption: number;\r\n}\r\n\r\nexport interface IndexInfoModel {\r\n indexconfig?: IndexInfoConfig;\r\n lastbuild?: Date;\r\n lastconsolidate?: Date;\r\n maxtimestamp?: Date;\r\n documentinfo?: IndexInfoDocument[];\r\n customindexconfig?: CustomIndexConfig;\r\n}\r\n\r\nexport interface IndexInfoConfig {\r\n fields: string[];\r\n languages: string[];\r\n}\r\n\r\nexport interface IndexInfoDocument {\r\n value: string;\r\n count: number;\r\n}\r\n\r\nexport interface CustomIndexConfig {\r\n fields: CustomIndexConfigField[];\r\n lastupdated: Date;\r\n}\r\n\r\nexport interface CustomIndexConfigField {\r\n field: string;\r\n type: CustomIndexConfigFieldType;\r\n}\r\n\r\nexport enum CustomIndexConfigFieldType {\r\n OTHER = 'OTHER', // -1,\r\n STRING = 'STRING', // 0,\r\n NUMBER = 'NUMBER', // 1,\r\n DATE = 'DATE', // 2,\r\n LIST = 'LIST', // 3\r\n TREE = 'TREE', // 4\r\n BOOLEAN = 'BOOLEAN', // 5\r\n STRING_LOCALIZABLE = 'STRING_LOCALIZABLE', // 6\r\n}\r\n","import axios, { AxiosResponse } from \"axios\";\r\nimport Vue from 'vue';\r\n\r\nexport function getScrollbarWidth() {\r\n if ((window as any).cbxScrollbarWidth) { return (window as any).cbxScrollbarWidth; }\r\n\r\n\r\n const outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n // @ts-ignore\r\n outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n const widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n const inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n const widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n outer.parentNode.removeChild(outer);\r\n\r\n return (window as any).cbxScrollbarWidth = widthNoScroll - widthWithScroll;\r\n}\r\n\r\nexport async function replaceContent(identifier: string, callback: () => void = null, dataCallback: (data: any) => void = null) {\r\n try {\r\n // fetch current location and replace the relevant section with remote content\r\n const resp: AxiosResponse = await axios.get(window.location.href);\r\n const targetContainer = document.querySelector(identifier);\r\n // create ephemeral container for complete html response\r\n const vueContainer = document.createElement('div');\r\n vueContainer.innerHTML = resp.data;\r\n if (typeof dataCallback === 'function')\r\n dataCallback(vueContainer);\r\n // extract section of interest and replace into target container\r\n const data = vueContainer.querySelector(identifier);\r\n if (data !== null) {\r\n targetContainer.replaceWith(data);\r\n }\r\n else {\r\n while (targetContainer.firstChild) {\r\n targetContainer.removeChild(targetContainer.firstChild);\r\n }\r\n }\r\n // create separate vue instance with copied root stuff and mount to section\r\n const extended = Vue.extend((window as any).app);\r\n new extended({\r\n i18n: (window as any).app.$i18n,\r\n data: (window as any).app.$data,\r\n mounted: function() {\r\n this.$nextTick(function () {\r\n if (typeof callback === 'function')\r\n callback();\r\n })\r\n }\r\n }).$mount(document.querySelector(identifier));\r\n }\r\n catch {\r\n // in case replacement fails: reload the window\r\n (window as any).location.reload();\r\n }\r\n}","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"product-table-header-item\",class:{ 'selected': _vm.itemOption.selected },on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.changeSortOrder.apply(null, arguments)}}},[(_vm.isLoading)?_c('div',{staticClass:\"progress-linear\"}):_vm._e(),_vm._t(\"default\"),_c('span',{attrs:{\"uk-icon\":`icon: ${_vm.icon}; ratio: .5`}})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\nimport { SortOption, SortOptionType } from '@/models/Filter';\r\nimport ProductListFilterModule from '@/store/modules/ProductListFilterModule';\r\nimport { replaceContent } from '@/utils/DOMUtils';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\ninterface ProductTableHeaderItemOption {\r\n selected: boolean;\r\n reverse: boolean;\r\n}\r\n\r\n@Component\r\nexport default class ProductTableHeaderItem extends Vue {\r\n @Prop({ type: String, required: true }) private fieldKey: string;\r\n \r\n isLoading: boolean = false;\r\n \r\n get icon(): string {\r\n if (this.itemOption.selected) {\r\n return this.itemOption.reverse ? 'fas-sort-up' : 'fas-sort-down';\r\n }\r\n return \"far-sort\";\r\n }\r\n\r\n get itemOption(): ProductTableHeaderItemOption {\r\n const qs = new URLSearchParams(window.location.search);\r\n const option: ProductTableHeaderItemOption = {\r\n selected: false,\r\n reverse: true,\r\n };\r\n\r\n if (qs.get(\"orderby\")) {\r\n const reverse = qs.get(\"orderby\").includes('desc');\r\n const field = qs.get(\"orderby\").replace('-desc', '').replace('-asc', '');\r\n if (field === this.fieldKey) {\r\n option.selected = true;\r\n option.reverse = reverse;\r\n }\r\n }\r\n return option;\r\n }\r\n\r\n async changeSortOrder() {\r\n ProductListFilterModule.RESET_PAGING();\r\n const qs = new URLSearchParams(window.location.search);\r\n this.isLoading = true;\r\n if (qs.get('page')) qs.delete('page');\r\n qs.set('orderby', `${this.fieldKey}-${!this.itemOption.reverse ? 'desc' : 'asc'}`);\r\n const newUrl = `${window.location.pathname}?${qs.toString()}`;\r\n window.history.pushState({}, '', newUrl);\r\n const payload: SortOption = {\r\n field: this.fieldKey,\r\n reverse: this.itemOption.reverse,\r\n type: SortOptionType.STRING,\r\n };\r\n ProductListFilterModule.SET_FILTER_SORT_OPTIONS([payload]);\r\n replaceContent('#product-list-container', () => {\r\n this.isLoading = false;\r\n },\r\n (data) => {\r\n try {\r\n const elem = data.querySelector('#product-filter');\r\n const nextPresetResult = elem?.getAttribute(\"preset-result\");\r\n if (nextPresetResult == null) throw new Error();\r\n ProductListFilterModule.SET_FILTER_RESULT(JSON.parse(nextPresetResult));\r\n } catch {\r\n ProductListFilterModule.GET_FILTER_RESULT();\r\n }\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??clonedRuleSet-41.use[0]!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[3]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].use[0]!../../../node_modules/@vue/cli-service/lib/config/vue-loader-v15-resolve-compat/vue-loader.js??vue-loader-options!./ProductTableHeaderItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??clonedRuleSet-41.use[0]!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[3]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].use[0]!../../../node_modules/@vue/cli-service/lib/config/vue-loader-v15-resolve-compat/vue-loader.js??vue-loader-options!./ProductTableHeaderItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductTableHeaderItem.vue?vue&type=template&id=40d88e5d&\"\nimport script from \"./ProductTableHeaderItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductTableHeaderItem.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductTableHeaderItem.vue?vue&type=style&index=0&id=40d88e5d&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// style-loader: Adds some css to the DOM by adding a