@anzusystems/common-admin 1.47.0-beta.dev-1771794052 → 1.47.0-beta.dev-1771794053

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/labs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"labs.js","sources":["../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 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(modelValue, (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\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\nexport type UseApiFetchByIdsParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n isSearchApi?: boolean\n field?: string\n}\n\nexport type FetchByIdsParams = {\n urlTemplateOverride?: string\n urlParamsOverride?: UrlParams\n}\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\n/**\n * @deprecated Use object params form:\n * useApiFetchByIds({ client, system, entity, urlTemplate, urlParams, options, isSearchApi, field })\n */\nexport function useApiFetchByIds<R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n isSearchApi?: boolean,\n field?: string\n): UseApiFetchByIdsReturnType<R>\n\nexport function useApiFetchByIds<R>(params: UseApiFetchByIdsParams): UseApiFetchByIdsReturnType<R>\n\nexport function useApiFetchByIds<R>(\n clientOrParams: AxiosClientFn | UseApiFetchByIdsParams,\n system?: string,\n entity?: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n isSearchApi?: boolean,\n field?: string\n): UseApiFetchByIdsReturnType<R> {\n let resolvedClient: AxiosClientFn\n let resolvedSystem: string\n let resolvedEntity: string\n let resolvedUrlTemplate: string | undefined\n let resolvedUrlParams: UrlParams | undefined\n let resolvedOptions: AxiosRequestConfig\n let resolvedIsSearchApi: boolean\n let resolvedField: string\n\n if (typeof clientOrParams === 'function') {\n resolvedClient = clientOrParams\n resolvedSystem = system!\n resolvedEntity = entity!\n resolvedUrlTemplate = urlTemplate\n resolvedUrlParams = urlParams\n resolvedOptions = options ?? {}\n resolvedIsSearchApi = isSearchApi ?? false\n resolvedField = field ?? 'id'\n } else {\n resolvedClient = clientOrParams.client\n resolvedSystem = clientOrParams.system\n resolvedEntity = clientOrParams.entity\n resolvedUrlTemplate = clientOrParams.urlTemplate\n resolvedUrlParams = clientOrParams.urlParams\n resolvedOptions = clientOrParams.options ?? {}\n resolvedIsSearchApi = clientOrParams.isSearchApi ?? false\n resolvedField = clientOrParams.field ?? 'id'\n }\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n ids: DocId[] | IntegerId[],\n urlTemplateOverrideOrParams: string | FetchByIdsParams | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined\n ): Promise<R> => {\n abortController = new AbortController()\n\n let resolvedUrlTemplateOverride: string | undefined\n let resolvedUrlParamsOverride: UrlParams | undefined\n\n if (typeof urlTemplateOverrideOrParams === 'object' && urlTemplateOverrideOrParams !== null) {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams.urlTemplateOverride\n resolvedUrlParamsOverride = urlTemplateOverrideOrParams.urlParamsOverride\n } else {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams\n resolvedUrlParamsOverride = urlParamsOverride\n }\n\n try {\n const params = isDefined(resolvedUrlParamsOverride) ? resolvedUrlParamsOverride : resolvedUrlParams\n const template = isDefined(resolvedUrlTemplateOverride) ? resolvedUrlTemplateOverride : resolvedUrlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) +\n generateByIdsApiQuery(ids, resolvedIsSearchApi, resolvedField)\n\n const res = await resolvedClient().get(url, {\n ...resolvedOptions,\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, resolvedSystem, resolvedEntity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, resolvedSystem, resolvedEntity, 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: ' + resolvedUrlTemplate, 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\ninterface ExecuteFetchByIdsFn<R> {\n /** @deprecated Use object params form: executeFetch(ids, { urlTemplateOverride, urlParamsOverride }) */\n (ids: DocId[] | IntegerId[], urlTemplateOverride?: string, urlParamsOverride?: UrlParams): Promise<R>\n (ids: DocId[] | IntegerId[], params?: FetchByIdsParams): Promise<R>\n}\n\nexport type UseApiFetchByIdsReturnType<R> = {\n executeFetch: ExecuteFetchByIdsFn<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\nexport type UseApiFetchListBatchParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n}\n\nexport type FetchListBatchParams = {\n urlTemplateOverride?: string\n urlParamsOverride?: UrlParams\n sortBy?: string\n sortDesc?: boolean\n batchSize?: number\n forceElastic?: boolean\n}\n\n/**\n * @template R Response type override\n * @deprecated Use object params form:\n * useApiFetchListBatch({ client, system, entity, urlTemplate, urlParams, options })\n */\nexport function useApiFetchListBatch<R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig\n): UseApiFetchListBatchReturnType<R>\n\n/**\n * @template R Response type override\n */\nexport function useApiFetchListBatch<R>(params: UseApiFetchListBatchParams): UseApiFetchListBatchReturnType<R>\n\nexport function useApiFetchListBatch<R>(\n clientOrParams: AxiosClientFn | UseApiFetchListBatchParams,\n system?: string,\n entity?: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig\n): UseApiFetchListBatchReturnType<R> {\n let resolvedClient: AxiosClientFn\n let resolvedSystem: string\n let resolvedEntity: string\n let resolvedUrlTemplate: string | undefined\n let resolvedUrlParams: UrlParams | undefined\n let resolvedOptions: AxiosRequestConfig\n\n if (typeof clientOrParams === 'function') {\n resolvedClient = clientOrParams\n resolvedSystem = system!\n resolvedEntity = entity!\n resolvedUrlTemplate = urlTemplate\n resolvedUrlParams = urlParams\n resolvedOptions = options ?? {}\n } else {\n resolvedClient = clientOrParams.client\n resolvedSystem = clientOrParams.system\n resolvedEntity = clientOrParams.entity\n resolvedUrlTemplate = clientOrParams.urlTemplate\n resolvedUrlParams = clientOrParams.urlParams\n resolvedOptions = clientOrParams.options ?? {}\n }\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverrideOrParams: string | FetchListBatchParams | 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 let resolvedUrlTemplateOverride: string | undefined\n let resolvedUrlParamsOverride: UrlParams | undefined\n let resolvedSortBy: string\n let resolvedSortDesc: boolean\n let resolvedBatchSize: number\n let resolvedForceElastic: boolean\n\n if (typeof urlTemplateOverrideOrParams === 'object' && urlTemplateOverrideOrParams !== null) {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams.urlTemplateOverride\n resolvedUrlParamsOverride = urlTemplateOverrideOrParams.urlParamsOverride\n resolvedSortBy = urlTemplateOverrideOrParams.sortBy ?? 'id'\n resolvedSortDesc = urlTemplateOverrideOrParams.sortDesc ?? true\n resolvedBatchSize = urlTemplateOverrideOrParams.batchSize ?? 100\n resolvedForceElastic = urlTemplateOverrideOrParams.forceElastic ?? false\n } else {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams\n resolvedUrlParamsOverride = urlParamsOverride\n resolvedSortBy = sortBy\n resolvedSortDesc = sortDesc\n resolvedBatchSize = batchSize\n resolvedForceElastic = forceElastic\n }\n\n try {\n const searchApi = filterConfig.general.elastic || resolvedForceElastic ? '/search' : ''\n const params = isDefined(resolvedUrlParamsOverride) ? resolvedUrlParamsOverride : resolvedUrlParams\n const template = isDefined(resolvedUrlTemplateOverride) ? resolvedUrlTemplateOverride : resolvedUrlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const { pagination } = usePagination(resolvedSortBy, resolvedSortDesc ? SortOrder.Desc : SortOrder.Asc, {\n rowsPerPage: resolvedBatchSize,\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 resolvedClient().get(url + generateListQuery(pagination, filterData, filterConfig), {\n ...resolvedOptions,\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 resolvedClient().get(\n url + generateListQuery(pagination, filterData, filterConfig),\n {\n ...resolvedOptions,\n signal: abortController.signal,\n }\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++) {\n // 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 resolvedClient().get(url + generateListQuery(paginationRef, filterData, filterConfig), {\n ...resolvedOptions,\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, resolvedSystem, resolvedEntity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, resolvedSystem, resolvedEntity, 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: ' + resolvedUrlTemplate, 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\ninterface ExecuteFetchListBatchFn<R> {\n /**\n * @deprecated Use object params form:\n * executeFetch(filterData, filterConfig,\n * { urlTemplateOverride, urlParamsOverride, sortBy, sortDesc, batchSize, forceElastic })\n */\n (\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 (filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListBatchParams): Promise<R>\n}\n\nexport type UseApiFetchListBatchReturnType<R> = {\n executeFetch: ExecuteFetchListBatchFn<R>\n abortFetch: () => void\n}\n","import type { AxiosInstance } from 'axios'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const useFetchJobList = () => useApiFetchList<JobType[]>(client, system, ENTITY, END_POINT)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n useFetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import {\n type ColumnConfig,\n type ColumnInternalValues,\n DATETIME_AUTO_LABEL_TRACKING,\n type StoredData,\n} from '@/composables/system/datatableColumns'\nimport { computed, onMounted, type Ref, watch } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { isArray, isBoolean, isObject, isString, isUndefined } from '@/utils/common'\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\ninterface DatatableColumnsConfigMoreOptions {\n storeColumnsLocalStorage: string | boolean // false to disable, string to override store key\n disableActions: boolean\n customI18n: any\n showExpand: boolean\n}\n\nconst DatatableColumnsConfigMoreOptionsDefault = {\n storeColumnsLocalStorage: true,\n disableActions: false,\n customI18n: undefined,\n showExpand: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string,\n subject: string,\n moreOptions: Partial<DatatableColumnsConfigMoreOptions> = {}\n) {\n const options = { ...DatatableColumnsConfigMoreOptionsDefault, ...moreOptions }\n const localI18n = options.customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n\n let storeKey: undefined | string = undefined\n if (isString(options.storeColumnsLocalStorage)) {\n storeKey = options.storeColumnsLocalStorage\n } else if (isBoolean(options.storeColumnsLocalStorage) && true === options.storeColumnsLocalStorage) {\n storeKey = 'table_' + system + '_' + subject\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n if (options.showExpand) columns.push({ key: 'data-table-expand', sortable: false })\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!options.disableActions) columns.push({ key: 'actions', sortable: false, fixed: 'end' })\n return columns\n })\n\n const loadStoredColumns = () => {\n if (!storeKey || !localStorage) return\n const stored = localStorage.getItem(storeKey)\n if (!stored) return\n const storedData = JSON.parse(stored) as StoredData\n if (!isObject(storedData)) return\n if (!isArray(storedData.hidden)) return\n columnsHidden.value = storedData.hidden as string[]\n }\n\n const storeColumns = (columns: string[]) => {\n if (!storeKey || !localStorage) return\n localStorage.setItem(storeKey, JSON.stringify({ hidden: columns }))\n }\n\n onMounted(() => {\n loadStoredColumns()\n })\n\n watch(columnsHidden, (newValue) => {\n storeColumns(newValue)\n })\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n }\n}\n","import { type DatatableOrderingOption, type DatatableSortBy } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type FilterConfig, type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { createDatatableColumnsConfig } from '@/labs/filters/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport type { UrlParams } from '@/services/api/apiHelper'\nimport { useDebounceFn } from '@vueuse/core'\nimport { isNull } from '@/utils/common'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n executeFetch: (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string | undefined,\n urlParamsOverride?: UrlParams | undefined,\n forceElastic?: boolean\n ) => Promise<TItem[]>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n filterSortBy: DatatableSortBy | null = null,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n forceElastic: boolean = false,\n enableActions: boolean = false\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n const { pagination, setSortBy, incrementPage } = usePagination(\n isNull(filterSortBy) ? null : filterSortBy.key,\n filterSortBy?.order\n )\n\n const { resetFilter, submitFilter } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n })\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject,\n { storeColumnsLocalStorage: false, disableActions: !enableActions }\n )\n\n const onOpen = () => {\n resetState()\n getListDebounced()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n setSortBy(option.sortBy)\n getListDebounced()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n incrementPage()\n try {\n const res = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n items.value.push(...res)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic\n )) as TItem[]\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const getListDebounced = useDebounceFn(async () => {\n await getList()\n })\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget || (eventTarget.tagName === 'INPUT' && (eventTarget as HTMLInputElement).type === 'checkbox')) {\n return\n }\n const parent = eventTarget.closest('.v-data-table__tr')\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList: getListDebounced,\n resetFilter: () => resetFilter(pagination, getListDebounced),\n submitFilter: () => submitFilter(pagination, getListDebounced),\n }\n}\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, onMounted, 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 autoOpen?: boolean\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n autoOpen: false,\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\nonMounted(() => {\n if (props.autoOpen) {\n onOpen()\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","modelValue","_useModel","pagination","inject","DatatablePaginationKey","isUndefined","t","useI18n","defaultItemsCreatedAt","SortOrder","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","computed","found","options","item","onItemClick","paginationUpdateDefault","watch","newValue","oldValue","option","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_unref","_createVNode","_component_VBtn","_createTextVNode","_component_VMenu","_component_VList","_Fragment","_renderList","_createBlock","_component_VListItem","$event","_component_VListItemTitle","_normalizeClass","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","isNull","disabledNext","computedTotalCountText","onClickFirst","useThrottleFn","onClickLast","onClickPrev","onClickNext","_component_VBtnToggle","_cache","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","generateByIdsApiQuery","ids","isSearchApi","field","querySetLimit","querySetOffset","querySetOrder","queryBuild","queryAddFilter","queryAdd","useApiQueryBuilder","limit","useApiFetchByIds","clientOrParams","system","entity","urlTemplate","urlParams","resolvedClient","resolvedSystem","resolvedEntity","resolvedUrlTemplate","resolvedUrlParams","resolvedOptions","resolvedIsSearchApi","resolvedField","abortController","urlTemplateOverrideOrParams","urlParamsOverride","resolvedUrlTemplateOverride","resolvedUrlParamsOverride","params","isDefined","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","filterData","filterConfig","sortBy","sortDesc","batchSize","forceElastic","resolvedSortBy","resolvedSortDesc","resolvedBatchSize","resolvedForceElastic","searchApi","usePagination","results","generateListQuery","resData","isApiInfiniteResponseList","nextPageData","isApiResponseList","promises","numPages","i","pageCopy","paginationRef","ref","pageResponse","END_POINT","ENTITY","useJobApi","client","useApiFetchList","id","apiFetchOne","data","type","stringToKebabCase","apiCreateOne","apiDeleteOne","defaultColumn","DatatableColumnsConfigMoreOptionsDefault","createDatatableColumnsConfig","config","columnsHidden","subject","moreOptions","localI18n","i18n","storeKey","isString","isBoolean","columnsAll","obj","DATETIME_AUTO_LABEL_TRACKING","columnsVisible","columns","column","loadStoredColumns","stored","storedData","isObject","isArray","storeColumns","onMounted","useSubjectSelect","datatableConfig","datatableHiddenColumns","executeFetch","filterSortBy","urlTemplateOverride","enableActions","filterTouched","items","selected","loading","setSortBy","incrementPage","resetFilter","submitFilter","useFilterHelpers","showErrorsDefault","useAlerts","onOpen","resetState","getListDebounced","sortByChange","onFetchNextPage","e","getList","useDebounceFn","event","eventTarget","parent","firstTd","input","dialogLocal","dialog","paginationComputed","toRaw","sidebarLeft","selectedItemsCount","disabledSubmit","toggleSidebar","onClose","onConfirm","fetchNextPage","onPageChange","hasNextPage","autoloadOnIntersect","isIntersecting","__expose","_renderSlot","_ctx","withModifiers","_component_VDialog","_mergeProps","_component_VCard","ADialogToolbar","_component_VToolbar","_component_VIcon","_component_VTooltip","_hoisted_7","_hoisted_8","_component_ABtnSecondary","_vShow","ADatatablePagination","_hoisted_9","_hoisted_10","_component_VSpacer","_component_ABtnPrimary"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,UAAMA,IAAQC,GAYRC,IAAOC,GAIPC,IAAaC,MAAoB,YAGtC,GAEKC,IAAaC,GAAOC,EAAsB;AAEhD,QAAIC,EAAYH,CAAU;AACxB,YAAM,IAAI,MAAM,kCAAkC;AAGpD,UAAM,EAAE,GAAAI,EAAA,IAAMC,GAAA,GAERC,IAAkD;AAAA,MACtD,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAOC,EAAU,KAAA,EAAK;AAAA,MAClH,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAOA,EAAU,IAAA,EAAI;AAAA,IAAE,GAG3GC,IAA2C;AAAA,MAC/C,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,MAAM,OAAOD,EAAU,KAAA,EAAK;AAAA,MAC3G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,MAAM,OAAOA,EAAU,IAAA,EAAI;AAAA,IAAE,GAGpGE,IAAqD;AAAA,MACzD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ,EAAE,KAAKC,IAAe,OAAOH,EAAU,KAAA;AAAA,MAAK;AAAA,MAEtD,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAOA,EAAU,KAAA,EAAK;AAAA,MAClH,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAOA,EAAU,IAAA,EAAI;AAAA,IAAE,GAG3GI,IAAcC,EAAS,MAAM;AACjC,YAAMC,IAAQC,EAAQ,MAAM,KAAK,CAACC,MAAcA,EAAK,OAAOjB,EAAW,KAAK;AAC5E,aAAIe,IAAcT,EAAES,EAAM,MAAM,IACzB;AAAA,IACT,CAAC,GAEKC,IAAUF,EAAS,MACnBlB,EAAM,gBAAsBA,EAAM,gBAClCA,EAAM,YAAY,kBAAwBe,IAC1Cf,EAAM,YAAY,OAAac,IAC5BF,CACR,GAEKU,IAAc,CAACD,MAAkC;AACrD,MAAAjB,EAAW,QAAQiB,EAAK;AAAA,IAC1B,GAEME,IAA0B,CAACJ,MAAmC;AAClE,MAAKA,EAAM,WACTb,EAAW,QAAQ,EAAE,GAAGA,EAAW,OAAY,QAAQ,MAAM,YAAY,GAAK,GAC9EJ,EAAK,gBAAgBiB,CAAK,IAE5Bb,EAAW,MAAM,SAASa,EAAM,QAChCjB,EAAK,gBAAgBiB,CAAK;AAAA,IAC5B;AAEA,WAAAK,GAAMpB,GAAY,CAACqB,GAAUC,MAAa;AACxC,UAAID,MAAaC,EAAU;AAC3B,YAAMP,IAAQC,EAAQ,MAAM,KAAK,CAACO,MACzBA,EAAO,OAAOF,CACtB;AACD,UAAI,CAAAhB,EAAYU,CAAK,GAGrB;AAAA,YAAIV,EAAYT,EAAM,wBAAwB,GAAG;AAC/C,UAAAuB,EAAwBJ,CAAK;AAC7B;AAAA,QACF;AACA,QAAAnB,EAAM,yBAAyBmB,GAAOb,CAAU;AAAA;AAAA,IAClD,CAAC,GAEDkB;AAAA,MACElB;AAAA,MACA,CAACmB,GAAUC,MAAa;AACtB,YAAID,EAAS,QAAQ,QAAQC,GAAU,QAAQ,OAAOD,EAAS,QAAQ,UAAUC,GAAU,QAAQ;AACjG;AAEF,cAAMP,IAAQC,EAAQ,MAAM,KAAK,CAACO,MACzBF,EAAS,QAAQ,QAAQE,EAAO,QAAQ,OAAOF,EAAS,QAAQ,UAAUE,EAAO,QAAQ,KACjG;AACD,QAAIlB,EAAYU,CAAK,MAGrBf,EAAW,QAAQe,EAAM;AAAA,MAC3B;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,cAKlBS,EAAA,GAAAC,EAgCM,OAhCNC,IAgCM;AAAA,MA/BJC,EAEM,OAFNC,IAEMC,EADDC,EAAAxB,CAAA,+CAA8C,MACnD,CAAA;AAAA,MACAyB,EA2BOC,GAAA;AAAA,QA1BL,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,eAAY;AAAA,MAAA;mBAEZ,MAAiB;AAAA,UAAdC,EAAAJ,EAAAhB,EAAA,KAAW,IAAG,KACjB,CAAA;AAAA,UAAAkB,EAmBQG,IAAA;AAAA,YAlBN,WAAU;AAAA,YACV,UAAS;AAAA,YACT,0BAAA;AAAA,UAAA;uBAEA,MAaQ;AAAA,cAbRH,EAaQI,IAAA;AAAA,gBAZN,SAAQ;AAAA,gBACR,OAAM;AAAA,cAAA;2BAGJ,MAAuB;AAAA,0BADzBV,EAQYW,IAAA,MAAAC,GAPKrB,EAAA,OAAO,CAAfC,YADTqB,EAQYC,IAAA;AAAA,oBANT,KAAKtB,EAAK;AAAA,oBACV,SAAK,CAAAuB,MAAEtB,EAAYD,CAAI;AAAA,kBAAA;+BAExB,MAEiB;AAAA,sBAFjBc,EAEiBU,IAAA;AAAA,wBAFA,OAAKC,GAAA,EAAA,oBAAwBzB,EAAK,OAAOjB,EAAA,OAAU;AAAA,sBAAA;mCAClE,MAAoB;AAAA,8BAAjB8B,EAAAxB,CAAA,EAAEW,EAAK,MAAM,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpI9B,UAAMnB,IAAOC,GAIPG,IAAaC,GAAOC,EAAsB;AAEhD,QAAIC,EAAYH,CAAU;AACxB,YAAM,IAAI,MAAM,kCAAkC;AAGpD,UAAM,EAAE,GAAAI,EAAA,IAAMC,GAAA,GAERoC,IAAW7B,EAAS,MACjB,KAAK,KAAKZ,EAAW,MAAM,aAAaA,EAAW,MAAM,WAAW,CAC5E,GAEK0C,IAAgB9B,EAAS,MACtBZ,EAAW,MAAM,OAAOA,EAAW,MAAM,cAAcA,EAAW,MAAM,cAAc,CAC9F,GAEK2C,IAAc/B,EAAS,MAEzBZ,EAAW,MAAM,OAAOA,EAAW,MAAM,cACzCA,EAAW,MAAM,cACjBA,EAAW,MAAM,gBAEpB,GAEK4C,IAAuBhC,EAAS,MAC7BZ,EAAW,MAAM,SAAS,CAClC,GAEK6C,IAAejC,EAAS,MACrB,CAACkC,EAAO9C,EAAW,MAAM,WAAW,KAAKA,EAAW,MAAM,SAASyC,EAAS,KACpF,GAEKM,IAAenC,EAAS,MAEzBkC,EAAO9C,EAAW,MAAM,WAAW,KAAKA,EAAW,MAAM,SAASyC,EAAS,SAC5EzC,EAAW,MAAM,gBAAgB,EAEpC,GAEKgD,IAAyBpC,EAAS,MACjCkC,EAAO9C,EAAW,MAAM,WAAW,IAGjCA,EAAW,MAAM,aAFfA,EAAW,MAAM,cAAc2C,EAAY,QAAQ,IAAI,MAAMA,EAAY,KAGnF;AAED,IAAAzB;AAAA,MACE,MAAMlB,EAAW,MAAM;AAAA,MACvB,CAACmB,GAAUC,MAAa;AACtB,QAAID,MAAaC,MACfpB,EAAW,MAAM,OAAO,GACxBJ,EAAK,QAAQ;AAAA,MAEjB;AAAA,IAAA,GAGFsB;AAAA,MACE,MAAMlB,EAAW,MAAM;AAAA,MACvB,CAACmB,GAAUC,MAAa;AACtB,QAAID,MAAaC,KACfxB,EAAK,QAAQ;AAAA,MAEjB;AAAA,IAAA;AAGF,UAAMqD,IAAeC,GAAc,MAAM;AACvC,MAAAlD,EAAW,MAAM,OAAO;AAAA,IAC1B,GAAG,GAAG,GAEAmD,IAAcD,GAAc,MAAM;AACtC,MAAAlD,EAAW,MAAM,OAAOyC,EAAS;AAAA,IACnC,GAAG,GAAG,GAEAW,IAAcF,GAAc,MAAM;AACtC,MAAAlD,EAAW,MAAM,OAAOA,EAAW,MAAM,OAAO;AAAA,IAClD,GAAG,GAAG,GAEAqD,IAAcH,GAAc,MAAM;AACtC,MAAAlD,EAAW,MAAM,OAAOA,EAAW,MAAM,OAAO;AAAA,IAClD,GAAG,GAAG;sBAIJsB,EAAA,GAAAC,EAgEM,OAhENC,IAgEM;AAAA,MA9DK7B,EAAA,mCADT2B,KAAAC,EAwBM,OAxBNG,IAwBM;AAAA,QApBDK,EAAAJ,EAAAC,EAAAxB,CAAA,6CAA4C,MAC/C,CAAA;AAAA,QAAAyB,EAkBayB,IAAA;AAAA,UAjBF,YAAA1B,EAAA5B,CAAA,EAAW;AAAA,UAAX,uBAAAuD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjB,MAAAV,EAAA5B,CAAA,EAAW,cAAWsC;AAAA,UAC/B,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,WAAA;AAAA,UACA,WAAQ;AAAA,QAAA;qBAGN,MAAmC;AAAA,oBADrCf,EAUOW,IAAA,MAAAC,GATUxC,EAAA,qBAAmB,CAA3BoB,YADTqB,EAUON,GAAA;AAAA,cARJ,KAAKf;AAAA,cACL,OAAOA,MAASa,EAAA5B,CAAA,EAAW,cAAW,cAAA;AAAA,cACtC,OAAOe;AAAA,cACR,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAQ;AAAA,YAAA;yBAER,MAAU;AAAA,oBAAPA,CAAI,GAAA,CAAA;AAAA,cAAA;;;;;;;MAIbU,EAEM,OAFN+B,IAEM7B,EADDe,EAAA,KAAa,IAAG,QAAGf,EAAGgB,EAAA,KAAW,IAAG,MAAChB,EAAGC,EAAAxB,CAAA,EAAC,8BAAA,CAAA,IAAmC,QAAI4C,EAAA,KAAsB,GAAA,CAAA;AAAA,MAE3GvB,EAeM,OAfNgC,IAeM;AAAA,QAdJ5B,EAMEC,GAAA;AAAA,UALC,UAAUc,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYhB,EAAAqB,CAAA,GAAY,CAAA,MAAA,CAAA;AAAA,QAAA;QAE3BpB,EAMEC,GAAA;AAAA,UALC,UAAUc,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYhB,EAAAwB,CAAA,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;;MAG5B3B,EAEM,OAFNiC,IAEM;AAAA,QADJjC,EAAkC,QAAA,MAAAE,EAAzBC,EAAA5B,CAAA,EAAW,IAAI,GAAA,CAAA;AAAA,MAAA;MAE1ByB,EAeM,OAfNkC,IAeM;AAAA,QAdJ9B,EAMEC,GAAA;AAAA,UALC,UAAUiB,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYnB,EAAAyB,CAAA,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;QAE1BxB,EAMEC,GAAA;AAAA,UALC,UAAUe,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYjB,EAAAuB,CAAA,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;;;;IC1H1BS,KAAwB,CAACC,GAA4BC,GAAsBC,IAAQ,SAAiB;AACxG,QAAM,EAAE,eAAAC,GAAe,gBAAAC,GAAgB,eAAAC,GAAe,YAAAC,GAAY,gBAAAC,GAAgB,UAAAC,EAAA,IAAaC,GAAA,GACzFC,IAAQV,EAAI;AAClB,SAAAG,EAAcO,CAAK,GACnBN,EAAe,GAAGM,CAAK,GACvBL,EAAcH,GAAO,EAAK,GACtBD,IAAaO,EAASN,GAAOF,EAAI,KAAK,GAAG,CAAC,MAC1B,MAAME,GAAOF,EAAI,KAAK,GAAG,CAAC,GAEvCM,EAAA;AACT;AAmBO,SAASK,GACdC,GACAC,GACAC,GACAC,GACAC,GACA/D,GACAgD,GACAC,GAC+B;AAC/B,MAAIe,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC;AAEJ,EAAI,OAAOZ,KAAmB,cAC5BK,IAAiBL,GACjBM,IAAiBL,GACjBM,IAAiBL,GACjBM,IAAsBL,GACtBM,IAAoBL,GACpBM,IAAkBrE,KAAW,CAAA,GAC7BsE,IAAsBtB,KAAe,IACrCuB,IAAgBtB,KAAS,SAEzBe,IAAiBL,EAAe,QAChCM,IAAiBN,EAAe,QAChCO,IAAiBP,EAAe,QAChCQ,IAAsBR,EAAe,aACrCS,IAAoBT,EAAe,WACnCU,IAAkBV,EAAe,WAAW,CAAA,GAC5CW,IAAsBX,EAAe,eAAe,IACpDY,IAAgBZ,EAAe,SAAS;AAG1C,MAAIa,IAA0C;AA6F9C,SAAO;AAAA,IACL,cA5FmB,OACnBzB,GACA0B,IAAqE,QACrEC,IAA2C,WAC5B;AACf,MAAAF,IAAkB,IAAI,gBAAA;AAEtB,UAAIG,GACAC;AAEJ,MAAI,OAAOH,KAAgC,YAAYA,MAAgC,QACrFE,IAA8BF,EAA4B,qBAC1DG,IAA4BH,EAA4B,sBAExDE,IAA8BF,GAC9BG,IAA4BF;AAG9B,UAAI;AACF,cAAMG,IAASC,GAAUF,CAAyB,IAAIA,IAA4BR,GAC5EW,IAAWD,GAAUH,CAA2B,IAAIA,IAA8BR;AACxF,YAAI9E,EAAY0F,CAAQ,EAAG,OAAM,IAAI,MAAM,2BAA2B;AACtE,cAAMC,KACH3F,EAAYwF,CAAM,IAAIE,IAAWE,GAAqBF,GAAUF,CAAM,KACvE/B,GAAsBC,GAAKuB,GAAqBC,CAAa,GAEzDW,IAAM,MAAMlB,IAAiB,IAAIgB,GAAK;AAAA,UAC1C,GAAGX;AAAA,UACH,QAAQG,EAAgB;AAAA,QAAA,CACzB;AAED,YAAI,CAACW,GAAkBD,EAAI,MAAM;AAC/B,gBAAM,IAAIE,GAAyBF,EAAI,MAAM;AAG/C,YAAIA,EAAI,MAAM;AACZ,iBAAOA,EAAI,KAAK;AAGlB,YAAIA,EAAI,WAAWG;AACjB,iBAAO,CAAA;AAGT,cAAM,IAAIC,GAAA;AAAA,MACZ,SAASC,GAAU;AACjB,YAAIA,aAAe,gBAAgBA,EAAI,SAAS;AAC9C,iBAAO,CAAA;AAGT,cAAIC,GAA2BD,CAAG,IAC1BA,IAGJE,GAA8BF,CAAG,IAC7B,IAAIG,GAAsBH,GAAKA,EAAI,QAAQ,GAAG,IAGlDI,GAAoCJ,CAAG,IACnC,IAAIK,GAAuBL,GAAKtB,GAAgBC,GAAgBqB,CAAG,IAGvEM,GAA0CN,CAAG,IACzC,IAAIO,GAA6BP,GAAKtB,GAAgBC,GAAgBqB,CAAG,IAG7EQ,GAA4CR,CAAG,IAC3C,IAAIS,GAA+BT,GAAKA,CAAG,IAG/CU,GAAoBV,CAAG,IACnB,IAAIW,GAAoBX,CAAG,IAG/BY,GAAM,aAAaZ,CAAG,KACxB,QAAQ,MAAM,kBAAkBpB,GAAqBoB,EAAI,KAAK,GACxD,IAAIa,GAAkBb,CAAG,MAGjC,QAAQ,MAAM,oBAAoBA,CAAG,GAC/B,IAAID,GAAeC,CAAG;AAAA,MAC9B,UAAA;AACE,QAAAf,IAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAUE,YARiB,MAAM;AACvB,MAAIA,KACFA,EAAgB,MAAA;AAAA,IAEpB;AAAA,EAIE;AAEJ;AC/IO,SAAS6B,GACd1C,GACAC,GACAC,GACAC,GACAC,GACA/D,GACmC;AACnC,MAAIgE,GACAC,GACAC,GACAC,GACAC,GACAC;AAEJ,EAAI,OAAOV,KAAmB,cAC5BK,IAAiBL,GACjBM,IAAiBL,GACjBM,IAAiBL,GACjBM,IAAsBL,GACtBM,IAAoBL,GACpBM,IAAkBrE,KAAW,CAAA,MAE7BgE,IAAiBL,EAAe,QAChCM,IAAiBN,EAAe,QAChCO,IAAiBP,EAAe,QAChCQ,IAAsBR,EAAe,aACrCS,IAAoBT,EAAe,WACnCU,IAAkBV,EAAe,WAAW,CAAA;AAG9C,MAAIa,IAA0C;AAsK9C,SAAO;AAAA,IACL,cArKmB,OACnB8B,GACAC,GACA9B,IAAyE,QACzEC,IAA2C,QAC3C8B,IAAS,MACTC,IAAW,IACXC,IAAY,KACZC,IAAe,OACA;AACf,MAAAnC,IAAkB,IAAI,gBAAA;AAEtB,UAAIG,GACAC,GACAgC,GACAC,GACAC,GACAC;AAEJ,MAAI,OAAOtC,KAAgC,YAAYA,MAAgC,QACrFE,IAA8BF,EAA4B,qBAC1DG,IAA4BH,EAA4B,mBACxDmC,IAAiBnC,EAA4B,UAAU,MACvDoC,IAAmBpC,EAA4B,YAAY,IAC3DqC,IAAoBrC,EAA4B,aAAa,KAC7DsC,IAAuBtC,EAA4B,gBAAgB,OAEnEE,IAA8BF,GAC9BG,IAA4BF,GAC5BkC,IAAiBJ,GACjBK,IAAmBJ,GACnBK,IAAoBJ,GACpBK,IAAuBJ;AAGzB,UAAI;AACF,cAAMK,IAAYT,EAAa,QAAQ,WAAWQ,IAAuB,YAAY,IAC/ElC,IAASC,GAAUF,CAAyB,IAAIA,IAA4BR,GAC5EW,KAAWD,GAAUH,CAA2B,IAAIA,IAA8BR;AACxF,YAAI9E,EAAY0F,EAAQ,EAAG,OAAM,IAAI,MAAM,2BAA2B;AACtE,cAAM,EAAE,YAAA7F,MAAe+H,GAAcL,GAAgBC,IAAmBpH,EAAU,OAAOA,EAAU,KAAK;AAAA,UACtG,aAAaqH;AAAA,QAAA,CACd,GACK9B,KAAO3F,EAAYwF,CAAM,IAAIE,KAAWE,GAAqBF,IAAUF,CAAM,KAAKmC,GAClFE,IAAU,CAAA,GAGVhC,IAAM,MAAMlB,EAAA,EAAiB,IAAIgB,IAAMmC,GAAkBjI,GAAYoH,GAAYC,CAAY,GAAG;AAAA,UACpG,GAAGlC;AAAA,UACH,QAAQG,EAAgB;AAAA,QAAA,CACzB;AAED,YAAI,CAACW,GAAkBD,EAAI,MAAM;AAC/B,gBAAM,IAAIE,GAAyBF,EAAI,MAAM;AAG/C,YAAIA,EAAI,MAAM;AACZ,gBAAMkC,IAAUlC,EAAI;AAIpB,cAFAgC,EAAQ,KAAK,GAAGE,EAAQ,IAAI,GAExBC,GAA0BD,CAAO;AAInC,iBAHAlI,EAAW,MAAM,cAAckI,EAAQ,aAGhClI,EAAW,MAAM,eAAa;AACnC,cAAAA,EAAW,MAAM;AAQjB,oBAAMoI,MAPmB,MAAMtD,EAAA,EAAiB;AAAA,gBAC9CgB,IAAMmC,GAAkBjI,GAAYoH,GAAYC,CAAY;AAAA,gBAC5D;AAAA,kBACE,GAAGlC;AAAA,kBACH,QAAQG,EAAgB;AAAA,gBAAA;AAAA,cAC1B,GAEoC;AAEtC,cAAA0C,EAAQ,KAAK,GAAGI,GAAa,IAAI,GACjCpI,EAAW,MAAM,cAAcoI,GAAa;AAAA,YAC9C;AAAA,mBACSC,GAAkBH,CAAO,GAAG;AAGrC,gBAFAlI,EAAW,MAAM,aAAakI,EAAQ,YAElClI,EAAW,MAAM,cAAcA,EAAW,MAAM;AAClD,qBAAOgI;AAIT,kBAAMM,KAA2B,CAAA,GAC3BC,KAAW,KAAK,KAAKvI,EAAW,MAAM,aAAaA,EAAW,MAAM,WAAW;AAErF,qBAASwI,IAAI,GAAGA,IAAID,IAAUC,KAAK;AAEjC,oBAAMC,KAAW,EAAE,GAAGzI,EAAW,OAAO,MAAMwI,IAAI,EAAA,GAC5CE,KAAgBC,EAAIF,EAAQ;AAClC,cAAAH,GAAS;AAAA,gBACPxD,EAAA,EAAiB,IAAIgB,IAAMmC,GAAkBS,IAAetB,GAAYC,CAAY,GAAG;AAAA,kBACrF,GAAGlC;AAAA,kBACH,QAAQG,EAAgB;AAAA,gBAAA,CACzB;AAAA,cAAA;AAAA,YAEL;AAGA,aADqB,MAAM,QAAQ,IAAIgD,EAAQ,GAClC,QAAQ,CAACM,MAAiB;AAErC,cAAAZ,EAAQ,KAAK,GAAGY,EAAa,KAAK,IAAI;AAAA,YACxC,CAAC;AAAA,UACH;AAEA,iBAAOZ;AAAA,QACT;AAEA,YAAIhC,EAAI,WAAWG;AACjB,iBAAO,CAAA;AAGT,cAAM,IAAIC,GAAA;AAAA,MACZ,SAASC,GAAU;AACjB,YAAIA,aAAe,gBAAgBA,EAAI,SAAS;AAC9C,iBAAO,CAAA;AAGT,cAAIC,GAA2BD,CAAG,IAC1BA,IAGJE,GAA8BF,CAAG,IAC7B,IAAIG,GAAsBH,GAAKA,EAAI,QAAQ,GAAG,IAGlDI,GAAoCJ,CAAG,IACnC,IAAIK,GAAuBL,GAAKtB,GAAgBC,GAAgBqB,CAAG,IAGvEM,GAA0CN,CAAG,IACzC,IAAIO,GAA6BP,GAAKtB,GAAgBC,GAAgBqB,CAAG,IAG7EQ,GAA4CR,CAAG,IAC3C,IAAIS,GAA+BT,GAAKA,CAAG,IAG/CU,GAAoBV,CAAG,IACnB,IAAIW,GAAoBX,CAAG,IAG/BY,GAAM,aAAaZ,CAAG,KACxB,QAAQ,MAAM,kBAAkBpB,GAAqBoB,EAAI,KAAK,GACxD,IAAIa,GAAkBb,CAAG,MAGjC,QAAQ,MAAM,oBAAoBA,CAAG,GAC/B,IAAID,GAAeC,CAAG;AAAA,MAC9B,UAAA;AACE,QAAAf,IAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAUE,YARiB,MAAM;AACvB,MAAIA,KACFA,EAAgB,MAAA;AAAA,IAEpB;AAAA,EAIE;AAEJ;AClQA,MAAMuD,KAAY,eACLC,KAAS;AAEf,SAASC,GAA6CC,GAA6BtE,GAAgB;AAexG,SAAO;AAAA,IACL,iBAfsB,MAAMuE,GAA2BD,GAAQtE,GAAQoE,IAAQD,EAAS;AAAA,IAgBxF,UAde,CAACK,MAAeC,GAAqBH,GAAQH,KAAY,QAAQ,EAAE,IAAAK,KAAMxE,GAAQoE,EAAM;AAAA,IAetG,WAbgB,CAACM,MAAkB;AACnC,YAAMC,IAAOC,GAAkBF,EAAK,aAAa,EAC9C,MAAM,CAAC,EACP,QAAQ,UAAU,QAAQ;AAE7B,aAAOG,GAAsBP,GAAQI,GAAMP,KAAY,UAAU,EAAE,MAAAQ,EAAA,GAAQ3E,GAAQoE,EAAM;AAAA,IAC3F;AAAA,IAQE,WANgB,CAACI,MAAeM,GAAsBR,GAAQH,KAAY,QAAQ,EAAE,IAAAK,KAAMxE,GAAQoE,EAAM;AAAA,EAMxG;AAEJ;ACtBA,MAAMW,KAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AACT,GASMC,KAA2C;AAAA,EAC/C,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AACd;AAEO,SAASC,GACdC,GACAC,GACAnF,GACAoF,GACAC,IAA0D,IAC1D;AACA,QAAMjJ,IAAU,EAAE,GAAG4I,IAA0C,GAAGK,EAAA,GAC5DC,IAAYlJ,EAAQ,cAAcmJ,IAClC,EAAE,GAAA7J,EAAA,IAAM4J,EAAU,UAAUA;AAElC,MAAIE;AACJ,EAAIC,GAASrJ,EAAQ,wBAAwB,IAC3CoJ,IAAWpJ,EAAQ,2BACVsJ,GAAUtJ,EAAQ,wBAAwB,KAAcA,EAAQ,6BAAjB,OACxDoJ,IAAW,WAAWxF,IAAS,MAAMoF;AAGvC,QAAMO,IAAaT,EAAO,IAAI,CAAC7I,MAAS;AACtC,UAAMuJ,IAAM,EAAE,GAAGb,IAAe,GAAG1I,EAAA;AACnC,WAAKZ,EAAYmK,EAAI,KAAK,MAEfnK,EAAYmK,EAAI,KAAK,KAAKC,GAA6B,SAASD,EAAI,GAAG,IAChFA,EAAI,QAAQlK,EAAE,2BAA2BkK,EAAI,GAAG,IACvCnK,EAAYmK,EAAI,KAAK,KAAK5F,KAAUoF,IAC7CQ,EAAI,QAAQlK,EAAEsE,IAAS,MAAMoF,IAAU,YAAYQ,EAAI,GAAG,IAE1DA,EAAI,QAAQ,KAEPA;AAAA,EACT,CAAC,GAEKE,IAAiB5J,EAAS,MAAM;AACpC,UAAM6J,IAAe,CAAA;AACrB,WAAI3J,EAAQ,cAAY2J,EAAQ,KAAK,EAAE,KAAK,qBAAqB,UAAU,IAAO,GAClFJ,EAAW,QAAQ,CAACK,MAAW;AAC7B,MAAKb,EAAc,MAAM,SAASa,EAAO,GAAG,KAC1CD,EAAQ,KAAKC,CAAM;AAAA,IAEvB,CAAC,GACI5J,EAAQ,kBAAgB2J,EAAQ,KAAK,EAAE,KAAK,WAAW,UAAU,IAAO,OAAO,MAAA,CAAO,GACpFA;AAAA,EACT,CAAC,GAEKE,IAAoB,MAAM;AAC9B,QAAI,CAACT,KAAY,CAAC,aAAc;AAChC,UAAMU,IAAS,aAAa,QAAQV,CAAQ;AAC5C,QAAI,CAACU,EAAQ;AACb,UAAMC,IAAa,KAAK,MAAMD,CAAM;AACpC,IAAKE,GAASD,CAAU,KACnBE,GAAQF,EAAW,MAAM,MAC9BhB,EAAc,QAAQgB,EAAW;AAAA,EACnC,GAEMG,IAAe,CAACP,MAAsB;AAC1C,IAAI,CAACP,KAAY,CAAC,gBAClB,aAAa,QAAQA,GAAU,KAAK,UAAU,EAAE,QAAQO,EAAA,CAAS,CAAC;AAAA,EACpE;AAEA,SAAAQ,GAAU,MAAM;AACd,IAAAN,EAAA;AAAA,EACF,CAAC,GAEDzJ,GAAM2I,GAAe,CAAC1I,MAAa;AACjC,IAAA6J,EAAa7J,CAAQ;AAAA,EACvB,CAAC,GAEM;AAAA,IACL,YAAAkJ;AAAA,IACA,gBAAAG;AAAA,IACA,eAAAX;AAAA,EAAA;AAEJ;AC5FO,SAASqB,GACdC,GACAC,GACA1G,GACAoF,GACAuB,GAQAjE,GACAC,GACAiE,IAAuC,MACvCC,IAA0C,QAC1C/F,IAA2C,QAC3CiC,IAAwB,IACxB+D,IAAyB,IACzB;AACA,QAAMC,IAA8B9C,EAAI,EAAK,GACvC+C,IAA2B/C,EAAI,EAAE,GACjCgD,IAA8BhD,EAAI,EAAE,GACpCiD,IAAUjD,EAAI,EAAK,GACnB,EAAE,YAAA3I,GAAY,WAAA6L,GAAW,eAAAC,EAAA,IAAkB/D;AAAA,IAC/CjF,EAAOwI,CAAY,IAAI,OAAOA,EAAa;AAAA,IAC3CA,GAAc;AAAA,EAAA,GAGV,EAAE,aAAAS,GAAa,cAAAC,EAAA,IAAiBC,GAAiB7E,GAAYC,GAAc;AAAA,IAC/E,0BAA0B;AAAA,IAC1B,mBAAmB;AAAA,EAAA,CACpB,GACK,EAAE,mBAAA6E,EAAA,IAAsBC,GAAA,GAExB,EAAE,gBAAA3B,GAAgB,YAAAH,GAAY,eAAAR,EAAA,IAAkBF;AAAA,IACpDwB;AAAA,IACAC;AAAA,IACA1G;AAAA,IACAoF;AAAA,IACA,EAAE,0BAA0B,IAAO,gBAAgB,CAAC0B,EAAA;AAAA,EAAc,GAG9DY,IAAS,MAAM;AACnB,IAAAC,EAAA,GACAC,EAAA;AAAA,EACF,GAEMC,IAAe,CAAClL,MAAoC;AACxD,IAAAwK,EAAUxK,EAAO,MAAM,GACvBiL,EAAA;AAAA,EACF,GAEME,IAAkB,YAAY;AAClC,IAAAZ,EAAQ,QAAQ,IAChBE,EAAA;AACA,QAAI;AACF,YAAM9F,IAAO,MAAMqF;AAAA,QACjBrL;AAAA,QACAoH;AAAA,QACAC;AAAA,QACAkE;AAAA,QACA/F;AAAA,QACAiC;AAAA,MAAA;AAEF,MAAAiE,EAAM,MAAM,KAAK,GAAG1F,CAAG;AAAA,IACzB,SAASyG,GAAG;AACV,MAAAP,EAAkBO,CAAC;AAAA,IACrB,UAAA;AACE,MAAAb,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF,GAEMS,IAAa,MAAM;AACvB,IAAAX,EAAM,QAAQ,CAAA,GACdC,EAAS,QAAQ,CAAA;AAAA,EACnB,GAEMe,IAAU,YAAY;AAC1B,IAAAd,EAAQ,QAAQ;AAChB,QAAI;AACF,MAAAF,EAAM,QAAS,MAAML;AAAA,QACnBrL;AAAA,QACAoH;AAAA,QACAC;AAAA,QACAkE;AAAA,QACA/F;AAAA,QACAiC;AAAA,MAAA;AAAA,IAEJ,SAASgF,GAAG;AACV,MAAAP,EAAkBO,CAAC;AAAA,IACrB,UAAA;AACE,MAAAb,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF,GAEMU,IAAmBK,GAAc,YAAY;AACjD,UAAMD,EAAA;AAAA,EACR,CAAC;AAgBD,SAAO;AAAA,IACL,OAAAhB;AAAA,IACA,UAAAC;AAAA,IACA,YAAA3L;AAAA,IACA,gBAAAwK;AAAA,IACA,eAAAX;AAAA,IACA,YAAAQ;AAAA,IACA,eAAAoB;AAAA,IACA,SAAAG;AAAA,IACA,YAvBiB,CAACgB,MAAiB;AACnC,YAAMC,IAAcD,EAAM;AAC1B,UAAI,CAACC,KAAgBA,EAAY,YAAY,WAAYA,EAAiC,SAAS;AACjG;AAEF,YAAMC,IAASD,EAAY,QAAQ,mBAAmB;AACtD,UAAI,CAACC,KAAU,CAACA,EAAO,UAAU,SAAS,kBAAkB,EAAG;AAC/D,YAAMC,IAAUD,EAAO;AACvB,UAAI,CAACC,KAAW,CAACA,EAAQ,UAAU,SAAS,kBAAkB,EAAG;AACjE,YAAMC,IAAQD,EAAQ,cAAc,OAAO;AAC3C,MAAKC,KACLA,EAAM,MAAA;AAAA,IACR;AAAA,IAYE,iBAAAR;AAAA,IACA,QAAAJ;AAAA,IACA,cAAAG;AAAA,IACA,SAASD;AAAA,IACT,aAAa,MAAMP,EAAY/L,GAAYsM,CAAgB;AAAA,IAC3D,cAAc,MAAMN,EAAahM,GAAYsM,CAAgB;AAAA,EAAA;AAEjE;;;;;;;;;;;;;;;;;;;ACvIA,UAAM5M,IAAQC,GAsBRC,IAAOC,GASPoN,IAActE,EAAI,EAAK,GACvBuE,IAAStM,EAAS;AAAA,MACtB,MAAM;AACJ,eAAIT,EAAYT,EAAM,UAAU,IAAUuN,EAAY,QAC/CvN,EAAM;AAAA,MACf;AAAA,MACA,IAAIyB,GAAmB;AACrB,QAAA8L,EAAY,QAAQ9L,GACpBvB,EAAK,qBAAqBuB,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKgM,IAAqBvM,EAAS;AAAA,MAClC,KAAK,MAAMlB,EAAM;AAAA,MACjB,KAAK,CAACyB,MAAa;AACjB,QAAAvB,EAAK,qBAAqB,EAAE,GAAGwN,GAAMjM,CAAQ,GAAG;AAAA,MAClD;AAAA,IAAA,CACD,GAEKkM,IAAc1E,EAAI,EAAI,GAEtB,EAAE,GAAAvI,EAAA,IAAMC,GAAA,GAERiN,IAAqB1M,EAAS,MAC3BlB,EAAM,cAAc,MAC5B,GAEK6N,IAAiB3M,EAAS,MACvB0M,EAAmB,QAAQ5N,EAAM,YAAY4N,EAAmB,QAAQ5N,EAAM,QACtF,GAEK0M,IAAS,MAAM;AACnB,MAAAxM,EAAK,QAAQ,GACbyN,EAAY,QAAQ,IACpBH,EAAO,QAAQ;AAAA,IACjB,GAEMM,IAAgB,MAAM;AAC1B,MAAAH,EAAY,QAAQ,CAACA,EAAY;AAAA,IACnC,GAEMI,IAAU,MAAM;AACpB,MAAAP,EAAO,QAAQ;AAAA,IACjB,GAEMQ,IAAY,MAAM;AACtB,MAAA9N;AAAA,QACE;AAAA,QACAF,EAAM,cAAc,IAAI,CAACqB,MAASqM,GAAMrM,CAAI,CAAC;AAAA,MAAA,GAE/C0M,EAAA;AAAA,IACF,GAEME,IAAgB,MAAM;AAC1B,MAAA/N,EAAK,iBAAiB;AAAA,IACxB,GAEMgO,IAAe,MAAM;AACzB,MAAAhO,EAAK,cAAc;AAAA,IACrB,GAEM6C,IAAW7B,EAAS,MACjB,KAAK,KAAKuM,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKU,IAAcjN,EAAS,MACpB,EACJkC,EAAOqK,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAAS1K,EAAS,SAC5F0K,EAAmB,MAAM,gBAAgB,GAE5C,GAEKW,IAAsB,CAACC,MAA4B;AACvD,MAAIA,KAAkBF,EAAY,SAAS,CAACnO,EAAM,WAChDiO,EAAA;AAAA,IAEJ;AAEA,WAAA1C,GAAU,MAAM;AACd,MAAIvL,EAAM,YACR0M,EAAA;AAAA,IAEJ,CAAC,GAED4B,EAAa;AAAA,MACX,MAAM5B;AAAA,IAAA,CACP;;;QAIC6B,EAGEC,EAAA,QAAA,aAAA;AAAA,UADC,OAAK,EAAA,SAAaC,EAAa,MAAO/B,KAAM,CAAA,MAAA,CAAA,EAAA;AAAA,QAAA;QAE/CvK,EAkHUuM,IAlHVC,GAkHUH,EAAA,QAjHM;AAAA,UACb,eAAahB,EAAA;AAAA,UACd,YAAA;AAAA,UACA,OAAM;AAAA,UACL,uBAAkB3J,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjB,MAAE1C,EAAI,qBAAsB0C,CAAM;AAAA,QAAA;qBAErD,MA0GQ;AAAA,YAzGA4K,EAAA,cADR9K,EA0GQkM,IAAA;AAAA;cAxGN,OAAM;AAAA,YAAA;yBAEN,MAOiB;AAAA,gBAPjBzM,EAOiB0M,IAAA;AAAA,kBANf,OAAM;AAAA,kBACL,YAAWd;AAAA,gBAAA;6BAEZ,MAEO;AAAA,oBAFPQ,EAEOC,uBAFP,MAEO;AAAA,sBADFnM,EAAAJ,EAAAC,EAAAxB,CAAA,EAAET,EAAA,YAAY,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;gBAGrBkC,EAoCW2M,IAAA;AAAA,kBAnCT,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACL,QAAQ;AAAA,kBACT,WAAU;AAAA,kBACV,OAAM;AAAA,gBAAA;6BAEN,MA4BO;AAAA,oBA5BPP,EA4BOC,4BA5BP,MA4BO;AAAA,sBA3BLzM,EA0BM,OA1BND,IA0BM;AAAA,wBAzBJC,EAwBM,OAxBNC,IAwBM;AAAA,0BAvBJD,EAmBM,OAnBN+B,IAmBM;AAAA,4BAlBJ3B,EAgBOC,GAAA;AAAA,8BAfL,MAAA;AAAA,8BACC,OAAO;AAAA,8BACP,QAAQ;AAAA,8BACR,SAAO0L;AAAA,4BAAA;yCAER,MAGE;AAAA,gCAHF3L,EAGE4M,IAAA;AAAA,kCAFA,MAAK;AAAA,kCACJ,MAAM;AAAA,gCAAA;gCAET5M,EAKW6M,IAAA;AAAA,kCAJT,WAAU;AAAA,kCACV,UAAS;AAAA,gCAAA;6CAET,MAA6C;AAAA,wCAA1C9M,EAAAxB,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,kCAAA;;;;;;4BAGR6N,EAA+BC,EAAA,QAAA,iBAAA;AAAA,0BAAA;0BAEjCzM,EAEM,OAFNgC,IAEM;AAAA,4BADJwK,EAAgCC,EAAA,QAAA,kBAAA;AAAA,0BAAA;;;;;;;gBAM1CzM,EAiCM,OAAA;AAAA,kBAhCJ,OAAKe,GAAA,CAAC,wBAAsB,EAAA,wCACsB6K,EAAA,OAAW,CAAA;AAAA,gBAAA;kBAE7D5L,EAIM,OAJNiC,IAIM;AAAA,oBAHJjC,EAEM,OAFNkC,IAEM;AAAA,sBADJsK,EAAsBC,EAAA,QAAA,QAAA;AAAA,oBAAA;;kBAG1BzM,EAuBM,OAvBNkN,IAuBM;AAAA,oBAtBJV,EAAuBC,EAAA,QAAA,SAAA;AAAA,oBAEfvO,EAAA,mBAAc,UADtB2B,KAAAC,EAeM,OAfNqN,IAeM;AAAA,+BAXJxM,EAUgByM,GAAA;AAAA,wBAPb,SAASlP,EAAA;AAAA,wBACV,MAAK;AAAA,wBACJ,SAAOgO;AAAA,sBAAA;mCAER,MAEO;AAAA,0BAFPM,EAEOC,sCAFP,MAEO;AAAA,gCADFtM,EAAAxB,CAAA,EAAC,wBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;wBAPE,CAAA0O,IAAAjB,EAAA,SAAelO,EAAA,OAAO;AAAA;;0BACXmO;AAAA;0BAAP,EAAA,OAAZ,GAAA;AAAA,wBAAuC;AAAA;gCAU3C1L,EAIE2M,IAAA;AAAA;kCAFS5B,EAAA;AAAA,oEAAAA,EAAkB,QAAA7K;AAAA,sBAC1B,UAAQsL;AAAA,oBAAA;;;gBAIfnM,EAsBM,OAtBNuN,IAsBM;AAAA,kBArBOrP,EAAA,aAAaA,EAAA,YAAxB2B,KAAAC,EAEM,OAAA0N,IAAAtN,EADDC,EAAAxB,CAAA,EAAC,6CAAA,EAAA,OAAuDT,EAAA,oBAAoB2N,EAAA,MAAA,CAAkB,CAAA,GAAA,CAAA,MAEnGhM,EAAA,GAAAC,EAQM,aANFK,EAAAxB,CAAA,EAAC,6CAAA;AAAA,8BAAwET,EAAA;AAAA,8BAAkCA,EAAA;AAAA,8BAAkC2N,EAAA;AAAA,kBAAA;kBAOjJzL,EAAWqN,EAAA;AAAA,kBACXrN,EAOcsN,GAAA;AAAA,oBANX,UAAU5B,EAAA;AAAA,oBACV,WAAYG,GAAS,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEtB,MAEO;AAAA,sBAFPO,EAEOC,sCAFP,MAEO;AAAA,4BADFtM,EAAAxB,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"labs.js","sources":["../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 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?:\n | ((option: DatatableOrderingOption, pagination: Ref<Pagination>) => void)\n | 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 {\n id: 1,\n titleT: 'common.system.datatable.ordering.mostRecent',\n sortBy: { key: 'createdAt', order: SortOrder.Desc },\n },\n {\n id: 2,\n titleT: 'common.system.datatable.ordering.oldest',\n sortBy: { key: 'createdAt', order: SortOrder.Asc },\n },\n]\n\nconst defaultItemsId: DatatableOrderingOptions = [\n {\n id: 1,\n titleT: 'common.system.datatable.ordering.mostRecent',\n sortBy: { key: 'id', order: SortOrder.Desc },\n },\n {\n id: 2,\n titleT: 'common.system.datatable.ordering.oldest',\n sortBy: { key: 'id', order: SortOrder.Asc },\n },\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 {\n id: 1,\n titleT: 'common.system.datatable.ordering.mostRecent',\n sortBy: { key: 'createdAt', order: SortOrder.Desc },\n },\n {\n id: 2,\n titleT: 'common.system.datatable.ordering.oldest',\n sortBy: { key: 'createdAt', order: SortOrder.Asc },\n },\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 = {\n ...pagination.value,\n sortBy: null,\n }\n emit('sortByChange', found)\n }\n pagination.value.sortBy = found.sortBy\n emit('sortByChange', found)\n}\n\nwatch(modelValue, (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\nwatch(\n pagination,\n (newValue, oldValue) => {\n if (\n newValue.sortBy?.key === oldValue?.sortBy?.key &&\n newValue.sortBy?.order === oldValue?.sortBy?.order\n ) {\n return\n }\n const found = options.value.find((option) => {\n return (\n newValue.sortBy?.key === option.sortBy?.key &&\n newValue.sortBy?.order === option.sortBy?.order\n )\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-body-small 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') }}\n {{ 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 {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig } from 'axios'\nimport {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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\nexport type UseApiFetchByIdsParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n isSearchApi?: boolean\n field?: string\n}\n\nexport type FetchByIdsParams = {\n urlTemplate?: string\n urlParams?: UrlParams\n}\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 = (\n ids: IntegerId[] | DocId[],\n isSearchApi: boolean,\n field = 'id',\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } =\n 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\n/**\n * @deprecated Use object params form:\n * useApiFetchByIds({ client, system, entity, urlTemplate, urlParams, options, isSearchApi, field })\n */\nexport function useApiFetchByIds<R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n isSearchApi?: boolean,\n field?: string,\n): UseApiFetchByIdsReturnType<R>\n\nexport function useApiFetchByIds<R>(params: UseApiFetchByIdsParams): UseApiFetchByIdsReturnType<R>\n\nexport function useApiFetchByIds<R>(\n clientOrParams: AxiosClientFn | UseApiFetchByIdsParams,\n system?: string,\n entity?: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n isSearchApi?: boolean,\n field?: string,\n): UseApiFetchByIdsReturnType<R> {\n let resolvedClient: AxiosClientFn\n let resolvedSystem: string\n let resolvedEntity: string\n let resolvedUrlTemplate: string | undefined\n let resolvedUrlParams: UrlParams | undefined\n let resolvedOptions: AxiosRequestConfig\n let resolvedIsSearchApi: boolean\n let resolvedField: string\n\n if (typeof clientOrParams === 'function') {\n resolvedClient = clientOrParams\n resolvedSystem = system!\n resolvedEntity = entity!\n resolvedUrlTemplate = urlTemplate\n resolvedUrlParams = urlParams\n resolvedOptions = options ?? {}\n resolvedIsSearchApi = isSearchApi ?? false\n resolvedField = field ?? 'id'\n } else {\n resolvedClient = clientOrParams.client\n resolvedSystem = clientOrParams.system\n resolvedEntity = clientOrParams.entity\n resolvedUrlTemplate = clientOrParams.urlTemplate\n resolvedUrlParams = clientOrParams.urlParams\n resolvedOptions = clientOrParams.options ?? {}\n resolvedIsSearchApi = clientOrParams.isSearchApi ?? false\n resolvedField = clientOrParams.field ?? 'id'\n }\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n ids: DocId[] | IntegerId[],\n urlTemplateOverrideOrParams: string | FetchByIdsParams | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n ): Promise<R> => {\n abortController = new AbortController()\n\n let resolvedUrlTemplateOverride: string | undefined\n let resolvedUrlParamsOverride: UrlParams | undefined\n\n if (typeof urlTemplateOverrideOrParams === 'object' && urlTemplateOverrideOrParams !== null) {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams.urlTemplate\n resolvedUrlParamsOverride = urlTemplateOverrideOrParams.urlParams\n } else {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams\n resolvedUrlParamsOverride = urlParamsOverride\n }\n\n try {\n const params = isDefined(resolvedUrlParamsOverride)\n ? resolvedUrlParamsOverride\n : resolvedUrlParams\n const template = isDefined(resolvedUrlTemplateOverride)\n ? resolvedUrlTemplateOverride\n : resolvedUrlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) +\n generateByIdsApiQuery(ids, resolvedIsSearchApi, resolvedField)\n\n const res = await resolvedClient().get(url, {\n ...resolvedOptions,\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, resolvedSystem, resolvedEntity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, resolvedSystem, resolvedEntity, 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: ' + resolvedUrlTemplate, 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\ninterface ExecuteFetchByIdsFn<R> {\n /** @deprecated Use object params form: executeFetch(ids, { urlTemplate, urlParams }) */\n (\n ids: DocId[] | IntegerId[],\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams,\n ): Promise<R>\n (ids: DocId[] | IntegerId[], params?: FetchByIdsParams): Promise<R>\n}\n\nexport type UseApiFetchByIdsReturnType<R> = {\n executeFetch: ExecuteFetchByIdsFn<R>\n abortFetch: () => void\n}\n","import {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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 } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport type { AxiosClientFn } from '@/labs/api/client'\n\nexport type UseApiFetchListBatchParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n}\n\nexport type FetchListBatchParams = {\n urlTemplate?: string\n urlParams?: UrlParams\n sortBy?: string\n sortDesc?: boolean\n batchSize?: number\n forceElastic?: boolean\n}\n\n/**\n * @template R Response type override\n * @deprecated Use object params form:\n * useApiFetchListBatch({ client, system, entity, urlTemplate, urlParams, options })\n */\nexport function useApiFetchListBatch<R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n): UseApiFetchListBatchReturnType<R>\n\n/**\n * @template R Response type override\n */\nexport function useApiFetchListBatch<R>(\n params: UseApiFetchListBatchParams,\n): UseApiFetchListBatchReturnType<R>\n\nexport function useApiFetchListBatch<R>(\n clientOrParams: AxiosClientFn | UseApiFetchListBatchParams,\n system?: string,\n entity?: string,\n urlTemplate?: string,\n urlParams?: UrlParams,\n options?: AxiosRequestConfig,\n): UseApiFetchListBatchReturnType<R> {\n let resolvedClient: AxiosClientFn\n let resolvedSystem: string\n let resolvedEntity: string\n let resolvedUrlTemplate: string | undefined\n let resolvedUrlParams: UrlParams | undefined\n let resolvedOptions: AxiosRequestConfig\n\n if (typeof clientOrParams === 'function') {\n resolvedClient = clientOrParams\n resolvedSystem = system!\n resolvedEntity = entity!\n resolvedUrlTemplate = urlTemplate\n resolvedUrlParams = urlParams\n resolvedOptions = options ?? {}\n } else {\n resolvedClient = clientOrParams.client\n resolvedSystem = clientOrParams.system\n resolvedEntity = clientOrParams.entity\n resolvedUrlTemplate = clientOrParams.urlTemplate\n resolvedUrlParams = clientOrParams.urlParams\n resolvedOptions = clientOrParams.options ?? {}\n }\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverrideOrParams: string | FetchListBatchParams | 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 let resolvedUrlTemplateOverride: string | undefined\n let resolvedUrlParamsOverride: UrlParams | undefined\n let resolvedSortBy: string\n let resolvedSortDesc: boolean\n let resolvedBatchSize: number\n let resolvedForceElastic: boolean\n\n if (typeof urlTemplateOverrideOrParams === 'object' && urlTemplateOverrideOrParams !== null) {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams.urlTemplate\n resolvedUrlParamsOverride = urlTemplateOverrideOrParams.urlParams\n resolvedSortBy = urlTemplateOverrideOrParams.sortBy ?? 'id'\n resolvedSortDesc = urlTemplateOverrideOrParams.sortDesc ?? true\n resolvedBatchSize = urlTemplateOverrideOrParams.batchSize ?? 100\n resolvedForceElastic = urlTemplateOverrideOrParams.forceElastic ?? false\n } else {\n resolvedUrlTemplateOverride = urlTemplateOverrideOrParams\n resolvedUrlParamsOverride = urlParamsOverride\n resolvedSortBy = sortBy\n resolvedSortDesc = sortDesc\n resolvedBatchSize = batchSize\n resolvedForceElastic = forceElastic\n }\n\n try {\n const searchApi = filterConfig.general.elastic || resolvedForceElastic ? '/search' : ''\n const params = isDefined(resolvedUrlParamsOverride)\n ? resolvedUrlParamsOverride\n : resolvedUrlParams\n const template = isDefined(resolvedUrlTemplateOverride)\n ? resolvedUrlTemplateOverride\n : resolvedUrlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const { pagination } = usePagination(\n resolvedSortBy,\n resolvedSortDesc ? SortOrder.Desc : SortOrder.Asc,\n {\n rowsPerPage: resolvedBatchSize,\n },\n )\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) + searchApi\n const results = [] as unknown as R\n\n // First page request\n const res = await resolvedClient().get(\n url + generateListQuery(pagination, filterData, filterConfig),\n {\n ...resolvedOptions,\n signal: abortController.signal,\n },\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 resolvedClient().get(\n url + generateListQuery(pagination, filterData, filterConfig),\n {\n ...resolvedOptions,\n signal: abortController.signal,\n },\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++) {\n // 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 resolvedClient().get(\n url + generateListQuery(paginationRef, filterData, filterConfig),\n {\n ...resolvedOptions,\n signal: abortController.signal,\n },\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, resolvedSystem, resolvedEntity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, resolvedSystem, resolvedEntity, 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: ' + resolvedUrlTemplate, 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\ninterface ExecuteFetchListBatchFn<R> {\n /**\n * @deprecated Use object params form:\n * executeFetch(filterData, filterConfig,\n * { urlTemplate, urlParams, sortBy, sortDesc, batchSize, forceElastic })\n */\n (\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 (\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n params?: FetchListBatchParams,\n ): Promise<R>\n}\n\nexport type UseApiFetchListBatchReturnType<R> = {\n executeFetch: ExecuteFetchListBatchFn<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>(\n client: () => AxiosInstance,\n system: string,\n) {\n const useFetchJobList = () =>\n useApiFetchList<JobType[]>({ client, system, entity: ENTITY, urlTemplate: END_POINT })\n\n const fetchJob = (id: number) =>\n 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) =>\n 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 (\n isBoolean(options.storeColumnsLocalStorage) &&\n true === options.storeColumnsLocalStorage\n ) {\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 {\n type DatatableOrderingOption,\n type DatatableSortBy,\n} from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type FilterConfig, type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { createDatatableColumnsConfig } from '@/labs/filters/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport type { UrlParams } from '@/services/api/apiHelper'\nimport { useDebounceFn } from '@vueuse/core'\nimport { isNull } from '@/utils/common'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n executeFetch: (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string | undefined,\n urlParamsOverride?: UrlParams | undefined,\n forceElastic?: boolean,\n ) => Promise<TItem[]>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n filterSortBy: DatatableSortBy | null = null,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n forceElastic: boolean = false,\n enableActions: boolean = false,\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n const { pagination, setSortBy, incrementPage } = usePagination(\n isNull(filterSortBy) ? null : filterSortBy.key,\n filterSortBy?.order,\n )\n\n const { resetFilter, submitFilter } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n })\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject,\n { storeColumnsLocalStorage: false, disableActions: !enableActions },\n )\n\n const onOpen = () => {\n resetState()\n getListDebounced()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n setSortBy(option.sortBy)\n getListDebounced()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n incrementPage()\n try {\n const res = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic,\n )) as TItem[]\n items.value.push(...res)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = (await executeFetch(\n pagination,\n filterData,\n filterConfig,\n urlTemplateOverride,\n urlParamsOverride,\n forceElastic,\n )) as TItem[]\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const getListDebounced = useDebounceFn(async () => {\n await getList()\n })\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (\n !eventTarget ||\n (eventTarget.tagName === 'INPUT' && (eventTarget as HTMLInputElement).type === 'checkbox')\n ) {\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, onMounted, 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 autoOpen?: boolean\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n autoOpen: false,\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) &&\n 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\nonMounted(() => {\n if (props.autoOpen) {\n onOpen()\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 {{\n t('common.subjectSelect.texts.pickExactCount', {\n count: minCount,\n selected: selectedItemsCount,\n })\n }}\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","modelValue","_useModel","pagination","inject","DatatablePaginationKey","isUndefined","t","useI18n","defaultItemsCreatedAt","SortOrder","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","computed","found","options","item","onItemClick","paginationUpdateDefault","watch","newValue","oldValue","option","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_unref","_createVNode","_component_VBtn","_createTextVNode","_component_VMenu","_component_VList","_Fragment","_renderList","_createBlock","_component_VListItem","$event","_component_VListItemTitle","_normalizeClass","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","isNull","disabledNext","computedTotalCountText","onClickFirst","useThrottleFn","onClickLast","onClickPrev","onClickNext","_component_VBtnToggle","_cache","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","generateByIdsApiQuery","ids","isSearchApi","field","querySetLimit","querySetOffset","querySetOrder","queryBuild","queryAddFilter","queryAdd","useApiQueryBuilder","limit","useApiFetchByIds","clientOrParams","system","entity","urlTemplate","urlParams","resolvedClient","resolvedSystem","resolvedEntity","resolvedUrlTemplate","resolvedUrlParams","resolvedOptions","resolvedIsSearchApi","resolvedField","abortController","urlTemplateOverrideOrParams","urlParamsOverride","resolvedUrlTemplateOverride","resolvedUrlParamsOverride","params","isDefined","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","filterData","filterConfig","sortBy","sortDesc","batchSize","forceElastic","resolvedSortBy","resolvedSortDesc","resolvedBatchSize","resolvedForceElastic","searchApi","usePagination","results","generateListQuery","resData","isApiInfiniteResponseList","nextPageData","isApiResponseList","promises","numPages","i","pageCopy","paginationRef","ref","pageResponse","END_POINT","ENTITY","useJobApi","client","useApiFetchList","id","apiFetchOne","data","type","stringToKebabCase","apiCreateOne","apiDeleteOne","defaultColumn","DatatableColumnsConfigMoreOptionsDefault","createDatatableColumnsConfig","config","columnsHidden","subject","moreOptions","localI18n","i18n","storeKey","isString","isBoolean","columnsAll","obj","DATETIME_AUTO_LABEL_TRACKING","columnsVisible","columns","column","loadStoredColumns","stored","storedData","isObject","isArray","storeColumns","onMounted","useSubjectSelect","datatableConfig","datatableHiddenColumns","executeFetch","filterSortBy","urlTemplateOverride","enableActions","filterTouched","items","selected","loading","setSortBy","incrementPage","resetFilter","submitFilter","useFilterHelpers","showErrorsDefault","useAlerts","onOpen","resetState","getListDebounced","sortByChange","onFetchNextPage","e","getList","useDebounceFn","event","eventTarget","parent","firstTd","input","dialogLocal","dialog","paginationComputed","toRaw","sidebarLeft","selectedItemsCount","disabledSubmit","toggleSidebar","onClose","onConfirm","fetchNextPage","onPageChange","hasNextPage","autoloadOnIntersect","isIntersecting","__expose","_renderSlot","_ctx","withModifiers","_component_VDialog","_mergeProps","_component_VCard","ADialogToolbar","_component_VToolbar","_component_VIcon","_component_VTooltip","_hoisted_7","_hoisted_8","_component_ABtnSecondary","_vShow","ADatatablePagination","_hoisted_9","_component_VSpacer","_component_ABtnPrimary"],"mappings":"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"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "./*": "./*"
20
20
  },
21
- "version": "1.47.0-beta.dev-1771794052",
21
+ "version": "1.47.0-beta.dev-1771794053",
22
22
  "license": "Apache-2.0",
23
23
  "repository": {
24
24
  "type": "git",
@@ -36,16 +36,19 @@
36
36
  "build": "vite build --config vite.config.lib.ts",
37
37
  "build:dev": "vite build --minify false --sourcemap true --config vite.config.lib.ts",
38
38
  "lib:build": "vite build --config vite.config.lib.ts",
39
- "ci": "run-s --print-name lint:tsc lint:eslint lint:stylelint",
40
- "lint": "yarn ci",
39
+ "ci": "run-s --print-name lint:tsc lint:oxlint lint:eslint lint:stylelint",
40
+ "lint": "[ \"$*\" = \"--fix\" ] && yarn lint:fix || yarn ci",
41
+ "lint:fix": "run-s --print-name lint:tsc format lint:oxlint:fix lint:eslint:fix lint:stylelint:fix",
41
42
  "lint:tsc": "NODE_OPTIONS=--max-old-space-size=4096 vue-tsc --build",
42
43
  "lint:tsc:test": "NODE_OPTIONS=--max-old-space-size=4096 tsc --build tsconfig.test.json",
43
44
  "lint:eslint": "eslint",
44
45
  "lint:eslint:fix": "eslint --fix",
46
+ "lint:oxlint": "oxlint .",
47
+ "lint:oxlint:fix": "oxlint . --fix",
45
48
  "lint:stylelint": "stylelint src/**/*.{scss,vue}",
46
49
  "lint:stylelint:fix": "stylelint src/**/*.{scss,vue} --fix",
47
- "lint:prettier": "prettier -c \"src/**/*.{ts,vue}\"",
48
- "lint:prettier:fix": "prettier -w \"src/**/*.{ts,vue}\"",
50
+ "format": "oxfmt src/",
51
+ "format:check": "oxfmt src/ --check",
49
52
  "test": "vitest",
50
53
  "test:run": "vitest run",
51
54
  "test:ui": "vitest --ui"
@@ -67,9 +70,8 @@
67
70
  "@vitest/browser": "^4.0.18",
68
71
  "@vitest/browser-playwright": "^4.0.18",
69
72
  "@vitest/ui": "^4.0.18",
70
- "@vue/eslint-config-prettier": "^10.2.0",
71
73
  "@vue/eslint-config-typescript": "^14.7.0",
72
- "@vue/language-server": "3.2.4",
74
+ "@vue/language-server": "3.2.5",
73
75
  "@vue/test-utils": "^2.4.6",
74
76
  "@vue/tsconfig": "0.8.1",
75
77
  "@vuelidate/core": "^2.0.3",
@@ -77,17 +79,19 @@
77
79
  "@vueuse/core": "^14.2.1",
78
80
  "@vueuse/integrations": "^14.2.1",
79
81
  "axios": "1.13.5",
80
- "cropperjs": "^1.6.2",
82
+ "cropperjs": "^2.1.0",
81
83
  "dayjs": "1.11.19",
82
- "eslint": "9.39.2",
84
+ "eslint": "9.39.3",
85
+ "eslint-plugin-oxlint": "~1.50.0",
83
86
  "eslint-plugin-vue": "10.8.0",
84
- "npm-run-all": "^4.1.5",
87
+ "npm-run-all2": "^8.0.4",
88
+ "oxfmt": "^0.35.0",
89
+ "oxlint": "~1.50.0",
85
90
  "pinia": "3.0.4",
86
91
  "playwright": "^1.58.2",
87
92
  "postcss": "^8.5.6",
88
93
  "postcss-html": "^1.8.1",
89
94
  "postcss-prefix-selector": "^2.1.1",
90
- "prettier": "^3.8.1",
91
95
  "rusha": "^0.8.14",
92
96
  "sass": "1.97.3",
93
97
  "socket.io-client": "4.8.3",
@@ -106,9 +110,9 @@
106
110
  "vue": "3.5.28",
107
111
  "vue-eslint-parser": "^10.4.0",
108
112
  "vue-i18n": "11.2.8",
109
- "vue-router": "5.0.2",
110
- "vue-tsc": "3.2.4",
111
- "vuetify": "3.11.8",
113
+ "vue-router": "5.0.3",
114
+ "vue-tsc": "3.2.5",
115
+ "vuetify": "4.0.0",
112
116
  "webfontloader": "^1.6.28"
113
117
  },
114
118
  "peerDependencies": {
@@ -125,7 +129,7 @@
125
129
  "vue": "^3.5.27",
126
130
  "vue-i18n": "^11.2.8",
127
131
  "vue-router": "^5.0.1",
128
- "vuetify": "^3.11.8"
132
+ "vuetify": "^4.0.0"
129
133
  },
130
134
  "peerDependenciesMeta": {
131
135
  "@sentry/vue": {