@anzusystems/common-admin 1.47.0-beta.336 → 1.47.0-beta.338
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/{AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-DersLykS.mjs → AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-Cc4fwgQq.mjs} +750 -707
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-Cc4fwgQq.mjs.map +1 -0
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.js +2209 -2202
- package/dist/common-admin.js.map +1 -1
- package/dist/{index-D9dvlxYX.mjs → index-Bk8A-WJh.mjs} +1062 -1059
- package/dist/index-Bk8A-WJh.mjs.map +1 -0
- package/dist/labs.d.ts +1 -1
- package/dist/labs.js +424 -424
- package/dist/labs.js.map +1 -1
- package/package.json +5 -5
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-DersLykS.mjs.map +0 -1
- package/dist/index-D9dvlxYX.mjs.map +0 -1
package/dist/labs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labs.js","sources":["../src/labs/filters/AFilterTimeInterval.vue","../src/labs/filters/AFilterAdvancedButton.vue","../src/labs/filters/FiltersSelected.vue","../src/labs/filters/AFilterWrapper.vue","../src/labs/filters/ADatatableOrdering.vue","../src/labs/filters/ADatatablePagination.vue","../src/labs/api/useApiFetchByIds.ts","../src/labs/api/useApiFetchListBatch.ts","../src/labs/job/jobApi.ts","../src/labs/filters/datatableColumns.ts","../src/labs/subjectSelect/useSubjectSelect.ts","../src/labs/subjectSelect/ASubjectSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isArray, isBoolean, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type AllowedFilterValues, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n useFilterTimeIntervalValidators,\n useTimeIntervalOptions,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport AFormDatetimePicker from '@/components/form/AFormDatetimePicker.vue'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport ARow from '@/components/ARow.vue'\nimport { dateTimeNow, dateTimePretty, isDatetimeUTC } from '@/utils/datetime'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nconst props = withDefaults(\n defineProps<{\n nameFrom: string\n nameUntil: string\n allowed?: TimeIntervalToolsValue[]\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n allowed: undefined,\n placeholder: undefined,\n dataCy: 'filter-time-interval',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameUntil]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameUntil])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.nameFrom]\n },\n set(newValue) {\n filterData[props.nameFrom] = newValue\n updateSelected(newValue)\n filterConfig.touched = true\n nextTick(() => {\n emit('change')\n })\n },\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { timeIntervalOptions, getTimeIntervalOption } = useTimeIntervalOptions(props.allowed)\nconst modelInternal = ref<TimeIntervalToolsValue>(null)\nconst dialogCustom = ref(false)\nconst dialogData = ref<{ from: DatetimeUTCNullable; until: DatetimeUTCNullable }>({\n from: null,\n until: dateTimeNow(),\n})\nconst displayFromTo = ref(false)\n\nconst { v$ } = useFilterTimeIntervalValidators(dialogData)\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.nameFrom])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\nconst { showValidationError } = useAlerts()\n\nconst onClear = () => {\n displayFromTo.value = false\n modelInternal.value = null\n clearField()\n}\n\nconst onDialogConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n displayFromTo.value = true\n dialogCustom.value = false\n filterData[props.nameUntil] = dialogData.value.until\n modelValue.value = dialogData.value.from\n}\n\nconst onDialogClose = () => {\n dialogCustom.value = false\n modelInternal.value = null\n}\n\nconst clearField = () => {\n clearOne(props.nameFrom, filterData, filterConfig)\n clearOne(props.nameUntil, filterData, filterConfig)\n filterSelected.value.delete(props.nameFrom)\n}\n\nconst updateSelected = (fromValue: AllowedFilterValues) => {\n if (isArray(fromValue) || isBoolean(fromValue)) return\n if (isNull(fromValue) || isUndefined(fromValue)) {\n filterSelected.value.delete(props.nameFrom)\n return\n }\n const found = getTimeIntervalOption(fromValue as TimeIntervalToolsValue)\n if (!found && isDatetimeUTC(fromValue)) {\n const customOption = getTimeIntervalOption(TimeIntervalSpecialOptions.Custom)!\n filterSelected.value.set(props.nameFrom, [\n {\n title:\n customOption.title +\n ': ' +\n dateTimePretty(dialogData.value.from) +\n ' - ' +\n dateTimePretty(dialogData.value.until),\n value: fromValue,\n },\n ])\n return\n }\n if (!found) return\n filterSelected.value.set(props.nameFrom, [{ title: found.title, value: fromValue }])\n}\n\nconst onEditInterval = (clear = false) => {\n v$.value.$reset()\n if (clear) {\n dialogData.value.from = null\n dialogData.value.until = dateTimeNow()\n }\n dialogCustom.value = true\n}\n\nwatch(\n modelValue,\n (newValue) => {\n if (isArray(newValue) || isBoolean(newValue)) return\n displayFromTo.value = false\n if (isUndefined(newValue) || isNull(newValue)) {\n modelInternal.value = null\n return\n }\n const found = getTimeIntervalOption(modelValue.value as TimeIntervalToolsValue)\n const filterDataUntil = filterData[props.nameUntil]\n if (!found && isDatetimeUTC(modelValue.value) && isDatetimeUTC(filterDataUntil)) {\n modelInternal.value = TimeIntervalSpecialOptions.Custom\n dialogData.value.from = modelValue.value\n dialogData.value.until = filterDataUntil\n displayFromTo.value = true\n }\n if (found) {\n modelInternal.value = found.value\n }\n },\n { immediate: true }\n)\n\nwatch(\n [() => filterData[props.nameFrom], () => filterData[props.nameUntil]],\n ([fromNewValue, untilNewValue], [fromOldValue, untilOldValue]) => {\n if (fromNewValue === fromOldValue && untilNewValue === untilOldValue) return\n updateSelected(fromNewValue)\n },\n { immediate: true }\n)\n\nconst onInternalItemChange = (item: ValueObjectOption<TimeIntervalToolsValue>) => {\n if (item.value === TimeIntervalSpecialOptions.Custom) {\n onEditInterval(true)\n return\n }\n filterData[props.nameUntil] = null\n modelValue.value = item.value\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"displayFromTo\"\n :label=\"label\"\n :model-value=\"dateTimePretty(dialogData.from) + ' - ' + dateTimePretty(dialogData.until)\"\n readonly\n rows=\"1\"\n auto-grow\n hide-details\n append-inner-icon=\"mdi-menu-down\"\n clearable\n class=\"cursor-pointer\"\n @click:clear.stop=\"onClear\"\n @click.stop=\"onEditInterval()\"\n />\n <VSelect\n v-else\n v-model=\"modelInternal\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :clearable=\"!isNull(modelInternal)\"\n no-filter\n :data-cy=\"dataCy\"\n :items=\"timeIntervalOptions\"\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"onClear\"\n >\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n @click=\"onInternalItemChange(item)\"\n />\n </template>\n </VSelect>\n <VDialog\n v-if=\"dialogCustom\"\n :model-value=\"true\"\n width=\"auto\"\n :min-width=\"360\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"onDialogClose\">\n <slot name=\"title\">\n {{ label }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.from\"\n :v=\"v$.dialogData.from\"\n :label=\"t('common.filter.timeInterval.from')\"\n required\n />\n </ARow>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.until\"\n :v=\"v$.dialogData.until\"\n :label=\"t('common.filter.timeInterval.until')\"\n required\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onDialogClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onDialogConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<style lang=\"scss\" scoped>\n.v-text-field.cursor-pointer {\n ::v-deep(.v-field),\n ::v-deep(.v-field__input) {\n cursor: pointer;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-filter-variant\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { FilterConfigKey, FilterDataKey, FilterSelectedKey } from '@/labs/filters/filterInjectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst getTitleFromConfig = (name: string) => {\n const titleT = filterConfig.fields?.[name]?.titleT\n if (titleT) return t(titleT)\n return name\n}\n\nconst selectedArray = computed(() => {\n const fieldOrder = Object.keys(filterConfig.fields)\n return Array.from(filterSelected.value)\n .map(([key, valueArray]) => ({\n name: key,\n title: getTitleFromConfig(key),\n options: valueArray,\n }))\n .sort((a, b) => fieldOrder.indexOf(a.name) - fieldOrder.indexOf(b.name))\n})\n\nconst { clearOneFilterSelected, isClearable } = useFilterClearHelpers()\n\nconst clickClose = (name: string, optionValue: number | string) => {\n clearOneFilterSelected(name, optionValue, filterData, filterConfig, filterSelected)\n filterConfig.touched = true\n}\n</script>\n\n<template>\n <div\n v-for=\"item in selectedArray\"\n :key=\"item.name\"\n class=\"a-selected-filters\"\n >\n <div class=\"a-selected-filters__label text-caption\">\n {{ item.title }}:\n </div>\n <div\n v-for=\"option in item.options\"\n :key=\"option.value\"\n class=\"a-selected-filters__chips\"\n >\n <VChip\n v-if=\"isClearable(item.name, filterConfig)\"\n closable\n size=\"small\"\n class=\"a-selected-filters__chip\"\n @click:close.stop=\"clickClose(item.name, option.value)\"\n >\n <template #close>\n <VIcon\n size=\"16\"\n icon=\"mdi-close-circle\"\n />\n </template>\n {{ option.title }}\n </VChip>\n <VChip\n v-else\n size=\"small\"\n class=\"a-selected-filters__chip\"\n >\n {{ option.title }}\n </VChip>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-selected-filters {\n display: inline-flex;\n align-items: center;\n background: #f5f5f5;\n border-radius: 20px;\n padding: 4px 4px 4px 12px;\n margin: 0 4px 2px 0;\n gap: 8px;\n max-width: 100%;\n\n &__label {\n white-space: nowrap;\n }\n\n &__chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n &__chip {\n background: white;\n box-shadow: none;\n\n .v-chip__content {\n max-width: 40vw;\n }\n\n &:hover .v-chip__close {\n opacity: 0.8;\n }\n }\n\n .v-chip__close {\n opacity: 0.3;\n transition: opacity 0.2s;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AFilterAdvancedButton from '@/labs/filters/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\nimport { computed, inject, nextTick, provide, ref } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport FiltersSelected from '@/labs/filters/FiltersSelected.vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { isBoolean, isDefined, isUndefined } from '@/utils/common'\nimport { type FilterStoreIdentifier, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { datatableSlotName } from '@/components/datatable/datatable'\nimport FilterDetailItem from '@/labs/filters/FilterDetailItem.vue'\nimport AFilterBookmarkButton from '@/components/buttons/filter/AFilterBookmarkButton.vue'\nimport FilterBookmarks from '@/labs/filters/FilterBookmarks.vue'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { type AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n enableTop?: boolean\n hideButtons?: boolean\n formName?: string\n userId?: IntegerIdNullable | undefined\n client?: (() => AxiosInstance) | undefined\n store?: FilterStoreIdentifier | boolean // false to disable, FilterStoreIdentifier to custom store key\n alwaysVisible?: boolean\n hideMore?: boolean\n }>(),\n {\n enableTop: false,\n hideButtons: false,\n formName: 'search',\n userId: undefined,\n client: undefined,\n store: true,\n alwaysVisible: false,\n hideMore: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'bookmarkLoadAfter'): void\n}>()\n\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\nconst showDetail = defineModel<boolean>('showDetail', { default: false, required: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\n}\nconst identifier = ref<Partial<FilterStoreIdentifier>>({\n system: filterConfig.general.system,\n subject: filterConfig.general.subject,\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (!isBoolean(props.store)) {\n identifier.value.system = props.store.system\n identifier.value.subject = props.store.subject\n} else if (false === props.store) {\n identifier.value.system = undefined\n identifier.value.subject = undefined\n}\nconst submitResetCounter = ref(0)\nprovide(FilterSubmitResetCounterKey, submitResetCounter)\nconst filterSelected = ref<Map<string, ValueObjectOption<string | number>[]>>(new Map())\nprovide(FilterSelectedKey, filterSelected)\n\nconst submitFilter = () => {\n submitResetCounter.value++\n nextTick(() => {\n emit('submit')\n })\n}\n\nconst { clearAll, clearAllFilterSelected } = useFilterClearHelpers()\n\nconst submitFilterBookmark = () => {\n nextTick(() => {\n submitResetCounter.value++\n emit('bookmarkLoadAfter')\n })\n}\n\nconst resetFilter = () => {\n clearAll(filterData, filterConfig)\n clearAllFilterSelected(filterData, filterConfig, filterSelected)\n nextTick(() => {\n submitResetCounter.value++\n emit('reset')\n })\n}\n\nconst toggleFilterDetail = () => {\n showDetail.value = !showDetail.value\n}\n\nconst touched = computed(() => {\n return filterConfig.touched\n})\n\nconst renderedFieldNames = computed(() => {\n return Object.entries(filterConfig.fields)\n .filter(([, field]) => !field.render.skip)\n .map(([fieldName]) => fieldName)\n})\n\nif (props.alwaysVisible) {\n showDetail.value = true\n}\n\ndefineExpose({\n submit: submitFilter,\n reset: resetFilter,\n})\n</script>\n\n<template>\n <VForm\n :name=\"formName\"\n @submit.prevent=\"submitFilter\"\n >\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol>\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol v-if=\"store && userId && isDefined(client)\">\n <slot name=\"bookmarks\">\n <div class=\"d-flex flex-wrap align-center\">\n <FilterBookmarks\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :user-id=\"userId\"\n @submit=\"submitFilterBookmark\"\n />\n </div>\n </slot>\n </VCol>\n </VRow>\n <VRow\n v-if=\"!alwaysVisible\"\n dense\n >\n <VCol\n v-if=\"!hideMore\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"showDetail\"\n @advanced-filter=\"toggleFilterDetail\"\n />\n </VCol>\n <VCol>\n <div class=\"a-filter__container\">\n <div class=\"a-filter__search\">\n <slot name=\"search\" />\n </div>\n <FiltersSelected />\n </div>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n <AFilterBookmarkButton\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n :client=\"client\"\n :user=\"userId\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :datatable-hidden-columns=\"datatableHiddenColumns\"\n />\n </slot>\n </VCol>\n </VRow>\n <div v-if=\"!hideMore\">\n <component :is=\"alwaysVisible ? 'div' : 'VSlideYTransition'\">\n <div\n v-show=\"showDetail\"\n :class=\"{ 'mt-6 pa-4 system-border-a': !alwaysVisible }\"\n >\n <slot name=\"detail\">\n <VRow>\n <VCol\n v-for=\"fieldName in renderedFieldNames\"\n :key=\"fieldName\"\n :cols=\"filterConfig.fields[fieldName].render.xs || 12\"\n :sm=\"filterConfig.fields[fieldName].render.sm || 6\"\n :md=\"filterConfig.fields[fieldName].render.md || 4\"\n :lg=\"filterConfig.fields[fieldName].render.lg || 3\"\n :xl=\"filterConfig.fields[fieldName].render.xl || 2\"\n >\n <slot\n :name=\"datatableSlotName(fieldName)\"\n :item-config=\"filterConfig.fields[fieldName]\"\n >\n <FilterDetailItem :name=\"fieldName\" />\n </slot>\n </VCol>\n </VRow>\n </slot>\n </div>\n </component>\n </div>\n </VForm>\n</template>\n\n<style lang=\"scss\">\n@use 'vuetify/tools' as *;\n\n.a-filter {\n &__container {\n width: 100%;\n }\n\n &__search {\n display: inline-flex;\n vertical-align: middle;\n min-width: 100%;\n height: 34px;\n\n @include media-breakpoint-up(sm) {\n min-width: 50%;\n margin-right: 8px;\n }\n\n @include media-breakpoint-up(md) {\n min-width: 40%;\n }\n\n @include media-breakpoint-up(lg) {\n min-width: 30%;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport {\n type DatatableOrderingOption,\n type DatatableOrderingOptions,\n SORT_BY_SCORE,\n SortOrder,\n} from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\nimport { DatatablePaginationKey } from '@/labs/filters/filterInjectionKeys'\n\nimport type { Pagination } from '@/labs/filters/pagination'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'id' | 'createdAt' | 'most-relevant'\n customOptions?: undefined | DatatableOrderingOptions\n paginationUpdateCustomCb?: ((option: DatatableOrderingOption, pagination: Ref<Pagination>) => void) | undefined\n }>(),\n {\n variant: 'id',\n customOptions: undefined,\n paginationUpdateCustomCb: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst modelValue = defineModel<number>('modelValue', {\n default: 1,\n required: false,\n})\n\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst defaultItemsCreatedAt: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst defaultItemsId: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'id', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'id', order: SortOrder.Asc } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n {\n id: 3,\n titleT: 'common.system.datatable.ordering.mostRelevant',\n sortBy: { key: SORT_BY_SCORE, order: SortOrder.Desc },\n },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === modelValue.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n if (props.variant === 'id') return defaultItemsId\n return defaultItemsCreatedAt\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValue.value = item.id\n}\n\nconst paginationUpdateDefault = (found: DatatableOrderingOption) => {\n if (!found.sortBy) {\n pagination.value = { ...pagination.value, ...{ sortBy: null, descending: true } }\n emit('sortByChange', found)\n }\n pagination.value.sortBy = found.sortBy\n emit('sortByChange', found)\n}\n\nwatch(\n modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n const found = options.value.find((option) => {\n return option.id === newValue\n })\n if (isUndefined(found)) {\n return\n }\n if (isUndefined(props.paginationUpdateCustomCb)) {\n paginationUpdateDefault(found)\n return\n }\n props.paginationUpdateCustomCb(found, pagination)\n }\n)\n\nwatch(\n pagination,\n (newValue, oldValue) => {\n if (newValue.sortBy?.key === oldValue?.sortBy?.key && newValue.sortBy?.order === oldValue?.sortBy?.order) {\n return\n }\n const found = options.value.find((option) => {\n return newValue.sortBy?.key === option.sortBy?.key && newValue.sortBy?.order === option.sortBy?.order\n })\n if (isUndefined(found)) {\n return\n }\n modelValue.value = found.id\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === modelValue }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, watch } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { DatatablePaginationKey } from '@/labs/filters/filterInjectionKeys'\nimport { useThrottleFn } from '@vueuse/core'\n\nwithDefaults(\n defineProps<{\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(pagination.value.totalCount / pagination.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return pagination.value.page * pagination.value.rowsPerPage - pagination.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n pagination.value.page * pagination.value.rowsPerPage -\n pagination.value.rowsPerPage +\n pagination.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return pagination.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(pagination.value.hasNextPage) || pagination.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(pagination.value.hasNextPage) && pagination.value.page === lastPage.value) ||\n pagination.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(pagination.value.hasNextPage)) {\n return pagination.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return pagination.value.totalCount\n})\n\nwatch(\n () => pagination.value.rowsPerPage,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n pagination.value.page = 1\n emit('change')\n }\n }\n)\n\nwatch(\n () => pagination.value.page,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n }\n)\n\nconst onClickFirst = useThrottleFn(() => {\n pagination.value.page = 1\n}, 300)\n\nconst onClickLast = useThrottleFn(() => {\n pagination.value.page = lastPage.value\n}, 300)\n\nconst onClickPrev = useThrottleFn(() => {\n pagination.value.page = pagination.value.page - 1\n}, 300)\n\nconst onClickNext = useThrottleFn(() => {\n pagination.value.page = pagination.value.page + 1\n}, 300)\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"pagination.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === pagination.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ pagination.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","import { AnzuApiResponseCodeError, isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport type { AxiosClientFn } from '@/labs/api/client'\nimport { useApiQueryBuilder } from '@/labs/api/useApiQueryBuilder'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: IntegerId[] | DocId[], isSearchApi: boolean, field = 'id'): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length // todo add batch fetch\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder(field, false)\n if (isSearchApi) queryAdd(field, ids.join(','))\n else queryAddFilter('in', field, ids.join(','))\n\n return queryBuild()\n}\n\nexport const useApiFetchByIds = <R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {},\n isSearchApi = false,\n field = 'id'\n): UseApiFetchByIdsReturnType<R> => {\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n ids: DocId[] | IntegerId[],\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) +\n generateByIdsApiQuery(ids, isSearchApi, field)\n\n const res = await client().get(url, {\n ...options,\n signal: abortController.signal,\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data?.data) {\n return res.data.data as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return [] as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplate, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortFetch = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeFetch,\n abortFetch,\n }\n}\n\nexport type UseApiFetchByIdsReturnType<R> = {\n executeFetch: (\n ids: DocId[] | IntegerId[],\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams | undefined\n ) => Promise<R>\n abortFetch: () => void\n}\n","import { AnzuApiResponseCodeError, isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport { generateListQuery } from '@/labs/api/useApiFetchList'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport { ref } from 'vue'\nimport { usePagination as usePagination } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport type { AxiosClientFn } from '@/labs/api/client'\n\n/**\n * @template R Response type override\n */\nexport const useApiFetchListBatch = <R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {}\n): UseApiFetchListBatchReturnType<R> => {\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n sortBy = 'id',\n sortDesc = true,\n batchSize = 100,\n forceElastic = false\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const searchApi = (filterConfig.general.elastic || forceElastic) ? '/search' : ''\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const { pagination } = usePagination(sortBy, sortDesc ? SortOrder.Desc : SortOrder.Asc, {\n rowsPerPage: batchSize,\n })\n const url = (isUndefined(params) ? template : replaceUrlParameters(template, params)) + searchApi\n const results = [] as unknown as R\n\n // First page request\n const res = await client().get(url + generateListQuery(pagination, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n\n if (isApiInfiniteResponseList(resData)) {\n pagination.value.hasNextPage = resData.hasNextPage\n\n // Handle pagination for infinite lists\n while (pagination.value.hasNextPage) {\n pagination.value.page++\n const nextPageResponse = await client().get(url + generateListQuery(pagination, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.value.hasNextPage = nextPageData.hasNextPage\n }\n } else if (isApiResponseList(resData)) {\n pagination.value.totalCount = resData.totalCount\n\n if (pagination.value.totalCount <= pagination.value.rowsPerPage) {\n return results as R\n }\n\n // Handle pagination for regular lists - fetch all remaining pages in parallel\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.value.totalCount / pagination.value.rowsPerPage)\n\n for (let i = 1; i < numPages; i++) { // Start from 1 since we already fetched page 0\n const pageCopy = { ...pagination.value, page: i + 1 }\n const paginationRef = ref(pageCopy)\n promises.push(\n client().get(url + generateListQuery(paginationRef, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n )\n }\n\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n\n return results as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return [] as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplate, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortFetch = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeFetch,\n abortFetch,\n }\n}\n\nexport type UseApiFetchListBatchReturnType<R> = {\n executeFetch: (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams,\n sortBy?: string,\n sortDesc?: boolean,\n batchSize?: number,\n forceElastic?: boolean\n ) => Promise<R>\n abortFetch: () => void\n}\n","import type { AxiosInstance } from 'axios'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const useFetchJobList = () => useApiFetchList<JobType[]>(client, system, ENTITY, END_POINT)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n useFetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import {\n type ColumnConfig,\n type ColumnInternalValues,\n DATETIME_AUTO_LABEL_TRACKING,\n type StoredData,\n} from '@/composables/system/datatableColumns'\nimport { computed, onMounted, type Ref, watch } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { isArray, isBoolean, isObject, isString, isUndefined } from '@/utils/common'\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\ninterface DatatableColumnsConfigMoreOptions {\n storeColumnsLocalStorage: string | boolean // false to disable, string to override store key\n disableActions: boolean\n customI18n: any\n showExpand: boolean\n}\n\nconst DatatableColumnsConfigMoreOptionsDefault = {\n storeColumnsLocalStorage: true,\n disableActions: false,\n customI18n: undefined,\n showExpand: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string,\n subject: string,\n moreOptions: Partial<DatatableColumnsConfigMoreOptions> = {}\n) {\n const options = { ...DatatableColumnsConfigMoreOptionsDefault, ...moreOptions }\n const localI18n = options.customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n\n let storeKey: undefined | string = undefined\n if (isString(options.storeColumnsLocalStorage)) {\n storeKey = options.storeColumnsLocalStorage\n } else if (isBoolean(options.storeColumnsLocalStorage) && true === options.storeColumnsLocalStorage) {\n storeKey = 'table_' + system + '_' + subject\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n if (options.showExpand) columns.push({ key: 'data-table-expand', sortable: false })\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!options.disableActions) columns.push({ key: 'actions', sortable: false, fixed: 'end' })\n return columns\n })\n\n const loadStoredColumns = () => {\n if (!storeKey || !localStorage) return\n const stored = localStorage.getItem(storeKey)\n if (!stored) return\n const storedData = JSON.parse(stored) as StoredData\n if (!isObject(storedData)) return\n if (!isArray(storedData.hidden)) return\n columnsHidden.value = storedData.hidden as string[]\n }\n\n const storeColumns = (columns: string[]) => {\n if (!storeKey || !localStorage) return\n localStorage.setItem(storeKey, JSON.stringify({ hidden: columns }))\n }\n\n onMounted(() => {\n loadStoredColumns()\n })\n\n watch(columnsHidden, (newValue) => {\n storeColumns(newValue)\n })\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n }\n}\n","import { type DatatableOrderingOption, type DatatableSortBy } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type FilterConfig, type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { createDatatableColumnsConfig } from '@/labs/filters/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport type { UrlParams } from '@/services/api/apiHelper'\nimport { useDebounceFn } from '@vueuse/core'\nimport { isNull } from '@/utils/common'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n executeFetch: (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string | undefined,\n urlParamsOverride?: UrlParams | undefined,\n forceElastic?: boolean\n ) => Promise<TItem[]>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n filterSortBy: DatatableSortBy | null = null,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n forceElastic: boolean = false\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n const { pagination, setSortBy, incrementPage } = usePagination(\n isNull(filterSortBy) ? null : filterSortBy.key,\n filterSortBy?.order\n )\n\n const { resetFilter, submitFilter } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n })\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject,\n { storeColumnsLocalStorage: false, disableActions: true }\n )\n\n const onOpen = () => {\n resetState()\n getListDebounced()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n setSortBy(option.sortBy)\n getListDebounced()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n incrementPage()\n try {\n const res = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n items.value.push(...res)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const getListDebounced = useDebounceFn(async () => {\n await getList()\n })\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget || (eventTarget.tagName === 'INPUT' && (eventTarget as HTMLInputElement).type === 'checkbox')) {\n return\n }\n const parent = eventTarget.closest('.v-data-table__tr')\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList: getListDebounced,\n resetFilter: () => resetFilter(pagination, getListDebounced),\n submitFilter: () => submitFilter(pagination, getListDebounced),\n }\n}\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport ADatatablePagination from '@/labs/filters/ADatatablePagination.vue'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <slot name=\"filter\" />\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"minCount === maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: minCount,\n maxCount: maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"names":["props","__props","emit","__emit","submitResetCounter","inject","FilterSubmitResetCounterKey","filterSelected","FilterSelectedKey","filterConfig","FilterConfigKey","filterData","FilterDataKey","isUndefined","modelValue","computed","newValue","updateSelected","nextTick","timeIntervalOptions","getTimeIntervalOption","useTimeIntervalOptions","modelInternal","ref","dialogCustom","dialogData","dateTimeNow","displayFromTo","v$","useFilterTimeIntervalValidators","filterConfigCurrent","t","useI18n","label","clearOne","useFilterClearHelpers","showValidationError","useAlerts","onClear","clearField","onDialogConfirm","onDialogClose","fromValue","isArray","isBoolean","isNull","found","isDatetimeUTC","customOption","TimeIntervalSpecialOptions","dateTimePretty","onEditInterval","clear","watch","filterDataUntil","fromNewValue","untilNewValue","fromOldValue","untilOldValue","onInternalItemChange","item","_createBlock","_component_VTextarea","_unref","_component_VSelect","$event","_withCtx","itemProps","_createVNode","_component_VListItem","_mergeProps","_component_VDialog","_component_VCard","ADialogToolbar","_renderSlot","_ctx","_component_VCardText","ARow","AFormDatetimePicker","_cache","_component_VCardActions","_component_VSpacer","_component_ABtnTertiary","_component_ABtnPrimary","active","onClick","event","eventClickBlur","_component_VBtn","_component_VIcon","_component_VTooltip","_createTextVNode","_toDisplayString","getTitleFromConfig","name","titleT","selectedArray","fieldOrder","key","valueArray","a","b","clearOneFilterSelected","isClearable","clickClose","optionValue","_createElementBlock","_Fragment","_renderList","_createElementVNode","_hoisted_1","_openBlock","option","_component_VChip","_withModifiers","datatableHiddenColumns","_useModel","showDetail","identifier","provide","submitFilter","clearAll","clearAllFilterSelected","submitFilterBookmark","resetFilter","toggleFilterDetail","touched","renderedFieldNames","field","fieldName","__expose","_component_VForm","_component_VRow","_component_VCol","isDefined","FilterBookmarks","AFilterAdvancedButton","_hoisted_2","_hoisted_3","FiltersSelected","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","_hoisted_4","_resolveDynamicComponent","datatableSlotName","FilterDetailItem","pagination","DatatablePaginationKey","defaultItemsCreatedAt","SortOrder","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","options","onItemClick","paginationUpdateDefault","oldValue","_component_VMenu","_component_VList","_component_VListItemTitle","_normalizeClass","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","onClickFirst","useThrottleFn","onClickLast","onClickPrev","onClickNext","_component_VBtnToggle","_hoisted_5","_hoisted_6","generateByIdsApiQuery","ids","isSearchApi","querySetLimit","querySetOffset","querySetOrder","queryBuild","queryAddFilter","queryAdd","useApiQueryBuilder","limit","useApiFetchByIds","client","system","entity","urlTemplate","urlParams","abortController","urlTemplateOverride","urlParamsOverride","params","template","url","replaceUrlParameters","res","isValidHTTPStatus","AnzuApiResponseCodeError","HTTP_STATUS_NO_CONTENT","AnzuFatalError","err","isAnzuApiResponseCodeError","axiosErrorResponseIsForbidden","AnzuApiForbiddenError","axiosErrorResponseHasValidationData","AnzuApiValidationError","axiosErrorResponseHasDependencyExistsData","AnzuApiDependencyExistsError","axiosErrorResponseHasForbiddenOperationData","AnzuApiForbiddenOperationError","axiosErrorIsTimeout","AnzuApiTimeoutError","axios","AnzuApiAxiosError","useApiFetchListBatch","sortBy","sortDesc","batchSize","forceElastic","searchApi","usePagination","results","generateListQuery","resData","isApiInfiniteResponseList","nextPageData","isApiResponseList","promises","numPages","i","pageCopy","paginationRef","pageResponse","END_POINT","ENTITY","useJobApi","useApiFetchList","id","apiFetchOne","data","type","stringToKebabCase","apiCreateOne","apiDeleteOne","defaultColumn","DatatableColumnsConfigMoreOptionsDefault","createDatatableColumnsConfig","config","columnsHidden","subject","moreOptions","localI18n","i18n","storeKey","isString","columnsAll","obj","DATETIME_AUTO_LABEL_TRACKING","columnsVisible","columns","column","loadStoredColumns","stored","storedData","isObject","storeColumns","onMounted","useSubjectSelect","datatableConfig","executeFetch","filterSortBy","filterTouched","items","selected","loading","setSortBy","incrementPage","useFilterHelpers","showErrorsDefault","onOpen","resetState","getListDebounced","sortByChange","onFetchNextPage","e","getList","useDebounceFn","eventTarget","parent","firstTd","input","dialogLocal","dialog","paginationComputed","toRaw","sidebarLeft","selectedItemsCount","disabledSubmit","toggleSidebar","onClose","onConfirm","fetchNextPage","onPageChange","hasNextPage","autoloadOnIntersect","isIntersecting","withModifiers","_component_VToolbar","_hoisted_7","_hoisted_8","_component_ABtnSecondary","_vShow","ADatatablePagination","_hoisted_9","_hoisted_10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"labs.js","sources":["../src/labs/filters/AFilterTimeInterval.vue","../src/labs/filters/AFilterAdvancedButton.vue","../src/labs/filters/FiltersSelected.vue","../src/labs/filters/AFilterWrapper.vue","../src/labs/filters/ADatatableOrdering.vue","../src/labs/filters/ADatatablePagination.vue","../src/labs/api/useApiFetchByIds.ts","../src/labs/api/useApiFetchListBatch.ts","../src/labs/job/jobApi.ts","../src/labs/filters/datatableColumns.ts","../src/labs/subjectSelect/useSubjectSelect.ts","../src/labs/subjectSelect/ASubjectSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isArray, isBoolean, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type AllowedFilterValues, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n useFilterTimeIntervalValidators,\n useTimeIntervalOptions,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport AFormDatetimePicker from '@/components/form/AFormDatetimePicker.vue'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport ARow from '@/components/ARow.vue'\nimport { dateTimeNow, dateTimePretty, isDatetimeUTC } from '@/utils/datetime'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nconst props = withDefaults(\n defineProps<{\n nameFrom: string\n nameUntil: string\n allowed?: TimeIntervalToolsValue[]\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n allowed: undefined,\n placeholder: undefined,\n dataCy: 'filter-time-interval',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameUntil]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameUntil])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.nameFrom]\n },\n set(newValue) {\n filterData[props.nameFrom] = newValue\n updateSelected(newValue)\n filterConfig.touched = true\n nextTick(() => {\n emit('change')\n })\n },\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { timeIntervalOptions, getTimeIntervalOption } = useTimeIntervalOptions(props.allowed)\nconst modelInternal = ref<TimeIntervalToolsValue>(null)\nconst dialogCustom = ref(false)\nconst dialogData = ref<{ from: DatetimeUTCNullable; until: DatetimeUTCNullable }>({\n from: null,\n until: dateTimeNow(),\n})\nconst displayFromTo = ref(false)\n\nconst { v$ } = useFilterTimeIntervalValidators(dialogData)\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.nameFrom])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\nconst { showValidationError } = useAlerts()\n\nconst onClear = () => {\n displayFromTo.value = false\n modelInternal.value = null\n clearField()\n}\n\nconst onDialogConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n displayFromTo.value = true\n dialogCustom.value = false\n filterData[props.nameUntil] = dialogData.value.until\n modelValue.value = dialogData.value.from\n}\n\nconst onDialogClose = () => {\n dialogCustom.value = false\n modelInternal.value = null\n}\n\nconst clearField = () => {\n clearOne(props.nameFrom, filterData, filterConfig)\n clearOne(props.nameUntil, filterData, filterConfig)\n filterSelected.value.delete(props.nameFrom)\n}\n\nconst updateSelected = (fromValue: AllowedFilterValues) => {\n if (isArray(fromValue) || isBoolean(fromValue)) return\n if (isNull(fromValue) || isUndefined(fromValue)) {\n filterSelected.value.delete(props.nameFrom)\n return\n }\n const found = getTimeIntervalOption(fromValue as TimeIntervalToolsValue)\n if (!found && isDatetimeUTC(fromValue)) {\n const customOption = getTimeIntervalOption(TimeIntervalSpecialOptions.Custom)!\n filterSelected.value.set(props.nameFrom, [\n {\n title:\n customOption.title +\n ': ' +\n dateTimePretty(dialogData.value.from) +\n ' - ' +\n dateTimePretty(dialogData.value.until),\n value: fromValue,\n },\n ])\n return\n }\n if (!found) return\n filterSelected.value.set(props.nameFrom, [{ title: found.title, value: fromValue }])\n}\n\nconst onEditInterval = (clear = false) => {\n v$.value.$reset()\n if (clear) {\n dialogData.value.from = null\n dialogData.value.until = dateTimeNow()\n }\n dialogCustom.value = true\n}\n\nwatch(\n modelValue,\n (newValue) => {\n if (isArray(newValue) || isBoolean(newValue)) return\n displayFromTo.value = false\n if (isUndefined(newValue) || isNull(newValue)) {\n modelInternal.value = null\n return\n }\n const found = getTimeIntervalOption(modelValue.value as TimeIntervalToolsValue)\n const filterDataUntil = filterData[props.nameUntil]\n if (!found && isDatetimeUTC(modelValue.value) && isDatetimeUTC(filterDataUntil)) {\n modelInternal.value = TimeIntervalSpecialOptions.Custom\n dialogData.value.from = modelValue.value\n dialogData.value.until = filterDataUntil\n displayFromTo.value = true\n }\n if (found) {\n modelInternal.value = found.value\n }\n },\n { immediate: true }\n)\n\nwatch(\n [() => filterData[props.nameFrom], () => filterData[props.nameUntil]],\n ([fromNewValue, untilNewValue], [fromOldValue, untilOldValue]) => {\n if (fromNewValue === fromOldValue && untilNewValue === untilOldValue) return\n updateSelected(fromNewValue)\n },\n { immediate: true }\n)\n\nconst onInternalItemChange = (item: ValueObjectOption<TimeIntervalToolsValue>) => {\n if (item.value === TimeIntervalSpecialOptions.Custom) {\n onEditInterval(true)\n return\n }\n filterData[props.nameUntil] = null\n modelValue.value = item.value\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"displayFromTo\"\n :label=\"label\"\n :model-value=\"dateTimePretty(dialogData.from) + ' - ' + dateTimePretty(dialogData.until)\"\n readonly\n rows=\"1\"\n auto-grow\n hide-details\n append-inner-icon=\"mdi-menu-down\"\n clearable\n class=\"cursor-pointer\"\n @click:clear.stop=\"onClear\"\n @click.stop=\"onEditInterval()\"\n />\n <VSelect\n v-else\n v-model=\"modelInternal\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :clearable=\"!isNull(modelInternal)\"\n no-filter\n :data-cy=\"dataCy\"\n :items=\"timeIntervalOptions\"\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"onClear\"\n >\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n @click=\"onInternalItemChange(item)\"\n />\n </template>\n </VSelect>\n <VDialog\n v-if=\"dialogCustom\"\n :model-value=\"true\"\n width=\"auto\"\n :min-width=\"360\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"onDialogClose\">\n <slot name=\"title\">\n {{ label }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.from\"\n :v=\"v$.dialogData.from\"\n :label=\"t('common.filter.timeInterval.from')\"\n required\n />\n </ARow>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.until\"\n :v=\"v$.dialogData.until\"\n :label=\"t('common.filter.timeInterval.until')\"\n required\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onDialogClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onDialogConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<style lang=\"scss\" scoped>\n.v-text-field.cursor-pointer {\n ::v-deep(.v-field),\n ::v-deep(.v-field__input) {\n cursor: pointer;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-filter-variant\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { FilterConfigKey, FilterDataKey, FilterSelectedKey } from '@/labs/filters/filterInjectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst getTitleFromConfig = (name: string) => {\n const titleT = filterConfig.fields?.[name]?.titleT\n if (titleT) return t(titleT)\n return name\n}\n\nconst selectedArray = computed(() => {\n const fieldOrder = Object.keys(filterConfig.fields)\n return Array.from(filterSelected.value)\n .map(([key, valueArray]) => ({\n name: key,\n title: getTitleFromConfig(key),\n options: valueArray,\n }))\n .sort((a, b) => fieldOrder.indexOf(a.name) - fieldOrder.indexOf(b.name))\n})\n\nconst { clearOneFilterSelected, isClearable } = useFilterClearHelpers()\n\nconst clickClose = (name: string, optionValue: number | string) => {\n clearOneFilterSelected(name, optionValue, filterData, filterConfig, filterSelected)\n filterConfig.touched = true\n}\n</script>\n\n<template>\n <div\n v-for=\"item in selectedArray\"\n :key=\"item.name\"\n class=\"a-selected-filters\"\n >\n <div class=\"a-selected-filters__label text-caption\">\n {{ item.title }}:\n </div>\n <div\n v-for=\"option in item.options\"\n :key=\"option.value\"\n class=\"a-selected-filters__chips\"\n >\n <VChip\n v-if=\"isClearable(item.name, filterConfig)\"\n closable\n size=\"small\"\n class=\"a-selected-filters__chip\"\n @click:close.stop=\"clickClose(item.name, option.value)\"\n >\n <template #close>\n <VIcon\n size=\"16\"\n icon=\"mdi-close-circle\"\n />\n </template>\n {{ option.title }}\n </VChip>\n <VChip\n v-else\n size=\"small\"\n class=\"a-selected-filters__chip\"\n >\n {{ option.title }}\n </VChip>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-selected-filters {\n display: inline-flex;\n align-items: center;\n background: #f5f5f5;\n border-radius: 20px;\n padding: 4px 4px 4px 12px;\n margin: 0 4px 2px 0;\n gap: 8px;\n max-width: 100%;\n\n &__label {\n white-space: nowrap;\n }\n\n &__chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n &__chip {\n background: white;\n box-shadow: none;\n\n .v-chip__content {\n max-width: 40vw;\n }\n\n &:hover .v-chip__close {\n opacity: 0.8;\n }\n }\n\n .v-chip__close {\n opacity: 0.3;\n transition: opacity 0.2s;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AFilterAdvancedButton from '@/labs/filters/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\nimport { computed, inject, nextTick, provide, ref } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport FiltersSelected from '@/labs/filters/FiltersSelected.vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { isBoolean, isDefined, isUndefined } from '@/utils/common'\nimport { type FilterStoreIdentifier, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { datatableSlotName } from '@/components/datatable/datatable'\nimport FilterDetailItem from '@/labs/filters/FilterDetailItem.vue'\nimport AFilterBookmarkButton from '@/components/buttons/filter/AFilterBookmarkButton.vue'\nimport FilterBookmarks from '@/labs/filters/FilterBookmarks.vue'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { type AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n enableTop?: boolean\n hideButtons?: boolean\n formName?: string\n userId?: IntegerIdNullable | undefined\n client?: (() => AxiosInstance) | undefined\n store?: FilterStoreIdentifier | boolean // false to disable, FilterStoreIdentifier to custom store key\n alwaysVisible?: boolean\n hideMore?: boolean\n }>(),\n {\n enableTop: false,\n hideButtons: false,\n formName: 'search',\n userId: undefined,\n client: undefined,\n store: true,\n alwaysVisible: false,\n hideMore: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'bookmarkLoadAfter'): void\n}>()\n\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\nconst showDetail = defineModel<boolean>('showDetail', { default: false, required: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\n}\nconst identifier = ref<Partial<FilterStoreIdentifier>>({\n system: filterConfig.general.system,\n subject: filterConfig.general.subject,\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (!isBoolean(props.store)) {\n identifier.value.system = props.store.system\n identifier.value.subject = props.store.subject\n} else if (false === props.store) {\n identifier.value.system = undefined\n identifier.value.subject = undefined\n}\nconst submitResetCounter = ref(0)\nprovide(FilterSubmitResetCounterKey, submitResetCounter)\nconst filterSelected = ref<Map<string, ValueObjectOption<string | number>[]>>(new Map())\nprovide(FilterSelectedKey, filterSelected)\n\nconst submitFilter = () => {\n submitResetCounter.value++\n nextTick(() => {\n emit('submit')\n })\n}\n\nconst { clearAll, clearAllFilterSelected } = useFilterClearHelpers()\n\nconst submitFilterBookmark = () => {\n nextTick(() => {\n submitResetCounter.value++\n emit('bookmarkLoadAfter')\n })\n}\n\nconst resetFilter = () => {\n clearAll(filterData, filterConfig)\n clearAllFilterSelected(filterData, filterConfig, filterSelected)\n nextTick(() => {\n submitResetCounter.value++\n emit('reset')\n })\n}\n\nconst toggleFilterDetail = () => {\n showDetail.value = !showDetail.value\n}\n\nconst touched = computed(() => {\n return filterConfig.touched\n})\n\nconst renderedFieldNames = computed(() => {\n return Object.entries(filterConfig.fields)\n .filter(([, field]) => !field.render.skip)\n .map(([fieldName]) => fieldName)\n})\n\nif (props.alwaysVisible) {\n showDetail.value = true\n}\n\ndefineExpose({\n submit: submitFilter,\n reset: resetFilter,\n})\n</script>\n\n<template>\n <VForm\n :name=\"formName\"\n @submit.prevent=\"submitFilter\"\n >\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol>\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol v-if=\"store && userId && isDefined(client)\">\n <slot name=\"bookmarks\">\n <div class=\"d-flex flex-wrap align-center\">\n <FilterBookmarks\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :user-id=\"userId\"\n @submit=\"submitFilterBookmark\"\n />\n </div>\n </slot>\n </VCol>\n </VRow>\n <VRow\n v-if=\"!alwaysVisible\"\n dense\n >\n <VCol\n v-if=\"!hideMore\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"showDetail\"\n @advanced-filter=\"toggleFilterDetail\"\n />\n </VCol>\n <VCol>\n <div class=\"a-filter__container\">\n <div class=\"a-filter__search\">\n <slot name=\"search\" />\n </div>\n <FiltersSelected />\n </div>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n <AFilterBookmarkButton\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n :client=\"client\"\n :user=\"userId\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :datatable-hidden-columns=\"datatableHiddenColumns\"\n />\n </slot>\n </VCol>\n </VRow>\n <div v-if=\"!hideMore\">\n <component :is=\"alwaysVisible ? 'div' : 'VSlideYTransition'\">\n <div\n v-show=\"showDetail\"\n :class=\"{ 'mt-6 pa-4 system-border-a': !alwaysVisible }\"\n >\n <slot name=\"detail\">\n <VRow>\n <VCol\n v-for=\"fieldName in renderedFieldNames\"\n :key=\"fieldName\"\n :cols=\"filterConfig.fields[fieldName].render.xs || 12\"\n :sm=\"filterConfig.fields[fieldName].render.sm || 6\"\n :md=\"filterConfig.fields[fieldName].render.md || 4\"\n :lg=\"filterConfig.fields[fieldName].render.lg || 3\"\n :xl=\"filterConfig.fields[fieldName].render.xl || 2\"\n >\n <slot\n :name=\"datatableSlotName(fieldName)\"\n :item-config=\"filterConfig.fields[fieldName]\"\n >\n <FilterDetailItem :name=\"fieldName\" />\n </slot>\n </VCol>\n </VRow>\n </slot>\n </div>\n </component>\n </div>\n </VForm>\n</template>\n\n<style lang=\"scss\">\n@use 'vuetify/tools' as *;\n\n.a-filter {\n &__container {\n width: 100%;\n }\n\n &__search {\n display: inline-flex;\n vertical-align: middle;\n min-width: 100%;\n height: 34px;\n\n @include media-breakpoint-up(sm) {\n min-width: 50%;\n margin-right: 8px;\n }\n\n @include media-breakpoint-up(md) {\n min-width: 40%;\n }\n\n @include media-breakpoint-up(lg) {\n min-width: 30%;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport {\n type DatatableOrderingOption,\n type DatatableOrderingOptions,\n SORT_BY_SCORE,\n SortOrder,\n} from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\nimport { DatatablePaginationKey } from '@/labs/filters/filterInjectionKeys'\n\nimport type { Pagination } from '@/labs/filters/pagination'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'id' | 'createdAt' | 'most-relevant'\n customOptions?: undefined | DatatableOrderingOptions\n paginationUpdateCustomCb?: ((option: DatatableOrderingOption, pagination: Ref<Pagination>) => void) | undefined\n }>(),\n {\n variant: 'id',\n customOptions: undefined,\n paginationUpdateCustomCb: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst modelValue = defineModel<number>('modelValue', {\n default: 1,\n required: false,\n})\n\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst defaultItemsCreatedAt: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst defaultItemsId: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'id', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'id', order: SortOrder.Asc } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n {\n id: 3,\n titleT: 'common.system.datatable.ordering.mostRelevant',\n sortBy: { key: SORT_BY_SCORE, order: SortOrder.Desc },\n },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === modelValue.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n if (props.variant === 'id') return defaultItemsId\n return defaultItemsCreatedAt\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValue.value = item.id\n}\n\nconst paginationUpdateDefault = (found: DatatableOrderingOption) => {\n if (!found.sortBy) {\n pagination.value = { ...pagination.value, ...{ sortBy: null, descending: true } }\n emit('sortByChange', found)\n }\n pagination.value.sortBy = found.sortBy\n emit('sortByChange', found)\n}\n\nwatch(\n modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n const found = options.value.find((option) => {\n return option.id === newValue\n })\n if (isUndefined(found)) {\n return\n }\n if (isUndefined(props.paginationUpdateCustomCb)) {\n paginationUpdateDefault(found)\n return\n }\n props.paginationUpdateCustomCb(found, pagination)\n }\n)\n\nwatch(\n pagination,\n (newValue, oldValue) => {\n if (newValue.sortBy?.key === oldValue?.sortBy?.key && newValue.sortBy?.order === oldValue?.sortBy?.order) {\n return\n }\n const found = options.value.find((option) => {\n return newValue.sortBy?.key === option.sortBy?.key && newValue.sortBy?.order === option.sortBy?.order\n })\n if (isUndefined(found)) {\n return\n }\n modelValue.value = found.id\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === modelValue }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, watch } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { DatatablePaginationKey } from '@/labs/filters/filterInjectionKeys'\nimport { useThrottleFn } from '@vueuse/core'\n\nwithDefaults(\n defineProps<{\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(pagination.value.totalCount / pagination.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return pagination.value.page * pagination.value.rowsPerPage - pagination.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n pagination.value.page * pagination.value.rowsPerPage -\n pagination.value.rowsPerPage +\n pagination.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return pagination.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(pagination.value.hasNextPage) || pagination.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(pagination.value.hasNextPage) && pagination.value.page === lastPage.value) ||\n pagination.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(pagination.value.hasNextPage)) {\n return pagination.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return pagination.value.totalCount\n})\n\nwatch(\n () => pagination.value.rowsPerPage,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n pagination.value.page = 1\n emit('change')\n }\n }\n)\n\nwatch(\n () => pagination.value.page,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n }\n)\n\nconst onClickFirst = useThrottleFn(() => {\n pagination.value.page = 1\n}, 300)\n\nconst onClickLast = useThrottleFn(() => {\n pagination.value.page = lastPage.value\n}, 300)\n\nconst onClickPrev = useThrottleFn(() => {\n pagination.value.page = pagination.value.page - 1\n}, 300)\n\nconst onClickNext = useThrottleFn(() => {\n pagination.value.page = pagination.value.page + 1\n}, 300)\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"pagination.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === pagination.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ pagination.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","import { AnzuApiResponseCodeError, isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport type { AxiosClientFn } from '@/labs/api/client'\nimport { useApiQueryBuilder } from '@/labs/api/useApiQueryBuilder'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: IntegerId[] | DocId[], isSearchApi: boolean, field = 'id'): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length // todo add batch fetch\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder(field, false)\n if (isSearchApi) queryAdd(field, ids.join(','))\n else queryAddFilter('in', field, ids.join(','))\n\n return queryBuild()\n}\n\nexport const useApiFetchByIds = <R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {},\n isSearchApi = false,\n field = 'id'\n): UseApiFetchByIdsReturnType<R> => {\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n ids: DocId[] | IntegerId[],\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) +\n generateByIdsApiQuery(ids, isSearchApi, field)\n\n const res = await client().get(url, {\n ...options,\n signal: abortController.signal,\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data?.data) {\n return res.data.data as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return [] as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplate, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortFetch = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeFetch,\n abortFetch,\n }\n}\n\nexport type UseApiFetchByIdsReturnType<R> = {\n executeFetch: (\n ids: DocId[] | IntegerId[],\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams | undefined\n ) => Promise<R>\n abortFetch: () => void\n}\n","import { AnzuApiResponseCodeError, isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport { generateListQuery } from '@/labs/api/useApiFetchList'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport { ref } from 'vue'\nimport { usePagination as usePagination } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport type { AxiosClientFn } from '@/labs/api/client'\n\n/**\n * @template R Response type override\n */\nexport const useApiFetchListBatch = <R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {}\n): UseApiFetchListBatchReturnType<R> => {\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n sortBy = 'id',\n sortDesc = true,\n batchSize = 100,\n forceElastic = false\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const searchApi = (filterConfig.general.elastic || forceElastic) ? '/search' : ''\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const { pagination } = usePagination(sortBy, sortDesc ? SortOrder.Desc : SortOrder.Asc, {\n rowsPerPage: batchSize,\n })\n const url = (isUndefined(params) ? template : replaceUrlParameters(template, params)) + searchApi\n const results = [] as unknown as R\n\n // First page request\n const res = await client().get(url + generateListQuery(pagination, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n\n if (isApiInfiniteResponseList(resData)) {\n pagination.value.hasNextPage = resData.hasNextPage\n\n // Handle pagination for infinite lists\n while (pagination.value.hasNextPage) {\n pagination.value.page++\n const nextPageResponse = await client().get(url + generateListQuery(pagination, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.value.hasNextPage = nextPageData.hasNextPage\n }\n } else if (isApiResponseList(resData)) {\n pagination.value.totalCount = resData.totalCount\n\n if (pagination.value.totalCount <= pagination.value.rowsPerPage) {\n return results as R\n }\n\n // Handle pagination for regular lists - fetch all remaining pages in parallel\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.value.totalCount / pagination.value.rowsPerPage)\n\n for (let i = 1; i < numPages; i++) { // Start from 1 since we already fetched page 0\n const pageCopy = { ...pagination.value, page: i + 1 }\n const paginationRef = ref(pageCopy)\n promises.push(\n client().get(url + generateListQuery(paginationRef, filterData, filterConfig), {\n ...options,\n signal: abortController.signal\n })\n )\n }\n\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n\n return results as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return [] as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplate, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortFetch = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeFetch,\n abortFetch,\n }\n}\n\nexport type UseApiFetchListBatchReturnType<R> = {\n executeFetch: (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams,\n sortBy?: string,\n sortDesc?: boolean,\n batchSize?: number,\n forceElastic?: boolean\n ) => Promise<R>\n abortFetch: () => void\n}\n","import type { AxiosInstance } from 'axios'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const useFetchJobList = () => useApiFetchList<JobType[]>(client, system, ENTITY, END_POINT)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n useFetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import {\n type ColumnConfig,\n type ColumnInternalValues,\n DATETIME_AUTO_LABEL_TRACKING,\n type StoredData,\n} from '@/composables/system/datatableColumns'\nimport { computed, onMounted, type Ref, watch } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { isArray, isBoolean, isObject, isString, isUndefined } from '@/utils/common'\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\ninterface DatatableColumnsConfigMoreOptions {\n storeColumnsLocalStorage: string | boolean // false to disable, string to override store key\n disableActions: boolean\n customI18n: any\n showExpand: boolean\n}\n\nconst DatatableColumnsConfigMoreOptionsDefault = {\n storeColumnsLocalStorage: true,\n disableActions: false,\n customI18n: undefined,\n showExpand: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string,\n subject: string,\n moreOptions: Partial<DatatableColumnsConfigMoreOptions> = {}\n) {\n const options = { ...DatatableColumnsConfigMoreOptionsDefault, ...moreOptions }\n const localI18n = options.customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n\n let storeKey: undefined | string = undefined\n if (isString(options.storeColumnsLocalStorage)) {\n storeKey = options.storeColumnsLocalStorage\n } else if (isBoolean(options.storeColumnsLocalStorage) && true === options.storeColumnsLocalStorage) {\n storeKey = 'table_' + system + '_' + subject\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n if (options.showExpand) columns.push({ key: 'data-table-expand', sortable: false })\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!options.disableActions) columns.push({ key: 'actions', sortable: false, fixed: 'end' })\n return columns\n })\n\n const loadStoredColumns = () => {\n if (!storeKey || !localStorage) return\n const stored = localStorage.getItem(storeKey)\n if (!stored) return\n const storedData = JSON.parse(stored) as StoredData\n if (!isObject(storedData)) return\n if (!isArray(storedData.hidden)) return\n columnsHidden.value = storedData.hidden as string[]\n }\n\n const storeColumns = (columns: string[]) => {\n if (!storeKey || !localStorage) return\n localStorage.setItem(storeKey, JSON.stringify({ hidden: columns }))\n }\n\n onMounted(() => {\n loadStoredColumns()\n })\n\n watch(columnsHidden, (newValue) => {\n storeColumns(newValue)\n })\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n }\n}\n","import { type DatatableOrderingOption, type DatatableSortBy } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type FilterConfig, type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { createDatatableColumnsConfig } from '@/labs/filters/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport type { UrlParams } from '@/services/api/apiHelper'\nimport { useDebounceFn } from '@vueuse/core'\nimport { isNull } from '@/utils/common'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n executeFetch: (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string | undefined,\n urlParamsOverride?: UrlParams | undefined,\n forceElastic?: boolean\n ) => Promise<TItem[]>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n filterSortBy: DatatableSortBy | null = null,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n forceElastic: boolean = false,\n enableActions: boolean = false,\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n const { pagination, setSortBy, incrementPage } = usePagination(\n isNull(filterSortBy) ? null : filterSortBy.key,\n filterSortBy?.order\n )\n\n const { resetFilter, submitFilter } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n })\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject,\n { storeColumnsLocalStorage: false, disableActions: !enableActions }\n )\n\n const onOpen = () => {\n resetState()\n getListDebounced()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n setSortBy(option.sortBy)\n getListDebounced()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n incrementPage()\n try {\n const res = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n items.value.push(...res)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const getListDebounced = useDebounceFn(async () => {\n await getList()\n })\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget || (eventTarget.tagName === 'INPUT' && (eventTarget as HTMLInputElement).type === 'checkbox')) {\n return\n }\n const parent = eventTarget.closest('.v-data-table__tr')\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList: getListDebounced,\n resetFilter: () => resetFilter(pagination, getListDebounced),\n submitFilter: () => submitFilter(pagination, getListDebounced),\n }\n}\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport ADatatablePagination from '@/labs/filters/ADatatablePagination.vue'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <slot name=\"filter\" />\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"minCount === maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: minCount,\n maxCount: maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n"],"names":["props","__props","emit","__emit","submitResetCounter","inject","FilterSubmitResetCounterKey","filterSelected","FilterSelectedKey","filterConfig","FilterConfigKey","filterData","FilterDataKey","isUndefined","modelValue","computed","newValue","updateSelected","nextTick","timeIntervalOptions","getTimeIntervalOption","useTimeIntervalOptions","modelInternal","ref","dialogCustom","dialogData","dateTimeNow","displayFromTo","v$","useFilterTimeIntervalValidators","filterConfigCurrent","t","useI18n","label","clearOne","useFilterClearHelpers","showValidationError","useAlerts","onClear","clearField","onDialogConfirm","onDialogClose","fromValue","isArray","isBoolean","isNull","found","isDatetimeUTC","customOption","TimeIntervalSpecialOptions","dateTimePretty","onEditInterval","clear","watch","filterDataUntil","fromNewValue","untilNewValue","fromOldValue","untilOldValue","onInternalItemChange","item","_createBlock","_component_VTextarea","_unref","_component_VSelect","$event","_withCtx","itemProps","_createVNode","_component_VListItem","_mergeProps","_component_VDialog","_component_VCard","ADialogToolbar","_renderSlot","_ctx","_component_VCardText","ARow","AFormDatetimePicker","_cache","_component_VCardActions","_component_VSpacer","_component_ABtnTertiary","_component_ABtnPrimary","active","onClick","event","eventClickBlur","_component_VBtn","_component_VIcon","_component_VTooltip","_createTextVNode","_toDisplayString","getTitleFromConfig","name","titleT","selectedArray","fieldOrder","key","valueArray","a","b","clearOneFilterSelected","isClearable","clickClose","optionValue","_createElementBlock","_Fragment","_renderList","_createElementVNode","_hoisted_1","_openBlock","option","_component_VChip","_withModifiers","datatableHiddenColumns","_useModel","showDetail","identifier","provide","submitFilter","clearAll","clearAllFilterSelected","submitFilterBookmark","resetFilter","toggleFilterDetail","touched","renderedFieldNames","field","fieldName","__expose","_component_VForm","_component_VRow","_component_VCol","isDefined","FilterBookmarks","AFilterAdvancedButton","_hoisted_2","_hoisted_3","FiltersSelected","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","_hoisted_4","_resolveDynamicComponent","datatableSlotName","FilterDetailItem","pagination","DatatablePaginationKey","defaultItemsCreatedAt","SortOrder","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","options","onItemClick","paginationUpdateDefault","oldValue","_component_VMenu","_component_VList","_component_VListItemTitle","_normalizeClass","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","onClickFirst","useThrottleFn","onClickLast","onClickPrev","onClickNext","_component_VBtnToggle","_hoisted_5","_hoisted_6","generateByIdsApiQuery","ids","isSearchApi","querySetLimit","querySetOffset","querySetOrder","queryBuild","queryAddFilter","queryAdd","useApiQueryBuilder","limit","useApiFetchByIds","client","system","entity","urlTemplate","urlParams","abortController","urlTemplateOverride","urlParamsOverride","params","template","url","replaceUrlParameters","res","isValidHTTPStatus","AnzuApiResponseCodeError","HTTP_STATUS_NO_CONTENT","AnzuFatalError","err","isAnzuApiResponseCodeError","axiosErrorResponseIsForbidden","AnzuApiForbiddenError","axiosErrorResponseHasValidationData","AnzuApiValidationError","axiosErrorResponseHasDependencyExistsData","AnzuApiDependencyExistsError","axiosErrorResponseHasForbiddenOperationData","AnzuApiForbiddenOperationError","axiosErrorIsTimeout","AnzuApiTimeoutError","axios","AnzuApiAxiosError","useApiFetchListBatch","sortBy","sortDesc","batchSize","forceElastic","searchApi","usePagination","results","generateListQuery","resData","isApiInfiniteResponseList","nextPageData","isApiResponseList","promises","numPages","i","pageCopy","paginationRef","pageResponse","END_POINT","ENTITY","useJobApi","useApiFetchList","id","apiFetchOne","data","type","stringToKebabCase","apiCreateOne","apiDeleteOne","defaultColumn","DatatableColumnsConfigMoreOptionsDefault","createDatatableColumnsConfig","config","columnsHidden","subject","moreOptions","localI18n","i18n","storeKey","isString","columnsAll","obj","DATETIME_AUTO_LABEL_TRACKING","columnsVisible","columns","column","loadStoredColumns","stored","storedData","isObject","storeColumns","onMounted","useSubjectSelect","datatableConfig","executeFetch","filterSortBy","enableActions","filterTouched","items","selected","loading","setSortBy","incrementPage","useFilterHelpers","showErrorsDefault","onOpen","resetState","getListDebounced","sortByChange","onFetchNextPage","e","getList","useDebounceFn","eventTarget","parent","firstTd","input","dialogLocal","dialog","paginationComputed","toRaw","sidebarLeft","selectedItemsCount","disabledSubmit","toggleSidebar","onClose","onConfirm","fetchNextPage","onPageChange","hasNextPage","autoloadOnIntersect","isIntersecting","withModifiers","_component_VToolbar","_hoisted_7","_hoisted_8","_component_ABtnSecondary","_vShow","ADatatablePagination","_hoisted_9","_hoisted_10"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"./*": "./*"
|
|
20
20
|
},
|
|
21
|
-
"version": "1.47.0-beta.
|
|
21
|
+
"version": "1.47.0-beta.338",
|
|
22
22
|
"license": "Apache-2.0",
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"@intlify/unplugin-vue-i18n": "^11.0.3",
|
|
56
56
|
"@kyvg/vue3-notification": "^3.4.2",
|
|
57
57
|
"@mdi/font": "^7.4.47",
|
|
58
|
-
"@sentry/vue": "^10.
|
|
58
|
+
"@sentry/vue": "^10.30.0",
|
|
59
59
|
"@shikijs/vitepress-twoslash": "^3.19.0",
|
|
60
60
|
"@stylistic/eslint-plugin": "^5.6.1",
|
|
61
61
|
"@tsconfig/node22": "^22.0.5",
|
|
62
|
-
"@types/node": "^24.10.
|
|
62
|
+
"@types/node": "^24.10.3",
|
|
63
63
|
"@types/rusha": "^0.8.3",
|
|
64
64
|
"@types/sortablejs": "^1.15.9",
|
|
65
65
|
"@types/webfontloader": "^1.6.38",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"vue": "3.5.25",
|
|
107
107
|
"vue-eslint-parser": "^10.2.0",
|
|
108
108
|
"vue-i18n": "11.2.2",
|
|
109
|
-
"vue-router": "4.6.
|
|
109
|
+
"vue-router": "4.6.4",
|
|
110
110
|
"vue-tsc": "3.1.5",
|
|
111
111
|
"vuetify": "3.11.3",
|
|
112
112
|
"webfontloader": "^1.6.28"
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
"unplugin": "2.3.11",
|
|
125
125
|
"vue": "3.5.25",
|
|
126
126
|
"vue-i18n": "11.2.2",
|
|
127
|
-
"vue-router": "4.6.
|
|
127
|
+
"vue-router": "4.6.4",
|
|
128
128
|
"vuetify": "3.11.3"
|
|
129
129
|
},
|
|
130
130
|
"peerDependenciesMeta": {
|