admins-components 9.0.80 → 9.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admins-components103.js +2 -1
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components16.js +18 -10
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components21.js +43 -39
- package/dist/admins-components21.js.map +1 -1
- package/dist/admins-components22.js.map +1 -1
- package/dist/admins-components38.js +25 -19
- package/dist/admins-components38.js.map +1 -1
- package/dist/admins-components40.js.map +1 -1
- package/dist/admins-components46.js +44 -44
- package/dist/admins-components46.js.map +1 -1
- package/dist/admins-components48.js.map +1 -1
- package/dist/admins-components51.js +9 -2
- package/dist/admins-components51.js.map +1 -1
- package/dist/admins-components52.js.map +1 -1
- package/dist/admins-components60.js +2 -1
- package/dist/admins-components60.js.map +1 -1
- package/dist/admins-components75.js +179 -161
- package/dist/admins-components75.js.map +1 -1
- package/dist/admins-components77.js.map +1 -1
- package/dist/admins-components87.js +1 -1
- package/dist/admins-components87.js.map +1 -1
- package/dist/admins-components91.js +75 -81
- package/dist/admins-components91.js.map +1 -1
- package/dist/admins-components93.js.map +1 -1
- package/dist/main.css +1 -1
- package/dist/src/components/TextInput.vue.d.ts +8 -0
- package/dist/src/types/data-list.d.ts +3 -2
- package/dist/src/utils/dataFilters.d.ts +1 -0
- package/dist/styles/components/data-table/data-list-options.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/data-table.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/filter-tags.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/widget/dist/favicon.ico +0 -0
- package/dist/widget/dist/search-posts-widget.css +1 -0
- package/dist/widget/dist/search-posts-widget.es.js +11190 -0
- package/dist/widget/dist/search-posts-widget.umd.js +34 -0
- package/dist/widget.css +1 -0
- package/package.json +6 -2
- package/dist/main.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components75.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction isColumnLocked(col: Column): boolean {\n return col.primary === true || col.hideable === false\n}\n\nfunction applyLockedOverrides(s: DataListSettings) {\n for (const col of props.columns) {\n if (isColumnLocked(col)) {\n s.columns[col.property] = true\n s.cardHeaderColumns[col.property] = true\n }\n }\n}\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ??\n (c.primary === true || c.hideable === false || c.defaultCardHeader === true),\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n applyLockedOverrides(local.value)\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const sourceOrder = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n const saved = (order ?? []).filter((p) => sourceOrder.includes(p))\n const savedSet = new Set(saved)\n const merged: string[] = []\n let savedIdx = 0\n for (const property of sourceOrder) {\n if (savedSet.has(property)) {\n merged.push(saved[savedIdx++]!)\n } else {\n merged.push(property)\n }\n }\n return merged\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch (e) {\n console.error(e)\n /* ignore */\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n}\n\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n\nwatch(\n () => props.columns,\n () => {\n local.value = reconcileOrders(local.value, props.columns)\n applyLockedOverrides(local.value)\n },\n)\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"table-options\">\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\">\n Elrendezés\n <span class=\"table-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\n \"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n class=\"table-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"table-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedReorderIndex === index,\n 'table-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectForReorder(index)\n : !isColumnLocked(col) && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"table-options__move-actions\">\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'table-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !isColumnLocked(col) && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"table-options__move-actions\"\n >\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-options__footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admins-components75.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction isColumnLocked(col: Column): boolean {\n return col.primary === true || col.hideable === false\n}\n\nfunction applyLockedOverrides(s: DataListSettings) {\n for (const col of props.columns) {\n if (isColumnLocked(col)) {\n s.columns[col.property] = true\n s.cardHeaderColumns[col.property] = true\n }\n }\n}\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ??\n (c.primary === true || c.hideable === false || c.defaultCardHeader === true),\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n applyLockedOverrides(local.value)\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const sourceOrder = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n const saved = (order ?? []).filter((p) => sourceOrder.includes(p))\n const savedSet = new Set(saved)\n const merged: string[] = []\n let savedIdx = 0\n for (const property of sourceOrder) {\n if (savedSet.has(property)) {\n merged.push(saved[savedIdx++]!)\n } else {\n merged.push(property)\n }\n }\n return merged\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch (e) {\n console.error(e)\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact' | 'filtersEager') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n}\n\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n\nwatch(\n () => props.columns,\n () => {\n local.value = reconcileOrders(local.value, props.columns)\n applyLockedOverrides(local.value)\n },\n)\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"list-options basic\">\n <div class=\"list-options__col\">\n <h4 class=\"list-options__title\">\n Elrendezés\n <span class=\"list-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\n \"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n class=\"list-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"list-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"list-options__col\">\n <h4 class=\"list-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"list-options__item\"\n :class=\"{\n 'list-options__item--disabled': isColumnLocked(col),\n 'list-options__item--selected': orderable && selectedReorderIndex === index,\n 'list-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectForReorder(index)\n : !isColumnLocked(col) && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical list-options__drag-handle\"></i>\n <span\n class=\"list-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"list-options__move-actions\">\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"list-options__item\"\n :class=\"{\n 'list-options__item--disabled': isColumnLocked(col),\n 'list-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'list-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !isColumnLocked(col) && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical list-options__drag-handle\"></i>\n <span\n class=\"list-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"list-options__move-actions\"\n >\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <hr class=\"separator my-3\" />\n <div class=\"list-options-footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n <hr class=\"separator my-3\" />\n <div class=\"list-options advanced\">\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title\"\n v-tooltip.html=\"\n '<b>Azonnali szűrés</b>: Bekapcsolt állapotban a szűrő mezők módosítása azonnal érvénybe lép, míg kikapcsolva csak a „Szűrés” gombra kattintva kerülnek alkalmazásra.'\n \"\n >\n Haladó beállítások <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n class=\"list-options__item\"\n @click=\"toggle('filtersEager')\"\n title=\"Bekapcsolt állapotban a szűrő mezők módosítása azonnal érvénybe lép\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.filtersEager }\"\n @click.stop=\"toggle('filtersEager')\"\n ></span>\n <span>Azonnali szűrés</span>\n </li>\n </ul>\n </div>\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components77.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction isColumnLocked(col: Column): boolean {\n return col.primary === true || col.hideable === false\n}\n\nfunction applyLockedOverrides(s: DataListSettings) {\n for (const col of props.columns) {\n if (isColumnLocked(col)) {\n s.columns[col.property] = true\n s.cardHeaderColumns[col.property] = true\n }\n }\n}\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ??\n (c.primary === true || c.hideable === false || c.defaultCardHeader === true),\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n applyLockedOverrides(local.value)\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const sourceOrder = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n const saved = (order ?? []).filter((p) => sourceOrder.includes(p))\n const savedSet = new Set(saved)\n const merged: string[] = []\n let savedIdx = 0\n for (const property of sourceOrder) {\n if (savedSet.has(property)) {\n merged.push(saved[savedIdx++]!)\n } else {\n merged.push(property)\n }\n }\n return merged\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch (e) {\n console.error(e)\n /* ignore */\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n}\n\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n\nwatch(\n () => props.columns,\n () => {\n local.value = reconcileOrders(local.value, props.columns)\n applyLockedOverrides(local.value)\n },\n)\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"table-options\">\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\">\n Elrendezés\n <span class=\"table-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\n \"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n class=\"table-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"table-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedReorderIndex === index,\n 'table-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectForReorder(index)\n : !isColumnLocked(col) && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"table-options__move-actions\">\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'table-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !isColumnLocked(col) && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"table-options__move-actions\"\n >\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-options__footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components77.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction isColumnLocked(col: Column): boolean {\n return col.primary === true || col.hideable === false\n}\n\nfunction applyLockedOverrides(s: DataListSettings) {\n for (const col of props.columns) {\n if (isColumnLocked(col)) {\n s.columns[col.property] = true\n s.cardHeaderColumns[col.property] = true\n }\n }\n}\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ??\n (c.primary === true || c.hideable === false || c.defaultCardHeader === true),\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n applyLockedOverrides(local.value)\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const sourceOrder = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n const saved = (order ?? []).filter((p) => sourceOrder.includes(p))\n const savedSet = new Set(saved)\n const merged: string[] = []\n let savedIdx = 0\n for (const property of sourceOrder) {\n if (savedSet.has(property)) {\n merged.push(saved[savedIdx++]!)\n } else {\n merged.push(property)\n }\n }\n return merged\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch (e) {\n console.error(e)\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact' | 'filtersEager') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n}\n\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n\nwatch(\n () => props.columns,\n () => {\n local.value = reconcileOrders(local.value, props.columns)\n applyLockedOverrides(local.value)\n },\n)\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"list-options basic\">\n <div class=\"list-options__col\">\n <h4 class=\"list-options__title\">\n Elrendezés\n <span class=\"list-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\n \"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n class=\"list-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"list-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"list-options__col\">\n <h4 class=\"list-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"list-options__item\"\n :class=\"{\n 'list-options__item--disabled': isColumnLocked(col),\n 'list-options__item--selected': orderable && selectedReorderIndex === index,\n 'list-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectForReorder(index)\n : !isColumnLocked(col) && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical list-options__drag-handle\"></i>\n <span\n class=\"list-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"list-options__move-actions\">\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"list-options__item\"\n :class=\"{\n 'list-options__item--disabled': isColumnLocked(col),\n 'list-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'list-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !isColumnLocked(col) && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical list-options__drag-handle\"></i>\n <span\n class=\"list-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"list-options__move-actions\"\n >\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"list-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <hr class=\"separator my-3\" />\n <div class=\"list-options-footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n <hr class=\"separator my-3\" />\n <div class=\"list-options advanced\">\n <div class=\"list-options__col\">\n <h4\n class=\"list-options__title\"\n v-tooltip.html=\"\n '<b>Azonnali szűrés</b>: Bekapcsolt állapotban a szűrő mezők módosítása azonnal érvénybe lép, míg kikapcsolva csak a „Szűrés” gombra kattintva kerülnek alkalmazásra.'\n \"\n >\n Haladó beállítások <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"list-options__list\">\n <li\n class=\"list-options__item\"\n @click=\"toggle('filtersEager')\"\n title=\"Bekapcsolt állapotban a szűrő mezők módosítása azonnal érvénybe lép\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.filtersEager }\"\n @click.stop=\"toggle('filtersEager')\"\n ></span>\n <span>Azonnali szűrés</span>\n </li>\n </ul>\n </div>\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":""}
|
|
@@ -131,4 +131,4 @@ function g(e, t) {
|
|
|
131
131
|
return n(e);
|
|
132
132
|
}
|
|
133
133
|
//#endregion
|
|
134
|
-
export { u as filterEmptyValues, a as getDefaultFilterValues, i as getDefaultFilters, l as getDefaultSavedFilter, s as getFilterUrlParams, c as getSavedFilters, h as writeFilterParams };
|
|
134
|
+
export { o as extractDropdownValues, u as filterEmptyValues, a as getDefaultFilterValues, i as getDefaultFilters, l as getDefaultSavedFilter, s as getFilterUrlParams, c as getSavedFilters, h as writeFilterParams };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components87.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { SavedFilter } from '@/components/data-table/FiltersHistory.vue'\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { getUrlParam, setUrlParam, removeUrlParam } from '@/utils/url'\n\n export function getDefaultFilters(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const urlFilters = getFilterUrlParams(items)\n const hasUrlParams = Object.keys(urlFilters).length > 0\n const defaultFilter = hasUrlParams ? null : getDefaultSavedFilter(storageKey)\n const defaultSavedValues = defaultFilter?.values ?? {}\n\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n let value: unknown\n\n if (item.key in urlFilters) {\n value = urlFilters[item.key]\n } else if (hasUrlParams) {\n continue\n } else if (item.key in defaultSavedValues) {\n value = defaultSavedValues[item.key]\n } else if (item.value !== undefined) {\n value = item.value\n } else {\n continue\n }\n\n if (value == null) continue\n\n if (useTransformers && item.transformer) {\n const transformed = item.transformer(value)\n if (transformed) {\n Object.assign(result, transformed)\n }\n } else {\n result[item.key] = value\n }\n }\n\n return result\n}\n\nexport function getDefaultFilterValues(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const filters = getDefaultFilters(items, storageKey, useTransformers)\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type !== 'dropdown') {\n if (item.key in filters) result[item.key] = filters[item.key]\n continue\n }\n\n const extracted = extractDropdownValues(filters[item.key])\n if (extracted != null) {\n result[item.key] = extracted\n }\n }\n\n return result\n}\n\nfunction extractDropdownValues(val: unknown): string | string[] | null {\n if (val == null) return null\n if (Array.isArray(val)) {\n const values = val\n .map((entry) => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'value' in entry) {\n return (entry as { value?: string }).value ?? null\n }\n if (typeof entry === 'string') return entry\n return null\n })\n .filter((v): v is string => v !== null)\n return values.length > 0 ? values : null\n }\n if (typeof val === 'object' && 'value' in val) {\n return (val as { value?: string }).value ?? null\n }\n if (typeof val === 'string') return val\n return null\n}\n\nexport function getFilterUrlParams(items: FilterItem[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = getUrlParam(item.key)\n if (raw) {\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n }\n return result\n}\n\nexport function getSavedFilters(storageKey?: string): SavedFilter[] {\n try {\n const fullStorageKey = getFullStorageKey('filters', storageKey)\n const parsed = JSON.parse(localStorage.getItem(fullStorageKey) ?? '[]')\n return Array.isArray(parsed)\n ? parsed.filter(\n (e) =>\n e &&\n typeof e === 'object' &&\n typeof e.id === 'string' &&\n e.values &&\n typeof e.savedAt === 'string',\n )\n : []\n } catch {\n return []\n }\n}\n\nexport function getDefaultSavedFilter(storageKey?: string): SavedFilter | null {\n const savedFilters = getSavedFilters(storageKey)\n return savedFilters.find((f) => f.isDefault) ?? null\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownStoredValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseDropdownStoredValue(raw: string): DropdownOption | DropdownOption[] | null {\n // Try to parse as JSON first (new format or legacy array)\n if (raw.startsWith('[') || raw.startsWith('{')) {\n try {\n const parsed = JSON.parse(raw)\n if (Array.isArray(parsed)) {\n const opts = parsed.map(toDropdownOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n if (parsed && typeof parsed === 'object') {\n const opt = toDropdownOption(parsed)\n return opt\n }\n } catch {\n // fall through to legacy handling\n }\n }\n // Legacy: plain string value\n if (raw) return { value: raw, label: raw }\n return null\n}\n\nfunction toDropdownOption(entry: unknown): DropdownOption | null {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n const obj = entry as DropdownOption\n if (obj.value != null && typeof obj.label === 'string') {\n return { value: obj.value, label: obj.label }\n }\n }\n if (typeof entry === 'string') {\n return { value: entry, label: entry }\n }\n return null\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n removeUrlParam(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n setUrlParam(item.key, (v as { utc: string }).utc)\n } else if (item.type === 'dropdown') {\n setUrlParam(item.key, JSON.stringify(normalizeDropdownValue(v)))\n } else if (typeof v === 'object') {\n setUrlParam(item.key, JSON.stringify(v))\n } else {\n setUrlParam(item.key, String(v))\n }\n }\n}\n\nfunction normalizeDropdownValue(\n v: unknown,\n options?: DropdownOption[],\n): DropdownOption | DropdownOption[] | null {\n if (v == null) return null\n const toOption = (entry: unknown): DropdownOption | null => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n return entry as DropdownOption\n }\n const value = String(entry)\n const label = options?.find((o) => o.value === value)?.label ?? value\n return { value, label }\n }\n if (Array.isArray(v)) {\n const opts = v.map(toOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n const opt = toOption(v)\n return opt\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admins-components87.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { SavedFilter } from '@/components/data-table/FiltersHistory.vue'\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { getUrlParam, setUrlParam, removeUrlParam } from '@/utils/url'\n\nexport function getDefaultFilters(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const urlFilters = getFilterUrlParams(items)\n const hasUrlParams = Object.keys(urlFilters).length > 0\n const defaultFilter = hasUrlParams ? null : getDefaultSavedFilter(storageKey)\n const defaultSavedValues = defaultFilter?.values ?? {}\n\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n let value: unknown\n\n if (item.key in urlFilters) {\n value = urlFilters[item.key]\n } else if (hasUrlParams) {\n continue\n } else if (item.key in defaultSavedValues) {\n value = defaultSavedValues[item.key]\n } else if (item.value !== undefined) {\n value = item.value\n } else {\n continue\n }\n\n if (value == null) continue\n\n if (useTransformers && item.transformer) {\n const transformed = item.transformer(value)\n if (transformed) {\n Object.assign(result, transformed)\n }\n } else {\n result[item.key] = value\n }\n }\n\n return result\n}\n\nexport function getDefaultFilterValues(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const filters = getDefaultFilters(items, storageKey, useTransformers)\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type !== 'dropdown') {\n if (item.key in filters) result[item.key] = filters[item.key]\n continue\n }\n\n const extracted = extractDropdownValues(filters[item.key])\n if (extracted != null) {\n result[item.key] = extracted\n }\n }\n\n return result\n}\n\nexport function extractDropdownValues(val: unknown): string | string[] | null {\n if (val == null) return null\n if (Array.isArray(val)) {\n const values = val\n .map((entry) => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'value' in entry) {\n return (entry as { value?: string }).value ?? null\n }\n if (typeof entry === 'string') return entry\n return null\n })\n .filter((v): v is string => v !== null)\n return values.length > 0 ? values : null\n }\n if (typeof val === 'object' && 'value' in val) {\n return (val as { value?: string }).value ?? null\n }\n if (typeof val === 'string') return val\n return null\n}\n\nexport function getFilterUrlParams(items: FilterItem[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = getUrlParam(item.key)\n if (raw) {\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n }\n return result\n}\n\nexport function getSavedFilters(storageKey?: string): SavedFilter[] {\n try {\n const fullStorageKey = getFullStorageKey('filters', storageKey)\n const parsed = JSON.parse(localStorage.getItem(fullStorageKey) ?? '[]')\n return Array.isArray(parsed)\n ? parsed.filter(\n (e) =>\n e &&\n typeof e === 'object' &&\n typeof e.id === 'string' &&\n e.values &&\n typeof e.savedAt === 'string',\n )\n : []\n } catch {\n return []\n }\n}\n\nexport function getDefaultSavedFilter(storageKey?: string): SavedFilter | null {\n const savedFilters = getSavedFilters(storageKey)\n return savedFilters.find((f) => f.isDefault) ?? null\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownStoredValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseDropdownStoredValue(raw: string): DropdownOption | DropdownOption[] | null {\n // Try to parse as JSON first (new format or legacy array)\n if (raw.startsWith('[') || raw.startsWith('{')) {\n try {\n const parsed = JSON.parse(raw)\n if (Array.isArray(parsed)) {\n const opts = parsed.map(toDropdownOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n if (parsed && typeof parsed === 'object') {\n const opt = toDropdownOption(parsed)\n return opt\n }\n } catch {\n // fall through to legacy handling\n }\n }\n // Legacy: plain string value\n if (raw) return { value: raw, label: raw }\n return null\n}\n\nfunction toDropdownOption(entry: unknown): DropdownOption | null {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n const obj = entry as DropdownOption\n if (obj.value != null && typeof obj.label === 'string') {\n return { value: obj.value, label: obj.label }\n }\n }\n if (typeof entry === 'string') {\n return { value: entry, label: entry }\n }\n return null\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n removeUrlParam(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n setUrlParam(item.key, (v as { utc: string }).utc)\n } else if (item.type === 'dropdown') {\n setUrlParam(item.key, JSON.stringify(normalizeDropdownValue(v)))\n } else if (typeof v === 'object') {\n setUrlParam(item.key, JSON.stringify(v))\n } else {\n setUrlParam(item.key, String(v))\n }\n }\n}\n\nfunction normalizeDropdownValue(\n v: unknown,\n options?: DropdownOption[],\n): DropdownOption | DropdownOption[] | null {\n if (v == null) return null\n const toOption = (entry: unknown): DropdownOption | null => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n return entry as DropdownOption\n }\n const value = String(entry)\n const label = options?.find((o) => o.value === value)?.label ?? value\n return { value, label }\n }\n if (Array.isArray(v)) {\n const opts = v.map(toOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n const opt = toOption(v)\n return opt\n}\n"],"mappings":"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"}
|
|
@@ -5,14 +5,14 @@ import r from "./admins-components19.js";
|
|
|
5
5
|
import i from "./admins-components22.js";
|
|
6
6
|
import a from "./admins-components28.js";
|
|
7
7
|
import o from "./admins-components34.js";
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import { Fragment as
|
|
8
|
+
import { extractDropdownValues as s, filterEmptyValues as c, getDefaultFilters as l, writeFilterParams as u } from "./admins-components87.js";
|
|
9
|
+
import d from "./admins-components90.js";
|
|
10
|
+
import { Fragment as f, computed as p, createBlock as m, createCommentVNode as h, createElementBlock as g, createElementVNode as _, createVNode as v, defineComponent as y, mergeProps as b, normalizeClass as x, openBlock as S, ref as C, renderList as w, toDisplayString as T, withCtx as E } from "vue";
|
|
11
11
|
//#region src/components/data-table/DataFilters.vue?vue&type=script&setup=true&lang.ts
|
|
12
|
-
var
|
|
12
|
+
var D = {
|
|
13
13
|
key: 0,
|
|
14
14
|
class: "data-filters__separator"
|
|
15
|
-
},
|
|
15
|
+
}, O = ["for"], k = { class: "c-label" }, A = { class: "c-label" }, j = { class: "data-filters__footer" }, M = /*@__PURE__*/ y({
|
|
16
16
|
__name: "DataFilters",
|
|
17
17
|
props: {
|
|
18
18
|
items: {},
|
|
@@ -36,78 +36,70 @@ var E = {
|
|
|
36
36
|
storageKey: {}
|
|
37
37
|
},
|
|
38
38
|
emits: ["close", "change"],
|
|
39
|
-
setup(
|
|
40
|
-
let
|
|
41
|
-
function
|
|
42
|
-
t ?
|
|
39
|
+
setup(y, { expose: M, emit: N }) {
|
|
40
|
+
let P = y, F = N, I = C(l(P.items, P.storageKey, !1)), L = C({});
|
|
41
|
+
function R(e, t) {
|
|
42
|
+
t ? L.value[e] = t : delete L.value[e];
|
|
43
43
|
}
|
|
44
|
-
function
|
|
44
|
+
function z(e) {
|
|
45
45
|
return {
|
|
46
46
|
...e.config ?? {},
|
|
47
47
|
showTime: e.type === "datetime",
|
|
48
48
|
placeholder: e.placeholder ?? (e.type === "datetime" ? "Időpont" : "Dátum")
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function B(e) {
|
|
52
52
|
return {
|
|
53
53
|
...e.config ?? {},
|
|
54
54
|
...e.fullWidth ? {} : { compact: !0 },
|
|
55
55
|
showTime: e.type === "datetimerange"
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
-
function
|
|
58
|
+
function V(e, t) {
|
|
59
59
|
let n = typeof t == "string" ? t.trim() : t;
|
|
60
|
-
|
|
61
|
-
...
|
|
60
|
+
I.value = {
|
|
61
|
+
...I.value,
|
|
62
62
|
[e.key]: n
|
|
63
|
-
}, e.onChange && e.onChange(n),
|
|
63
|
+
}, e.onChange && e.onChange(n), P.lazy || W();
|
|
64
64
|
}
|
|
65
|
-
let
|
|
66
|
-
function
|
|
65
|
+
let H = p(() => Object.values(I.value).some((e) => e !== null && e !== "" && e !== void 0));
|
|
66
|
+
function U() {
|
|
67
67
|
let e = {};
|
|
68
|
-
for (let t of
|
|
68
|
+
for (let t of P.items) {
|
|
69
69
|
if (t.type === "separator") continue;
|
|
70
|
-
let n =
|
|
71
|
-
t.transformer ? Object.assign(e, t.transformer(n) ?? {}) : t.type === "date" || t.type === "datetime" ? e[t.key] = n?.utc ?? n : t.type === "dropdown" ? e[t.key] =
|
|
70
|
+
let n = I.value[t.key];
|
|
71
|
+
t.transformer ? Object.assign(e, t.transformer(n) ?? {}) : t.type === "date" || t.type === "datetime" ? e[t.key] = n?.utc ?? n : t.type === "dropdown" ? e[t.key] = s(n) : e[t.key] = n;
|
|
72
72
|
}
|
|
73
73
|
return {
|
|
74
|
-
values:
|
|
75
|
-
transformed:
|
|
74
|
+
values: c(I.value),
|
|
75
|
+
transformed: c(e)
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
-
function U(e) {
|
|
79
|
-
if (e == null) return null;
|
|
80
|
-
if (Array.isArray(e)) {
|
|
81
|
-
let t = e.map((e) => e == null ? null : typeof e == "object" && "value" in e ? e.value ?? null : typeof e == "string" ? e : null).filter((e) => e !== null);
|
|
82
|
-
return t.length > 0 ? t : null;
|
|
83
|
-
}
|
|
84
|
-
return typeof e == "object" && "value" in e ? e.value ?? null : typeof e == "string" ? e : null;
|
|
85
|
-
}
|
|
86
78
|
function W() {
|
|
87
|
-
|
|
79
|
+
P.handleUrl && u(P.items, I.value), F("change", U());
|
|
88
80
|
}
|
|
89
81
|
function G() {
|
|
90
|
-
W(),
|
|
82
|
+
W(), F("close");
|
|
91
83
|
}
|
|
92
84
|
function K() {
|
|
93
|
-
|
|
85
|
+
I.value = {}, W();
|
|
94
86
|
}
|
|
95
87
|
function q(e) {
|
|
96
|
-
|
|
97
|
-
...
|
|
88
|
+
I.value = {
|
|
89
|
+
...I.value,
|
|
98
90
|
[e]: null
|
|
99
91
|
}, W();
|
|
100
92
|
}
|
|
101
93
|
function J(e) {
|
|
102
|
-
let t =
|
|
94
|
+
let t = L.value[e];
|
|
103
95
|
t && (typeof t.focusAndOpen == "function" ? t.focusAndOpen() : typeof t.focus == "function" && t.focus());
|
|
104
96
|
}
|
|
105
97
|
function Y(e) {
|
|
106
|
-
let t = { ...
|
|
107
|
-
for (let n of
|
|
108
|
-
|
|
98
|
+
let t = { ...I.value };
|
|
99
|
+
for (let n of P.items) n.type !== "separator" && n.key in e && (t[n.key] = e[n.key] ?? null);
|
|
100
|
+
I.value = t, W();
|
|
109
101
|
}
|
|
110
|
-
|
|
102
|
+
M({
|
|
111
103
|
clearFilter: q,
|
|
112
104
|
focusFilter: J
|
|
113
105
|
});
|
|
@@ -117,26 +109,26 @@ var E = {
|
|
|
117
109
|
function Z(e, t) {
|
|
118
110
|
e.onInnerSearch && e.onInnerSearch(t);
|
|
119
111
|
}
|
|
120
|
-
return (s, c) => (
|
|
121
|
-
open:
|
|
112
|
+
return (s, c) => (S(), m(o, {
|
|
113
|
+
open: y.open,
|
|
122
114
|
title: "Szűrők",
|
|
123
|
-
position:
|
|
124
|
-
onClose: c[0] ||= (e) =>
|
|
115
|
+
position: y.position,
|
|
116
|
+
onClose: c[0] ||= (e) => F("close")
|
|
125
117
|
}, {
|
|
126
|
-
default:
|
|
127
|
-
|
|
118
|
+
default: E(() => [
|
|
119
|
+
_("div", {
|
|
128
120
|
class: "data-filters",
|
|
129
121
|
onKeydown: X
|
|
130
|
-
}, [(
|
|
122
|
+
}, [(S(!0), g(f, null, w(y.items, (e) => (S(), g("div", {
|
|
131
123
|
key: e.key,
|
|
132
|
-
class:
|
|
133
|
-
}, [e.type === "separator" ? (
|
|
124
|
+
class: x(["data-filters__field", { "data-filters__field--full": e.fullWidth || e.type === "separator" }])
|
|
125
|
+
}, [e.type === "separator" ? (S(), g("hr", D)) : e.type === "checkbox" ? (S(), m(r, b({
|
|
134
126
|
key: 1,
|
|
135
127
|
ref_for: !0,
|
|
136
|
-
ref: (t) =>
|
|
137
|
-
"model-value":
|
|
128
|
+
ref: (t) => R(e.key, t),
|
|
129
|
+
"model-value": I.value[e.key] ?? !1,
|
|
138
130
|
label: e.label ?? e.key,
|
|
139
|
-
"onUpdate:modelValue": (t) =>
|
|
131
|
+
"onUpdate:modelValue": (t) => V(e, t)
|
|
140
132
|
}, { ref_for: !0 }, e.config), null, 16, [
|
|
141
133
|
"model-value",
|
|
142
134
|
"label",
|
|
@@ -145,52 +137,54 @@ var E = {
|
|
|
145
137
|
"text",
|
|
146
138
|
"number",
|
|
147
139
|
"textarea"
|
|
148
|
-
].includes(e.type) ? (
|
|
140
|
+
].includes(e.type) ? (S(), m(n, b({
|
|
149
141
|
key: 2,
|
|
150
142
|
type: e.type,
|
|
151
143
|
ref_for: !0,
|
|
152
|
-
ref: (t) =>
|
|
144
|
+
ref: (t) => R(e.key, t),
|
|
153
145
|
id: `df-${e.key}`,
|
|
154
|
-
"model-value":
|
|
146
|
+
"model-value": I.value[e.key] ?? "",
|
|
155
147
|
label: e.label ?? e.key,
|
|
156
148
|
placeholder: e.placeholder,
|
|
157
|
-
|
|
149
|
+
debounce: y.lazy ? void 0 : 500,
|
|
150
|
+
"onUpdate:modelValue": (t) => V(e, t || null)
|
|
158
151
|
}, { ref_for: !0 }, e.config), null, 16, [
|
|
159
152
|
"type",
|
|
160
153
|
"id",
|
|
161
154
|
"model-value",
|
|
162
155
|
"label",
|
|
163
156
|
"placeholder",
|
|
157
|
+
"debounce",
|
|
164
158
|
"onUpdate:modelValue"
|
|
165
|
-
])) : e.type === "date" || e.type === "datetime" ? (
|
|
159
|
+
])) : e.type === "date" || e.type === "datetime" ? (S(), g(f, { key: 3 }, [_("label", {
|
|
166
160
|
class: "c-label",
|
|
167
161
|
for: `df-${e.key}`
|
|
168
|
-
},
|
|
162
|
+
}, T(e.label ?? e.key), 9, O), v(t, {
|
|
169
163
|
ref_for: !0,
|
|
170
|
-
ref: (t) =>
|
|
164
|
+
ref: (t) => R(e.key, t),
|
|
171
165
|
id: `df-${e.key}`,
|
|
172
|
-
"model-value":
|
|
173
|
-
config:
|
|
174
|
-
"onUpdate:modelValue": (t) =>
|
|
166
|
+
"model-value": I.value[e.key] ?? null,
|
|
167
|
+
config: z(e),
|
|
168
|
+
"onUpdate:modelValue": (t) => V(e, t)
|
|
175
169
|
}, null, 8, [
|
|
176
170
|
"id",
|
|
177
171
|
"model-value",
|
|
178
172
|
"config",
|
|
179
173
|
"onUpdate:modelValue"
|
|
180
|
-
])], 64)) : e.type === "daterange" || e.type === "datetimerange" ? (
|
|
174
|
+
])], 64)) : e.type === "daterange" || e.type === "datetimerange" ? (S(), g(f, { key: 4 }, [_("span", k, T(e.label ?? e.key), 1), v(i, {
|
|
181
175
|
ref_for: !0,
|
|
182
|
-
ref: (t) =>
|
|
183
|
-
"model-value":
|
|
184
|
-
config:
|
|
185
|
-
"onUpdate:modelValue": (t) =>
|
|
176
|
+
ref: (t) => R(e.key, t),
|
|
177
|
+
"model-value": I.value[e.key] ?? null,
|
|
178
|
+
config: B(e),
|
|
179
|
+
"onUpdate:modelValue": (t) => V(e, t)
|
|
186
180
|
}, null, 8, [
|
|
187
181
|
"model-value",
|
|
188
182
|
"config",
|
|
189
183
|
"onUpdate:modelValue"
|
|
190
|
-
])], 64)) : e.type === "dropdown" ? (
|
|
184
|
+
])], 64)) : e.type === "dropdown" ? (S(), g(f, { key: 5 }, [_("span", A, T(e.label ?? e.key), 1), v(a, {
|
|
191
185
|
ref_for: !0,
|
|
192
|
-
ref: (t) =>
|
|
193
|
-
"model-value":
|
|
186
|
+
ref: (t) => R(e.key, t),
|
|
187
|
+
"model-value": I.value[e.key] ?? null,
|
|
194
188
|
options: e.options ?? [],
|
|
195
189
|
config: {
|
|
196
190
|
...e.config ?? {},
|
|
@@ -199,41 +193,41 @@ var E = {
|
|
|
199
193
|
filterable: !0
|
|
200
194
|
},
|
|
201
195
|
onFilterInput: (t) => Z(e, t),
|
|
202
|
-
"onUpdate:modelValue": (t) =>
|
|
196
|
+
"onUpdate:modelValue": (t) => V(e, t)
|
|
203
197
|
}, null, 8, [
|
|
204
198
|
"model-value",
|
|
205
199
|
"options",
|
|
206
200
|
"config",
|
|
207
201
|
"onFilterInput",
|
|
208
202
|
"onUpdate:modelValue"
|
|
209
|
-
])], 64)) :
|
|
210
|
-
|
|
203
|
+
])], 64)) : h("", !0)], 2))), 128))], 32),
|
|
204
|
+
_("div", j, [v(e, {
|
|
211
205
|
icon: "fa-solid fa-trash-can",
|
|
212
|
-
disabled: !
|
|
206
|
+
disabled: !H.value,
|
|
213
207
|
label: "Szűrők törlése",
|
|
214
208
|
"aria-label": "Szűrők törlése",
|
|
215
209
|
size: "small",
|
|
216
210
|
onClick: K
|
|
217
|
-
}, null, 8, ["disabled"]),
|
|
211
|
+
}, null, 8, ["disabled"]), v(e, {
|
|
218
212
|
label: "Szűrés",
|
|
219
213
|
"aria-label": "Szűrés",
|
|
220
214
|
type: "success",
|
|
221
215
|
onClick: G
|
|
222
216
|
})]),
|
|
223
|
-
|
|
224
|
-
items:
|
|
225
|
-
values:
|
|
226
|
-
"storage-key":
|
|
217
|
+
y.historyEnabled ? (S(), g(f, { key: 0 }, [c[1] ||= _("hr", { class: "separator my-3" }, null, -1), v(d, {
|
|
218
|
+
items: y.items,
|
|
219
|
+
values: I.value,
|
|
220
|
+
"storage-key": y.storageKey,
|
|
227
221
|
onLoad: Y
|
|
228
222
|
}, null, 8, [
|
|
229
223
|
"items",
|
|
230
224
|
"values",
|
|
231
225
|
"storage-key"
|
|
232
|
-
])], 64)) :
|
|
226
|
+
])], 64)) : h("", !0)
|
|
233
227
|
]),
|
|
234
228
|
_: 1
|
|
235
229
|
}, 8, ["open", "position"]));
|
|
236
230
|
}
|
|
237
231
|
});
|
|
238
232
|
//#endregion
|
|
239
|
-
export {
|
|
233
|
+
export { M as default };
|