@anzusystems/common-admin 1.47.0-beta.334 → 1.47.0-beta.336
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 +6713 -0
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-DersLykS.mjs.map +1 -0
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.d.ts +240 -46
- package/dist/common-admin.js +14 -14
- package/dist/labs.d.ts +22 -6
- package/dist/labs.js +632 -1339
- package/dist/labs.js.map +1 -1
- package/package.json +7 -7
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-DUTCLJ8a.mjs +0 -5837
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-DUTCLJ8a.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/UserAdminConfigFilter.ts","../src/types/UserAdminConfig.ts","../src/labs/filters/bookmarksStore.ts","../src/labs/api/useApiRequest.ts","../src/labs/filters/userAdminConfig.ts","../src/model/factory/UserAdminConfigFactory.ts","../src/labs/filters/FilterBookmarkDialog.vue","../src/components/buttons/filter/AFilterBookmarkButton.vue","../src/labs/filters/FilterBookmarks.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","import { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\n\nexport function useUserAdminConfigInnerFilter(system: string, subject: string = 'userAdminConfig') {\n const filterFields = [\n { name: 'user' as const, default: null },\n { name: 'configType' as const, default: null },\n { name: 'layoutType' as const, default: null },\n { name: 'systemResource' as const, default: null },\n { name: 'customName' as const, default: null },\n { name: 'defaultConfig' as const, default: null },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFields, createFilterStore(filterFields), {\n system,\n subject,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n","import type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { SortableItemDataAware } from '@/components/sortable/sortableUtils'\nimport type { IntegerId } from '@/types/common'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\n\nexport interface UserAdminConfig<TData = UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets>\n extends AnzuUserAndTimeTrackingAware,\n SortableItemDataAware {\n id: IntegerId\n user: IntegerId\n configType: UserAdminConfigTypeType\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n customName: string\n defaultConfig: boolean\n data: TData\n position: number\n _resourceName: 'userAdminConfig'\n _system: string\n}\n\nexport const UserAdminConfigType = {\n PinnedWidgets: 'pinnedWidgets',\n FilterBookmark: 'filterBookmark',\n} as const\nexport const UserAdminConfigTypeDefault = UserAdminConfigType.PinnedWidgets\nexport type UserAdminConfigTypeType = (typeof UserAdminConfigType)[keyof typeof UserAdminConfigType]\n\nexport const UserAdminConfigLayoutType = {\n Desktop: 'desktop',\n Mobile: 'mobile',\n} as const\nexport const UserAdminConfigLayoutTypeDefault = UserAdminConfigLayoutType.Desktop\nexport type UserAdminConfigLayoutTypeType = (typeof UserAdminConfigLayoutType)[keyof typeof UserAdminConfigLayoutType]\n\nexport interface UserAdminConfigDataFilterBookmark {\n filter: string\n datatableHiddenColumns?: string[]\n sortBy?: DatatableSortBy\n}\n\nexport type UserAdminConfigDataPinnedWidgets<TVariant extends string = string> = Array<{\n variant: TVariant\n position: number\n}>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport { useUserAdminConfigInnerFilter } from '@/labs/filters/UserAdminConfigFilter'\nimport { type UserAdminConfig, type UserAdminConfigLayoutTypeType, UserAdminConfigType } from '@/types/UserAdminConfig'\nimport type { IntegerId } from '@/types/common'\nimport type { UseApiFetchListReturnType } from '@/labs/api/useApiFetchList'\nimport { usePagination } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\ninterface CacheItem<T = UserAdminConfig> {\n lastUsed: number\n items: T[]\n}\n\nconst MAX_BOOKMARKS = 3\nexport const MAX_BOOKMARK_ITEMS = 8\n\nexport const useFilterBookmarkStore = defineStore('filterBookmarkStore', () => {\n const bookmarks = ref(new Map<string, CacheItem>())\n const error = ref(false)\n\n function generateKey(layoutType: UserAdminConfigLayoutTypeType, systemResource: string) {\n return `userAdminConfig/${systemResource}/${layoutType}/`\n }\n\n function removeOldestBookmark() {\n let oldestKey: string | null = null\n let oldestTime = Infinity\n bookmarks.value.forEach((value, bookmarkKey) => {\n if (value.lastUsed < oldestTime) {\n oldestTime = value.lastUsed\n oldestKey = bookmarkKey\n }\n })\n if (oldestKey !== null) {\n bookmarks.value.delete(oldestKey)\n }\n }\n\n async function getBookmarks(\n identifier: {\n user: IntegerId\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n },\n useApiFetch: () => UseApiFetchListReturnType<UserAdminConfig[]>,\n forceFetch: boolean = false\n ): Promise<UserAdminConfig[]> {\n error.value = false\n const key = generateKey(identifier.layoutType, identifier.systemResource)\n const now = Date.now()\n\n if (!forceFetch) {\n const cached = bookmarks.value.get(key)\n if (cached) {\n cached.lastUsed = now\n return cached.items\n }\n }\n\n const { pagination } = usePagination('position', SortOrder.Asc, {\n rowsPerPage: MAX_BOOKMARK_ITEMS,\n })\n const { start: system, end: resource } = stringSplitOnFirstOccurrence(identifier.systemResource, '_')\n const { filterConfig, filterData } = useUserAdminConfigInnerFilter(system, resource)\n filterData.configType = UserAdminConfigType.FilterBookmark\n filterData.layoutType = identifier.layoutType\n filterData.systemResource = identifier.systemResource\n filterData.user = identifier.user\n\n let items: UserAdminConfig[] = []\n try {\n const { executeFetch } = useApiFetch()\n items = await executeFetch(pagination, filterData, filterConfig)\n bookmarks.value.set(key, { lastUsed: now, items })\n } catch (e) {\n error.value = true\n }\n\n if (bookmarks.value.size > MAX_BOOKMARKS) {\n removeOldestBookmark()\n }\n\n return items\n }\n\n async function fetchBookmarksCount(\n identifier: {\n user: IntegerId\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n },\n useApiFetch: () => UseApiFetchListReturnType<UserAdminConfig[]>\n ): Promise<number> {\n error.value = false\n const { pagination } = usePagination('position', SortOrder.Asc, {\n rowsPerPage: MAX_BOOKMARK_ITEMS + 1,\n })\n const { start: system, end: resource } = stringSplitOnFirstOccurrence(identifier.systemResource, '_')\n const { filterConfig, filterData } = useUserAdminConfigInnerFilter(system, resource)\n filterData.configType = UserAdminConfigType.FilterBookmark\n filterData.layoutType = identifier.layoutType\n filterData.systemResource = identifier.systemResource\n filterData.user = identifier.user\n\n let length = Infinity\n try {\n const { executeFetch } = useApiFetch()\n const res = await executeFetch(pagination, filterData, filterConfig)\n length = res.length\n } catch (e) {\n error.value = true\n }\n\n return length\n }\n\n function addOne(key: string, data: UserAdminConfig) {\n bookmarks.value.get(key)?.items.push(data)\n }\n\n return {\n bookmarks,\n error,\n getBookmarks,\n generateKey,\n addOne,\n fetchBookmarksCount,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useFilterBookmarkStore, import.meta.hot))\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, isNull, isUndefined } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig, type Method } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\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 { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport type { AxiosClientFn } from '@/labs/api/client'\n\n/**\n * @template T Type used for request payload, by default, same as Response type\n * @template R Response type override, optional\n */\nexport const useApiRequest = <R, T = R>(\n client: AxiosClientFn,\n method: Method,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {}\n): UseApiAnyRequestReturnType<R, T> => {\n let abortController: AbortController | null = null\n\n const executeRequest = async (\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n object: T | undefined = undefined\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const axiosConfig: AxiosRequestConfig = { method: method }\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 axiosConfig.url = template\n if (template !== '' && !isUndefined(params)) {\n axiosConfig.url = replaceUrlParameters(template, params)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n const res = await client().request({\n ...options,\n ...axiosConfig,\n signal: abortController.signal,\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data) {\n return res.data as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return undefined 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 abortRequest = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeRequest,\n abortRequest,\n }\n}\n\nexport type UseApiAnyRequestReturnType<R, T = R> = {\n executeRequest: (\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams | undefined,\n object?: T | undefined\n ) => Promise<R>\n abortRequest: () => void\n}\n","import type { AxiosInstance } from 'axios'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { IntegerId } from '@/types/common'\nimport type { UserAdminConfig } from '@/types/UserAdminConfig'\nimport { useApiRequest } from '@/labs/api/useApiRequest'\n\nexport const END_POINT = '/adm/v1/user-admin-config'\nconst ENTITY = 'userAdminConfig'\n\nexport function useUserAdminConfigApi(\n client: () => AxiosInstance,\n system: string,\n entity: string = ENTITY,\n endPoint: string = END_POINT\n) {\n const useFetchUserAdminConfigList = () => useApiFetchList<UserAdminConfig[]>(client, system, entity, END_POINT)\n\n const fetchUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'GET', system, entity)\n return executeRequest(endPoint + '/:id', { id })\n }\n\n const createUserAdminConfig = (data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'POST', system, entity)\n return executeRequest(endPoint, undefined, data)\n }\n\n const updateUserAdminConfig = (id: IntegerId, data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'PUT', system, entity)\n return executeRequest(endPoint + '/:id', { id }, data)\n }\n\n const deleteUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest(client, 'DELETE', system, entity)\n return executeRequest(endPoint + '/:id', { id })\n }\n\n const updateUserAdminConfigPositions = (ids: IntegerId[]) => {\n const { executeRequest } = useApiRequest<{ userAdminConfigs: IntegerId[] }>(client, 'PATCH', system, entity)\n return executeRequest(endPoint + '/update-positions', undefined, { userAdminConfigs: ids })\n }\n\n return {\n useFetchUserAdminConfigList,\n fetchUserAdminConfig,\n createUserAdminConfig,\n updateUserAdminConfig,\n deleteUserAdminConfig,\n updateUserAdminConfigPositions,\n }\n}\n","import type { UserAdminConfig } from '@/types/UserAdminConfig'\nimport { UserAdminConfigLayoutTypeDefault, UserAdminConfigTypeDefault } from '@/types/UserAdminConfig'\nimport { dateTimeNow } from '@/utils/datetime'\n\nexport function useUserAdminConfigFactory() {\n const createDefaultUserAdminConfig = (system: string): UserAdminConfig => {\n return {\n id: 0,\n user: 0,\n configType: UserAdminConfigTypeDefault,\n layoutType: UserAdminConfigLayoutTypeDefault,\n systemResource: '',\n customName: '',\n defaultConfig: false,\n data: [],\n position: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: 'userAdminConfig',\n _system: system,\n }\n }\n\n return {\n createDefaultUserAdminConfig,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport { inject, nextTick, ref, useTemplateRef, watch } from 'vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormSwitch from '@/components/form/AFormSwitch.vue'\nimport type { SortableItem } from '@/components/sortable/sortableActions'\nimport ASortable from '@/components/sortable/ASortable.vue'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport { MAX_BOOKMARK_ITEMS, useFilterBookmarkStore } from '@/labs/filters/bookmarksStore'\nimport { useUserAdminConfigApi } from '@/labs/filters/userAdminConfig'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useUserAdminConfigFactory } from '@/model/factory/UserAdminConfigFactory'\nimport { type UserAdminConfig, UserAdminConfigLayoutType, UserAdminConfigType } from '@/types/UserAdminConfig'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/labs/filters/filterInjectionKeys'\nimport { useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { hasAnzuApiValidationErrorSpecific, isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\n\nconst props = withDefaults(\n defineProps<{\n client: () => AxiosInstance\n system: string\n subject: string\n user: IntegerId\n datatableHiddenColumns?: string[] | undefined\n }>(),\n {\n datatableHiddenColumns: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onClose'): void\n}>()\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination) || isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst activeTab = ref<'add' | 'manage'>('add')\nconst customName = ref('')\nconst storeDatatableHiddenColumns = ref(false)\nconst storeDatatableOrder = ref(false)\nconst saveButtonLoading = ref(false)\nconst listLoading = ref(false)\nconst errorCount = ref(false)\nconst itemsManage = ref<Array<UserAdminConfig>>([])\nconst itemEdit = ref<{ id: IntegerId; customName: string } | null>(null)\n\nconst { required, maxLength } = useValidate()\nconst rulesCreate = {\n customName: {\n required,\n maxLength: maxLength(100),\n },\n}\nconst vCreate$ = useVuelidate(rulesCreate, { customName }, { $stopPropagation: true })\nconst rulesEdit = {\n itemEdit: {\n required,\n maxLength: maxLength(100),\n },\n}\nconst vEdit$ = useVuelidate(rulesEdit, { itemEdit }, { $stopPropagation: true })\n\nconst filterBookmarkStore = useFilterBookmarkStore()\n\nconst {\n createUserAdminConfig,\n useFetchUserAdminConfigList,\n updateUserAdminConfigPositions,\n deleteUserAdminConfig,\n updateUserAdminConfig,\n} =\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n useUserAdminConfigApi(props.client, props.system)\nconst { t } = useI18n()\nconst { showErrorsDefault, showValidationError, showWarningT } = useAlerts()\nconst { createDefaultUserAdminConfig } = useUserAdminConfigFactory()\n\nconst sortItems = async () => {\n saveButtonLoading.value = true\n const items = itemsManage.value\n const ids = items.map((item) => item.id)\n try {\n await updateUserAdminConfigPositions(ids)\n saveButtonLoading.value = false\n await reloadItems()\n emit('onClose')\n } catch (e) {\n showErrorsDefault(e)\n saveButtonLoading.value = false\n }\n}\n\nconst { serializeFilters } = useFilterHelpers(filterData, filterConfig)\n\nconst systemResource = props.system + '_' + props.subject\n\nconst addBookmark = async () => {\n saveButtonLoading.value = true\n errorCount.value = false\n const config = createDefaultUserAdminConfig(props.system)\n config.user = props.user\n config.configType = UserAdminConfigType.FilterBookmark\n config.layoutType = UserAdminConfigLayoutType.Desktop\n config.systemResource = systemResource\n config.customName = customName.value\n config.data = {\n filter: serializeFilters(filterData, pagination, false),\n datatableHiddenColumns:\n storeDatatableHiddenColumns.value && props.datatableHiddenColumns ? props.datatableHiddenColumns : undefined,\n sortBy: storeDatatableOrder.value && pagination.value.sortBy ? pagination.value.sortBy : undefined,\n }\n try {\n const count = await filterBookmarkStore.fetchBookmarksCount(\n {\n user: props.user,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList\n )\n if (count >= MAX_BOOKMARK_ITEMS) {\n errorCount.value = true\n saveButtonLoading.value = false\n return\n }\n config.position = count + 1\n const res = await createUserAdminConfig(config)\n filterBookmarkStore.addOne(\n filterBookmarkStore.generateKey(UserAdminConfigLayoutType.Desktop, systemResource),\n res\n )\n emit('onClose')\n } catch (e) {\n if (\n isAnzuApiValidationError(e) &&\n hasAnzuApiValidationErrorSpecific(e, 'error_field_not_unique', 'cms.userAdminConfig.model.systemResource')\n ) {\n showWarningT('common.filter.bookmark.nameUniqueError')\n return\n }\n showErrorsDefault(e)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onConfirm = () => {\n if (activeTab.value === 'add') {\n vCreate$.value.$touch()\n if (vCreate$.value.$invalid) {\n showValidationError()\n return\n }\n addBookmark()\n } else if (activeTab.value === 'manage' && itemsManage.value.length > 0) {\n sortItems()\n }\n}\n\nconst onDelete = async (data: SortableItem<UserAdminConfig>) => {\n listLoading.value = true\n try {\n await deleteUserAdminConfig(data.raw.id)\n await reloadItems()\n onItemCancel()\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nconst inputRef = useTemplateRef('inputRef')\n\nconst onEdit = async (data: SortableItem<UserAdminConfig>) => {\n itemEdit.value = { id: data.raw.id, customName: data.raw.customName }\n await nextTick()\n inputRef.value?.focus()\n}\n\nconst onItemConfirm = async (data: SortableItem<UserAdminConfig>) => {\n if (isNull(itemEdit.value)) return\n listLoading.value = true\n const modified = cloneDeep(data.raw)\n modified.customName = itemEdit.value.customName\n try {\n onItemCancel()\n await updateUserAdminConfig(modified.id, modified)\n await reloadItems()\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nconst onItemCancel = () => {\n itemEdit.value = null\n}\n\nconst reloadItems = async () => {\n listLoading.value = true\n try {\n itemsManage.value = await filterBookmarkStore.getBookmarks(\n {\n user: props.user,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList,\n true\n )\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nwatch(activeTab, () => {\n errorCount.value = false\n if (activeTab.value === 'manage') {\n reloadItems()\n }\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n :width=\"500\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"emit('onClose')\">\n {{ t('common.filter.bookmark.title') }}\n </ADialogToolbar>\n <VCardText class=\"pt-0\">\n <VTabs\n v-model=\"activeTab\"\n fixed-tabs\n >\n <VTab value=\"add\">\n {{ t('common.filter.bookmark.add') }}\n </VTab>\n <VTab value=\"manage\">\n {{ t('common.filter.bookmark.manage') }}\n </VTab>\n </VTabs>\n <div\n v-if=\"activeTab === 'add'\"\n class=\"w-100 pt-4\"\n >\n <ARow :title=\"t('common.filter.bookmark.infoSave')\" />\n <ARow\n v-if=\"errorCount\"\n class=\"text-error\"\n :title=\"t('common.filter.bookmark.errorMax')\"\n />\n <ARow>\n <AFormTextField\n v-model=\"customName\"\n :label=\"t('common.filter.bookmark.name')\"\n required\n :v=\"vCreate$.customName\"\n />\n </ARow>\n <ARow>\n <AFormSwitch\n v-model=\"storeDatatableHiddenColumns\"\n :label=\"t('common.filter.bookmark.storeTableColumns')\"\n />\n </ARow>\n <ARow>\n <AFormSwitch\n v-model=\"storeDatatableOrder\"\n :label=\"t('common.filter.bookmark.storeTableOrder')\"\n />\n </ARow>\n </div>\n <div\n v-else-if=\"activeTab === 'manage'\"\n class=\"w-100 pt-4\"\n >\n <div\n v-if=\"listLoading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <ASortable\n v-else\n v-model=\"itemsManage\"\n show-edit-button\n show-delete-button\n permanent-buttons\n @on-delete=\"onDelete\"\n @on-edit=\"onEdit\"\n >\n <template #item=\"{ item }: { item: SortableItem<UserAdminConfig> }\">\n <AFormTextField\n v-if=\"itemEdit && itemEdit.id === item.raw.id\"\n ref=\"inputRef\"\n v-model=\"itemEdit.customName\"\n hide-details=\"auto\"\n :v=\"vEdit$\"\n />\n <div v-else>\n {{ item.raw.customName }}\n </div>\n </template>\n <template\n v-if=\"!isNull(itemEdit)\"\n #item-buttons=\"{ item }: { item: SortableItem<UserAdminConfig> }\"\n >\n <div\n v-if=\"itemEdit && itemEdit.id === item.raw.id\"\n class=\"d-flex align-center justify-end\"\n >\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onItemConfirm(item)\"\n >\n <VIcon icon=\"mdi-check\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.button.confirm')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onItemCancel()\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.button.cancel')\"\n />\n </VBtn>\n </div>\n </template>\n </ASortable>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"emit('onClose')\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onConfirm\"\n >\n {{ activeTab === 'add' ? t('common.button.add') : t('common.filter.bookmark.saveBookmarkOrder') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport FilterBookmarkDialog from '@/labs/filters/FilterBookmarkDialog.vue'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\n\nwithDefaults(\n defineProps<{\n client: () => AxiosInstance\n system: string\n subject: string\n user: IntegerId\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n datatableHiddenColumns?: string[] | undefined\n datatableSortBy?: DatatableSortBy\n }>(),\n {\n tooltipT: 'common.button.bookmarkFilter',\n buttonClass: 'ml-2',\n dataCy: 'filter-bookmark',\n datatableHiddenColumns: undefined,\n datatableSortBy: undefined,\n }\n)\n\nconst dialog = defineModel<boolean>('dialog', { default: false, required: false })\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n class=\"px-2\"\n :data-cy=\"dataCy\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n @click.stop=\"onClick\"\n >\n <VIcon\n color=\"grey darken-1\"\n icon=\"mdi-bookmark-outline\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n <FilterBookmarkDialog\n v-if=\"dialog\"\n :client=\"client\"\n :system=\"system\"\n :user=\"user\"\n :subject=\"subject\"\n :datatable-hidden-columns=\"datatableHiddenColumns\"\n @on-close=\"dialog = false\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useFilterBookmarkStore } from '@/labs/filters/bookmarksStore'\nimport { useUserAdminConfigApi } from '@/labs/filters/userAdminConfig'\nimport type { AxiosInstance } from 'axios'\nimport {\n type UserAdminConfig,\n type UserAdminConfigDataFilterBookmark,\n UserAdminConfigLayoutType,\n} from '@/types/UserAdminConfig'\nimport type { IntegerId } from '@/types/common'\nimport { useResizeObserver, watchThrottled } from '@vueuse/core'\nimport { cloneDeep, isDefined, isNull, isString, isUndefined } from '@/utils/common'\nimport {\n DatatablePaginationKey,\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { stringToBooleanExact, stringToNumber } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n client: () => AxiosInstance\n userId: IntegerId\n system: string\n subject: string\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: true,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst pagination = inject(DatatablePaginationKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(pagination) || isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst loading = ref(false)\nconst toolbarRef = useTemplateRef('toolbar')\nconst toolbarWidth = ref(300)\nconst visibleItemsCount = ref(1000)\n\nconst filterBookmarkStore = useFilterBookmarkStore()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { useFetchUserAdminConfigList } = useUserAdminConfigApi(props.client, props.system)\n\nconst systemResource = props.system + '_' + props.subject\n\nconst loadBookmarks = async (force = false) => {\n loading.value = true\n await filterBookmarkStore.getBookmarks(\n {\n user: props.userId,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList,\n force\n )\n loading.value = false\n}\n\nconst { deserializeFilters } = useFilterHelpers(filterData, filterConfig)\n\nconst onItemClick = (item: UserAdminConfig) => {\n const config = item.data as UserAdminConfigDataFilterBookmark\n if (isDefined(config.datatableHiddenColumns) && isDefined(datatableHiddenColumns.value)) {\n datatableHiddenColumns.value = config.datatableHiddenColumns\n }\n if (isDefined(config.sortBy)) {\n pagination.value = { ...pagination.value, sortBy: { key: config.sortBy!.key, order: config.sortBy!.order } }\n }\n const deserialized = deserializeFilters(config.filter)\n if (isNull(deserialized)) return\n for (const filterName in filterData) {\n const key = filterName as keyof FilterData\n let value = deserialized.filters[key]\n if (isUndefined(value) && filterConfig.fields[key]?.clearable) {\n filterData[key] = cloneDeep(filterConfig.fields[key].default)\n filterSelected.value.delete(key)\n continue\n }\n if (isString(value)) {\n const tryConvertNumber = stringToNumber(value)\n if (!isNull(tryConvertNumber)) {\n value = tryConvertNumber\n } else {\n // If not a number, try to convert to boolean\n const tryConvertBoolean = stringToBooleanExact(value)\n if (!isNull(tryConvertBoolean)) {\n value = tryConvertBoolean\n }\n }\n }\n filterData[key] = value\n }\n emit('submit')\n}\n\nconst THREE_DOTS_WIDTH = 32\n\nconst calculateVisible = async (totalWidth: number) => {\n const container = toolbarRef.value\n if (isNull(container)) return\n visibleItemsCount.value = 1000\n await nextTick()\n let cumulativeWidth = 0\n let visible = 0\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children[i] as HTMLElement\n const childWidth = child.offsetWidth\n cumulativeWidth += childWidth\n if (cumulativeWidth >= totalWidth - THREE_DOTS_WIDTH) {\n break\n }\n visible++\n }\n visibleItemsCount.value = visible\n}\n\nuseResizeObserver(toolbarRef, (entries) => {\n if (entries[0]) {\n toolbarWidth.value = entries[0].contentRect.width\n }\n})\n\nwatchThrottled(\n toolbarWidth,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n calculateVisible(newValue)\n },\n { throttle: 1000 }\n)\n\nconst items = computed(() => {\n const key = filterBookmarkStore.generateKey(UserAdminConfigLayoutType.Desktop, systemResource)\n const result = filterBookmarkStore.bookmarks.get(key)\n return result?.items ?? []\n})\n\nconst itemsComputed = computed(() => {\n const visible = visibleItemsCount.value\n return {\n visible: items.value.slice(0, visible),\n hidden: items.value.slice(visible),\n }\n})\n\nwatch([loading, () => items.value.length], ([newLoading]) => {\n if (newLoading === true || isNull(toolbarRef.value)) return\n toolbarWidth.value = toolbarRef.value.clientWidth\n nextTick(() => {\n calculateVisible(toolbarWidth.value)\n })\n})\n\nonMounted(() => {\n loadBookmarks()\n})\n</script>\n\n<template>\n <div\n ref=\"toolbar\"\n :key=\"items.length\"\n class=\"w-100 d-flex overflow-hidden align-center mb-1\"\n >\n <div v-if=\"loading\" />\n <template v-else>\n <div\n v-for=\"item in itemsComputed.visible\"\n :key=\"item.id\"\n class=\"white-space-nowrap\"\n >\n <VBtn\n text\n prepend-icon=\"mdi-bookmark-outline\"\n size=\"small\"\n class=\"mr-1 mb-1 bg-grey-lighten-4 text-grey-darken-3\"\n @click=\"onItemClick(item)\"\n >\n {{ item.customName }}\n </VBtn>\n </div>\n <VMenu\n v-if=\"itemsComputed.hidden.length > 0\"\n bottom\n offset-y\n >\n <template #activator=\"{ props: activatorProps }\">\n <VBtn\n icon=\"mdi-menu-down\"\n size=\"x-small\"\n :width=\"28\"\n :height=\"28\"\n v-bind=\"activatorProps\"\n />\n </template>\n <VList density=\"compact\">\n <VListItem\n v-for=\"item in itemsComputed.hidden\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle>{{ item.customName }}</VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </template>\n </div>\n</template>\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","useUserAdminConfigInnerFilter","system","subject","filterFields","createFilter","createFilterStore","UserAdminConfigType","UserAdminConfigTypeDefault","UserAdminConfigLayoutType","UserAdminConfigLayoutTypeDefault","MAX_BOOKMARKS","MAX_BOOKMARK_ITEMS","useFilterBookmarkStore","defineStore","bookmarks","error","generateKey","layoutType","systemResource","removeOldestBookmark","oldestKey","oldestTime","value","bookmarkKey","getBookmarks","identifier","useApiFetch","forceFetch","now","cached","pagination","usePagination","SortOrder","resource","stringSplitOnFirstOccurrence","items","executeFetch","fetchBookmarksCount","length","addOne","data","useApiRequest","client","method","entity","urlTemplate","urlParams","options","abortController","urlTemplateOverride","urlParamsOverride","object","axiosConfig","params","isDefined","template","replaceUrlParameters","res","isValidHTTPStatus","AnzuApiResponseCodeError","HTTP_STATUS_NO_CONTENT","AnzuFatalError","err","isAnzuApiResponseCodeError","axiosErrorResponseIsForbidden","AnzuApiForbiddenError","axiosErrorResponseHasValidationData","AnzuApiValidationError","axiosErrorResponseHasDependencyExistsData","AnzuApiDependencyExistsError","axiosErrorResponseHasForbiddenOperationData","AnzuApiForbiddenOperationError","axiosErrorIsTimeout","AnzuApiTimeoutError","axios","AnzuApiAxiosError","END_POINT","ENTITY","useUserAdminConfigApi","endPoint","useApiFetchList","id","executeRequest","ids","useUserAdminConfigFactory","DatatablePaginationKey","activeTab","customName","storeDatatableHiddenColumns","storeDatatableOrder","saveButtonLoading","listLoading","errorCount","itemsManage","itemEdit","required","maxLength","useValidate","rulesCreate","vCreate$","useVuelidate","rulesEdit","vEdit$","filterBookmarkStore","createUserAdminConfig","useFetchUserAdminConfigList","updateUserAdminConfigPositions","deleteUserAdminConfig","updateUserAdminConfig","showErrorsDefault","showWarningT","createDefaultUserAdminConfig","sortItems","reloadItems","e","serializeFilters","useFilterHelpers","addBookmark","config","count","isAnzuApiValidationError","hasAnzuApiValidationErrorSpecific","onConfirm","onDelete","onItemCancel","inputRef","useTemplateRef","onEdit","onItemConfirm","modified","cloneDeep","_component_VTabs","_component_VTab","AFormTextField","AFormSwitch","_hoisted_2","_hoisted_3","_component_VProgressCircular","ASortable","_hoisted_4","_hoisted_5","dialog","_useModel","_normalizeClass","FilterBookmarkDialog","THREE_DOTS_WIDTH","datatableHiddenColumns","loading","toolbarRef","toolbarWidth","visibleItemsCount","loadBookmarks","force","deserializeFilters","onItemClick","deserialized","filterName","isString","tryConvertNumber","stringToNumber","tryConvertBoolean","stringToBooleanExact","calculateVisible","totalWidth","container","cumulativeWidth","visible","i","childWidth","useResizeObserver","entries","watchThrottled","oldValue","itemsComputed","newLoading","onMounted","_component_VMenu","activatorProps","_component_VList","_component_VListItemTitle","showDetail","provide","submitFilter","clearAll","clearAllFilterSelected","submitFilterBookmark","resetFilter","toggleFilterDetail","touched","renderedFieldNames","field","fieldName","__expose","_component_VForm","_component_VRow","_component_VCol","FilterBookmarks","AFilterAdvancedButton","FiltersSelected","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","_resolveDynamicComponent","datatableSlotName","FilterDetailItem","defaultItemsCreatedAt","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","paginationUpdateDefault","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","onClickFirst","useThrottleFn","onClickLast","onClickPrev","onClickNext","_component_VBtnToggle","_hoisted_6","generateByIdsApiQuery","isSearchApi","querySetLimit","querySetOffset","querySetOrder","queryBuild","queryAddFilter","queryAdd","useApiQueryBuilder","limit","useApiFetchByIds","url","useApiFetchListBatch","sortBy","sortDesc","batchSize","forceElastic","searchApi","results","generateListQuery","resData","isApiInfiniteResponseList","nextPageData","isApiResponseList","promises","numPages","pageCopy","paginationRef","pageResponse","useJobApi","apiFetchOne","type","stringToKebabCase","apiCreateOne","apiDeleteOne","defaultColumn","DatatableColumnsConfigMoreOptionsDefault","createDatatableColumnsConfig","columnsHidden","moreOptions","localI18n","i18n","storeKey","columnsAll","obj","DATETIME_AUTO_LABEL_TRACKING","columnsVisible","columns","column","loadStoredColumns","stored","storedData","isObject","storeColumns","useSubjectSelect","datatableConfig","filterSortBy","filterTouched","selected","setSortBy","incrementPage","onOpen","resetState","getListDebounced","sortByChange","onFetchNextPage","getList","useDebounceFn","eventTarget","parent","firstTd","input","dialogLocal","paginationComputed","toRaw","sidebarLeft","selectedItemsCount","disabledSubmit","toggleSidebar","onClose","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) {\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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"}
|