@pisapp/core 7.0.0-dev.20260916-153034
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/LICENSE +28 -0
- package/THIRD-PARTY-NOTICES.txt +43 -0
- package/catalogs.d.ts +7725 -0
- package/catalogs.js +3 -0
- package/chunks/catalogs-domain-DJxK_B5E.js +9060 -0
- package/chunks/catalogs-domain-DJxK_B5E.js.map +1 -0
- package/chunks/classifications-domain-DdIJaF1D.js +1980 -0
- package/chunks/classifications-domain-DdIJaF1D.js.map +1 -0
- package/chunks/icons-shared-B8v5z3BE.js +1387 -0
- package/chunks/icons-shared-B8v5z3BE.js.map +1 -0
- package/chunks/products-domain-99vJaUyI.js +22587 -0
- package/chunks/products-domain-99vJaUyI.js.map +1 -0
- package/classifications.d.ts +7725 -0
- package/classifications.js +3 -0
- package/core.d.ts +7711 -0
- package/core.js +7 -0
- package/index.d.ts +7992 -0
- package/index.js +12 -0
- package/migration/API_V1_TO_V2_MIGRATION.md +1424 -0
- package/migration/legacy-option-rules.json +93 -0
- package/migration/v7.json +4101 -0
- package/migration/v7.schema.json +595 -0
- package/package.json +68 -0
- package/pis-csp.js +97 -0
- package/pis-csp.js.map +1 -0
- package/pis.js +105 -0
- package/pis.js.map +1 -0
- package/products.d.ts +7746 -0
- package/products.js +2 -0
- package/styles/fonts.css +1 -0
- package/styles/pis.css +1 -0
- package/styles/theme-abb.css +1 -0
- package/styles/theme-abb.optimized.css +1 -0
- package/styles/theme-cux2-blue-dark.css +1 -0
- package/styles/theme-cux2-blue-dark.optimized.css +1 -0
- package/styles/theme-cux2-blue-light.css +1 -0
- package/styles/theme-cux2-blue-light.optimized.css +1 -0
- package/styles/theme-cux2-lilac-dark.css +1 -0
- package/styles/theme-cux2-lilac-dark.optimized.css +1 -0
- package/styles/theme-cux2-lilac-light.css +1 -0
- package/styles/theme-cux2-lilac-light.optimized.css +1 -0
- package/styles/theme-cux2-mono-dark.css +1 -0
- package/styles/theme-cux2-mono-dark.optimized.css +1 -0
- package/styles/theme-cux2-mono-light.css +1 -0
- package/styles/theme-cux2-mono-light.optimized.css +1 -0
- package/styles/theme-cux2-red-dark.css +1 -0
- package/styles/theme-cux2-red-dark.optimized.css +1 -0
- package/styles/theme-cux2-red-light.css +1 -0
- package/styles/theme-cux2-red-light.optimized.css +1 -0
- package/types.d.ts +8893 -0
- package/types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogs-domain-DJxK_B5E.js","names":["win","effect","_hoisted_1$1","_hoisted_1"],"sources":["../../src/common/components/cell-defaults/AliasCell.vue","../../src/common/components/cell-defaults/AliasCell.vue","../../src/common/components/cell-defaults/AliasValuesCell.vue","../../src/common/components/cell-defaults/AliasValuesCell.vue","../../src/common/components/cell-defaults/CatalogDateCell.vue","../../src/common/components/cell-defaults/CatalogDateCell.vue","../../src/common/components/cell-defaults/CatalogDescriptionCell.vue","../../src/common/components/cell-defaults/CatalogDescriptionCell.vue","../../src/common/components/cell-defaults/CatalogProductNameCell.vue","../../src/common/components/cell-defaults/CatalogProductNameCell.vue","../../src/common/components/cell-defaults/TranslatedMenuItem.vue","../../src/common/components/cell-defaults/TranslatedMenuItem.vue","../../src/catalogs/api/configuration/DefaultOptions.ts","../../src/catalogs/api/configuration/application/CatalogsDataType.ts","../../src/catalogs/api/runtime/StoreService.ts","../../src/catalogs/api/runtime/HttpService.ts","../../src/catalogs/api/runtime/RouteData.ts","../../src/catalogs/api/configuration/DefaultRoute.ts","../../src/catalogs/api/runtime/Router.ts","../../src/catalogs/api/Instance.ts","../../src/catalogs/api/Accessor.ts","../../src/catalogs/composables/setupComponent.ts","../../src/catalogs/composables/useCatalogActions.ts","../../src/catalogs/components/aliases/AliasesSearchTable.vue","../../src/catalogs/components/aliases/AliasesSearchTable.vue","../../../../node_modules/.pnpm/vue3-popper@1.5.0_vue@3.5.40_typescript@6.0.3_/node_modules/vue3-popper/dist/popper.esm.js","../../src/common/components/DropdownPopper.vue","../../src/common/components/DropdownPopper.vue","../../src/catalogs/components/aliases/AliasesSearchToolbar.vue","../../src/catalogs/components/aliases/AliasesSearchToolbar.vue","../../src/catalogs/components/aliases/AliasFilters.vue","../../src/catalogs/components/aliases/AliasFilters.vue","../../src/catalogs/components/AliasesMobileNav.vue","../../src/catalogs/components/AliasesMobileNav.vue","../../src/catalogs/components/catalogs/CatalogsSearchForm.vue","../../src/catalogs/components/catalogs/CatalogsSearchForm.vue","../../src/catalogs/components/catalogs/CatalogsSearchPagination.vue","../../src/catalogs/components/catalogs/CatalogsSearchPagination.vue","../../src/catalogs/components/catalogs/CatalogsSearchTable.vue","../../src/catalogs/components/catalogs/CatalogsSearchTable.vue","../../src/catalogs/components/catalogs/CatalogsSearchToolbar.vue","../../src/catalogs/components/catalogs/CatalogsSearchToolbar.vue","../../src/catalogs/components/CatalogsLoadingIndicator.vue","../../src/catalogs/components/CatalogsLoadingIndicator.vue","../../src/catalogs/components/CatalogsNotifications.vue","../../src/catalogs/components/CatalogsNotifications.vue","../../src/catalogs/components/aliases/AliasEditModal.vue","../../src/catalogs/components/aliases/AliasEditModal.vue","../../src/catalogs/components/aliases/AliasesExportModal.vue","../../src/catalogs/components/aliases/AliasesExportModal.vue","../../src/common/helpers/toBase64.ts","../../src/catalogs/components/aliases/AliasesImportModal.vue","../../src/catalogs/components/aliases/AliasesImportModal.vue","../../src/catalogs/components/common/AliasActionModals.vue","../../src/catalogs/components/common/AliasActionModals.vue","../../src/catalogs/components/products/ProductsBreadcrumbs.vue","../../src/catalogs/components/products/ProductsBreadcrumbs.vue","../../src/catalogs/components/products/ProductsSearchAliasFilters.vue","../../src/catalogs/components/products/ProductsSearchAliasFilters.vue","../../src/catalogs/components/products/ProductsSearchFilters.vue","../../src/catalogs/components/products/ProductsSearchFilters.vue","../../src/catalogs/components/products/ProductsSearchFiltersStatus.vue","../../src/catalogs/components/products/ProductsSearchFiltersStatus.vue","../../src/catalogs/components/products/ProductsSearchForm.vue","../../src/catalogs/components/products/ProductsSearchForm.vue","../../src/catalogs/components/products/components/ItemConfiguredOption.vue","../../src/catalogs/components/products/components/ItemConfiguredOption.vue","../../src/catalogs/components/products/components/ItemConfiguredOptions.vue","../../src/catalogs/components/products/components/ItemConfiguredOptions.vue","../../src/catalogs/components/products/components/ItemCatalogsDetails.vue","../../src/catalogs/components/products/components/ItemCatalogsDetails.vue","../../src/catalogs/components/products/components/ItemCatalogsDetailsModal.vue","../../src/catalogs/components/products/components/ItemCatalogsDetailsModal.vue","../../src/catalogs/components/products/ProductsSearchGrid.vue","../../src/catalogs/components/products/ProductsSearchGrid.vue","../../src/catalogs/components/products/ProductsSearchList.vue","../../src/catalogs/components/products/ProductsSearchList.vue","../../src/catalogs/components/products/ProductsSearchPagination.vue","../../src/catalogs/components/products/ProductsSearchPagination.vue","../../src/catalogs/components/products/ProductsSearchPartCategories.vue","../../src/catalogs/components/products/ProductsSearchPartCategories.vue","../../src/catalogs/components/products/ProductsSearchProductCategories.vue","../../src/catalogs/components/products/ProductsSearchProductCategories.vue","../../src/catalogs/components/products/ProductsSearchSelection.vue","../../src/catalogs/components/products/ProductsSearchSelection.vue","../../src/catalogs/components/products/ProductsSearchTable.vue","../../src/catalogs/components/products/ProductsSearchTable.vue","../../src/catalogs/components/products/ProductsSearchToolbar.vue","../../src/catalogs/components/products/ProductsSearchToolbar.vue","../../src/catalogs/components/views/ProductsGridView.vue","../../src/catalogs/components/views/ProductsGridView.vue","../../src/catalogs/components/views/ProductsListView.vue","../../src/catalogs/components/views/ProductsListView.vue","../../src/catalogs/components/views/ProductsTableView.vue","../../src/catalogs/components/views/ProductsTableView.vue","../../src/catalogs/components/common/FiltersNavigatorModal.vue","../../src/catalogs/components/common/FiltersNavigatorModal.vue","../../src/catalogs/components/CatalogProductsMobileNav.vue","../../src/catalogs/components/CatalogProductsMobileNav.vue","../../src/catalogs/components/common/CatalogOptions.vue","../../src/catalogs/components/common/CatalogOptions.vue","../../src/common/components/FormSelectFilterable.vue","../../src/common/components/FormSelectFilterable.vue","../../src/catalogs/components/catalogs/CatalogCopyModal.vue","../../src/catalogs/components/catalogs/CatalogCopyModal.vue","../../src/catalogs/components/catalogs/CatalogCreateNewModal.vue","../../src/catalogs/components/catalogs/CatalogCreateNewModal.vue","../../src/catalogs/components/catalogs/CatalogEditModal.vue","../../src/catalogs/components/catalogs/CatalogEditModal.vue","../../src/catalogs/components/catalogs/CatalogExportModal.vue","../../src/catalogs/components/catalogs/CatalogExportModal.vue","../../src/catalogs/components/catalogs/CatalogHistoryModal.vue","../../src/catalogs/components/catalogs/CatalogHistoryModal.vue","../../src/catalogs/components/catalogs/CatalogImportModal.vue","../../src/catalogs/components/catalogs/CatalogImportModal.vue","../../src/catalogs/components/common/CatalogActionErrors.vue","../../src/catalogs/components/common/CatalogActionErrors.vue","../../src/catalogs/components/common/CatalogActionModals.vue","../../src/catalogs/components/common/CatalogActionModals.vue","../../src/catalogs/components/products/ProductCopyModal.vue","../../src/catalogs/components/products/ProductCopyModal.vue","../../src/catalogs/components/products/ProductEditModal.vue","../../src/catalogs/components/products/ProductEditModal.vue","../../src/catalogs/components/common/CatalogProductActionModals.vue","../../src/catalogs/components/common/CatalogProductActionModals.vue","../../src/catalogs/api/configuration/components/CatalogProductSwitchOptions.ts","../../src/common/helpers/switchViewToRoute.ts","../../src/catalogs/components/common/CatalogProductSwitch.vue","../../src/catalogs/components/common/CatalogProductSwitch.vue","../../src/catalogs/components/preview/ProductsPreviewView.vue","../../src/catalogs/components/preview/ProductsPreviewView.vue","../../src/catalogs/components/products/ProductsSearchNoResults.vue","../../src/catalogs/components/products/ProductsSearchNoResults.vue","../../src/catalogs/components/CatalogsLayout.vue","../../src/catalogs/components/CatalogsLayout.vue","../../src/catalogs/components/products/ProductsSearchGridHorizontal.vue","../../src/catalogs/components/products/ProductsSearchGridHorizontal.vue","../../src/catalogs/components/index.ts","../../src/catalogs/elements/nativeElements.ts","../../src/catalogs/entry.ts"],"sourcesContent":["<!--\n AliasCell.vue — the library's default aliasesTable \"Name\" cell.\n\n Was v6 `cellTemplate` and the imperative `aliasCellMount` in\n builtinTemplateMounts.ts. Renders the display name as a bold details link when\n the product is Listed and active, otherwise muted bold text; plus a muted\n \"Configured products\" line for Configured products.\n\n Props (D-CompileComponent): a single `ctx` prop = the AliasTableCellTemplateProps\n ({ col, item, instance, catalogProductType, CatalogProductTypeEnum, emit,\n details, attrValue, attrValues, t }). Utility classes recommended (lighter); a `<style>` block works natively (light-DOM render; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <a v-if=\"isActive\" href=\"\" class=\"fw-bold\" @click.prevent=\"ctx.details(ctx.item)\">\n {{ name }}\n </a>\n <span v-else class=\"fw-bold text-muted\">{{ name }}</span>\n\n <div v-if=\"isConfigured\" class=\"text-muted small\">\n <em>{{ ctx.t('ConfiguredProducts') }}</em>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\nimport { attrValue } from '@/common/helpers/productAttributes';\n\n// `defineProps<{ ctx: ContextFor<…> }>()` (inline object) instead of\n// `defineProps<TemplateProps<…>>()`: the latter is a generic type ALIAS wrapping\n// another generic ({ ctx: ContextFor<S> }), which @vue/compiler-sfc's\n// compileScript() cannot resolve in defineProps<T>() (throws \"Initializers are\n// not allowed in ambient contexts\"). The inline form is type-identical and\n// resolves cleanly. See apps/.zcode findings / build-break investigation.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.aliases.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor — read fields directly.\nconst item = computed(() => props.ctx.item);\n// `computed` so the template reads the value (an arrow fn would render source).\nconst name = computed(() => attrValue(item.value, '#DisplayName'));\nconst isListed = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Listed ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.LISTED,\n);\nconst isConfigured = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Configured ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.CONFIGURED,\n);\nconst isActive = computed(() => isListed.value && !item.value.inactive);\n</script>\n","<!--\n AliasCell.vue — the library's default aliasesTable \"Name\" cell.\n\n Was v6 `cellTemplate` and the imperative `aliasCellMount` in\n builtinTemplateMounts.ts. Renders the display name as a bold details link when\n the product is Listed and active, otherwise muted bold text; plus a muted\n \"Configured products\" line for Configured products.\n\n Props (D-CompileComponent): a single `ctx` prop = the AliasTableCellTemplateProps\n ({ col, item, instance, catalogProductType, CatalogProductTypeEnum, emit,\n details, attrValue, attrValues, t }). Utility classes recommended (lighter); a `<style>` block works natively (light-DOM render; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <a v-if=\"isActive\" href=\"\" class=\"fw-bold\" @click.prevent=\"ctx.details(ctx.item)\">\n {{ name }}\n </a>\n <span v-else class=\"fw-bold text-muted\">{{ name }}</span>\n\n <div v-if=\"isConfigured\" class=\"text-muted small\">\n <em>{{ ctx.t('ConfiguredProducts') }}</em>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\nimport { attrValue } from '@/common/helpers/productAttributes';\n\n// `defineProps<{ ctx: ContextFor<…> }>()` (inline object) instead of\n// `defineProps<TemplateProps<…>>()`: the latter is a generic type ALIAS wrapping\n// another generic ({ ctx: ContextFor<S> }), which @vue/compiler-sfc's\n// compileScript() cannot resolve in defineProps<T>() (throws \"Initializers are\n// not allowed in ambient contexts\"). The inline form is type-identical and\n// resolves cleanly. See apps/.zcode findings / build-break investigation.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.aliases.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor — read fields directly.\nconst item = computed(() => props.ctx.item);\n// `computed` so the template reads the value (an arrow fn would render source).\nconst name = computed(() => attrValue(item.value, '#DisplayName'));\nconst isListed = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Listed ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.LISTED,\n);\nconst isConfigured = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Configured ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.CONFIGURED,\n);\nconst isActive = computed(() => isListed.value && !item.value.inactive);\n</script>\n","<!--\n AliasValuesCell.vue — the library's default aliasesTable \"Aliases\" cell.\n\n Was v6 `cellTemplate:\n `<div v-for=\"alias in item.aliases\" class=\"text-bold\">{{ alias.value }}</div>``\n and the imperative `aliasValuesCellMount` in builtinTemplateMounts.ts. Renders\n one bold line per alias value.\n\n Props (D-CompileComponent): a single `ctx` prop = the AliasTableCellTemplateProps\n (only `item.aliases` is read). Utility classes recommended (lighter); a `<style>` block works natively — cells render in light DOM (plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <div v-for=\"(alias, i) in aliases\" :key=\"alias.value ?? i\" class=\"text-bold\">\n {{ alias.value ?? '' }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.aliases.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor; aliases is a real field.\nconst aliases = computed(() => props.ctx.item.aliases ?? []);\n</script>\n","<!--\n AliasValuesCell.vue — the library's default aliasesTable \"Aliases\" cell.\n\n Was v6 `cellTemplate:\n `<div v-for=\"alias in item.aliases\" class=\"text-bold\">{{ alias.value }}</div>``\n and the imperative `aliasValuesCellMount` in builtinTemplateMounts.ts. Renders\n one bold line per alias value.\n\n Props (D-CompileComponent): a single `ctx` prop = the AliasTableCellTemplateProps\n (only `item.aliases` is read). Utility classes recommended (lighter); a `<style>` block works natively — cells render in light DOM (plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <div v-for=\"(alias, i) in aliases\" :key=\"alias.value ?? i\" class=\"text-bold\">\n {{ alias.value ?? '' }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.aliases.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor; aliases is a real field.\nconst aliases = computed(() => props.ctx.item.aliases ?? []);\n</script>\n","<!--\n CatalogDateCell.vue — the library's default \"Last modified\" cell.\n\n Was v6 `cellTemplate: new Date(item.dateModified).toLocaleString(...)`\n and the imperative `catalogDateCellMount` in builtinTemplateMounts.ts. Renders\n the item's dateModified as a medium-style locale string; empty when absent.\n\n Props (D-CompileComponent): a single `ctx` prop = the TableCellTemplateProps (only\n `item.dateModified` is read). The same component backs the catalogs itemsTable\n and aliasesTable \"Last modified\" columns. Utility classes recommended (lighter); a `<style>` block works natively (light-DOM render; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ text }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\nconst text = computed(() => {\n // ctx.item is typed (CatalogProductItem) via ItemFor; dateModified is a real field.\n const raw = props.ctx.item.dateModified;\n return raw ? new Date(raw).toLocaleString([], { dateStyle: 'medium' }) : '';\n});\n</script>\n","<!--\n CatalogDateCell.vue — the library's default \"Last modified\" cell.\n\n Was v6 `cellTemplate: new Date(item.dateModified).toLocaleString(...)`\n and the imperative `catalogDateCellMount` in builtinTemplateMounts.ts. Renders\n the item's dateModified as a medium-style locale string; empty when absent.\n\n Props (D-CompileComponent): a single `ctx` prop = the TableCellTemplateProps (only\n `item.dateModified` is read). The same component backs the catalogs itemsTable\n and aliasesTable \"Last modified\" columns. Utility classes recommended (lighter); a `<style>` block works natively (light-DOM render; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ text }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\nconst text = computed(() => {\n // ctx.item is typed (CatalogProductItem) via ItemFor; dateModified is a real field.\n const raw = props.ctx.item.dateModified;\n return raw ? new Date(raw).toLocaleString([], { dateStyle: 'medium' }) : '';\n});\n</script>\n","<!--\n CatalogDescriptionCell.vue — the library's default catalogsTable \"Description\" cell.\n\n Was v6 `cellTemplate` and the imperative `catalogDescriptionCellMount` in\n builtinTemplateMounts.ts. Renders the catalog description, plus a muted note\n when the catalog is shared.\n\n Props (D-CompileComponent): a single `ctx` prop = the CatalogTableCellTemplateProps\n ({ col, instance, item, t, emit, details, attrValue, attrValues,\n baseProductDetails, catalogProductType, CatalogProductTypeEnum }). Utility\n classes only — a `<style>` block works natively (cells render in light DOM; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ item.description ?? '' }}</span>\n <div v-if=\"item.shared\" class=\"text-muted small\">\n {{ ctx.t('SharedCatalogEditInSourceSystem') }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor. The Web API also returns\n// `description` on catalog rows and a legacy `shared` flag that the generated\n// swagger DTOs don't declare — read them through a local widening instead of\n// loosening Item<> for every consumer.\ntype DescriptionCellItem = typeof props.ctx.item & { description?: string; shared?: boolean };\nconst item = computed(() => props.ctx.item as DescriptionCellItem);\n</script>\n","<!--\n CatalogDescriptionCell.vue — the library's default catalogsTable \"Description\" cell.\n\n Was v6 `cellTemplate` and the imperative `catalogDescriptionCellMount` in\n builtinTemplateMounts.ts. Renders the catalog description, plus a muted note\n when the catalog is shared.\n\n Props (D-CompileComponent): a single `ctx` prop = the CatalogTableCellTemplateProps\n ({ col, instance, item, t, emit, details, attrValue, attrValues,\n baseProductDetails, catalogProductType, CatalogProductTypeEnum }). Utility\n classes only — a `<style>` block works natively (cells render in light DOM; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ item.description ?? '' }}</span>\n <div v-if=\"item.shared\" class=\"text-muted small\">\n {{ ctx.t('SharedCatalogEditInSourceSystem') }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor. The Web API also returns\n// `description` on catalog rows and a legacy `shared` flag that the generated\n// swagger DTOs don't declare — read them through a local widening instead of\n// loosening Item<> for every consumer.\ntype DescriptionCellItem = typeof props.ctx.item & { description?: string; shared?: boolean };\nconst item = computed(() => props.ctx.item as DescriptionCellItem);\n</script>\n","<!--\n CatalogProductNameCell.vue — the library's default catalogItemsTable \"Name\" cell.\n\n Was v6 `cellTemplate` and the imperative `catalogProductNameCellMount` in\n builtinTemplateMounts.ts. Renders the display name as a details link when\n active (bold) or muted bold text when inactive, followed by muted small lines\n for Configured products, customer classification, and the base-product id (a\n details link when the base product is active).\n\n Props (D-CompileComponent): a single `ctx` prop = the CatalogTableCellTemplateProps\n ({ col, instance, item, t, emit, details, attrValue, attrValues,\n baseProductDetails, catalogProductType, CatalogProductTypeEnum }). Utility\n classes only — a `<style>` block works natively (cells render in light DOM; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <a v-if=\"!item.inactive\" href=\"\" class=\"fw-bold\" @click.prevent=\"ctx.details(ctx.item)\">\n {{ name }}\n </a>\n <span v-else class=\"fw-bold text-muted\">{{ name }}</span>\n\n <div\n v-if=\"isConfigured || item.customerClassification || item.baseProduct\"\n class=\"text-muted small\"\n >\n <template v-if=\"isConfigured\">\n <em>{{ ctx.t('ConfiguredProducts') }}</em\n ><br />\n </template>\n <template v-if=\"item.customerClassification\">\n <em>{{ ctx.t('CustomerClassification') }}: {{ item.customerClassification }}</em\n ><br />\n </template>\n <template v-if=\"item.baseProduct\">\n <em\n >{{ ctx.t('BaseProductId') }}: \n <a\n v-if=\"!item.baseProduct.inactive\"\n href=\"\"\n @click.prevent=\"\n ctx.baseProductDetails(ctx.item.baseProduct as unknown as Record<string, unknown>)\n \"\n >{{ item.baseProduct.productId ?? '' }}</a\n >\n <span v-else class=\"fw-bold text-muted\">{{ item.baseProduct.productId ?? '' }}</span> </em\n ><br />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\nimport { attrValue } from '@/common/helpers/productAttributes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor — read fields directly.\nconst item = computed(() => props.ctx.item);\n// `computed` so the template reads the value (an arrow fn would render source).\nconst name = computed(() => attrValue(item.value, '#DisplayName'));\nconst isConfigured = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Configured ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.CONFIGURED,\n);\n</script>\n","<!--\n CatalogProductNameCell.vue — the library's default catalogItemsTable \"Name\" cell.\n\n Was v6 `cellTemplate` and the imperative `catalogProductNameCellMount` in\n builtinTemplateMounts.ts. Renders the display name as a details link when\n active (bold) or muted bold text when inactive, followed by muted small lines\n for Configured products, customer classification, and the base-product id (a\n details link when the base product is active).\n\n Props (D-CompileComponent): a single `ctx` prop = the CatalogTableCellTemplateProps\n ({ col, instance, item, t, emit, details, attrValue, attrValues,\n baseProductDetails, catalogProductType, CatalogProductTypeEnum }). Utility\n classes only — a `<style>` block works natively (cells render in light DOM; plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <a v-if=\"!item.inactive\" href=\"\" class=\"fw-bold\" @click.prevent=\"ctx.details(ctx.item)\">\n {{ name }}\n </a>\n <span v-else class=\"fw-bold text-muted\">{{ name }}</span>\n\n <div\n v-if=\"isConfigured || item.customerClassification || item.baseProduct\"\n class=\"text-muted small\"\n >\n <template v-if=\"isConfigured\">\n <em>{{ ctx.t('ConfiguredProducts') }}</em\n ><br />\n </template>\n <template v-if=\"item.customerClassification\">\n <em>{{ ctx.t('CustomerClassification') }}: {{ item.customerClassification }}</em\n ><br />\n </template>\n <template v-if=\"item.baseProduct\">\n <em\n >{{ ctx.t('BaseProductId') }}: \n <a\n v-if=\"!item.baseProduct.inactive\"\n href=\"\"\n @click.prevent=\"\n ctx.baseProductDetails(ctx.item.baseProduct as unknown as Record<string, unknown>)\n \"\n >{{ item.baseProduct.productId ?? '' }}</a\n >\n <span v-else class=\"fw-bold text-muted\">{{ item.baseProduct.productId ?? '' }}</span> </em\n ><br />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\nimport { attrValue } from '@/common/helpers/productAttributes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{ ctx: ContextFor<'catalogs.products.search.table.cell'> }>();\n// ctx.item is typed (CatalogProductItem) via ItemFor — read fields directly.\nconst item = computed(() => props.ctx.item);\n// `computed` so the template reads the value (an arrow fn would render source).\nconst name = computed(() => attrValue(item.value, '#DisplayName'));\nconst isConfigured = computed(\n () =>\n item.value.productType === props.ctx.catalogProductType.Configured ||\n item.value.productType === props.ctx.CatalogProductTypeEnum.CONFIGURED,\n);\n</script>\n","<!--\n TranslatedMenuItem.vue — the library's default dropdown menu item label.\n\n Was v6 `itemTemplate: \"{{ t('Label') }}\"` and the imperative\n `translatedMenuItemMount` in builtinTemplateMounts.ts. `item` is the menu-item\n descriptor carrying `text` (the translation key); renders the translated label.\n\n Props (D-CompileComponent): a single `ctx` prop = the MenuItemTemplateProps\n ({ instance, item, emit, t }). Utility classes recommended (lighter); a `<style>` block works natively — cells render in light DOM (plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ text ? ctx.t(text) : '' }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{\n ctx: ContextFor<'catalogs.search.common.actions.productItemMenu.item'>;\n}>();\n// ctx.item is typed (MenuItem) via ItemFor; text is a real field.\nconst text = computed(() => props.ctx.item.text);\n</script>\n","<!--\n TranslatedMenuItem.vue — the library's default dropdown menu item label.\n\n Was v6 `itemTemplate: \"{{ t('Label') }}\"` and the imperative\n `translatedMenuItemMount` in builtinTemplateMounts.ts. `item` is the menu-item\n descriptor carrying `text` (the translation key); renders the translated label.\n\n Props (D-CompileComponent): a single `ctx` prop = the MenuItemTemplateProps\n ({ instance, item, emit, t }). Utility classes recommended (lighter); a `<style>` block works natively — cells render in light DOM (plan: eliminate-shadow-dom-light-dom).\n-->\n<template>\n <span>{{ text ? ctx.t(text) : '' }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport type { ContextFor } from '@/common/api/publicTypes';\n\n// Inline { ctx: ContextFor<…> } rather than the TemplateProps<…> alias — see\n// AliasCell.vue for the @vue/compiler-sfc resolution note.\nconst props = defineProps<{\n ctx: ContextFor<'catalogs.search.common.actions.productItemMenu.item'>;\n}>();\n// ctx.item is typed (MenuItem) via ItemFor; text is a real field.\nconst text = computed(() => props.ctx.item.text);\n</script>\n","import { PricingExportOptions } from './PricingExportOptions';\nimport { CatalogAction } from '../runtime/CatalogAction';\nimport { ComponentOptions } from '../runtime/ComponentOptions';\nimport { Options } from '../runtime/Options';\n\nimport AliasCell from '@/common/components/cell-defaults/AliasCell.vue';\nimport AliasValuesCell from '@/common/components/cell-defaults/AliasValuesCell.vue';\nimport CatalogDateCell from '@/common/components/cell-defaults/CatalogDateCell.vue';\nimport CatalogDescriptionCell from '@/common/components/cell-defaults/CatalogDescriptionCell.vue';\nimport CatalogProductNameCell from '@/common/components/cell-defaults/CatalogProductNameCell.vue';\nimport { createTranslatedSpan } from '@/common/components/cell-defaults/createTranslatedSpan';\nimport TranslatedMenuItem from '@/common/components/cell-defaults/TranslatedMenuItem.vue';\nimport {\n CatalogAppSettings,\n CatalogDetail,\n CatalogItem,\n CatalogProductItem,\n} from '@/common/services/swagger';\n\n// v7 (D-DefaultsVue): the library's built-in default columns and menu items are\n// authored as Vue components and passed DIRECTLY as slot values. MountPoint\n// detects each is a component (typeof .setup === 'function') and projects it\n// natively via <component :is> — no compileComponent, no createApp-per-cell.\nconst catalogCodeHeaderTemplate = createTranslatedSpan('ColumnCode', 'catalogs');\nconst catalogDescriptionHeaderTemplate = createTranslatedSpan('ColumnDescription', 'catalogs');\nconst catalogLastModifiedHeaderTemplate = createTranslatedSpan('ColumnLastModified', 'catalogs');\nconst productHeaderTemplate = createTranslatedSpan('ProductListProduct', 'common');\nconst informationHeaderTemplate = createTranslatedSpan('ProductListInformation', 'common');\nconst aliasesHeaderTemplate = createTranslatedSpan('Aliases', 'catalogs');\n// TranslatedMenuItem is reused across productItemMenu/catalogItemMenu/aliasItemMenu\n// item slots (all resolve to MenuItemTemplateProps).\nconst menuItemTemplate = TranslatedMenuItem;\n// These display cells read only common fields (description text, dateModified)\n// present on every catalog item type, so they are reused across catalogItemsTable,\n// catalogsTable, and aliasesTable — the components narrow item themselves.\nconst catalogDescriptionCellTemplate = CatalogDescriptionCell;\nconst catalogDateCellTemplate = CatalogDateCell;\nconst catalogProductNameCellTemplate = CatalogProductNameCell;\nconst aliasCellTemplate = AliasCell;\nconst aliasValuesCellTemplate = AliasValuesCell;\n\nexport const InternalMenuActions: Record<keyof typeof CatalogAction, string> = Object.entries(\n CatalogAction,\n).reduce(\n (result, [name, value]) => ({\n ...result,\n [name]: `internal:${value}`,\n }),\n {} as Record<keyof typeof CatalogAction, string>,\n);\n\nexport class DefaultOptions implements Options {\n appSettings: CatalogAppSettings = {\n appCode: '',\n langCode: 'en',\n };\n\n export: PricingExportOptions = {\n pricesEnabled: false,\n };\n\n styles: { url: string }[] = [];\n\n components: ComponentOptions = {\n search: {\n common: {\n actions: {\n catalogListMenu: {\n visible: true,\n items: [\n {\n text: 'New Catalog',\n code: InternalMenuActions.createNew,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Import/Export History',\n code: InternalMenuActions.history,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n ],\n },\n catalogItemMenu: {\n visible: true,\n items: [\n {\n text: 'Favorites',\n code: InternalMenuActions.makeDefault,\n visible: (item: CatalogItem) => item.editable && !item.default,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Favorites',\n code: InternalMenuActions.unmakeDefault,\n visible: (item: CatalogItem) => item.editable && item!.default,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Edit',\n code: InternalMenuActions.edit,\n visible: (item: CatalogItem) => item.editable,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Copy',\n code: InternalMenuActions.copy,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Import',\n code: InternalMenuActions.import,\n visible: (item: CatalogItem) => item.editable,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Export',\n code: InternalMenuActions.export,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Delete',\n code: InternalMenuActions.delete,\n visible: (item: CatalogItem) => item.editable,\n itemTemplate: menuItemTemplate,\n },\n ],\n },\n productListMenu: { visible: false },\n productItemMenu: {\n visible: true,\n items: [\n {\n text: 'Edit',\n code: InternalMenuActions.productEdit,\n visible: (item: CatalogProductItem) =>\n !!item.catalogs?.every((catalog: CatalogDetail) => catalog.editable),\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Copy',\n code: InternalMenuActions.productCopy,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Delete',\n code: InternalMenuActions.productDelete,\n visible: (item: CatalogProductItem) =>\n !!item.catalogs?.every((catalog: CatalogDetail) => catalog.editable),\n itemTemplate: menuItemTemplate,\n },\n ],\n },\n aliasListMenu: {\n visible: true,\n items: [\n {\n text: 'Import',\n code: InternalMenuActions.aliasImport,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n {\n text: 'Export',\n code: InternalMenuActions.aliasExport,\n visible: true,\n itemTemplate: menuItemTemplate,\n },\n ],\n },\n aliasItemMenu: {\n visible: true,\n items: [\n {\n code: InternalMenuActions.aliasEdit,\n visible: true,\n icon: 'edit',\n },\n {\n code: InternalMenuActions.aliasDelete,\n icon: 'trash',\n visible: (item: CatalogProductItem) => !!item.aliases?.length,\n },\n ],\n },\n },\n },\n form: {\n visible: true,\n useAutocomplete: true,\n },\n toolbar: {\n pageSizes: [10, 20, 50, 100],\n visible: true,\n },\n header: {\n visible: true,\n },\n table: {\n visible: true,\n columns: [\n {\n caption: 'ColumnCode',\n width: '33%',\n dataField: 'code',\n headerTemplate: catalogCodeHeaderTemplate,\n },\n {\n caption: 'ColumnDescription',\n dataField: 'description',\n headerTemplate: catalogDescriptionHeaderTemplate,\n cellTemplate: catalogDescriptionCellTemplate,\n },\n {\n caption: 'ColumnLastModified',\n dataField: 'dateModified',\n width: '140px',\n headerTemplate: catalogLastModifiedHeaderTemplate,\n cellTemplate: catalogDateCellTemplate,\n },\n ],\n },\n },\n products: {\n search: {\n form: {\n visible: true,\n useAutocomplete: true,\n },\n toolbar: {\n visible: true,\n pageSizes: [12, 24, 48, 72],\n subViews: ['table', 'list', 'grid'],\n },\n productCategories: {\n visible: true,\n card: true,\n icon: true,\n maxCategoriesVisible: 12,\n },\n partCategories: {\n visible: true,\n card: true,\n icon: true,\n maxCategoriesVisible: 12,\n },\n filters: {\n visible: true,\n card: true,\n icon: true,\n maxFiltersVisible: 10,\n expandedFromNodeLevel: 2,\n visibleFromNodeLevel: 0,\n // collapseAllVisible: true,\n // expandAllVisible: true,\n },\n filtersStatus: {\n visible: true,\n },\n selection: {\n visible: false,\n deselectAllVisible: true,\n selectAllVisible: true,\n persist: true,\n countVisible: true,\n },\n table: {\n selectable: false,\n detailsVisible: true,\n visible: true,\n columns: [\n {\n caption: 'ProductListProduct',\n dataField: '#DisplayName',\n width: '33%',\n showAllIdentifiers: true,\n headerTemplate: productHeaderTemplate,\n cellTemplate: catalogProductNameCellTemplate,\n },\n {\n caption: 'ProductListInformation',\n dataField: '#Description',\n headerTemplate: informationHeaderTemplate,\n },\n {\n caption: 'ColumnLastModified',\n dataField: 'dateModified',\n width: '140px',\n headerTemplate: catalogLastModifiedHeaderTemplate,\n cellTemplate: catalogDateCellTemplate,\n },\n ],\n },\n list: {\n imageSize: '10rem',\n visible: true,\n navigateOnContentClick: true,\n imagePadding: 0,\n selectable: false,\n detailsVisible: true,\n showAllIdentifiers: true,\n },\n grid: {\n visible: true,\n navigateOnContentClick: true,\n selectable: false,\n detailsVisible: true,\n showAllIdentifiers: true,\n },\n gridHorizontal: {\n visible: true,\n navigateOnContentClick: true,\n selectable: false,\n detailsVisible: true,\n showAllIdentifiers: true,\n carousel: {\n mouseDrag: true,\n touchDrag: true,\n transition: 300,\n wrapAround: false,\n defaults: {\n itemsToShow: 1,\n itemsToScroll: 1,\n snapAlign: 'center',\n margin: 5,\n navigationVisible: true,\n paginationVisible: true,\n },\n breakpoints: {\n 576: {\n itemsToShow: 2,\n itemsToScroll: 1,\n snapAlign: 'start',\n margin: 2,\n navigationVisible: true,\n paginationVisible: false,\n },\n 922: {\n itemsToShow: 4,\n itemsToScroll: 1,\n snapAlign: 'start',\n margin: 2,\n navigationVisible: true,\n paginationVisible: false,\n },\n },\n },\n },\n breadcrumbs: {\n visible: true,\n },\n },\n preview: {\n view: {\n visible: true,\n },\n },\n },\n aliases: {\n search: {\n common: {},\n filters: {\n visible: true,\n },\n table: {\n selectable: false,\n visible: true,\n columns: [\n {\n caption: 'ProductListProduct',\n dataField: '#DisplayName',\n headerTemplate: productHeaderTemplate,\n cellTemplate: aliasCellTemplate,\n },\n {\n caption: 'ProductListInformation',\n dataField: '#Description',\n headerTemplate: informationHeaderTemplate,\n },\n {\n caption: 'Aliases',\n headerTemplate: aliasesHeaderTemplate,\n cellTemplate: aliasValuesCellTemplate,\n },\n {\n caption: 'ColumnLastModified',\n dataField: 'dateModified',\n width: '140px',\n headerTemplate: catalogLastModifiedHeaderTemplate,\n cellTemplate: catalogDateCellTemplate,\n },\n ],\n },\n },\n },\n common: {\n viewSwitch: {\n defaultView: 'catalog',\n views: ['catalog', 'product'],\n },\n },\n };\n allowMobileView = true;\n cacheTranslations = true;\n}\n","import { CatalogProductSearchDataTypeEnum } from '@/common/services/swagger';\n\n/** Internal (non-swagger) data types the catalogs domain can register. */\nexport const CATALOGS_INTERNAL_DATA_TYPES = {\n Catalogs: 'Catalogs',\n Products: 'Products',\n ProductPreview: 'ProductPreview',\n Translations: 'Translations',\n Notifications: 'Notifications',\n} as const;\n\nexport type CatalogsInternalDataType =\n (typeof CATALOGS_INTERNAL_DATA_TYPES)[keyof typeof CATALOGS_INTERNAL_DATA_TYPES];\n\n// Explicit PascalCase keys instead of spreading the generated enum: hey-api\n// emits SCREAMING_SNAKE members, and every store-data access reads\n// `CatalogsDataType.PascalCase`. Keys mirror the enum values; `as const`\n// keeps computed-key usages literal-typed (a plain object literal would\n// widen them to a string index).\nexport const CatalogsDataType = {\n ProductClassifications: CatalogProductSearchDataTypeEnum.PRODUCT_CLASSIFICATIONS,\n PartClassifications: CatalogProductSearchDataTypeEnum.PART_CLASSIFICATIONS,\n // `Products` comes from CATALOGS_INTERNAL_DATA_TYPES (same value as the\n // enum member) — declaring both would collide.\n Filters: CatalogProductSearchDataTypeEnum.FILTERS,\n Breadcrumbs: CatalogProductSearchDataTypeEnum.BREADCRUMBS,\n ...CATALOGS_INTERNAL_DATA_TYPES,\n} as const;\nexport type CatalogsDataType = CatalogsInternalDataType | CatalogProductSearchDataTypeEnum;\n","import { CatalogsDataType } from '../configuration/application/CatalogsDataType';\nimport { Instance } from '../Instance';\nimport { Data } from './Data';\nimport { LoadEvent, CatalogsLoadEventPayloads } from './LoadEvent';\n\nimport { BaseStoreService } from '@/common/api/runtime/BaseStoreService';\nimport LoggerService from '@/common/services/LoggerService';\n\n/** Typed value a catalogs store handler receives for data type K. */\ntype CatalogsStoreValue<K extends CatalogsDataType> = K extends keyof CatalogsLoadEventPayloads\n ? CatalogsLoadEventPayloads[K]\n : unknown;\n\ntype CatalogsStoreDataHandler<K extends CatalogsDataType> = (\n store: Data,\n value: CatalogsStoreValue<K>,\n) => void;\n\n/**\n * Exhaustive store dispatch: one handler per `CatalogsDataType` member; the\n * `satisfies` check makes a missing data type a compile error instead of a\n * silent runtime `default` branch.\n */\nconst STORE_DATA_HANDLERS = {\n [CatalogsDataType.Catalogs]: (store, value) => {\n store.catalogs = value;\n },\n [CatalogsDataType.ProductPreview]: (store, value) => {\n store.productPreview = value;\n },\n [CatalogsDataType.Products]: (store, value) => {\n store.products = value;\n },\n [CatalogsDataType.ProductClassifications]: (store, value) => {\n store.productClassifications = value;\n },\n [CatalogsDataType.PartClassifications]: (store, value) => {\n store.partClassifications = value;\n },\n [CatalogsDataType.Filters]: (store, value) => {\n store.filters = value;\n },\n [CatalogsDataType.Breadcrumbs]: (store, value) => {\n store.breadcrumbs = value;\n },\n // Deliberately not stored — explicit entries keep the exhaustiveness check\n // meaningful; the passthrough preserves the old default-branch log.\n [CatalogsDataType.Translations]: (_store, value) => {\n LoggerService.log('Setting store data not handled', {\n type: CatalogsDataType.Translations,\n data: value,\n });\n },\n [CatalogsDataType.Notifications]: (_store, value) => {\n LoggerService.log('Setting store data not handled', {\n type: CatalogsDataType.Notifications,\n data: value,\n });\n },\n} satisfies { [K in CatalogsDataType]: CatalogsStoreDataHandler<K> };\n\nexport class StoreService extends BaseStoreService<CatalogsDataType, LoadEvent, Instance> {\n constructor(instance: Instance) {\n super(instance);\n }\n\n protected dataInterceptor() {\n return this.instance.store?.options.dataInterceptor;\n }\n\n protected dispatchLoadEvent(event: LoadEvent): void {\n this.setStoreData(event);\n }\n\n setStoreData({ type, data }: LoadEvent): void {\n if (!this.instance.store) return;\n\n // One widening cast at the dispatch boundary: LoadEvent.data is the\n // wire-shaped payload; the handler map narrows it per key via satisfies.\n const handler = STORE_DATA_HANDLERS[type] as (store: Data, value: unknown) => void;\n handler(this.instance.store.data, data);\n }\n}\n","import { reactive } from 'vue';\nimport { CatalogsDataType } from '../configuration/application/CatalogsDataType';\nimport { Instance } from '../Instance';\nimport {\n CatalogProductCountQuery,\n CriteriaGroup,\n TreeTypeEnum,\n} from './../../../common/services/swagger';\nimport { LoadEvent } from './LoadEvent';\nimport { RouteData } from './RouteData';\nimport { StoreService } from './StoreService';\nimport { PisDomain } from '@/common/api/runtime/BaseInstance';\nimport { createPisClient } from '@/common/api/runtime/createPisClient';\nimport { HttpServiceApi } from '@/common/api/runtime/HttpServiceApi';\nimport type { PisUserActionOutcome } from '@/common/api/runtime/PisUserActionEvent';\nimport { SharedHttpService } from '@/common/api/runtime/SharedHttpService';\nimport {\n listOutcome,\n peekCurrentInteraction,\n trackUserAction,\n} from '@/common/api/runtime/trackUserAction';\nimport {\n ProductsService,\n AppSettings,\n AutocompleteSearchResult,\n FilterValueSearchResult,\n PrmRelationshipTypeEnum,\n SortDirectionEnum,\n TranslationItem,\n CatalogAppSettings,\n CatalogSearchTypeEnum,\n CatalogSortFieldEnum,\n CatalogProductSearchTypeEnum,\n CatalogProductSortFieldEnum,\n CatalogProductSearchDataTypeEnum,\n CatalogActionResult,\n CatalogExportPriceSettings,\n JobSearchResult,\n CatalogAutocompleteSearchResult,\n JobSortSettings,\n CatalogProductUpdateItem,\n CatalogProductDeleteItem,\n CatalogSearchResult,\n CatalogOptionsResult,\n CountSearchResult,\n CatalogProductItem,\n CatalogItem,\n CatalogTypeEnum,\n ConfigurationItem,\n QuantityItem,\n AliasAddItem,\n AliasDeleteItem,\n ActionResult,\n AliasActionResult,\n ExportActionResult,\n CatalogExportActionResult,\n AliasesEnum,\n CatalogsProductsService,\n CatalogsJobsService,\n CatalogsService,\n CatalogsAliasesService,\n} from '@/common/services/swagger';\nimport type { Client } from '@/common/services/swagger/client';\nexport interface PrmLoadArgs {\n productId: string;\n relationshipType: PrmRelationshipTypeEnum;\n page: number;\n pageSize: number;\n filter?: string;\n}\nexport const SESSION_TRANSLATIONS_KEY = 'pis-catalogs-translations';\n\nexport class HttpService extends SharedHttpService implements HttpServiceApi {\n instanceType: PisDomain = 'Catalogs';\n private storeService: StoreService;\n protected client: Client;\n constructor(\n protected instance: Instance,\n baseURL?: string,\n accessToken?: string,\n ) {\n super();\n this.client = createPisClient(instance, baseURL, accessToken);\n this.storeService = new StoreService(instance);\n }\n\n public async load(newRoute?: RouteData, paginate?: boolean): Promise<void> {\n if (!this.instance.router) return;\n\n const route = newRoute || this.instance.router.routeData;\n switch (route.view) {\n case 'catalogs':\n return await this.queryCatalogs(route);\n case 'products':\n return await this.queryProducts(route, paginate, true);\n case 'aliases':\n return await this.queryProducts(route, paginate);\n\n default:\n throw new Error(`Unknown view type \"${route.view}\" to be handled by HttpService`);\n }\n }\n\n public async queryCatalogs({ catalogs }: RouteData): Promise<void> {\n // capture synchronously at entry — inside the causing command's execute\n // stack — before any await lets a concurrent command interleave\n const { action: origin, source, trigger = 'ui' } = peekCurrentInteraction(this.instance) ?? {};\n this.instance.store.data.isLoadingData = true;\n const startedAt = Date.now();\n const track = (outcome: PisUserActionOutcome) =>\n trackUserAction(this.instance, {\n kind: 'search',\n action: 'search',\n trigger,\n origin: origin ?? 'route',\n ...(source ? { source } : {}),\n args: {\n searchText: catalogs.searchText ?? null,\n searchType: catalogs.searchType ?? null,\n page: catalogs.pagination.page,\n pageSize: catalogs.pagination.pageSize,\n },\n outcome,\n });\n try {\n const result = await CatalogsService.catalogsSearch(\n {\n catalogSearchQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n pager: {\n page: catalogs.pagination.page,\n pageSize: catalogs.pagination.pageSize,\n },\n search: {\n searchText: catalogs.searchText ?? undefined,\n searchType: catalogs.searchType ?? CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n createdWithinLastDays: catalogs.createdWithinLastDays,\n },\n sort: {\n field: catalogs.sortField ?? CatalogSortFieldEnum.LAST_MODIFIED,\n direction: catalogs.sortDirection ?? SortDirectionEnum.DESCENDING,\n },\n },\n },\n { client: this.client },\n );\n\n track(listOutcome(result.totalCount, result.items, Date.now() - startedAt));\n\n this.instance.eventBus.emit('search-loaded', result);\n\n if (result) {\n this.storeService.setData(CatalogsDataType.Catalogs, result);\n }\n\n this.instance.store.data.isLoadingData = false;\n this.instance.eventBus.emit('search-changed');\n } catch (e) {\n this.instance.store.data.isLoadingData = false;\n track({ status: 'error', durationMs: Date.now() - startedAt });\n throw e;\n }\n }\n\n public async queryProducts(\n { view, products }: RouteData,\n paginate?: boolean,\n loadProductFilters?: boolean,\n ): Promise<void> {\n const { action: origin, source, trigger = 'ui' } = peekCurrentInteraction(this.instance) ?? {};\n this.instance.store.data.isLoadingData = true;\n const startedAt = Date.now();\n const track = (outcome: PisUserActionOutcome) =>\n trackUserAction(this.instance, {\n kind: 'search',\n action: 'search',\n trigger,\n origin: origin ?? 'route',\n ...(source ? { source } : {}),\n args: {\n searchText: products.searchText ?? null,\n searchType: products.searchType ?? null,\n cid: products.cid ?? null,\n catalogId: products.catalogId ?? null,\n page: products.pagination.page,\n pageSize: products.pagination.pageSize,\n appliedFilterCount: products.filters?.rules?.length ?? 0,\n },\n outcome,\n });\n\n const dataTypes = paginate\n ? [CatalogProductSearchDataTypeEnum.PRODUCTS]\n : [\n CatalogProductSearchDataTypeEnum.PRODUCTS,\n CatalogProductSearchDataTypeEnum.BREADCRUMBS,\n CatalogProductSearchDataTypeEnum.PRODUCT_CLASSIFICATIONS,\n CatalogProductSearchDataTypeEnum.PART_CLASSIFICATIONS,\n ];\n if (!paginate && loadProductFilters === true) {\n dataTypes.push(CatalogProductSearchDataTypeEnum.FILTERS);\n }\n\n try {\n const result = await CatalogsProductsService.catalogsProductsSearch(\n {\n catalogProductSearchQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n pager: {\n page: products.pagination.page,\n pageSize: products.pagination.pageSize,\n },\n search: {\n searchText: products.searchText ?? undefined,\n searchType: products.searchType ?? CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n cid: products.cid,\n treeType: products.treeType as TreeTypeEnum | undefined,\n catalogId: products.catalogId,\n filter: products.filters,\n aliases: view == 'aliases' ? (products.aliases ?? AliasesEnum.ALL) : undefined,\n },\n sort: {\n field: products.sortField ?? CatalogProductSortFieldEnum.LAST_IMPORT, // // field: sortField ?? SortFieldEnum.PRODUCT,\n direction: products.sortDirection ?? SortDirectionEnum.ASCENDING,\n },\n dataTypes,\n maxProductImages:\n this.instance.store.options.components?.search?.common?.maxProductImages,\n },\n },\n { client: this.client },\n );\n\n this.instance.eventBus.emit('search-loaded', result);\n\n track(\n listOutcome(result.products?.totalCount, result.products?.items, Date.now() - startedAt),\n );\n\n if (result.products) {\n this.storeService.setData(CatalogsDataType.Products, result.products);\n }\n\n if (!paginate) {\n this.storeService.setData(\n CatalogsDataType.ProductClassifications,\n result.productClassifications,\n );\n this.storeService.setData(CatalogsDataType.PartClassifications, result.partClassifications);\n this.storeService.setData(CatalogsDataType.Filters, result.filters);\n this.storeService.setData(CatalogsDataType.Breadcrumbs, result.breadcrumbs);\n }\n\n this.instance.store.data.isLoadingData = false;\n this.instance.eventBus.emit('search-changed');\n } catch (e) {\n this.instance.store.data.isLoadingData = false;\n track({ status: 'error', durationMs: Date.now() - startedAt });\n throw e;\n }\n }\n\n public async preview(productId: string): Promise<void> {\n this.instance.store.data.isLoadingData = true;\n try {\n const result = await ProductsService.preview(\n {\n previewQuery: {\n appSettings: this.instance.store?.options.appSettings as AppSettings,\n search: {\n productId,\n cid: this.instance.getRouteData().products?.cid,\n filter: this.instance.getRouteData().products?.filters,\n },\n },\n },\n { client: this.client },\n );\n this.instance.eventBus.emit('preview-loaded', result);\n if (result) {\n this.storeService.setData(CatalogsDataType.ProductPreview, result);\n }\n\n this.instance.store.data.isLoadingData = false;\n } catch (e) {\n this.instance.store.data.isLoadingData = false;\n throw e;\n }\n }\n\n public async filterValues(\n attributeCodes: string[],\n catalogId?: string,\n ): Promise<FilterValueSearchResult> {\n const { products } = this.instance.router.routeData;\n\n return await CatalogsProductsService.catalogsProductsFilterValues(\n {\n catalogProductFilterValuesQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n\n search: {\n cid: products.cid,\n treeType: products.treeType as TreeTypeEnum | undefined,\n searchText: products.searchText,\n searchType: products.searchType || CatalogProductSearchTypeEnum.WITH_ALL_WORDS, // TODO: searchType as SearchTypeEnum,\n attributeCodes,\n filter: products.filters,\n catalogId: catalogId,\n },\n },\n },\n { client: this.client },\n );\n }\n\n public async loadTranslations(): Promise<TranslationItem[] | undefined> {\n const data = await this.fetchTranslations(SESSION_TRANSLATIONS_KEY);\n\n const interceptFunc = this.instance.store?.options.dataInterceptor;\n\n const loadEvent: LoadEvent = {\n type: CatalogsDataType.Translations,\n data: reactive({ items: data }),\n instance: this.instance,\n };\n\n if (interceptFunc) {\n const inc = await interceptFunc(loadEvent);\n return inc.type === 'Translations' ? inc.data?.items : data;\n } else {\n return data;\n }\n }\n\n public async autocomplete(searchText: string): Promise<AutocompleteSearchResult> {\n // capture synchronously at entry — inside the causing command's execute\n // stack; omitted when called directly (no in-flight command)\n const { action: origin, source, trigger = 'ui' } = peekCurrentInteraction(this.instance) ?? {};\n const { products } = this.instance.router.routeData;\n const searchForm = this.instance.store.options.components?.products?.search?.form;\n const startedAt = Date.now();\n\n let result: AutocompleteSearchResult;\n try {\n result = await CatalogsProductsService.catalogsProductsAutocomplete(\n {\n catalogProductAutocompleteQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n pager: {\n page: 1,\n pageSize: 5,\n },\n search: {\n cid: products.cid,\n aliases: products.aliases,\n treeType: products.treeType as TreeTypeEnum | undefined,\n searchType: products.searchType || CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n searchText: searchText ?? undefined,\n filter: products.filters,\n catalogId: products.catalogId,\n },\n fetchProductImages: searchForm?.showProductImages,\n },\n },\n { client: this.client },\n );\n } catch (error) {\n trackUserAction(this.instance, {\n kind: 'autocomplete',\n action: 'autocomplete',\n trigger,\n ...(origin ? { origin } : {}),\n ...(source ? { source } : {}),\n args: { searchText },\n outcome: { status: 'error', durationMs: Date.now() - startedAt },\n });\n throw error;\n }\n\n trackUserAction(this.instance, {\n kind: 'autocomplete',\n action: 'autocomplete',\n trigger,\n ...(origin ? { origin } : {}),\n ...(source ? { source } : {}),\n args: { searchText },\n outcome: listOutcome(result.totalCount, result.items, Date.now() - startedAt),\n });\n\n return result;\n }\n\n public async autocompleteCatalogs(searchText: string): Promise<CatalogAutocompleteSearchResult> {\n // capture synchronously at entry — inside the causing command's execute\n // stack; omitted when called directly (no in-flight command)\n const { action: origin, source, trigger = 'ui' } = peekCurrentInteraction(this.instance) ?? {};\n const { catalogs } = this.instance.router.routeData;\n const startedAt = Date.now();\n\n let result: CatalogAutocompleteSearchResult;\n try {\n result = await CatalogsService.catalogsAutocomplete(\n {\n catalogAutocompleteQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n pager: {\n page: 1,\n pageSize: 5,\n },\n search: {\n searchType: catalogs.searchType || CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n searchText: searchText ?? undefined,\n },\n },\n },\n { client: this.client },\n );\n } catch (error) {\n trackUserAction(this.instance, {\n kind: 'autocomplete',\n action: 'autocomplete-catalogs',\n trigger,\n ...(origin ? { origin } : {}),\n ...(source ? { source } : {}),\n args: { searchText },\n outcome: { status: 'error', durationMs: Date.now() - startedAt },\n });\n throw error;\n }\n\n trackUserAction(this.instance, {\n kind: 'autocomplete',\n action: 'autocomplete-catalogs',\n trigger,\n ...(origin ? { origin } : {}),\n ...(source ? { source } : {}),\n args: { searchText },\n outcome: listOutcome(result.totalCount, result.items, Date.now() - startedAt),\n });\n\n return result;\n }\n\n private _lastFilterLoad = {\n key: '',\n count: 0,\n };\n\n public async loadFiltersResultCount(filter: CriteriaGroup): Promise<CountSearchResult> {\n const { products } = this.instance.router.routeData;\n\n const params: CatalogProductCountQuery = {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n\n search: {\n cid: products.cid,\n treeType: products.treeType as TreeTypeEnum | undefined,\n searchType: products.searchType || CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n searchText: products.searchText,\n filter,\n catalogId: products.catalogId,\n },\n };\n\n const paramsKey = JSON.stringify(params);\n\n if (this._lastFilterLoad.key == paramsKey) {\n return Promise.resolve({ totalCount: this._lastFilterLoad.count });\n }\n\n const result = await CatalogsProductsService.catalogsProductsCount(\n {\n catalogProductCountQuery: params,\n },\n { client: this.client },\n );\n\n this._lastFilterLoad.key = paramsKey;\n this._lastFilterLoad.count = result.totalCount;\n\n return result;\n }\n\n public async exportCatalog(\n catalogId: string,\n priceSettings?: CatalogExportPriceSettings,\n ): Promise<CatalogExportActionResult> {\n return CatalogsService.catalogsExport(\n {\n catalogExportAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n priceSettings,\n },\n },\n { client: this.client },\n );\n }\n\n public async downloadCatalog(guid: string): Promise<unknown> {\n return CatalogsService.catalogsDownload(\n {\n guid,\n },\n { client: this.client },\n );\n }\n\n public async importCatalog(\n catalogId: string,\n fileContentBase64: string,\n fileName: string,\n ): Promise<CatalogActionResult> {\n return CatalogsService.catalogsImport(\n {\n catalogImportAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n fileContentBase64,\n fileName,\n },\n },\n { client: this.client },\n );\n }\n\n public async copyCatalog(\n sourceCatalogId: string,\n targetCatalogId: string,\n ): Promise<ActionResult> {\n return CatalogsService.catalogsCopy(\n {\n catalogCopyAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n sourceCatalogId,\n targetCatalogId,\n },\n },\n { client: this.client },\n );\n }\n\n public async copyToNewCatalog(\n sourceCatalogId: string,\n code: string,\n type: CatalogTypeEnum,\n description: string,\n ): Promise<ActionResult> {\n return CatalogsService.catalogsCopyToNew(\n {\n catalogCopyToNewAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n sourceCatalogId,\n code,\n type,\n description,\n },\n },\n { client: this.client },\n );\n }\n\n public async addCatalog(\n code: string,\n type: CatalogTypeEnum,\n description: string,\n ): Promise<CatalogActionResult> {\n return CatalogsService.catalogsAdd(\n {\n catalogAddAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n description,\n code,\n type,\n },\n },\n { client: this.client },\n );\n }\n\n public async updateCatalog(\n catalogId: string,\n description: string,\n isDefault?: boolean,\n ): Promise<CatalogActionResult> {\n const result = await CatalogsService.catalogsUpdate(\n {\n catalogUpdateAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n description,\n default: isDefault,\n },\n },\n { client: this.client },\n );\n const newCatalogs: CatalogItem[] = this.instance.store.data.catalogs?.items || [];\n const catalogForUpdate: CatalogItem | undefined = newCatalogs.find(\n (catalog: CatalogItem) => catalog.id === catalogId,\n );\n if (catalogForUpdate) {\n catalogForUpdate.description = description;\n if (isDefault === true || isDefault === false) {\n catalogForUpdate.default = isDefault;\n }\n }\n this.storeService.setData(CatalogsDataType.Catalogs, {\n items: newCatalogs,\n totalCount: newCatalogs.length,\n });\n return result;\n }\n\n public async getCatalogOptions(): Promise<CatalogOptionsResult> {\n return CatalogsService.catalogsOptions(\n {\n catalogOptionsQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n },\n },\n { client: this.client },\n );\n }\n\n public async updateDefaultCatalog(\n catalogId: string,\n isDefault: boolean,\n ): Promise<CatalogActionResult> {\n return CatalogsService.catalogsUpdate(\n {\n catalogUpdateAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n default: isDefault,\n },\n },\n { client: this.client },\n );\n }\n\n public async deleteCatalog(catalogId: string): Promise<CatalogActionResult> {\n const result = await CatalogsService.catalogsDelete(\n {\n catalogAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n },\n },\n { client: this.client },\n );\n const newCatalogs: CatalogItem[] = (this.instance.store.data.catalogs?.items || []).filter(\n (item: CatalogItem) => item.id !== catalogId,\n );\n this.storeService.setData(CatalogsDataType.Catalogs, {\n items: newCatalogs,\n totalCount: newCatalogs.length,\n });\n return result;\n }\n\n public async downloadJobHistory(sortSettings?: JobSortSettings): Promise<JobSearchResult> {\n return CatalogsJobsService.catalogsJobsSearch(\n {\n jobSearchQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n sort: sortSettings || undefined,\n },\n },\n { client: this.client },\n );\n }\n\n public async exportJobHistory(jobId: string): Promise<ExportActionResult> {\n return CatalogsJobsService.catalogsJobsExport(\n {\n jobAction: {\n jobId,\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n },\n },\n { client: this.client },\n );\n }\n\n public async cancelJob(jobId: string): Promise<ActionResult> {\n return CatalogsJobsService.catalogsJobsCancel(\n {\n jobAction: {\n jobId,\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n },\n },\n { client: this.client },\n );\n }\n\n public async getConfigurationOption(id: string, catalogId: string): Promise<ConfigurationItem> {\n return await CatalogsProductsService.catalogsProductsGetConfiguration(\n {\n configurationGetQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n id,\n catalogId,\n },\n },\n { client: this.client },\n );\n }\n\n public async importCatalogAliases(\n fileContentBase64: string,\n fileName: string,\n ): Promise<CatalogActionResult> {\n return CatalogsAliasesService.catalogsAliasesImport(\n {\n aliasImportAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n fileContentBase64,\n fileName,\n },\n },\n { client: this.client },\n );\n }\n\n public async exportCatalogAliases(): Promise<ExportActionResult> {\n return CatalogsAliasesService.catalogsAliasesExport(\n {\n aliasExportAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n },\n },\n { client: this.client },\n );\n }\n\n public async updateCatalogProduct(\n product: CatalogProductUpdateItem,\n catalogId: string,\n ): Promise<CatalogActionResult> {\n const result = await CatalogsProductsService.catalogsProductsUpdate(\n {\n catalogProductUpdateAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n products: [product],\n catalogId,\n },\n },\n { client: this.client },\n );\n const totalCount = this.instance.store.data.products?.totalCount;\n const newCatalogProducts = [...(this.instance.store.data.products?.items || [])].reduce(\n (result: CatalogProductItem[], catalogProduct: CatalogProductItem) => {\n if (catalogProduct.productId === product.productId) {\n const productDescriptionAttribute = Object.values(catalogProduct.attributes).find(\n (attribute) => attribute.attributeCode === '#Description',\n );\n if (productDescriptionAttribute) {\n productDescriptionAttribute.values = [{ text: product.description || '' }];\n }\n Object.assign(catalogProduct, {\n customerClassification: product.customerClassification,\n baseProductId: product.baseProductId,\n customFields: product.customFields,\n });\n catalogProduct.catalogs?.forEach((catalog) => {\n if (catalog.id === catalogId) {\n catalog.quantities?.forEach((quantity: QuantityItem) => {\n if (quantity.unitOfMeasure === product.unitOfMeasure) {\n quantity.value = product.quantity;\n }\n });\n }\n });\n }\n return result.concat([catalogProduct]);\n },\n [],\n );\n this.storeService.setData(CatalogsDataType.Products, {\n totalCount,\n items: newCatalogProducts,\n });\n return result;\n }\n\n public async deleteCatalogProduct(\n products: CatalogProductDeleteItem[],\n catalogId: string,\n ): Promise<CatalogActionResult> {\n const result = await CatalogsProductsService.catalogsProductsDelete(\n {\n catalogProductDeleteAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n products,\n },\n },\n { client: this.client },\n );\n const storeCatalogs = this.instance.store.data.catalogs;\n const storeCatalogProducts = this.instance.store.data.products;\n const newCatalogProducts: CatalogProductItem[] =\n storeCatalogProducts?.items?.filter((product: CatalogProductItem) => {\n const productId: string = product.productId;\n const catalog = product.catalogs?.find((item) => item.id === catalogId);\n if (!catalog) {\n return true;\n }\n const uoms: string[] | undefined = catalog.quantities?.map((item) => item.unitOfMeasure);\n if (!uoms) {\n return true;\n }\n return !products.find(\n (productsForDelete: CatalogProductDeleteItem) =>\n productsForDelete.productId === productId,\n );\n }) || [];\n const newCatalogs: CatalogItem[] = storeCatalogs?.items || [];\n const catalogForUpdate: CatalogItem | undefined = newCatalogs.find(\n (catalog: CatalogItem) => catalog.id === catalogId,\n );\n if (catalogForUpdate) {\n catalogForUpdate.productsTotalCount = Math.abs(\n catalogForUpdate.productsTotalCount - products.length,\n );\n }\n const catalogProductsRemoved = Math.abs(\n (storeCatalogProducts?.items?.length || 0) - newCatalogProducts.length,\n );\n this.storeService.setData(CatalogsDataType.Catalogs, {\n items: newCatalogs,\n totalCount: storeCatalogs?.totalCount || 0,\n });\n this.storeService.setData(CatalogsDataType.Products, {\n items: newCatalogProducts,\n totalCount: (storeCatalogProducts?.totalCount || 0) - catalogProductsRemoved,\n });\n return result;\n }\n\n public async copyCatalogProduct(\n sourceCatalogId: string,\n sourceQuantityIds: string[],\n targetCatalogId: string,\n ): Promise<CatalogActionResult> {\n return CatalogsProductsService.catalogsProductsCopyQuantity(\n {\n quantityCopyAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n sourceCatalogId,\n sourceQuantityIds,\n targetCatalogId,\n },\n },\n { client: this.client },\n );\n }\n\n public async copyCatalogProductToNew(\n sourceCatalogId: string,\n sourceQuantityIds: string[],\n code: string,\n type: CatalogTypeEnum,\n description: string,\n ): Promise<CatalogActionResult> {\n return CatalogsProductsService.catalogsProductsCopyQuantityToNew(\n {\n quantityCopyToNewAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n sourceCatalogId,\n sourceQuantityIds,\n code,\n type,\n description,\n },\n },\n { client: this.client },\n );\n }\n\n public async getAllCatalogs(): Promise<CatalogSearchResult> {\n return CatalogsService.catalogsSearch(\n {\n catalogSearchQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n /** @todo Remove backend limit */\n pager: { page: 1, pageSize: 1000 },\n },\n },\n { client: this.client },\n );\n }\n\n public async getCatalogById(catalogId: string): Promise<CatalogItem> {\n return CatalogsService.catalogsGet(\n {\n catalogGetQuery: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n catalogId,\n },\n },\n { client: this.client },\n );\n }\n\n public async addAliases(aliases: AliasAddItem[]): Promise<AliasActionResult> {\n return CatalogsAliasesService.catalogsAliasesAdd(\n {\n aliasAddAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n aliases,\n },\n },\n { client: this.client },\n );\n }\n\n public async deleteAliases(aliases: AliasDeleteItem[]): Promise<ActionResult> {\n return CatalogsAliasesService.catalogsAliasesDelete(\n {\n aliasDeleteAction: {\n appSettings: this.instance.store?.options.appSettings as CatalogAppSettings,\n aliases,\n },\n },\n { client: this.client },\n );\n }\n}\n","import type {\n SubView,\n TreeTypeEnum as TreeTypeUnion,\n} from '@/common/api/components/optionValueTypes';\nimport type { RoutePatch } from '@/common/api/runtime/RoutePatch';\nimport {\n AliasesEnum,\n CatalogProductSearchTypeEnum,\n CatalogProductSortFieldEnum,\n CatalogSearchTypeEnum,\n CatalogSortFieldEnum,\n CriteriaGroup,\n SortDirectionEnum,\n} from '@/common/services/swagger';\n\nexport type ViewType = 'catalogs' | 'products' | 'aliases';\n\nexport type { SubView } from '@/common/api/components/optionValueTypes';\n\n/**\n * Patch shape for route-writing call sites: `init(options, route)`,\n * `setRoute(patch)`, and route-writing commands. Every member is optional at\n * every scope depth; passing `null`/`undefined` for a member resets that\n * field to its default route value.\n */\nexport type RouteDataPatch = RoutePatch<RouteData>;\n\n/** Top-level route keys; feeds the dev-mode unknown-route-key warning. */\nexport const ROUTE_DATA_TOP_LEVEL_KEYS = [\n 'view',\n 'catalogs',\n 'products',\n] as const satisfies readonly (keyof RouteData)[];\n\n/**\n * Complete route-data READ shape. Members with a default route value are\n * required: the Router merges patches over the current route and fills every\n * empty (`null`/`undefined`) value from the default route before the route\n * reaches `httpService.load`, history, `routeData`, or `route-changed`, so\n * readers never see a missing default-backed field. Write sites pass\n * `RouteDataPatch` instead.\n */\nexport interface RouteData {\n /**\n * Current view ('catalogs' | 'products' | 'aliases')\n */\n view: ViewType;\n\n /**\n * Catalogs view data. Applies to view = 'catalogs'\n */\n catalogs: CatalogsRouteData;\n\n /**\n * Products view data. Applies to view = 'products' and 'aliases'\n */\n products: ProductsRouteData;\n}\n\nexport interface Pagination {\n /**\n * Current page\n */\n page: number;\n /**\n * Number of items per page\n */\n pageSize: number;\n}\n\nexport interface CatalogsRouteData {\n /**\n * Current search text\n */\n searchText?: string;\n\n /**\n * Current search type ('CatalogCodeAndDescription' | 'CreatedBy' | 'CatalogCode' )\n */\n searchType?: CatalogSearchTypeEnum;\n\n /**\n * Current Pagination data\n */\n pagination: Pagination;\n\n /**\n * Current sort direction ( 'Ascending' | 'Descending')\n */\n sortDirection?: SortDirectionEnum;\n\n /**\n * Current sort field ('LastModified' | 'Code' | 'Description')\n */\n sortField?: CatalogSortFieldEnum;\n\n /**\n * Filter used to show only recently modified catalogs\n */\n createdWithinLastDays?: number;\n}\n\nexport interface ProductsRouteData {\n /**\n * Current search text\n */\n searchText?: string;\n\n /**\n * Current search method ( 'WithAllWords' | 'WithAtLeastOneWord' | 'ExactPhrase')\n */\n searchType?: CatalogProductSearchTypeEnum;\n\n /**\n * Currently selected classification ID (CID)\n */\n cid?: string;\n\n /**\n * Currently selected classification tree ( 'Products' | 'Parts')\n */\n treeType?: TreeTypeUnion;\n\n /**\n * Applied filters (Refer to Web API documentation for details.)\n */\n filters?: CriteriaGroup;\n\n /**\n * Current Pagination data\n */\n pagination: Pagination;\n\n /**\n * Current sort field ('LastImport' | 'Product' | 'Alias' | 'LastModified' | 'Hierarchical')\n */\n sortField?: CatalogProductSortFieldEnum;\n\n /**\n * Current sort direction ( 'Ascending' | 'Descending')\n */\n sortDirection?: SortDirectionEnum;\n\n /**\n * Current products sub-view (table, list, grid). Applies to view='products' only.\n * Nested per scope so a future `aliases.subView` slots in without reshaping\n * the route (mirrors the per-scope tag hierarchy). Filled from the default\n * route when empty.\n */\n subView: SubView;\n\n /**\n * Selected catalog ID (only products in the catalog are visible/searchable)\n */\n catalogId?: string;\n\n /**\n * Current alias filter. Applies to view='aliases' only. ('All' | 'Blank' | 'Populated')\n */\n aliases?: AliasesEnum;\n}\n","import { RouteData } from '../runtime/RouteData';\n\nimport {\n CatalogProductSearchTypeEnum,\n CatalogProductSortFieldEnum,\n CatalogSearchTypeEnum,\n CatalogSortFieldEnum,\n SortDirectionEnum,\n} from '@/common/services/swagger';\n\nexport const defaultRoute: RouteData = {\n view: 'catalogs',\n catalogs: {\n searchText: undefined,\n searchType: CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n pagination: { page: 1, pageSize: 10 },\n sortField: CatalogSortFieldEnum.LAST_MODIFIED,\n sortDirection: SortDirectionEnum.DESCENDING,\n },\n products: {\n searchText: undefined,\n searchType: CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n cid: undefined,\n treeType: undefined,\n filters: undefined,\n pagination: { page: 1, pageSize: 12 },\n subView: 'table',\n sortField: CatalogProductSortFieldEnum.LAST_IMPORT,\n sortDirection: SortDirectionEnum.DESCENDING,\n },\n};\n","import { reactive } from 'vue';\n\nimport { Instance } from '../Instance';\nimport { ROUTE_DATA_TOP_LEVEL_KEYS, RouteData, RouteDataPatch } from './RouteData';\nimport { defaultRoute } from '../configuration/DefaultRoute';\n\nimport { coercePagination } from '@/common/api/runtime/coercePagination';\nimport { clonePlain, deepEqual, mergeRouteData } from '@/common/api/runtime/deepMerge';\nimport { fillRouteDefaults } from '@/common/api/runtime/fillRouteDefaults';\nimport { warnUnknownRouteKeys } from '@/common/api/runtime/warnUnknownRouteKeys';\n\nexport class Router {\n routeData = reactive<RouteData>(clonePlain(defaultRoute));\n history: RouteData[] = [];\n\n constructor(private instance: Instance) {}\n\n /**\n * @param routeSettings\n * @param passive flag that disables the API call. Useful when changing sub-views.\n */\n public async setRoute(routeSettings?: RouteDataPatch, passive = false): Promise<void> {\n return this.setRouteInternal(routeSettings, { passive });\n }\n\n /**\n * Sets the route and re-fetches even when the merged route is unchanged.\n * The catalogs switch/reset commands and post-mutation refreshes rely on\n * this; plain navigation uses `setRoute` and its identical-route dedupe.\n */\n public async setRouteForced(routeSettings?: RouteDataPatch): Promise<void> {\n return this.setRouteInternal(routeSettings, { force: true });\n }\n\n private async setRouteInternal(\n routeSettings: RouteDataPatch | undefined,\n options: { passive?: boolean; force?: boolean },\n ): Promise<void> {\n const newRoute = clonePlain(this.routeData);\n\n if (routeSettings) {\n warnUnknownRouteKeys('catalogs', routeSettings, ROUTE_DATA_TOP_LEVEL_KEYS);\n // When route is set from outside pagination may be passed as string\n if (routeSettings.products?.pagination) {\n coercePagination(routeSettings.products.pagination, this.routeData.products?.pagination);\n }\n\n if (routeSettings.catalogs?.pagination) {\n coercePagination(routeSettings.catalogs.pagination, this.routeData.catalogs?.pagination);\n }\n\n mergeRouteData(newRoute, routeSettings);\n // Empty (`null`/`undefined`) patch results heal back to the default\n // route so every reader downstream (load, history, route-changed) sees\n // a complete route.\n fillRouteDefaults(newRoute, defaultRoute);\n }\n\n // A route whose merged result is identical to the current route is a no-op:\n // no data load, no history entry, no route-changed event. The first route\n // (empty history, before the first commit) always proceeds so init() loads.\n if (\n !options.force &&\n this.history.length > 0 &&\n deepEqual(newRoute, clonePlain(this.routeData))\n ) {\n return;\n }\n\n // if only subView changes, no need to reload results\n let onlySubViewChanged = false;\n if (\n !options.passive &&\n !options.force &&\n this.history.length > 1 &&\n newRoute.view == 'products'\n ) {\n const lastRoute = this.history[this.history.length - 1];\n onlySubViewChanged = deepEqual(lastRoute, newRoute, (key) => key === 'subView');\n }\n if (onlySubViewChanged) {\n this.commitRoute(newRoute);\n return;\n }\n\n let onlyPaginationChanged = false;\n\n if (\n !options.passive &&\n !options.force &&\n this.history.length > 1 &&\n newRoute.view == 'products'\n ) {\n const lastRoute = this.history[this.history.length - 1];\n onlyPaginationChanged = deepEqual(\n lastRoute.products,\n newRoute.products,\n (key) => key === 'page' || key === 'pageSize',\n );\n }\n\n if (this.instance.store.data.isInitialized && this.instance.httpService) {\n if (!options.passive) {\n await this.instance.httpService.load(newRoute, onlyPaginationChanged);\n }\n this.commitRoute(newRoute);\n } else {\n this.commitRoute(newRoute);\n }\n }\n\n /**\n * Re-fetches the current route directly: no identical-route dedupe, no\n * history entry, no route-changed event (the shared reload contract -\n * reload is a refresh, not navigation).\n */\n public async reload(): Promise<void> {\n await this.instance.httpService?.load(this.routeData);\n }\n\n private commitRoute(routeData: RouteData) {\n this.history.push({ ...routeData });\n mergeRouteData(this.routeData, routeData);\n\n this.instance.eventBus.emit('route-changed', clonePlain(this.routeData));\n }\n\n public async back(steps = 1): Promise<void> {\n const newIndex = this.history.length - steps - 1;\n const newRoute = this.history[newIndex];\n\n if (newRoute) {\n this.history.splice(newIndex);\n }\n\n this.setRoute(newRoute ?? defaultRoute);\n }\n}\n","import mitt from 'mitt';\nimport { reactive, watch } from 'vue';\n\nimport { Accessor } from './Accessor';\nimport { CatalogsInstance } from './CatalogsInstance';\nimport { CatalogsDataType } from './configuration/application/CatalogsDataType';\nimport { DefaultOptions } from './configuration/DefaultOptions';\nimport { CommandExecutor } from './runtime/CommandExecutor';\nimport { HttpService } from './runtime/HttpService';\nimport { Options } from './runtime/Options';\nimport { RouteData, RouteDataPatch } from './runtime/RouteData';\nimport { Router } from './runtime/Router';\nimport { Store } from './runtime/Store';\nimport { PisDomain } from '../../common/api/runtime/BaseInstance';\nimport { Command } from '../../common/api/runtime/Command';\nimport { createPatchedDefaultOptions, patchOptions } from '../../common/api/runtime/patchOptions';\nimport { defaultRoute } from '../api/configuration/DefaultRoute';\nimport type { CatalogsEventMap, CatalogsEventName } from './configuration/events/CatalogsEvents';\nimport type { CatalogsCommandArgs, CatalogsCommandName } from './runtime/Commands';\n\nimport { createExternalBus } from '@/common/api/runtime/createExternalBus';\nimport { clonePlain } from '@/common/api/runtime/deepMerge';\nimport { ProductSelectionStore } from '@/common/api/runtime/ProductSelectionStore';\nimport { reportRuntimeError } from '@/common/api/runtime/reportRuntimeError';\nimport { emitHostUserAction, type PisHostUserAction } from '@/common/api/runtime/trackUserAction';\nimport { Translations } from '@/common/api/runtime/Translations';\nimport { validateBaseUrl } from '@/common/api/runtime/validateBaseUrl';\nimport {\n validateV7ComponentOptions,\n validateV7TopLevelOptions,\n} from '@/common/api/runtime/validateV7ComponentOptions';\nimport LoggerService from '@/common/services/LoggerService';\nimport { CatalogProductSearchDataTypeEnum } from '@/common/services/swagger';\nimport type { CatalogsComponentName as ComponentName } from '@/generated/component-names';\n\n/**\n * Everything the catalogs event bus can carry: the public event registry\n * (`CatalogsEventMap`) plus the runtime-private `internal:*` channel. Typing the bus\n * makes emit sites compile-checked — an undeclared event name or a mismatched\n * payload fails the build instead of reaching consumers undocumented.\n */\ntype CatalogsBusEvents = {\n [K in keyof CatalogsEventMap]: CatalogsEventMap[K];\n} & Record<`internal:${string}`, unknown> & { [key: symbol]: unknown };\n\nexport class Instance implements CatalogsInstance {\n public instanceType: PisDomain = 'Catalogs';\n public props: { [key: string]: any } = {};\n public httpService?: HttpService;\n public store: Store = reactive({\n notifications: [],\n data: { isInitialized: false, actions: { current: null, data: null } },\n options: { isInitialized: false },\n });\n public router = new Router(this);\n public translations = new Translations(this);\n public commandExecutor = new CommandExecutor(this);\n public logger = LoggerService;\n\n public registeredComponents = reactive(new Set<ComponentName>());\n public dataTypesRequired = reactive(new Set<CatalogsDataType>());\n\n public eventBus = mitt<CatalogsBusEvents>();\n private eventBusExt = createExternalBus(this.eventBus);\n\n public selection = new ProductSelectionStore(this);\n\n constructor(\n public id: string,\n public accessor: Accessor,\n ) {}\n\n public isInitialized(): boolean | undefined {\n return this.store.data.isInitialized;\n }\n\n public async reload(): Promise<void> {\n await this.translations.load();\n await this.router.reload();\n }\n\n public setRoute(routeData: RouteDataPatch): void {\n this.router.setRoute(routeData);\n }\n\n public async init(optionsOverrides: Options, routeData?: RouteDataPatch): Promise<void> {\n if (this.store.data.isInitialized) {\n throw new Error(`Instance \"${this.id}\" is already initialized`);\n }\n\n validateV7ComponentOptions('catalogs', optionsOverrides);\n validateV7TopLevelOptions(optionsOverrides);\n\n const baseUrl = validateBaseUrl(optionsOverrides?.baseUrl);\n\n const currentOptions: Options = this.store.options.isInitialized\n ? clonePlain(this.store.options)\n : new DefaultOptions();\n\n const normalizedOptionsOverrides = clonePlain(optionsOverrides);\n patchOptions(currentOptions, normalizedOptionsOverrides);\n\n this.store.options = currentOptions;\n this.store.options.isInitialized = true;\n\n this.httpService = new HttpService(this, baseUrl, currentOptions.accessToken);\n this.store.data.isInitialized = true;\n\n this.router.setRoute(routeData);\n try {\n await this.translations.load();\n return Promise.resolve();\n } catch (cause) {\n this.store.data.isInitialized = false;\n // No component tree exists yet, so there is no toast to render: report\n // through errorInterceptor (telemetry) and the console, and reject with\n // a real Error so host .catch handlers and trackers see a stack trace.\n const event = reportRuntimeError(currentOptions.errorInterceptor, {\n type: 'InitError',\n message: 'PIS initialization error.',\n isHandled: false,\n });\n console.error('[PIS] initialization error', event, cause);\n return Promise.reject(new Error('PIS initialization error', { cause }));\n }\n }\n\n public update(optionsOverrides: Options, routeData?: RouteDataPatch): void {\n validateV7ComponentOptions('catalogs', optionsOverrides);\n validateV7TopLevelOptions(optionsOverrides);\n\n const currentOptions: Options = this.store.options.isInitialized\n ? this.store.options\n : new DefaultOptions();\n\n const normalizedOptionsOverrides = clonePlain(optionsOverrides);\n patchOptions(currentOptions, normalizedOptionsOverrides);\n\n this.store.options = currentOptions;\n this.store.options.isInitialized = true;\n\n if (routeData) {\n this.router.setRoute(routeData);\n }\n }\n\n public on<K extends CatalogsEventName>(\n name: K,\n handler: (data: CatalogsEventMap[K]) => void,\n ): void;\n public on(name: '*', handler: (type: string, data: unknown) => void): void;\n public on(name: string, handler: (data: unknown) => void): void;\n public on(\n name: string,\n handler: ((data: unknown) => void) | ((type: string, data: unknown) => void),\n ): void {\n this.eventBusExt.on(name as never, handler as never);\n }\n\n public onReady(callback: () => any): void {\n const unwatch = watch(\n () => this.store.data,\n ({ isInitialized }) => {\n if (isInitialized) {\n callback();\n unwatch();\n }\n },\n { deep: true },\n );\n }\n\n public off(): void;\n public off(\n name: string,\n handler?: ((data: unknown) => void) | ((type: string, data: unknown) => void),\n ): void;\n public off(\n name?: string,\n handler?: ((data: unknown) => void) | ((type: string, data: unknown) => void),\n ): void {\n if (name) {\n this.eventBusExt.off(name as never, handler as never);\n } else {\n this.eventBusExt.all.clear();\n // this.intercept = undefined;\n }\n }\n\n public registerComponent(componentName: ComponentName): void {\n this.registeredComponents.add(componentName);\n }\n\n /**\n * Registers data types that must be fetched from the Web API for this instance.\n */\n public registerRequiredDataTypes(\n dataTypes: (CatalogsDataType | string)[] | readonly (CatalogsDataType | string)[],\n ): void {\n dataTypes.forEach((dataType) => this.dataTypesRequired.add(dataType as CatalogsDataType));\n }\n\n public getRegisteredSearchDataTypes(): CatalogProductSearchDataTypeEnum[] {\n if (this.dataTypesRequired && this.dataTypesRequired.size) {\n const searchDataTypes = Object.values(CatalogProductSearchDataTypeEnum);\n\n const arr = Array.from(this.dataTypesRequired).filter((dataType) =>\n searchDataTypes.includes(dataType as CatalogProductSearchDataTypeEnum),\n ) as CatalogProductSearchDataTypeEnum[];\n\n return [...new Set(arr)];\n } else {\n return [];\n }\n }\n\n public destroy(): void {\n return this.accessor.destroyInstance(this.id);\n }\n\n public execute<ReturnType = unknown>(\n command: Command<Instance, ReturnType>,\n trigger?: 'ui' | 'api',\n ): Promise<ReturnType | undefined> {\n return this.commandExecutor.execute<ReturnType>(command, trigger);\n }\n\n public executeCommand<N extends CatalogsCommandName>(\n name: N,\n ...args: CatalogsCommandArgs[N] extends void ? [] : [args: CatalogsCommandArgs[N]]\n ): Promise<unknown> {\n return this.commandExecutor.executeCommand(name, ...args);\n }\n\n public trackUserAction(action: PisHostUserAction): void {\n emitHostUserAction(this, action);\n }\n\n public getDefaultOptions(): Options {\n return createPatchedDefaultOptions(new DefaultOptions());\n }\n\n public getDefaultRouteData(): RouteData {\n return clonePlain(defaultRoute);\n }\n\n public getOptions(): Options {\n return this.store.options;\n }\n\n public getRouteData(): RouteData {\n return clonePlain(this.router.routeData);\n }\n}\n","import { reactive } from 'vue';\n\nimport { CatalogsAccessor } from './CatalogsAccessor';\nimport { CatalogsInstance } from './CatalogsInstance';\nimport { Instance } from './Instance';\n\nexport class Accessor implements CatalogsAccessor {\n instances = reactive<Map<string, Instance>>(new Map());\n\n public destroyInstance(id: string): void {\n // Symmetric with Products: destroy clears every instance.on()\n // subscription before deregistering.\n try {\n this.instances.get(id)?.off();\n } catch {\n //\n }\n\n this.instances.delete(id);\n }\n\n public getInstance(): CatalogsInstance | undefined;\n public getInstance(id: string): CatalogsInstance;\n /** Possibly-undefined ids (e.g. optional component props) resolve like the no-arg form. */\n public getInstance(id: string | undefined): CatalogsInstance | undefined;\n public getInstance(id?: string): CatalogsInstance | undefined {\n const size = this.instances.size;\n\n if (id !== undefined) {\n if (this.instances.has(id)) {\n return this.instances.get(id);\n } else {\n const instance = new Instance(id, this);\n this.instances.set(id, instance);\n return instance;\n }\n } else if (size === 1) {\n return this.instances.values().next().value;\n } else if (size > 1) {\n throw new Error('[PIS Catalogs] Cannot pick default instance if more than one exists');\n }\n\n return undefined;\n }\n\n public setAccessTokenInAllInstances(token: string) {\n this.instances.forEach((inst: any) => {\n inst.getOptions().accessToken = token;\n });\n }\n}\n","import { Ref, ComputedRef } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { Instance } from '@/catalogs/api/Instance';\nimport { RouteData } from '@/catalogs/api/runtime/RouteData';\nimport { Store } from '@/catalogs/api/runtime/Store';\nimport PIS from '@/common/api/PisGlobal';\nimport {\n breakpoints,\n createDomainSetupComponent,\n} from '@/common/composables/createDomainSetupComponent';\nimport { FiltersStorageData } from '@/common/composables/FiltersStorageData';\nimport { TranslateFunc as CommonTranslateFunc } from '@/common/composables/translateFunc';\n\nexport type TranslateFunc = CommonTranslateFunc;\nexport type EmitFunc = (name: string, data: unknown) => void;\n\nexport type ComponentSetupItems = {\n componentName: string;\n isWebComponent: boolean;\n instance: Ref<Instance | undefined>;\n store: Ref<Store | undefined>;\n routeData: Ref<RouteData | undefined>;\n isReady: ComputedRef<boolean>;\n translationsReady: ComputedRef<boolean>;\n widerThan: (breakpoint: string) => boolean;\n narrowerThan: (breakpoint: string) => boolean;\n t: TranslateFunc;\n emit: EmitFunc;\n useProductsFilters: () => FiltersStorageData;\n};\n\nexport { breakpoints };\n\nconst setupCatalogsComponent = createDomainSetupComponent<Instance, CatalogsDataType>({\n getInstance: (id) => PIS.Catalogs.getInstance(id) as Instance,\n instanceTag: 'pis-catalogs-instance',\n translationFallbackNamespace: 'products',\n});\n\nexport function setupComponent(\n root: Ref<HTMLElement | undefined>,\n instanceId?: string,\n dataTypes?: CatalogsDataType[],\n): ComponentSetupItems {\n return setupCatalogsComponent(root, instanceId, dataTypes) as ComponentSetupItems;\n}\n","import { Ref } from 'vue';\n\nimport { TranslateFunc } from './setupComponent';\nimport { MenuItem } from '../api/configuration/components/ExportMenuOptions';\nimport { InternalMenuActions } from '../api/configuration/DefaultOptions';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n AliasDeleteActionCommand,\n AliasEditActionCommand,\n AliasExportActionCommand,\n AliasImportActionCommand,\n AliasItemActionCommand,\n AliasListActionCommand,\n CatalogCopyActionCommand,\n CatalogDeleteActionCommand,\n CatalogEditActionCommand,\n CatalogExportActionCommand,\n CatalogHistoryActionCommand,\n CatalogImportActionCommand,\n CatalogItemActionCommand,\n CatalogListActionCommand,\n CatalogMakeDefaultCommand,\n CatalogNewActionCommand,\n CatalogProductCopyActionCommand,\n CatalogProductDeleteActionCommand,\n CatalogProductEditActionCommand,\n CatalogUnMakeDefaultCommand,\n GetCatalogByIdCommand,\n ProductItemActionCommand,\n ProductListActionCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport type { Command } from '@/common/api/runtime/Command';\nimport { CatalogItem, CatalogProductItem } from '@/common/services/swagger';\n\nexport default function useCatalogActions(\n instance: Ref<Instance>,\n t: TranslateFunc,\n source?: string,\n) {\n // every dispatched command is tagged with the dispatching component for\n // `onUserAction` attribution when the caller passes its componentName\n const dispatch = <T extends Command<Instance, unknown> & { from(source: string): T }>(\n command: T,\n ): Promise<unknown> => instance.value.execute<unknown>(source ? command.from(source) : command);\n\n const catalogListActions = {\n [InternalMenuActions.createNew]: () => new CatalogNewActionCommand(),\n [InternalMenuActions.history]: () => new CatalogHistoryActionCommand(),\n };\n const catalogItemActions = {\n [InternalMenuActions.makeDefault]: (catalog: CatalogItem) =>\n new CatalogMakeDefaultCommand({\n catalogId: catalog.id,\n onSuccessMessage: t('CatalogSetAsDefaultSuccess'),\n }),\n [InternalMenuActions.unmakeDefault]: (catalog: CatalogItem) =>\n new CatalogUnMakeDefaultCommand({\n catalogId: catalog.id,\n onSuccessMessage: t('CatalogUnsetAsDefaultSuccess'),\n }),\n [InternalMenuActions.edit]: (catalog: CatalogItem) => new CatalogEditActionCommand({ catalog }),\n [InternalMenuActions.copy]: (catalog: CatalogItem) => new CatalogCopyActionCommand({ catalog }),\n [InternalMenuActions.import]: (catalog: CatalogItem) =>\n new CatalogImportActionCommand({ catalog }),\n [InternalMenuActions.export]: (catalog: CatalogItem) =>\n new CatalogExportActionCommand({ catalog }),\n [InternalMenuActions.delete]: (catalog: CatalogItem) =>\n new CatalogDeleteActionCommand({ catalog }),\n };\n const productItemActions = {\n [InternalMenuActions.productEdit]: (product: CatalogProductItem, catalog: CatalogItem) =>\n new CatalogProductEditActionCommand({ product, catalog }),\n [InternalMenuActions.productCopy]: (product: CatalogProductItem, catalog: CatalogItem) =>\n new CatalogProductCopyActionCommand({ product, catalog }),\n [InternalMenuActions.productDelete]: (product: CatalogProductItem, catalog: CatalogItem) =>\n new CatalogProductDeleteActionCommand({ product, catalog }),\n };\n const aliasListActions = {\n [InternalMenuActions.aliasImport]: () => new AliasImportActionCommand(),\n [InternalMenuActions.aliasExport]: () => new AliasExportActionCommand(),\n };\n const aliasItemActions = {\n [InternalMenuActions.aliasEdit]: (alias: CatalogProductItem) =>\n new AliasEditActionCommand({ alias }),\n [InternalMenuActions.aliasDelete]: (alias: CatalogProductItem) =>\n new AliasDeleteActionCommand({ aliases: alias.aliases || [] }),\n };\n\n const onCatalogItemMenuAction = async (\n menuItem: MenuItem<CatalogItem>,\n catalog: CatalogItem,\n ): Promise<unknown> => {\n const command =\n menuItem.code && catalogItemActions[menuItem.code]\n ? catalogItemActions[menuItem.code](catalog)\n : new CatalogItemActionCommand({ menuItem, catalog });\n try {\n return await dispatch(command);\n } catch {\n // Ignore error\n }\n };\n\n const onCatalogListMenuAction = async (menuItem: MenuItem<void>): Promise<unknown> => {\n const command =\n menuItem.code && catalogListActions[menuItem.code]\n ? catalogListActions[menuItem.code]()\n : new CatalogListActionCommand({ menuItem });\n try {\n return await dispatch(command);\n } catch {\n // Ignore error\n }\n };\n\n const onProductListMenuAction = async (menuItem: MenuItem<void>) => {\n try {\n return await dispatch(new ProductListActionCommand({ menuItem }));\n } catch {\n // Ignore error\n }\n };\n\n const onProductItemMenuAction = async (\n menuItem: MenuItem<CatalogProductItem>,\n product: CatalogProductItem,\n catalogId: string,\n ): Promise<unknown> => {\n const catalog: CatalogItem | undefined = (await dispatch(\n new GetCatalogByIdCommand({ catalogId }),\n )) as CatalogItem | undefined;\n if (!catalog) {\n throw new Error(`Catalog \"${catalogId}\" not found!`);\n }\n const command =\n menuItem.code && productItemActions[menuItem.code]\n ? productItemActions[menuItem.code](product, catalog)\n : new ProductItemActionCommand({ menuItem, product, catalog });\n try {\n return await dispatch(command);\n } catch {\n // Ignore error\n }\n };\n\n const onAliasListMenuAction = async (menuItem: MenuItem<void>) => {\n try {\n const command =\n menuItem.code && aliasListActions[menuItem.code]\n ? aliasListActions[menuItem.code]()\n : new AliasListActionCommand({ menuItem });\n return await dispatch(command);\n } catch {\n // Ignore error\n }\n };\n\n const onAliasItemMenuAction = async (\n menuItem: MenuItem<CatalogProductItem>,\n alias: CatalogProductItem,\n ): Promise<unknown> => {\n const command =\n menuItem.code && aliasItemActions[menuItem.code]\n ? aliasItemActions[menuItem.code](alias)\n : new AliasItemActionCommand({ menuItem, alias });\n try {\n return await dispatch(command);\n } catch {\n // Ignore error\n }\n };\n\n return {\n onCatalogItemMenuAction,\n onCatalogListMenuAction,\n onProductListMenuAction,\n onProductItemMenuAction,\n onAliasListMenuAction,\n onAliasItemMenuAction,\n };\n}\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"productsItems && productsItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-if=\"componentOptions.selectable\" style=\"width: 1%\" />\n <col v-if=\"previewEnabled\" style=\"width: 1%\" />\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col v-if=\"actionsEnabled\" style=\"width: 1%\" />\n </colgroup>\n\n <thead>\n <tr>\n <th v-if=\"componentOptions.selectable\"></th>\n <th v-if=\"previewEnabled\"></th>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"actionsEnabled\"></th>\n </tr>\n </thead>\n\n <tbody>\n <template v-for=\"(item, itemIndex) in productsItems\" :key=\"itemIndex\">\n <tr\n :class=\"{\n 'bg-light': item.exactMatch,\n 'no-border-bottom': item['expanded'],\n 'ext-selected': instance?.selection.isSelected(item),\n }\"\n >\n <td v-if=\"componentOptions.selectable\">\n <div class=\"ext-select-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </td>\n <td v-if=\"previewEnabled\">\n <Clickable\n class=\"d-flex ext-icon-preview\"\n :title=\"\n t(\n item.productType !== CatalogProductTypeEnum.LISTED || item.inactive\n ? 'PreviewNotAvailable'\n : 'Preview',\n true,\n )\n \"\n :disabled=\"item.productType !== CatalogProductTypeEnum.LISTED || item.inactive\"\n @click.prevent=\"\n item.productType === CatalogProductTypeEnum.LISTED &&\n !item.inactive &&\n previewByProductId(item.alternateProductId || item.productId)\n \"\n >\n <Icon name=\"eye-show\" :size=\"24\" />\n </Clickable>\n </td>\n <td\n v-for=\"(col, index) in columns\"\n :key=\"index\"\n style=\"\n max-width: 100px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item, col })\"\n />\n <div v-else-if=\"col.dataField == 'ProductId'\">\n <Clickable v-if=\"!item.inactive\" @click=\"details(item)\">\n {{ attrValue(item, col.dataField) }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ attrValue(item, col.dataField) }}\n </span>\n <div\n v-if=\"item.productType == catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n <div v-else>{{ attrValue(item, col.dataField) }}</div>\n </td>\n <td v-if=\"actionsEnabled\">\n <ul class=\"d-flex align-items-right list-unstyled mb-0\">\n <li v-for=\"(menuItem, index) in aliasItemMenuItems(item)\" :key=\"index\">\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n <button\n type=\"button\"\n class=\"btn btn-link text-dark\"\n :disabled=\"isDisabled(menuItem, item)\"\n @click.prevent=\"\n !isDisabled(menuItem, item) && onAliasItemMenuAction(menuItem, item)\n \"\n >\n <span v-if=\"menuItem.text\">{{ menuItem.text }}</span>\n <Icon v-if=\"menuItem.icon\" :name=\"menuItem.icon\" />\n </button>\n </template>\n </li>\n </ul>\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, onMounted, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { AliasesTableOptions } from '@/catalogs/api/configuration/components/AliasesTableOptions';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogGetOptionsCommand,\n DetailsCommand,\n PreviewCommand,\n AddNotificationCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport {\n CatalogOptionsResult,\n CatalogProductItem,\n CatalogProductTypeEnum,\n ProductItem,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-table',\n\n components: {\n Icon,\n Clickable,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const aliasesEditableOption = ref(false);\n const catalogProductType = CatalogProductTypeEnum;\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onAliasItemMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const componentOptions = computed(\n () => store.value?.options.components?.aliases?.search?.table ?? ({} as AliasesTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n const details = (product: CatalogProductItem) => {\n if (product.inactive) {\n return;\n }\n try {\n return instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n } catch {\n // Ignore error\n }\n };\n\n const aliasItemMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.aliasItemMenu,\n );\n\n const aliasItemMenuItems = (alias: CatalogProductItem): MenuItem<CatalogProductItem>[] =>\n (aliasItemMenu.value?.items || []).filter((item: MenuItem<CatalogProductItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(alias);\n }\n return item.visible;\n });\n\n const actionsEnabled = computed(() => {\n if (\n aliasesEditableOption.value &&\n instance.value?.registeredComponents.has('pis-catalogs-aliases-search-actions-modals') &&\n aliasItemMenu.value?.visible\n ) {\n return true;\n }\n return false;\n });\n\n const isDisabled = (menuItem: MenuItem<CatalogProductItem>, alias: CatalogProductItem) =>\n typeof menuItem.disabled === 'function' ? menuItem.disabled(alias) : menuItem.disabled;\n\n // v7: per-row reactive ctx caches.\n const cellCtx = reactiveContextCache((key: { item: CatalogProductItem; col: unknown }) => ({\n col: key.col,\n item: key.item,\n instance: instance.value,\n catalogProductType,\n CatalogProductTypeEnum,\n emit,\n details,\n attrValue,\n attrValues,\n t,\n }));\n\n const menuItemCtx = reactiveContextCache((key: { item: MenuItem<CatalogProductItem> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n const onInit = async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined =\n (await instance.value?.execute(\n new CatalogGetOptionsCommand().from(componentName),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(t('CatalogOptionsLoadingError'));\n }\n aliasesEditableOption.value = catalogOptionsResult.aliasesEditable || false;\n } catch (error) {\n await instance.value?.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n componentName,\n ),\n );\n }\n };\n\n onMounted(() => {\n if (!instance.value?.isInitialized()) {\n const unwatch = watch(\n () => instance.value?.isInitialized(),\n (isInitialized: boolean | undefined) => {\n if (!isInitialized) {\n return;\n }\n unwatch();\n return onInit();\n },\n );\n return;\n }\n return onInit();\n });\n\n return {\n root,\n componentName,\n componentOptions,\n instance,\n isReady,\n isWebComponent,\n store,\n routeData,\n productsItems,\n previewEnabled,\n columns,\n showingAllCatalogs,\n catalogProductType,\n actionsEnabled,\n CatalogProductTypeEnum,\n aliasItemMenuItems,\n details,\n isDisabled,\n t,\n emit,\n previewByProductId,\n attrValue,\n additionalInfo,\n attrValues,\n onAliasItemMenuAction,\n reactiveContext,\n cellCtx,\n menuItemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"productsItems && productsItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-if=\"componentOptions.selectable\" style=\"width: 1%\" />\n <col v-if=\"previewEnabled\" style=\"width: 1%\" />\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col v-if=\"actionsEnabled\" style=\"width: 1%\" />\n </colgroup>\n\n <thead>\n <tr>\n <th v-if=\"componentOptions.selectable\"></th>\n <th v-if=\"previewEnabled\"></th>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"actionsEnabled\"></th>\n </tr>\n </thead>\n\n <tbody>\n <template v-for=\"(item, itemIndex) in productsItems\" :key=\"itemIndex\">\n <tr\n :class=\"{\n 'bg-light': item.exactMatch,\n 'no-border-bottom': item['expanded'],\n 'ext-selected': instance?.selection.isSelected(item),\n }\"\n >\n <td v-if=\"componentOptions.selectable\">\n <div class=\"ext-select-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </td>\n <td v-if=\"previewEnabled\">\n <Clickable\n class=\"d-flex ext-icon-preview\"\n :title=\"\n t(\n item.productType !== CatalogProductTypeEnum.LISTED || item.inactive\n ? 'PreviewNotAvailable'\n : 'Preview',\n true,\n )\n \"\n :disabled=\"item.productType !== CatalogProductTypeEnum.LISTED || item.inactive\"\n @click.prevent=\"\n item.productType === CatalogProductTypeEnum.LISTED &&\n !item.inactive &&\n previewByProductId(item.alternateProductId || item.productId)\n \"\n >\n <Icon name=\"eye-show\" :size=\"24\" />\n </Clickable>\n </td>\n <td\n v-for=\"(col, index) in columns\"\n :key=\"index\"\n style=\"\n max-width: 100px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item, col })\"\n />\n <div v-else-if=\"col.dataField == 'ProductId'\">\n <Clickable v-if=\"!item.inactive\" @click=\"details(item)\">\n {{ attrValue(item, col.dataField) }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ attrValue(item, col.dataField) }}\n </span>\n <div\n v-if=\"item.productType == catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n <div v-else>{{ attrValue(item, col.dataField) }}</div>\n </td>\n <td v-if=\"actionsEnabled\">\n <ul class=\"d-flex align-items-right list-unstyled mb-0\">\n <li v-for=\"(menuItem, index) in aliasItemMenuItems(item)\" :key=\"index\">\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n <button\n type=\"button\"\n class=\"btn btn-link text-dark\"\n :disabled=\"isDisabled(menuItem, item)\"\n @click.prevent=\"\n !isDisabled(menuItem, item) && onAliasItemMenuAction(menuItem, item)\n \"\n >\n <span v-if=\"menuItem.text\">{{ menuItem.text }}</span>\n <Icon v-if=\"menuItem.icon\" :name=\"menuItem.icon\" />\n </button>\n </template>\n </li>\n </ul>\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, onMounted, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { AliasesTableOptions } from '@/catalogs/api/configuration/components/AliasesTableOptions';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogGetOptionsCommand,\n DetailsCommand,\n PreviewCommand,\n AddNotificationCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport {\n CatalogOptionsResult,\n CatalogProductItem,\n CatalogProductTypeEnum,\n ProductItem,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-table',\n\n components: {\n Icon,\n Clickable,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const aliasesEditableOption = ref(false);\n const catalogProductType = CatalogProductTypeEnum;\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onAliasItemMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const componentOptions = computed(\n () => store.value?.options.components?.aliases?.search?.table ?? ({} as AliasesTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n const details = (product: CatalogProductItem) => {\n if (product.inactive) {\n return;\n }\n try {\n return instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n } catch {\n // Ignore error\n }\n };\n\n const aliasItemMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.aliasItemMenu,\n );\n\n const aliasItemMenuItems = (alias: CatalogProductItem): MenuItem<CatalogProductItem>[] =>\n (aliasItemMenu.value?.items || []).filter((item: MenuItem<CatalogProductItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(alias);\n }\n return item.visible;\n });\n\n const actionsEnabled = computed(() => {\n if (\n aliasesEditableOption.value &&\n instance.value?.registeredComponents.has('pis-catalogs-aliases-search-actions-modals') &&\n aliasItemMenu.value?.visible\n ) {\n return true;\n }\n return false;\n });\n\n const isDisabled = (menuItem: MenuItem<CatalogProductItem>, alias: CatalogProductItem) =>\n typeof menuItem.disabled === 'function' ? menuItem.disabled(alias) : menuItem.disabled;\n\n // v7: per-row reactive ctx caches.\n const cellCtx = reactiveContextCache((key: { item: CatalogProductItem; col: unknown }) => ({\n col: key.col,\n item: key.item,\n instance: instance.value,\n catalogProductType,\n CatalogProductTypeEnum,\n emit,\n details,\n attrValue,\n attrValues,\n t,\n }));\n\n const menuItemCtx = reactiveContextCache((key: { item: MenuItem<CatalogProductItem> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n const onInit = async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined =\n (await instance.value?.execute(\n new CatalogGetOptionsCommand().from(componentName),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(t('CatalogOptionsLoadingError'));\n }\n aliasesEditableOption.value = catalogOptionsResult.aliasesEditable || false;\n } catch (error) {\n await instance.value?.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n componentName,\n ),\n );\n }\n };\n\n onMounted(() => {\n if (!instance.value?.isInitialized()) {\n const unwatch = watch(\n () => instance.value?.isInitialized(),\n (isInitialized: boolean | undefined) => {\n if (!isInitialized) {\n return;\n }\n unwatch();\n return onInit();\n },\n );\n return;\n }\n return onInit();\n });\n\n return {\n root,\n componentName,\n componentOptions,\n instance,\n isReady,\n isWebComponent,\n store,\n routeData,\n productsItems,\n previewEnabled,\n columns,\n showingAllCatalogs,\n catalogProductType,\n actionsEnabled,\n CatalogProductTypeEnum,\n aliasItemMenuItems,\n details,\n isDisabled,\n t,\n emit,\n previewByProductId,\n attrValue,\n additionalInfo,\n attrValues,\n onAliasItemMenuAction,\n reactiveContext,\n cellCtx,\n menuItemCtx,\n };\n },\n});\n</script>\n","import { isRef, watch, onMounted, onBeforeUnmount, unref, ref, reactive, nextTick, toRefs, openBlock, createElementBlock, useCssVars, useSlots, computed, watchEffect, normalizeStyle, createElementVNode, withKeys, renderSlot, createVNode, Transition, withCtx, withDirectives, createTextVNode, toDisplayString, createBlock, createCommentVNode, vShow } from 'vue';\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce$1(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n }\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n}\n// Adds compatibility for ES modules\ndebounce$1.debounce = debounce$1;\n\nvar debounce_1 = debounce$1;\n\nfunction useEventListener(target, event, handler) {\n if (isRef(target)) {\n watch(target, (value, oldValue) => {\n oldValue === null || oldValue === void 0 ? void 0 : oldValue.removeEventListener(event, handler);\n value === null || value === void 0 ? void 0 : value.addEventListener(event, handler);\n });\n } else {\n onMounted(() => {\n target.addEventListener(event, handler);\n });\n }\n\n onBeforeUnmount(() => {\n var _unref;\n\n (_unref = unref(target)) === null || _unref === void 0 ? void 0 : _unref.removeEventListener(event, handler);\n });\n}\n\nfunction useClickAway(target, handler) {\n const event = \"pointerdown\";\n\n if (typeof window === 'undefined' || !window) {\n return;\n }\n\n const listener = event => {\n const el = unref(target);\n\n if (!el) {\n return;\n }\n\n if (el === event.target || event.composedPath().includes(el)) {\n return;\n }\n\n handler(event);\n };\n\n return useEventListener(window, event, listener);\n}\n\nfunction useContent(slots, popperNode, content) {\n let observer = null;\n const hasContent = ref(false);\n onMounted(() => {\n if (slots.content !== undefined || content.value) {\n hasContent.value = true;\n }\n\n observer = new MutationObserver(checkContent);\n observer.observe(popperNode.value, {\n childList: true,\n subtree: true\n });\n });\n onBeforeUnmount(() => observer.disconnect());\n /**\n * Watch the content prop\n */\n\n watch(content, content => {\n if (content) {\n hasContent.value = true;\n } else {\n hasContent.value = false;\n }\n });\n /**\n * Check the content slot\n */\n\n const checkContent = () => {\n if (slots.content) {\n hasContent.value = true;\n } else {\n hasContent.value = false;\n }\n };\n\n return {\n hasContent\n };\n}\n\n// import { isHTMLElement } from './instanceOf';\nfunction getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars\nincludeScale) {\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1; // FIXME:\n // `offsetWidth` returns an integer while `getBoundingClientRect`\n // returns a float. This results in `scaleX` or `scaleY` being\n // non-1 when it should be for elements that aren't a full pixel in\n // width or height.\n // if (isHTMLElement(element) && includeScale) {\n // const offsetHeight = element.offsetHeight;\n // const offsetWidth = element.offsetWidth;\n // // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // // Fallback to 1 in case both values are `0`\n // if (offsetWidth > 0) {\n // scaleX = rect.width / offsetWidth || 1;\n // }\n // if (offsetHeight > 0) {\n // scaleY = rect.height / offsetHeight || 1;\n // }\n // }\n\n return {\n width: rect.width / scaleX,\n height: rect.height / scaleY,\n top: rect.top / scaleY,\n right: rect.right / scaleX,\n bottom: rect.bottom / scaleY,\n left: rect.left / scaleX,\n x: rect.left / scaleX,\n y: rect.top / scaleY\n };\n}\n\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nfunction getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n\nfunction getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}\n\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}\n\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = rect.width / element.offsetWidth || 1;\n var scaleY = rect.height / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}\n\nfunction getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}\n\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}\n\nfunction getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}\n\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;\n\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}\n\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n }\n }\n\n return offsets;\n}\n\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}\n\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\n\nvar passive = {\n passive: true\n};\n\nfunction effect$2(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar eventListeners = {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect$2,\n data: {}\n};\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar popperOffsets$1 = {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(round(x * dpr) / dpr) || 0,\n y: round(round(y * dpr) / dpr) || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom; // $FlowFixMe[prop-missing]\n\n y -= offsetParent[heightProp] - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right; // $FlowFixMe[prop-missing]\n\n x -= offsetParent[widthProp] - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n var state = _ref4.state,\n options = _ref4.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar computeStyles$1 = {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};\n\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect$1(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar applyStyles$1 = {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect$1,\n requires: ['computeStyles']\n};\n\nvar defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis || checkAltAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n if (checkMainAxis) {\n var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar preventOverflow$1 = {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};\n\nvar hash$1 = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash$1[matched];\n });\n}\n\nvar hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements$1.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements$1;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar flip$1 = {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar offset$1 = {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar arrow$1 = {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};\n\nconst toInt = x => parseInt(x, 10);\n\nfunction usePopper({\n arrowPadding,\n emit,\n locked,\n offsetDistance,\n offsetSkid,\n placement,\n popperNode,\n triggerNode\n}) {\n const state = reactive({\n isOpen: false,\n popperInstance: null\n }); // Enable or disable event listeners to optimize performance.\n\n const setPopperEventListeners = enabled => {\n var _state$popperInstance;\n\n (_state$popperInstance = state.popperInstance) === null || _state$popperInstance === void 0 ? void 0 : _state$popperInstance.setOptions(options => ({ ...options,\n modifiers: [...options.modifiers, {\n name: \"eventListeners\",\n enabled\n }]\n }));\n };\n\n const enablePopperEventListeners = () => setPopperEventListeners(true);\n\n const disablePopperEventListeners = () => setPopperEventListeners(false);\n\n const close = () => {\n if (!state.isOpen) {\n return;\n }\n\n state.isOpen = false;\n emit(\"close:popper\");\n };\n\n const open = () => {\n if (state.isOpen) {\n return;\n }\n\n state.isOpen = true;\n emit(\"open:popper\");\n }; // When isOpen or placement change\n\n\n watch([() => state.isOpen, placement], async ([isOpen]) => {\n if (isOpen) {\n await initializePopper();\n enablePopperEventListeners();\n } else {\n disablePopperEventListeners();\n }\n });\n\n const initializePopper = async () => {\n await nextTick();\n state.popperInstance = createPopper(triggerNode.value, popperNode.value, {\n placement: placement.value,\n modifiers: [preventOverflow$1, flip$1, {\n name: \"flip\",\n enabled: !locked.value\n }, arrow$1, {\n name: \"arrow\",\n options: {\n padding: toInt(arrowPadding.value)\n }\n }, offset$1, {\n name: \"offset\",\n options: {\n offset: [toInt(offsetSkid.value), toInt(offsetDistance.value)]\n }\n }]\n }); // Update its position\n\n state.popperInstance.update();\n };\n\n onBeforeUnmount(() => {\n var _state$popperInstance2;\n\n (_state$popperInstance2 = state.popperInstance) === null || _state$popperInstance2 === void 0 ? void 0 : _state$popperInstance2.destroy();\n });\n return { ...toRefs(state),\n open,\n close\n };\n}\n\nconst _hoisted_1$1 = {\n id: \"arrow\",\n \"data-popper-arrow\": \"\"\n};\nfunction render(_ctx, _cache) {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1);\n}\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z$1 = \"\\n#arrow[data-v-20b7fd4a],\\n #arrow[data-v-20b7fd4a]::before {\\n transition: background 250ms ease-in-out;\\n position: absolute;\\n width: calc(10px - var(--popper-theme-border-width, 0px));\\n height: calc(10px - var(--popper-theme-border-width, 0px));\\n box-sizing: border-box;\\n background: var(--popper-theme-background-color);\\n}\\n#arrow[data-v-20b7fd4a] {\\n visibility: hidden;\\n}\\n#arrow[data-v-20b7fd4a]::before {\\n visibility: visible;\\n content: \\\"\\\";\\n transform: rotate(45deg);\\n}\\n\\n /* Top arrow */\\n.popper[data-popper-placement^=\\\"top\\\"] > #arrow[data-v-20b7fd4a] {\\n bottom: -5px;\\n}\\n.popper[data-popper-placement^=\\\"top\\\"] > #arrow[data-v-20b7fd4a]::before {\\n border-right: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n border-bottom: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n}\\n\\n /* Bottom arrow */\\n.popper[data-popper-placement^=\\\"bottom\\\"] > #arrow[data-v-20b7fd4a] {\\n top: -5px;\\n}\\n.popper[data-popper-placement^=\\\"bottom\\\"] > #arrow[data-v-20b7fd4a]::before {\\n border-left: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n border-top: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n}\\n\\n /* Left arrow */\\n.popper[data-popper-placement^=\\\"left\\\"] > #arrow[data-v-20b7fd4a] {\\n right: -5px;\\n}\\n.popper[data-popper-placement^=\\\"left\\\"] > #arrow[data-v-20b7fd4a]::before {\\n border-right: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n border-top: var(--popper-theme-border-width)\\n var(--popper-theme-border-style) var(--popper-theme-border-color);\\n}\\n\\n /* Right arrow */\\n.popper[data-popper-placement^=\\\"right\\\"] > #arrow[data-v-20b7fd4a] {\\n left: -5px;\\n}\\n\";\nstyleInject(css_248z$1);\n\nconst script$1 = {};\nscript$1.render = render;\nscript$1.__scopeId = \"data-v-20b7fd4a\";\nvar Arrow = script$1;\n\nconst _hoisted_1 = [\"onKeyup\"];\nvar script = {\n props: {\n /**\n * Preferred placement (the \"auto\" placements will choose the side with most space.)\n */\n placement: {\n type: String,\n default: \"bottom\",\n validator: function (value) {\n return [\"auto\", \"auto-start\", \"auto-end\", \"top\", \"top-start\", \"top-end\", \"bottom\", \"bottom-start\", \"bottom-end\", \"right\", \"right-start\", \"right-end\", \"left\", \"left-start\", \"left-end\"].includes(value);\n }\n },\n\n /**\n * Disables automatically closing the popover when the user clicks away from it\n */\n disableClickAway: {\n type: Boolean,\n default: false\n },\n\n /**\n * Offset in pixels along the trigger element\n */\n offsetSkid: {\n type: String,\n default: \"0\"\n },\n\n /**\n * Offset in pixels away from the trigger element\n */\n offsetDistance: {\n type: String,\n default: \"12\"\n },\n\n /**\n * Trigger the popper on hover\n */\n hover: {\n type: Boolean,\n default: false\n },\n\n /**\n * Manually open/close the Popper, other events are ignored if this prop is set\n */\n show: {\n type: Boolean,\n default: null\n },\n\n /**\n * Disables the Popper. If it was already open, it will be closed.\n */\n disabled: {\n type: Boolean,\n default: false\n },\n\n /**\n * Open the Popper after a delay (ms).\n */\n openDelay: {\n type: [Number, String],\n default: 0\n },\n\n /**\n * Close the Popper after a delay (ms).\n */\n closeDelay: {\n type: [Number, String],\n default: 0\n },\n\n /**\n * The z-index of the Popper.\n */\n zIndex: {\n type: [Number, String],\n default: 9999\n },\n\n /**\n * Display an arrow on the popper\n */\n arrow: {\n type: Boolean,\n default: false\n },\n\n /**\n * Stop arrow from reaching the edge of the popper\n */\n arrowPadding: {\n type: String,\n default: \"0\"\n },\n\n /**\n * If the Popper should be interactive, it will close when clicked/hovered if false\n */\n interactive: {\n type: Boolean,\n default: true\n },\n\n /**\n * Lock the Popper into place, it will not flip dynamically when it runs out of space if true\n */\n locked: {\n type: Boolean,\n default: false\n },\n\n /**\n * If the content is just a simple string, it can be passed in as a prop\n */\n content: {\n type: String,\n default: null\n }\n },\n emits: [\"open:popper\", \"close:popper\"],\n\n setup(__props, {\n emit\n }) {\n const props = __props;\n\n useCssVars(_ctx => ({\n \"c81fc0a4\": __props.zIndex\n }));\n\n const slots = useSlots();\n const popperContainerNode = ref(null);\n const popperNode = ref(null);\n const triggerNode = ref(null);\n const modifiedIsOpen = ref(false);\n onMounted(() => {\n const children = slots.default();\n\n if (children && children.length > 1) {\n return console.error(`[Popper]: The <Popper> component expects only one child element at its root. You passed ${children.length} child nodes.`);\n }\n });\n const {\n arrowPadding,\n closeDelay,\n content,\n disableClickAway,\n disabled,\n interactive,\n locked,\n offsetDistance,\n offsetSkid,\n openDelay,\n placement,\n show\n } = toRefs(props);\n const {\n isOpen,\n open,\n close\n } = usePopper({\n arrowPadding,\n emit,\n locked,\n offsetDistance,\n offsetSkid,\n placement,\n popperNode,\n triggerNode\n });\n const {\n hasContent\n } = useContent(slots, popperNode, content);\n const manualMode = computed(() => show.value !== null);\n const invalid = computed(() => disabled.value || !hasContent.value);\n const shouldShowPopper = computed(() => isOpen.value && !invalid.value);\n const enableClickAway = computed(() => !disableClickAway.value && !manualMode.value); // Add an invisible border to keep the Popper open when hovering from the trigger into it\n\n const interactiveStyle = computed(() => interactive.value ? `border: ${offsetDistance.value}px solid transparent; margin: -${offsetDistance.value}px;` : null);\n const openPopperDebounce = debounce_1.debounce(open, openDelay.value);\n const closePopperDebounce = debounce_1.debounce(close, closeDelay.value);\n\n const openPopper = async () => {\n if (invalid.value || manualMode.value) {\n return;\n }\n\n closePopperDebounce.clear();\n openPopperDebounce();\n };\n\n const closePopper = async () => {\n if (manualMode.value) {\n return;\n }\n\n openPopperDebounce.clear();\n closePopperDebounce();\n };\n\n const togglePopper = () => {\n isOpen.value ? closePopper() : openPopper();\n };\n /**\n * If Popper is open, we automatically close it if it becomes\n * disabled or without content.\n */\n\n\n watch([hasContent, disabled], ([hasContent, disabled]) => {\n if (isOpen.value && (!hasContent || disabled)) {\n close();\n }\n });\n /**\n * In order to eliminate flickering or visibly empty Poppers due to\n * the transition when using the isOpen slot property, we need to return a\n * separate debounced value based on isOpen.\n */\n\n watch(isOpen, isOpen => {\n if (isOpen) {\n modifiedIsOpen.value = true;\n } else {\n debounce_1.debounce(() => {\n modifiedIsOpen.value = false;\n }, 200);\n }\n });\n /**\n * Watch for manual mode.\n */\n\n watchEffect(() => {\n if (manualMode.value) {\n show.value ? openPopperDebounce() : closePopperDebounce();\n }\n });\n /**\n * Use click away if it should be enabled.\n */\n\n watchEffect(() => {\n if (enableClickAway.value) {\n useClickAway(popperContainerNode, closePopper);\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: \"inline-block\",\n style: normalizeStyle(unref(interactiveStyle)),\n onMouseleave: _cache[2] || (_cache[2] = $event => __props.hover && closePopper()),\n ref: (_value, _refs) => {\n _refs['popperContainerNode'] = _value;\n popperContainerNode.value = _value;\n }\n }, [createElementVNode(\"div\", {\n ref: (_value, _refs) => {\n _refs['triggerNode'] = _value;\n triggerNode.value = _value;\n },\n onMouseover: _cache[0] || (_cache[0] = $event => __props.hover && openPopper()),\n onClick: togglePopper,\n onFocus: openPopper,\n onKeyup: withKeys(closePopper, [\"esc\"])\n }, [renderSlot(_ctx.$slots, \"default\")], 40, _hoisted_1), createVNode(Transition, {\n name: \"fade\"\n }, {\n default: withCtx(() => [withDirectives(createElementVNode(\"div\", {\n onClick: _cache[1] || (_cache[1] = $event => !unref(interactive) && closePopper()),\n class: \"popper\",\n ref: (_value, _refs) => {\n _refs['popperNode'] = _value;\n popperNode.value = _value;\n }\n }, [renderSlot(_ctx.$slots, \"content\", {\n close: unref(close),\n isOpen: modifiedIsOpen.value\n }, () => [createTextVNode(toDisplayString(unref(content)), 1)]), __props.arrow ? (openBlock(), createBlock(Arrow, {\n key: 0\n })) : createCommentVNode(\"\", true)], 512), [[vShow, unref(shouldShowPopper)]])]),\n _: 3\n })], 36);\n };\n }\n\n};\n\nvar css_248z = \"\\n.inline-block[data-v-5784ed69] {\\n display: inline-block;\\n}\\n.popper[data-v-5784ed69] {\\n transition: background 250ms ease-in-out;\\n background: var(--popper-theme-background-color);\\n padding: var(--popper-theme-padding);\\n color: var(--popper-theme-text-color);\\n border-radius: var(--popper-theme-border-radius);\\n border-width: var(--popper-theme-border-width);\\n border-style: var(--popper-theme-border-style);\\n border-color: var(--popper-theme-border-color);\\n box-shadow: var(--popper-theme-box-shadow);\\n z-index: var(--c81fc0a4);\\n}\\n.popper[data-v-5784ed69]:hover,\\n .popper:hover > #arrow[data-v-5784ed69]::before {\\n background: var(--popper-theme-background-color-hover);\\n}\\n.inline-block[data-v-5784ed69] {\\n display: inline-block;\\n}\\n.fade-enter-active[data-v-5784ed69],\\n .fade-leave-active[data-v-5784ed69] {\\n transition: opacity 0.2s ease;\\n}\\n.fade-enter-from[data-v-5784ed69],\\n .fade-leave-to[data-v-5784ed69] {\\n opacity: 0;\\n}\\n\";\nstyleInject(css_248z);\n\nscript.__scopeId = \"data-v-5784ed69\";\n\n// IIFE injects install function into component, allowing component\n// to be registered via Vue.use() as well as Vue.component(),\n\nvar entry_esm = /*#__PURE__*/(() => {\n // Get component instance\n const installable = script; // Attach install function executed by Vue.use()\n\n installable.install = app => {\n app.component(\"Popper\", installable);\n };\n\n return installable;\n})(); // It's possible to expose named exports when writing components that can\n// also be used as directives, etc. - eg. import { RollupDemoDirective } from 'rollup-demo';\n// export const RollupDemoDirective = directive;\n\nexport { entry_esm as default };\n","<template>\n <Popper ref=\"popper\" v-bind=\"$attrs\" @open:popper=\"open\">\n <slot name=\"trigger\"></slot>\n <template #content=\"{ close }\">\n <slot name=\"dropdown\" :close=\"close\"> </slot>\n </template>\n </Popper>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick, ref } from 'vue';\nimport Popper from 'vue3-popper';\n\nexport default defineComponent({\n name: 'DropdownPopper',\n components: { Popper },\n props: {\n top: { type: Boolean, default: false },\n },\n setup(props) {\n const popper = ref();\n\n const open = () => {\n const p = popper.value;\n\n nextTick(() => {\n const dropdown = p.$el.querySelector('.dropdown-menu') as HTMLElement;\n const trigger = p.$el.querySelector('.btn') as HTMLElement;\n if (dropdown && trigger) {\n const translateX = -(dropdown.clientWidth - trigger.clientWidth);\n let translateY = 0;\n\n if (props.top) {\n translateY = -(dropdown.clientHeight + trigger.clientHeight + 24);\n }\n\n dropdown.style.transform = `translate(${translateX}px, ${translateY}px)`;\n\n // add shadow\n dropdown.classList.add('shadow-sm');\n }\n });\n };\n\n return { open, popper };\n },\n});\n</script>\n","<template>\n <Popper ref=\"popper\" v-bind=\"$attrs\" @open:popper=\"open\">\n <slot name=\"trigger\"></slot>\n <template #content=\"{ close }\">\n <slot name=\"dropdown\" :close=\"close\"> </slot>\n </template>\n </Popper>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick, ref } from 'vue';\nimport Popper from 'vue3-popper';\n\nexport default defineComponent({\n name: 'DropdownPopper',\n components: { Popper },\n props: {\n top: { type: Boolean, default: false },\n },\n setup(props) {\n const popper = ref();\n\n const open = () => {\n const p = popper.value;\n\n nextTick(() => {\n const dropdown = p.$el.querySelector('.dropdown-menu') as HTMLElement;\n const trigger = p.$el.querySelector('.btn') as HTMLElement;\n if (dropdown && trigger) {\n const translateX = -(dropdown.clientWidth - trigger.clientWidth);\n let translateY = 0;\n\n if (props.top) {\n translateY = -(dropdown.clientHeight + trigger.clientHeight + 24);\n }\n\n dropdown.style.transform = `translate(${translateX}px, ${translateY}px)`;\n\n // add shadow\n dropdown.classList.add('shadow-sm');\n }\n });\n };\n\n return { open, popper };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && toolbarVisible\">\n <div class=\"d-flex flex-row justify-content-between align-items-center flex-wrap w-100\">\n <div v-if=\"totalCount && pagination\" class=\"my-2 mx-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n :class=\"[narrowerThan('sm') && 'w-100 text-center']\"\n />\n </div>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('SortBy') }}:</span\n >\n <select\n v-model=\"sortBy\"\n class=\"form-select ms-2\"\n :class=\"[narrowerThan('xl') && 'w-100']\"\n >\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('PageSize') }}:</span\n >\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n <div class=\"my-3 d-flex flex-row justify-content-end align-items-center flex-wrap\">\n <div\n v-if=\"actionsEnabled && aliasListMenu?.items\"\n class=\"d-flex my-1\"\n :class=\"[narrowerThan('sm') && 'w-100 justify-content-end']\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"aliasListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"aliasListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in aliasListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onAliasListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n ProductsPageSizeCommand,\n ProductsSortByCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogProductSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-toolbar',\n\n components: {\n PaginationAmount,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props, { emit }) {\n const root = ref<HTMLElement>();\n const exportMenuOpen = ref(false);\n const sortByItems = CatalogProductSortFieldEnum;\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId);\n\n const { onAliasListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const totalCount = computed(() => store.value?.data.products?.totalCount);\n const pagination = computed(() => routeData.value?.products.pagination);\n const sortBy = computed({\n get: () => routeData.value?.products.sortField,\n set: (sortField: any) =>\n instance.value?.execute(new ProductsSortByCommand({ sortField }).from(componentName)),\n });\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new ProductsPageSizeCommand({ pageSize }).from(componentName)),\n });\n const pageSizeItems = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.pageSizes,\n );\n const toolbarVisible = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.visible,\n );\n const aliasListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.aliasListMenu,\n );\n\n const aliasListMenuItems = (): MenuItem<void>[] =>\n (aliasListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-aliases-search-actions-modals') &&\n aliasListMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache.\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n toolbarVisible,\n totalCount,\n pagination,\n sortByItems,\n sortBy,\n pageSizeItems,\n pageSize,\n exportMenuOpen,\n aliasListMenu,\n actionsEnabled,\n instance,\n t,\n emit,\n widerThan,\n isDisabled,\n narrowerThan,\n aliasListMenuItems,\n onAliasListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && toolbarVisible\">\n <div class=\"d-flex flex-row justify-content-between align-items-center flex-wrap w-100\">\n <div v-if=\"totalCount && pagination\" class=\"my-2 mx-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n :class=\"[narrowerThan('sm') && 'w-100 text-center']\"\n />\n </div>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('SortBy') }}:</span\n >\n <select\n v-model=\"sortBy\"\n class=\"form-select ms-2\"\n :class=\"[narrowerThan('xl') && 'w-100']\"\n >\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('PageSize') }}:</span\n >\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n <div class=\"my-3 d-flex flex-row justify-content-end align-items-center flex-wrap\">\n <div\n v-if=\"actionsEnabled && aliasListMenu?.items\"\n class=\"d-flex my-1\"\n :class=\"[narrowerThan('sm') && 'w-100 justify-content-end']\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"aliasListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"aliasListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in aliasListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onAliasListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n ProductsPageSizeCommand,\n ProductsSortByCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogProductSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-toolbar',\n\n components: {\n PaginationAmount,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props, { emit }) {\n const root = ref<HTMLElement>();\n const exportMenuOpen = ref(false);\n const sortByItems = CatalogProductSortFieldEnum;\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId);\n\n const { onAliasListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const totalCount = computed(() => store.value?.data.products?.totalCount);\n const pagination = computed(() => routeData.value?.products.pagination);\n const sortBy = computed({\n get: () => routeData.value?.products.sortField,\n set: (sortField: any) =>\n instance.value?.execute(new ProductsSortByCommand({ sortField }).from(componentName)),\n });\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new ProductsPageSizeCommand({ pageSize }).from(componentName)),\n });\n const pageSizeItems = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.pageSizes,\n );\n const toolbarVisible = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.visible,\n );\n const aliasListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.aliasListMenu,\n );\n\n const aliasListMenuItems = (): MenuItem<void>[] =>\n (aliasListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-aliases-search-actions-modals') &&\n aliasListMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache.\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n toolbarVisible,\n totalCount,\n pagination,\n sortByItems,\n sortBy,\n pageSizeItems,\n pageSize,\n exportMenuOpen,\n aliasListMenu,\n actionsEnabled,\n instance,\n t,\n emit,\n widerThan,\n isDisabled,\n narrowerThan,\n aliasListMenuItems,\n onAliasListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <div class=\"list-group list-group-flush\">\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.ALL\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.ALL\"\n @input=\"onAliasTypeChange($event, AliasesEnum.ALL)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('AllAliases') }}\n </span>\n </div>\n </label>\n\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.BLANK\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.BLANK\"\n @input=\"onAliasTypeChange($event, AliasesEnum.BLANK)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('BlankAliases') }}\n </span>\n </div>\n </label>\n\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.POPULATED\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.POPULATED\"\n @input=\"onAliasTypeChange($event, AliasesEnum.POPULATED)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('PopulatedAliases') }}\n </span>\n </div>\n </label>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchAliasFiltersOptions } from '@/catalogs/api/configuration/components/SearchAliasFiltersOptions';\nimport { AliasesFilterCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { getPathFromEvent } from '@/common/helpers/dom';\nimport { AliasesEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-filters',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, routeData, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.ProductClassifications]);\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.aliases?.search?.filters ??\n ({} as SearchAliasFiltersOptions),\n );\n\n const visible = computed(() => componentOptions.value.visible);\n\n const currentAliasType = ref<AliasesEnum | undefined>(undefined);\n\n const isFiltering = ref<boolean>(false);\n\n const onAliasTypeChange = async (event: Event, type: AliasesEnum): Promise<void> => {\n if (getPathFromEvent<Event, HTMLInputElement>(event)[0].checked) {\n if (instance.value && type) {\n currentAliasType.value = type;\n isFiltering.value = true;\n try {\n await instance.value.execute(\n new AliasesFilterCommand({ aliasFilter: type }).from(componentName),\n );\n } catch {\n // Ignore error\n }\n isFiltering.value = false;\n }\n }\n //\n };\n\n watch(\n () => routeData.value?.products.aliases,\n (newAliasType: AliasesEnum | undefined) =>\n (currentAliasType.value = newAliasType || AliasesEnum.ALL),\n );\n\n return {\n root,\n store,\n isReady,\n visible,\n trimList,\n isFiltering,\n AliasesEnum,\n componentName,\n isWebComponent,\n componentOptions,\n currentAliasType,\n t,\n onAliasTypeChange,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <div class=\"list-group list-group-flush\">\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.ALL\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.ALL\"\n @input=\"onAliasTypeChange($event, AliasesEnum.ALL)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('AllAliases') }}\n </span>\n </div>\n </label>\n\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.BLANK\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.BLANK\"\n @input=\"onAliasTypeChange($event, AliasesEnum.BLANK)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('BlankAliases') }}\n </span>\n </div>\n </label>\n\n <label class=\"list-group-item list-group-item-action\">\n <div class=\"form-check mb-0 lh-sm\">\n <input\n type=\"radio\"\n class=\"form-check-input me-2 flex-shrink-0\"\n :value=\"AliasesEnum.POPULATED\"\n :disabled=\"isFiltering\"\n :checked=\"currentAliasType === AliasesEnum.POPULATED\"\n @input=\"onAliasTypeChange($event, AliasesEnum.POPULATED)\"\n />\n <span class=\"form-check-label user-select-none pis-label\">\n {{ t('PopulatedAliases') }}\n </span>\n </div>\n </label>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchAliasFiltersOptions } from '@/catalogs/api/configuration/components/SearchAliasFiltersOptions';\nimport { AliasesFilterCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { getPathFromEvent } from '@/common/helpers/dom';\nimport { AliasesEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-filters',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, routeData, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.ProductClassifications]);\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.aliases?.search?.filters ??\n ({} as SearchAliasFiltersOptions),\n );\n\n const visible = computed(() => componentOptions.value.visible);\n\n const currentAliasType = ref<AliasesEnum | undefined>(undefined);\n\n const isFiltering = ref<boolean>(false);\n\n const onAliasTypeChange = async (event: Event, type: AliasesEnum): Promise<void> => {\n if (getPathFromEvent<Event, HTMLInputElement>(event)[0].checked) {\n if (instance.value && type) {\n currentAliasType.value = type;\n isFiltering.value = true;\n try {\n await instance.value.execute(\n new AliasesFilterCommand({ aliasFilter: type }).from(componentName),\n );\n } catch {\n // Ignore error\n }\n isFiltering.value = false;\n }\n }\n //\n };\n\n watch(\n () => routeData.value?.products.aliases,\n (newAliasType: AliasesEnum | undefined) =>\n (currentAliasType.value = newAliasType || AliasesEnum.ALL),\n );\n\n return {\n root,\n store,\n isReady,\n visible,\n trimList,\n isFiltering,\n AliasesEnum,\n componentName,\n isWebComponent,\n componentOptions,\n currentAliasType,\n t,\n onAliasTypeChange,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <nav class=\"mb-4 row g-2\">\n <div :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"funnel-filter\"\n class=\"w-100 h-100\"\n vertical\n @click.prevent=\"aliasFiltersModalOpen = true\"\n >\n {{ t('AliasFilters') }}\n </Btn>\n </div>\n <div v-if=\"categoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!categories.length\"\n :number=\"categories.length\"\n @click.prevent=\"categoriesModalOpen = true\"\n >\n {{ t('Products') }}\n </Btn>\n </div>\n <div v-if=\"partCategoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!partCategories.length\"\n :number=\"partCategories.length\"\n @click.prevent=\"partCategoriesModalOpen = true\"\n >\n {{ t('PartsAndServices') }}\n </Btn>\n </div>\n </nav>\n\n <Modal v-model:show=\"aliasFiltersModalOpen\" :title=\"t('AliasFilters')\">\n <AliasFilters></AliasFilters>\n </Modal>\n\n <Modal v-model:show=\"categoriesModalOpen\" :title=\"t('AllOfferings')\">\n <CategoriesList\n :categories=\"categories\"\n :configurators-visible=\"false\"\n @click-item=\"setCategory\"\n />\n </Modal>\n\n <Modal v-model:show=\"partCategoriesModalOpen\" :title=\"t('PartsAndServices')\">\n <CategoriesList\n :categories=\"partCategories\"\n :configurators-visible=\"false\"\n @click-item=\"setPartCategory\"\n />\n </Modal>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '../composables/setupComponent';\nimport { CatalogsDataType } from './../api/configuration/application/CatalogsDataType';\nimport AliasFilters from './aliases/AliasFilters.vue';\nimport { ClassificationCommand } from '../api/runtime/CommandExecutor';\n\nimport Btn from '@/common/components/Btn.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-mobile-nav',\n\n components: {\n Btn,\n Modal,\n AliasFilters,\n CategoriesList,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const aliasFiltersModalOpen = ref(false);\n const categoriesModalOpen = ref(false);\n const partCategoriesModalOpen = ref(false);\n\n const { componentName, isWebComponent, isReady, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Breadcrumbs],\n );\n\n const categoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has(\n 'pis-catalogs-products-search-product-categories',\n ) && store.value?.options.components?.products?.search?.productCategories?.visible,\n );\n\n const partCategoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-part-categories') &&\n store.value?.options.components?.products?.search?.partCategories?.visible,\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n const partCategories = computed(() => store.value?.data.partClassifications?.items ?? []);\n const columnsNumber = computed(() => {\n const itemsNumber = [categoriesShown.value, partCategoriesShown.value, true].filter(\n Boolean,\n ).length;\n\n return itemsNumber > 3 ? 3 : itemsNumber; // 3 or less columns\n });\n\n const setCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n categoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({ cid, clearSearch: false, treeType: 'Products' }).from(\n componentName,\n ),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n const setPartCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n partCategoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({ cid, clearSearch: false, treeType: 'Parts' }).from(\n componentName,\n ),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n categoriesShown,\n partCategoriesShown,\n categories,\n partCategories,\n isReady,\n store,\n columnsNumber,\n instance,\n aliasFiltersModalOpen,\n categoriesModalOpen,\n partCategoriesModalOpen,\n t,\n setCategory,\n setPartCategory,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <nav class=\"mb-4 row g-2\">\n <div :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"funnel-filter\"\n class=\"w-100 h-100\"\n vertical\n @click.prevent=\"aliasFiltersModalOpen = true\"\n >\n {{ t('AliasFilters') }}\n </Btn>\n </div>\n <div v-if=\"categoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!categories.length\"\n :number=\"categories.length\"\n @click.prevent=\"categoriesModalOpen = true\"\n >\n {{ t('Products') }}\n </Btn>\n </div>\n <div v-if=\"partCategoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!partCategories.length\"\n :number=\"partCategories.length\"\n @click.prevent=\"partCategoriesModalOpen = true\"\n >\n {{ t('PartsAndServices') }}\n </Btn>\n </div>\n </nav>\n\n <Modal v-model:show=\"aliasFiltersModalOpen\" :title=\"t('AliasFilters')\">\n <AliasFilters></AliasFilters>\n </Modal>\n\n <Modal v-model:show=\"categoriesModalOpen\" :title=\"t('AllOfferings')\">\n <CategoriesList\n :categories=\"categories\"\n :configurators-visible=\"false\"\n @click-item=\"setCategory\"\n />\n </Modal>\n\n <Modal v-model:show=\"partCategoriesModalOpen\" :title=\"t('PartsAndServices')\">\n <CategoriesList\n :categories=\"partCategories\"\n :configurators-visible=\"false\"\n @click-item=\"setPartCategory\"\n />\n </Modal>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '../composables/setupComponent';\nimport { CatalogsDataType } from './../api/configuration/application/CatalogsDataType';\nimport AliasFilters from './aliases/AliasFilters.vue';\nimport { ClassificationCommand } from '../api/runtime/CommandExecutor';\n\nimport Btn from '@/common/components/Btn.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-mobile-nav',\n\n components: {\n Btn,\n Modal,\n AliasFilters,\n CategoriesList,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const aliasFiltersModalOpen = ref(false);\n const categoriesModalOpen = ref(false);\n const partCategoriesModalOpen = ref(false);\n\n const { componentName, isWebComponent, isReady, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Breadcrumbs],\n );\n\n const categoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has(\n 'pis-catalogs-products-search-product-categories',\n ) && store.value?.options.components?.products?.search?.productCategories?.visible,\n );\n\n const partCategoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-part-categories') &&\n store.value?.options.components?.products?.search?.partCategories?.visible,\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n const partCategories = computed(() => store.value?.data.partClassifications?.items ?? []);\n const columnsNumber = computed(() => {\n const itemsNumber = [categoriesShown.value, partCategoriesShown.value, true].filter(\n Boolean,\n ).length;\n\n return itemsNumber > 3 ? 3 : itemsNumber; // 3 or less columns\n });\n\n const setCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n categoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({ cid, clearSearch: false, treeType: 'Products' }).from(\n componentName,\n ),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n const setPartCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n partCategoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({ cid, clearSearch: false, treeType: 'Parts' }).from(\n componentName,\n ),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n categoriesShown,\n partCategoriesShown,\n categories,\n partCategories,\n isReady,\n store,\n columnsNumber,\n instance,\n aliasFiltersModalOpen,\n categoriesModalOpen,\n partCategoriesModalOpen,\n t,\n setCategory,\n setPartCategory,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && visible\" class=\"mb-4\">\n <Dropdown v-model:open=\"isAutocompleteVisible\" min-width=\"340px\" :items=\"autocomplete.items\">\n <template #item=\"{ item }\">\n <Clickable class=\"dropdown-item\" @click=\"searchText(item.text)\">\n <template v-if=\"componentOptions?.autocompleteItemTemplate\">\n <MountPoint\n :callbacks=\"componentOptions?.autocompleteItemTemplate\"\n :ctx=\"itemCtx({ item })\"\n />\n </template>\n <template v-else>\n <div class=\"fw-bold ext-display-name\">\n <Highlighter\n highlight-class-name=\"text-primary p-0 display-inline bg-transparent ext-highlight\"\n highlight-tag=\"span\"\n :search-words=\"highlightTerms\"\n :auto-escape=\"true\"\n :text-to-highlight=\"item.text\"\n />\n </div>\n <div v-if=\"item.text != item.description\" class=\"small ext-description text-wrap\">\n <Highlighter\n highlight-class-name=\"fw-bold text-primary p-0 display-inline bg-transparent ext-highlight\"\n highlight-tag=\"span\"\n :search-words=\"highlightTerms\"\n :auto-escape=\"true\"\n :text-to-highlight=\"item.description\"\n />\n </div>\n </template>\n </Clickable>\n </template>\n\n <template #footer>\n <div v-if=\"isAutocompleteLoading\" class=\"text-center\"><Spinner sm /></div>\n <small v-else-if=\"autocomplete.totalCount\">\n {{\n t('ShowingNOfNMatches', false, [\n `${autocomplete.itemsCount || 0}`,\n `${autocomplete.totalCount || 0}`,\n ])\n }}\n </small>\n <small v-else>{{ t('NoResults') }}</small>\n </template>\n\n <template #activator=\"{ on }\">\n <form\n :class=\"[widerThan('sm') && 'input-group flex-nowrap']\"\n @submit.prevent=\"onSearch()\"\n >\n <FormInputClearable\n v-model=\"searchModel.text\"\n :class-inner=\"widerThan('sm') ? 'border-end-0' : 'mb-1'\"\n :lg=\"widerThan('sm')\"\n :placeholder=\"t('SearchCatalogsInputPlaceholder')\"\n v-on=\"on\"\n @update:model-value=\"onSearchInput\"\n @clear=\"onClear\"\n @focus=\"openAutocomplete\"\n />\n\n <select\n v-model=\"searchModel.type\"\n class=\"form-select px-2\"\n :class=\"[narrowerThan('sm') && 'mb-1']\"\n :style=\"{\n 'min-width': widerThan('sm') ? '200px' : '100%',\n 'max-width': widerThan('sm') ? '300px' : '100%',\n }\"\n >\n <option\n v-for=\"searchType in searchTypeOptions\"\n :key=\"searchType.value\"\n :value=\"searchType.value\"\n v-text=\"t(searchType.translate)\"\n />\n </select>\n\n <Btn\n :aria-label=\"t('SearchButtonText')\"\n icon=\"lens-search-find\"\n :class=\"[narrowerThan('sm') && 'w-100 d-flex justify-content-center']\"\n >\n <span>{{ t('SearchButtonText') }}</span>\n </Btn>\n </form>\n </template>\n </Dropdown>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, computed, watch } from 'vue';\nimport Highlighter from 'vue-highlight-words';\n\nimport { SearchFormOptions } from '@/catalogs/api/configuration/components/SearchFormOptions';\nimport {\n GetCatalogsAutocompleteCommand,\n SearchCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Btn from '@/common/components/Btn.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Dropdown from '@/common/components/Dropdown.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { debounce } from '@/common/helpers/debounce';\nimport { CatalogAutocompleteItem, CatalogSearchTypeEnum } from '@/common/services/swagger';\nimport type { CatalogAutocompleteSearchResult } from '@/common/services/swagger';\nimport { Autocomplete, AutocompleteModelItem } from '@/products/api/runtime/Search';\n\nconst searchTypeCatalogName = {\n value: CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n translate: 'SearchByCodeAndDescription',\n};\n\nconst searchTypeCreatedBy = {\n value: CatalogSearchTypeEnum.CREATED_BY,\n translate: 'SearchByCreatedBy',\n};\n\nexport default defineComponent({\n name: 'pis-catalogs-search-form',\n\n components: {\n Btn,\n Dropdown,\n FormInputClearable,\n Clickable,\n Spinner,\n Highlighter,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const searchModel = reactive({\n text: '',\n type: CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n isDirty: false,\n });\n\n const autocomplete = ref<Autocomplete>({\n totalCount: 0,\n itemsCount: 0,\n items: [] as AutocompleteModelItem[],\n });\n const isAutocompleteVisible = ref(false);\n const isAutocompleteLoading = ref(false);\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n widerThan,\n narrowerThan,\n t,\n emit,\n } = setupComponent(root, props.instanceId);\n\n const componentOptions = computed<SearchFormOptions | undefined>(\n () => store.value?.options.components?.search?.form,\n );\n\n const visible = computed(() => store.value?.options.components?.search?.form?.visible);\n\n const autocompleteEnabled = computed(\n () => store.value?.options.components?.search?.form?.useAutocomplete,\n );\n\n const baseSearchTypeOptions = [searchTypeCatalogName, searchTypeCreatedBy];\n\n const searchTypeOptions = computed(() => {\n return baseSearchTypeOptions;\n });\n\n const onSearch = async () => {\n isAutocompleteVisible.value = false;\n try {\n await instance.value?.execute(\n new SearchCommand({\n searchText: searchModel.text,\n searchType: searchModel.type,\n }).from(componentName),\n );\n\n searchModel.isDirty = false;\n } catch {\n // Ignore Error\n }\n };\n\n const searchText = (text: string) => {\n searchModel.text = text;\n onSearch();\n };\n\n const onClear = () => {\n if (!searchModel.isDirty) {\n searchModel.text = '';\n autocomplete.value.items = [];\n autocomplete.value.totalCount = 0;\n onSearch();\n }\n };\n\n const openAutocomplete = () => {\n if (!autocompleteEnabled.value) {\n return;\n }\n\n if (searchModel.text == routeData.value?.catalogs.searchText) {\n return;\n }\n\n if (searchModel.text.length > 2) {\n isAutocompleteVisible.value = true;\n }\n };\n\n const closeAutocomplete = () => {\n isAutocompleteVisible.value = false;\n };\n\n const handleAutocompleteSearch = debounce(async (text) => {\n if (!autocompleteEnabled.value) {\n return;\n }\n const searchTextTrimmed = (text || '').trim();\n const hasText: boolean = searchTextTrimmed != null && searchTextTrimmed.length > 2;\n isAutocompleteVisible.value = hasText;\n\n if (hasText) {\n isAutocompleteLoading.value = true;\n const items: Autocomplete['items'] = [];\n try {\n const result = (await instance.value?.execute(\n new GetCatalogsAutocompleteCommand({ searchText: text }).from(componentName),\n )) as CatalogAutocompleteSearchResult | undefined;\n if (result) {\n const matches: Autocomplete['items'] = (result.items || []).map(\n (match: CatalogAutocompleteItem) => ({\n productId: '',\n attributes: {},\n text: match.code || '',\n description: match.description || '',\n images: undefined,\n type: 'item',\n location: 'bottom',\n sparePart: false,\n exactMatch: false,\n }),\n );\n\n const autocompleteValue: Autocomplete = {\n totalCount: result.totalCount || 0,\n itemsCount: result.items?.length || 0,\n items: [],\n };\n\n autocompleteValue.items = items.concat(matches);\n autocomplete.value = autocompleteValue;\n }\n } catch {\n // Ignore Error\n } finally {\n isAutocompleteLoading.value = false;\n }\n }\n }, 300);\n\n const onSearchInput = () => {\n searchModel.isDirty =\n searchModel.text?.length > 0 && searchModel.text != routeData.value?.catalogs.searchText;\n handleAutocompleteSearch(searchModel.text);\n };\n\n // Sync the search model text with route search text after initializing the app.\n watch(\n () => routeData.value?.products.searchText,\n (text, oldText) => {\n if (text !== oldText) {\n searchModel.text = text ?? '';\n }\n },\n );\n\n watch(\n () => routeData.value?.catalogs.searchType,\n (type, oldType) => {\n if (type && type !== oldType) {\n searchModel.type = type;\n }\n },\n );\n\n watch(\n () => searchModel.type,\n () => {\n if (routeData.value) {\n routeData.value.catalogs.searchType = searchModel.type;\n }\n },\n );\n\n const highlightTerms = computed(() => {\n if (!searchModel.text) {\n return [];\n }\n\n const arr = searchModel.text\n .trim()\n .toLowerCase()\n .split(/[._-\\s/]+/);\n\n arr.push(searchModel.text.trim());\n\n // extract numbers\n const numbers = searchModel.text.match(/\\d+/g);\n let txt = searchModel.text;\n\n if (numbers) {\n numbers.forEach((m) => {\n arr.push(m);\n txt = txt.replace(m, '$');\n });\n }\n\n const arr2 = txt.trim().toLowerCase().split('$');\n\n arr.push(...arr2);\n\n return arr;\n });\n\n // v7: per-item reactive ctx cache for autocomplete items.\n const itemCtx = reactiveContextCache((key: { item: AutocompleteModelItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n searchModel,\n searchTypeOptions,\n autocomplete,\n isAutocompleteVisible,\n isAutocompleteLoading,\n highlightTerms,\n widerThan,\n narrowerThan,\n t,\n onSearch,\n onSearchInput,\n onClear,\n searchText,\n openAutocomplete,\n closeAutocomplete,\n visible,\n componentOptions,\n instance,\n emit,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && visible\" class=\"mb-4\">\n <Dropdown v-model:open=\"isAutocompleteVisible\" min-width=\"340px\" :items=\"autocomplete.items\">\n <template #item=\"{ item }\">\n <Clickable class=\"dropdown-item\" @click=\"searchText(item.text)\">\n <template v-if=\"componentOptions?.autocompleteItemTemplate\">\n <MountPoint\n :callbacks=\"componentOptions?.autocompleteItemTemplate\"\n :ctx=\"itemCtx({ item })\"\n />\n </template>\n <template v-else>\n <div class=\"fw-bold ext-display-name\">\n <Highlighter\n highlight-class-name=\"text-primary p-0 display-inline bg-transparent ext-highlight\"\n highlight-tag=\"span\"\n :search-words=\"highlightTerms\"\n :auto-escape=\"true\"\n :text-to-highlight=\"item.text\"\n />\n </div>\n <div v-if=\"item.text != item.description\" class=\"small ext-description text-wrap\">\n <Highlighter\n highlight-class-name=\"fw-bold text-primary p-0 display-inline bg-transparent ext-highlight\"\n highlight-tag=\"span\"\n :search-words=\"highlightTerms\"\n :auto-escape=\"true\"\n :text-to-highlight=\"item.description\"\n />\n </div>\n </template>\n </Clickable>\n </template>\n\n <template #footer>\n <div v-if=\"isAutocompleteLoading\" class=\"text-center\"><Spinner sm /></div>\n <small v-else-if=\"autocomplete.totalCount\">\n {{\n t('ShowingNOfNMatches', false, [\n `${autocomplete.itemsCount || 0}`,\n `${autocomplete.totalCount || 0}`,\n ])\n }}\n </small>\n <small v-else>{{ t('NoResults') }}</small>\n </template>\n\n <template #activator=\"{ on }\">\n <form\n :class=\"[widerThan('sm') && 'input-group flex-nowrap']\"\n @submit.prevent=\"onSearch()\"\n >\n <FormInputClearable\n v-model=\"searchModel.text\"\n :class-inner=\"widerThan('sm') ? 'border-end-0' : 'mb-1'\"\n :lg=\"widerThan('sm')\"\n :placeholder=\"t('SearchCatalogsInputPlaceholder')\"\n v-on=\"on\"\n @update:model-value=\"onSearchInput\"\n @clear=\"onClear\"\n @focus=\"openAutocomplete\"\n />\n\n <select\n v-model=\"searchModel.type\"\n class=\"form-select px-2\"\n :class=\"[narrowerThan('sm') && 'mb-1']\"\n :style=\"{\n 'min-width': widerThan('sm') ? '200px' : '100%',\n 'max-width': widerThan('sm') ? '300px' : '100%',\n }\"\n >\n <option\n v-for=\"searchType in searchTypeOptions\"\n :key=\"searchType.value\"\n :value=\"searchType.value\"\n v-text=\"t(searchType.translate)\"\n />\n </select>\n\n <Btn\n :aria-label=\"t('SearchButtonText')\"\n icon=\"lens-search-find\"\n :class=\"[narrowerThan('sm') && 'w-100 d-flex justify-content-center']\"\n >\n <span>{{ t('SearchButtonText') }}</span>\n </Btn>\n </form>\n </template>\n </Dropdown>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, computed, watch } from 'vue';\nimport Highlighter from 'vue-highlight-words';\n\nimport { SearchFormOptions } from '@/catalogs/api/configuration/components/SearchFormOptions';\nimport {\n GetCatalogsAutocompleteCommand,\n SearchCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Btn from '@/common/components/Btn.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Dropdown from '@/common/components/Dropdown.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { debounce } from '@/common/helpers/debounce';\nimport { CatalogAutocompleteItem, CatalogSearchTypeEnum } from '@/common/services/swagger';\nimport type { CatalogAutocompleteSearchResult } from '@/common/services/swagger';\nimport { Autocomplete, AutocompleteModelItem } from '@/products/api/runtime/Search';\n\nconst searchTypeCatalogName = {\n value: CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n translate: 'SearchByCodeAndDescription',\n};\n\nconst searchTypeCreatedBy = {\n value: CatalogSearchTypeEnum.CREATED_BY,\n translate: 'SearchByCreatedBy',\n};\n\nexport default defineComponent({\n name: 'pis-catalogs-search-form',\n\n components: {\n Btn,\n Dropdown,\n FormInputClearable,\n Clickable,\n Spinner,\n Highlighter,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const searchModel = reactive({\n text: '',\n type: CatalogSearchTypeEnum.CATALOG_CODE_AND_DESCRIPTION,\n isDirty: false,\n });\n\n const autocomplete = ref<Autocomplete>({\n totalCount: 0,\n itemsCount: 0,\n items: [] as AutocompleteModelItem[],\n });\n const isAutocompleteVisible = ref(false);\n const isAutocompleteLoading = ref(false);\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n widerThan,\n narrowerThan,\n t,\n emit,\n } = setupComponent(root, props.instanceId);\n\n const componentOptions = computed<SearchFormOptions | undefined>(\n () => store.value?.options.components?.search?.form,\n );\n\n const visible = computed(() => store.value?.options.components?.search?.form?.visible);\n\n const autocompleteEnabled = computed(\n () => store.value?.options.components?.search?.form?.useAutocomplete,\n );\n\n const baseSearchTypeOptions = [searchTypeCatalogName, searchTypeCreatedBy];\n\n const searchTypeOptions = computed(() => {\n return baseSearchTypeOptions;\n });\n\n const onSearch = async () => {\n isAutocompleteVisible.value = false;\n try {\n await instance.value?.execute(\n new SearchCommand({\n searchText: searchModel.text,\n searchType: searchModel.type,\n }).from(componentName),\n );\n\n searchModel.isDirty = false;\n } catch {\n // Ignore Error\n }\n };\n\n const searchText = (text: string) => {\n searchModel.text = text;\n onSearch();\n };\n\n const onClear = () => {\n if (!searchModel.isDirty) {\n searchModel.text = '';\n autocomplete.value.items = [];\n autocomplete.value.totalCount = 0;\n onSearch();\n }\n };\n\n const openAutocomplete = () => {\n if (!autocompleteEnabled.value) {\n return;\n }\n\n if (searchModel.text == routeData.value?.catalogs.searchText) {\n return;\n }\n\n if (searchModel.text.length > 2) {\n isAutocompleteVisible.value = true;\n }\n };\n\n const closeAutocomplete = () => {\n isAutocompleteVisible.value = false;\n };\n\n const handleAutocompleteSearch = debounce(async (text) => {\n if (!autocompleteEnabled.value) {\n return;\n }\n const searchTextTrimmed = (text || '').trim();\n const hasText: boolean = searchTextTrimmed != null && searchTextTrimmed.length > 2;\n isAutocompleteVisible.value = hasText;\n\n if (hasText) {\n isAutocompleteLoading.value = true;\n const items: Autocomplete['items'] = [];\n try {\n const result = (await instance.value?.execute(\n new GetCatalogsAutocompleteCommand({ searchText: text }).from(componentName),\n )) as CatalogAutocompleteSearchResult | undefined;\n if (result) {\n const matches: Autocomplete['items'] = (result.items || []).map(\n (match: CatalogAutocompleteItem) => ({\n productId: '',\n attributes: {},\n text: match.code || '',\n description: match.description || '',\n images: undefined,\n type: 'item',\n location: 'bottom',\n sparePart: false,\n exactMatch: false,\n }),\n );\n\n const autocompleteValue: Autocomplete = {\n totalCount: result.totalCount || 0,\n itemsCount: result.items?.length || 0,\n items: [],\n };\n\n autocompleteValue.items = items.concat(matches);\n autocomplete.value = autocompleteValue;\n }\n } catch {\n // Ignore Error\n } finally {\n isAutocompleteLoading.value = false;\n }\n }\n }, 300);\n\n const onSearchInput = () => {\n searchModel.isDirty =\n searchModel.text?.length > 0 && searchModel.text != routeData.value?.catalogs.searchText;\n handleAutocompleteSearch(searchModel.text);\n };\n\n // Sync the search model text with route search text after initializing the app.\n watch(\n () => routeData.value?.products.searchText,\n (text, oldText) => {\n if (text !== oldText) {\n searchModel.text = text ?? '';\n }\n },\n );\n\n watch(\n () => routeData.value?.catalogs.searchType,\n (type, oldType) => {\n if (type && type !== oldType) {\n searchModel.type = type;\n }\n },\n );\n\n watch(\n () => searchModel.type,\n () => {\n if (routeData.value) {\n routeData.value.catalogs.searchType = searchModel.type;\n }\n },\n );\n\n const highlightTerms = computed(() => {\n if (!searchModel.text) {\n return [];\n }\n\n const arr = searchModel.text\n .trim()\n .toLowerCase()\n .split(/[._-\\s/]+/);\n\n arr.push(searchModel.text.trim());\n\n // extract numbers\n const numbers = searchModel.text.match(/\\d+/g);\n let txt = searchModel.text;\n\n if (numbers) {\n numbers.forEach((m) => {\n arr.push(m);\n txt = txt.replace(m, '$');\n });\n }\n\n const arr2 = txt.trim().toLowerCase().split('$');\n\n arr.push(...arr2);\n\n return arr;\n });\n\n // v7: per-item reactive ctx cache for autocomplete items.\n const itemCtx = reactiveContextCache((key: { item: AutocompleteModelItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n searchModel,\n searchTypeOptions,\n autocomplete,\n isAutocompleteVisible,\n isAutocompleteLoading,\n highlightTerms,\n widerThan,\n narrowerThan,\n t,\n onSearch,\n onSearchInput,\n onClear,\n searchText,\n openAutocomplete,\n closeAutocomplete,\n visible,\n componentOptions,\n instance,\n emit,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <nav ref=\"root\" class=\"pis-component\" aria-label=\"Items page navigation\">\n <template v-if=\"isReady\">\n <div\n v-if=\"totalCount && pagination\"\n class=\"d-flex align-items-center justify-content-between mt-4\"\n :class=\"[widerThan('md') ? 'flex-row' : 'flex-column']\"\n >\n <div class=\"my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </div>\n\n <Pagination\n class=\"my-2\"\n :class=\"componentName\"\n :total=\"Math.ceil(totalCount / pagination.pageSize)\"\n :current=\"pagination.page\"\n :narrow-than=\"narrowerThan\"\n @change=\"changePage\"\n />\n </div>\n </template>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { CatalogsPaginateCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Pagination from '@/common/components/Pagination.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-pagination',\n\n components: {\n Pagination,\n PaginationAmount,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Catalogs]);\n\n const totalCount = computed(() => store.value?.data.catalogs?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n\n const changePage = (page: number) => {\n if (instance.value) {\n instance.value.execute(new CatalogsPaginateCommand({ page }).from(componentName));\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n totalCount,\n pagination,\n routeData,\n t,\n widerThan,\n narrowerThan,\n changePage,\n };\n },\n});\n</script>\n","<template>\n <nav ref=\"root\" class=\"pis-component\" aria-label=\"Items page navigation\">\n <template v-if=\"isReady\">\n <div\n v-if=\"totalCount && pagination\"\n class=\"d-flex align-items-center justify-content-between mt-4\"\n :class=\"[widerThan('md') ? 'flex-row' : 'flex-column']\"\n >\n <div class=\"my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </div>\n\n <Pagination\n class=\"my-2\"\n :class=\"componentName\"\n :total=\"Math.ceil(totalCount / pagination.pageSize)\"\n :current=\"pagination.page\"\n :narrow-than=\"narrowerThan\"\n @change=\"changePage\"\n />\n </div>\n </template>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { CatalogsPaginateCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Pagination from '@/common/components/Pagination.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-pagination',\n\n components: {\n Pagination,\n PaginationAmount,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Catalogs]);\n\n const totalCount = computed(() => store.value?.data.catalogs?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n\n const changePage = (page: number) => {\n if (instance.value) {\n instance.value.execute(new CatalogsPaginateCommand({ page }).from(componentName));\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n totalCount,\n pagination,\n routeData,\n t,\n widerThan,\n narrowerThan,\n changePage,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\" style=\"z-index: 1\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"catalogItems && catalogItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col />\n </colgroup>\n\n <thead>\n <tr>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"actionsEnabled\"></th>\n <th></th>\n </tr>\n </thead>\n\n <tbody>\n <tr v-for=\"(catalog, rowIndex) in catalogItems\" :key=\"catalog.id\">\n <td v-for=\"(col, colIndex) in columns\" :key=\"colIndex\">\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item: catalog, col })\"\n />\n <span v-else-if=\"col.dataField === 'code'\" class=\"d-flex align-items-center\">\n <Tooltip\n trigger=\"hover\"\n :text=\"t('ItemsInCatalog', false, [`${catalog.productsTotalCount}`])\"\n >\n <Clickable @click=\"details(catalog.id)\">\n {{ catalog.code }}\n </Clickable>\n </Tooltip>\n </span>\n <span v-else>{{ catalog[col.dataField!] }}</span>\n </td>\n <td\n v-if=\"actionsEnabled && catalogItemMenuItems(catalog).length\"\n style=\"overflow: hidden; text-align: right\"\n >\n <DropdownPopper\n class=\"d-inline-block\"\n :placement=\"'bottom-start'\"\n :interactive=\"true\"\n :top=\"rowIndex >= catalogItems.length - 2\"\n >\n <template #trigger>\n <button type=\"button\" class=\"btn btn-link text-dark\">\n <Icon name=\"menu\" />\n </button>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li\n v-for=\"(item, itemIndex) in catalogItemMenuItems(catalog)\"\n :key=\"itemIndex\"\n >\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span\n v-else-if=\"isDisabled(item, catalog)\"\n class=\"dropdown-item text-muted\"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onCatalogItemMenuAction(item, catalog);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </td>\n <td>\n <span v-if=\"catalog.default\">\n <Icon name=\"star\" />\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div v-else class=\"my-3 py-5 text muted\">\n {{ t('NoResults') }}\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { CatalogsTableOptions } from '@/catalogs/api/configuration/components/CatalogsTableOptions';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogProductsCommand,\n CatalogsSortByCommand,\n CatalogsPageSizeCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Clickable from '@/common/components/Clickable.vue';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport Tooltip from '@/common/components/Tooltip.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogItem, CatalogSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-table',\n\n components: {\n Icon,\n Tooltip,\n Clickable,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onCatalogItemMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const catalogItems = computed(() => store.value?.data.catalogs?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const sortByItems = CatalogSortFieldEnum;\n\n const componentOptions = computed(\n () => store.value?.options.components?.search?.table ?? ({} as CatalogsTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const details = async (catalogId: string) => {\n if (routeData.value && catalogId) {\n try {\n await instance.value?.execute(\n new CatalogProductsCommand({ catalogId }).from(componentName),\n );\n } catch {\n // Ignore error\n }\n }\n };\n\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n const pageSizeItems = computed(\n () => store.value?.options.components?.search?.toolbar?.pageSizes,\n );\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new CatalogsPageSizeCommand({ pageSize }).from(componentName)),\n });\n const sortBy = computed({\n get: () => routeData.value?.catalogs.sortField as CatalogSortFieldEnum,\n set: (sortField: CatalogSortFieldEnum) =>\n instance.value?.execute(new CatalogsSortByCommand({ sortField }).from(componentName)),\n });\n\n const catalogItemMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.catalogItemMenu,\n );\n\n const catalogItemMenuItems = (catalog: CatalogItem): MenuItem<CatalogItem>[] =>\n (catalogItemMenu.value?.items || []).filter((item: MenuItem<CatalogItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(catalog);\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<CatalogItem>, catalog: CatalogItem) =>\n typeof item.disabled === 'function' ? item.disabled(catalog) : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n catalogItemMenu.value?.visible,\n );\n\n // v7: per-row reactive ctx caches. Each row/item reuses one stable reactive\n // ctx per surface across re-renders — identity preserved (D-N2).\n const cellCtx = reactiveContextCache((key: { item: CatalogItem; col: unknown }) => ({\n col: key.col,\n instance: instance.value,\n item: key.item,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n }));\n\n const itemCtx = reactiveContextCache((key: { item: MenuItem<CatalogItem> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n store,\n sortBy,\n isReady,\n columns,\n pageSize,\n instance,\n routeData,\n sortByItems,\n catalogItems,\n componentName,\n pageSizeItems,\n isWebComponent,\n previewEnabled,\n actionsEnabled,\n catalogItemMenu,\n componentOptions,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n isDisabled,\n additionalInfo,\n catalogItemMenuItems,\n onCatalogItemMenuAction,\n reactiveContext,\n cellCtx,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\" style=\"z-index: 1\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"catalogItems && catalogItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col />\n </colgroup>\n\n <thead>\n <tr>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"actionsEnabled\"></th>\n <th></th>\n </tr>\n </thead>\n\n <tbody>\n <tr v-for=\"(catalog, rowIndex) in catalogItems\" :key=\"catalog.id\">\n <td v-for=\"(col, colIndex) in columns\" :key=\"colIndex\">\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item: catalog, col })\"\n />\n <span v-else-if=\"col.dataField === 'code'\" class=\"d-flex align-items-center\">\n <Tooltip\n trigger=\"hover\"\n :text=\"t('ItemsInCatalog', false, [`${catalog.productsTotalCount}`])\"\n >\n <Clickable @click=\"details(catalog.id)\">\n {{ catalog.code }}\n </Clickable>\n </Tooltip>\n </span>\n <span v-else>{{ catalog[col.dataField!] }}</span>\n </td>\n <td\n v-if=\"actionsEnabled && catalogItemMenuItems(catalog).length\"\n style=\"overflow: hidden; text-align: right\"\n >\n <DropdownPopper\n class=\"d-inline-block\"\n :placement=\"'bottom-start'\"\n :interactive=\"true\"\n :top=\"rowIndex >= catalogItems.length - 2\"\n >\n <template #trigger>\n <button type=\"button\" class=\"btn btn-link text-dark\">\n <Icon name=\"menu\" />\n </button>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li\n v-for=\"(item, itemIndex) in catalogItemMenuItems(catalog)\"\n :key=\"itemIndex\"\n >\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span\n v-else-if=\"isDisabled(item, catalog)\"\n class=\"dropdown-item text-muted\"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onCatalogItemMenuAction(item, catalog);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </td>\n <td>\n <span v-if=\"catalog.default\">\n <Icon name=\"star\" />\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div v-else class=\"my-3 py-5 text muted\">\n {{ t('NoResults') }}\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { CatalogsTableOptions } from '@/catalogs/api/configuration/components/CatalogsTableOptions';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogProductsCommand,\n CatalogsSortByCommand,\n CatalogsPageSizeCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Clickable from '@/common/components/Clickable.vue';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport Tooltip from '@/common/components/Tooltip.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogItem, CatalogSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-table',\n\n components: {\n Icon,\n Tooltip,\n Clickable,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onCatalogItemMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const catalogItems = computed(() => store.value?.data.catalogs?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const sortByItems = CatalogSortFieldEnum;\n\n const componentOptions = computed(\n () => store.value?.options.components?.search?.table ?? ({} as CatalogsTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const details = async (catalogId: string) => {\n if (routeData.value && catalogId) {\n try {\n await instance.value?.execute(\n new CatalogProductsCommand({ catalogId }).from(componentName),\n );\n } catch {\n // Ignore error\n }\n }\n };\n\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n const pageSizeItems = computed(\n () => store.value?.options.components?.search?.toolbar?.pageSizes,\n );\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new CatalogsPageSizeCommand({ pageSize }).from(componentName)),\n });\n const sortBy = computed({\n get: () => routeData.value?.catalogs.sortField as CatalogSortFieldEnum,\n set: (sortField: CatalogSortFieldEnum) =>\n instance.value?.execute(new CatalogsSortByCommand({ sortField }).from(componentName)),\n });\n\n const catalogItemMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.catalogItemMenu,\n );\n\n const catalogItemMenuItems = (catalog: CatalogItem): MenuItem<CatalogItem>[] =>\n (catalogItemMenu.value?.items || []).filter((item: MenuItem<CatalogItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(catalog);\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<CatalogItem>, catalog: CatalogItem) =>\n typeof item.disabled === 'function' ? item.disabled(catalog) : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n catalogItemMenu.value?.visible,\n );\n\n // v7: per-row reactive ctx caches. Each row/item reuses one stable reactive\n // ctx per surface across re-renders — identity preserved (D-N2).\n const cellCtx = reactiveContextCache((key: { item: CatalogItem; col: unknown }) => ({\n col: key.col,\n instance: instance.value,\n item: key.item,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n }));\n\n const itemCtx = reactiveContextCache((key: { item: MenuItem<CatalogItem> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n store,\n sortBy,\n isReady,\n columns,\n pageSize,\n instance,\n routeData,\n sortByItems,\n catalogItems,\n componentName,\n pageSizeItems,\n isWebComponent,\n previewEnabled,\n actionsEnabled,\n catalogItemMenu,\n componentOptions,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n isDisabled,\n additionalInfo,\n catalogItemMenuItems,\n onCatalogItemMenuAction,\n reactiveContext,\n cellCtx,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\" style=\"z-index: 1\">\n <template v-if=\"isReady\">\n <div class=\"my-3 d-flex flex-row justify-content-between align-items-center flex-wrap\">\n <label v-if=\"totalCount && pagination\" class=\"d-flex align-items-center my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('CreatedWithin') }}:\n </span>\n <select v-model=\"createdDate\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(val, index) in createdItems\" :key=\"index\" :value=\"val.val\">\n {{ val.text }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('SortBy') }}:\n </span>\n <select v-model=\"sortBy\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('PageSize') }}:\n </span>\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n <div\n v-if=\"actionsEnabled && catalogListMenu?.items\"\n class=\"d-flex align-items-center justify-content-end my-2\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"catalogListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"catalogListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in catalogListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onCatalogListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogsSortByCommand,\n CatalogsPageSizeCommand,\n CatalogsFilterByDateCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-toolbar',\n\n components: {\n DropdownPopper,\n PaginationAmount,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n narrowerThan,\n emit,\n t,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onCatalogListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const sortByItems = CatalogSortFieldEnum;\n\n const createdItems = computed(() => [\n {\n val: '',\n text: t('CreatedAll'),\n },\n {\n val: 10,\n text: t('CreatedWithinDays', false, ['10']),\n },\n {\n val: 20,\n text: t('CreatedWithinDays', false, ['20']),\n },\n {\n val: 30,\n text: t('CreatedWithinDays', false, ['30']),\n },\n ]);\n\n const sortBy = computed({\n get: () => routeData.value?.catalogs.sortField as CatalogSortFieldEnum,\n set: (sortField: CatalogSortFieldEnum) =>\n instance.value?.execute(new CatalogsSortByCommand({ sortField }).from(componentName)),\n });\n const totalCount = computed(() => store.value?.data.catalogs?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n const pageSizeItems = computed(\n () => store.value?.options.components?.search?.toolbar?.pageSizes,\n );\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new CatalogsPageSizeCommand({ pageSize }).from(componentName)),\n });\n\n const createdDate = computed({\n get: () => routeData.value?.catalogs.createdWithinLastDays ?? '',\n set: (days?: number | string | undefined) =>\n instance.value?.execute(new CatalogsFilterByDateCommand({ days }).from(componentName)),\n });\n\n const catalogListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.catalogListMenu,\n );\n\n const catalogListMenuItems = (): MenuItem<void>[] =>\n (catalogListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n catalogListMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache.\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n store,\n sortBy,\n isReady,\n instance,\n pageSize,\n routeData,\n pagination,\n totalCount,\n createdDate,\n sortByItems,\n createdItems,\n componentName,\n pageSizeItems,\n isWebComponent,\n actionsEnabled,\n catalogListMenu,\n catalogListMenuItems,\n t,\n emit,\n attrValue,\n attrValues,\n isDisabled,\n narrowerThan,\n additionalInfo,\n onCatalogListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\" style=\"z-index: 1\">\n <template v-if=\"isReady\">\n <div class=\"my-3 d-flex flex-row justify-content-between align-items-center flex-wrap\">\n <label v-if=\"totalCount && pagination\" class=\"d-flex align-items-center my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('CreatedWithin') }}:\n </span>\n <select v-model=\"createdDate\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(val, index) in createdItems\" :key=\"index\" :value=\"val.val\">\n {{ val.text }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('SortBy') }}:\n </span>\n <select v-model=\"sortBy\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\">\n {{ t('PageSize') }}:\n </span>\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n <div\n v-if=\"actionsEnabled && catalogListMenu?.items\"\n class=\"d-flex align-items-center justify-content-end my-2\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"catalogListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"catalogListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in catalogListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onCatalogListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CatalogsSortByCommand,\n CatalogsPageSizeCommand,\n CatalogsFilterByDateCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogSortFieldEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-search-toolbar',\n\n components: {\n DropdownPopper,\n PaginationAmount,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n narrowerThan,\n emit,\n t,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const { onCatalogListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const sortByItems = CatalogSortFieldEnum;\n\n const createdItems = computed(() => [\n {\n val: '',\n text: t('CreatedAll'),\n },\n {\n val: 10,\n text: t('CreatedWithinDays', false, ['10']),\n },\n {\n val: 20,\n text: t('CreatedWithinDays', false, ['20']),\n },\n {\n val: 30,\n text: t('CreatedWithinDays', false, ['30']),\n },\n ]);\n\n const sortBy = computed({\n get: () => routeData.value?.catalogs.sortField as CatalogSortFieldEnum,\n set: (sortField: CatalogSortFieldEnum) =>\n instance.value?.execute(new CatalogsSortByCommand({ sortField }).from(componentName)),\n });\n const totalCount = computed(() => store.value?.data.catalogs?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.catalogs.pagination);\n const pageSizeItems = computed(\n () => store.value?.options.components?.search?.toolbar?.pageSizes,\n );\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new CatalogsPageSizeCommand({ pageSize }).from(componentName)),\n });\n\n const createdDate = computed({\n get: () => routeData.value?.catalogs.createdWithinLastDays ?? '',\n set: (days?: number | string | undefined) =>\n instance.value?.execute(new CatalogsFilterByDateCommand({ days }).from(componentName)),\n });\n\n const catalogListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.catalogListMenu,\n );\n\n const catalogListMenuItems = (): MenuItem<void>[] =>\n (catalogListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n catalogListMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache.\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n store,\n sortBy,\n isReady,\n instance,\n pageSize,\n routeData,\n pagination,\n totalCount,\n createdDate,\n sortByItems,\n createdItems,\n componentName,\n pageSizeItems,\n isWebComponent,\n actionsEnabled,\n catalogListMenu,\n catalogListMenuItems,\n t,\n emit,\n attrValue,\n attrValues,\n isDisabled,\n narrowerThan,\n additionalInfo,\n onCatalogListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"showOverlay\">\n <div class=\"position-absolute start-50 top-50\" style=\"z-index: 2000\">\n <slot name=\"loader\">\n <Spinner />\n </slot>\n </div>\n <div\n class=\"position-absolute top-0 start-0 end-0 bottom-0 bg-body\"\n style=\"z-index: 1900; opacity: 0.2\"\n />\n </template>\n\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { useDelayedOverlay } from '@/common/composables/useDelayedLoading';\n\nexport default defineComponent({\n name: 'pis-catalogs-loading-indicator',\n\n components: {\n Spinner,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, store, routeData } = setupComponent(\n root,\n props.instanceId,\n );\n\n // Anti-flash: reloading over existing content delays the overlay; a\n // content-less first load shows it immediately. isReady is folded into\n // the loading input so an unready instance always keeps the overlay down.\n const isLoading = computed(() => isReady.value && !!store.value?.data.isLoadingData);\n const hasContent = computed(\n () =>\n !!store.value?.data.catalogs?.items?.length || !!store.value?.data.products?.items?.length,\n );\n const showOverlay = useDelayedOverlay(isLoading, hasContent);\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n showOverlay,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"showOverlay\">\n <div class=\"position-absolute start-50 top-50\" style=\"z-index: 2000\">\n <slot name=\"loader\">\n <Spinner />\n </slot>\n </div>\n <div\n class=\"position-absolute top-0 start-0 end-0 bottom-0 bg-body\"\n style=\"z-index: 1900; opacity: 0.2\"\n />\n </template>\n\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { useDelayedOverlay } from '@/common/composables/useDelayedLoading';\n\nexport default defineComponent({\n name: 'pis-catalogs-loading-indicator',\n\n components: {\n Spinner,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, store, routeData } = setupComponent(\n root,\n props.instanceId,\n );\n\n // Anti-flash: reloading over existing content delays the overlay; a\n // content-less first load shows it immediately. isReady is folded into\n // the loading input so an unready instance always keeps the overlay down.\n const isLoading = computed(() => isReady.value && !!store.value?.data.isLoadingData);\n const hasContent = computed(\n () =>\n !!store.value?.data.catalogs?.items?.length || !!store.value?.data.products?.items?.length,\n );\n const showOverlay = useDelayedOverlay(isLoading, hasContent);\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n showOverlay,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\">\n <template v-if=\"isReady && store\">\n <Notifications :instance=\"instance!\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Notifications from '@/common/components/Notifications.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-common-notifications',\n\n components: {\n Notifications,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData } = setupComponent(\n root,\n props.instanceId,\n );\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n instance,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\">\n <template v-if=\"isReady && store\">\n <Notifications :instance=\"instance!\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Notifications from '@/common/components/Notifications.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-common-notifications',\n\n components: {\n Notifications,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData } = setupComponent(\n root,\n props.instanceId,\n );\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n instance,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('EditProductAliases')\"\n :close-on-outer-click=\"false\"\n lg\n @update:show=\"onModalShowUpdate\"\n >\n <form @submit.prevent=\"\">\n <div class=\"d-flex justify-content-start\">\n <strong>{{ t('Product') }} {{ attrValue(data.alias, '#DisplayName') }}</strong>\n </div>\n <div>\n <ul class=\"list-unstyled mt-3\">\n <li\n v-for=\"(alias, index) of aliases\"\n :key=\"index\"\n class=\"btn-group d-flex justify-content-between align-items-center mb-2\"\n >\n <div class=\"w-75\">\n <input type=\"text\" class=\"form-control\" :value=\"alias.value\" readonly />\n </div>\n <Btn v-if=\"alias.editable\" secondary @click.prevent=\"onDeleteAlias(alias)\">\n {{ t('DeleteAlias') }}\n </Btn>\n </li>\n <li class=\"btn-group d-flex justify-content-between align-items-center\">\n <div class=\"w-75\">\n <FormInputClearable\n :model-value=\"toBeAddedAlias\"\n @update:model-value=\"onCurrentAliasUpdate\"\n />\n </div>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onAddAlias(toBeAddedAlias)\">\n {{ t('AddAlias') }}\n </Btn>\n </li>\n </ul>\n </div>\n <div>\n <strong>{{ currentMessage }}</strong>\n <ul class=\"list-unstyled ms-4 mt-3\">\n <li\n v-for=\"(error, index) of currentErrors\"\n :key=\"index\"\n class=\"d-flex justify-content-start align-items-center text-danger\"\n >\n <span>{{ error.message }}</span>\n </li>\n <li\n v-for=\"(warning, index) of currentWarnings\"\n :key=\"index\"\n class=\"d-flex justify-content-start align-items-center text-warning\"\n >\n <span>{{ warning.message }}</span>\n </li>\n </ul>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddAliasesCommand,\n AliasesReloadCommand,\n DeleteAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { ActionInfo, ActionResult, AliasItem, AliasActionResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref<boolean>(true);\n const productId = computed<string | undefined>(\n () => props.data.alias.alternateProductId || props.data.alias.productId,\n );\n const toBeAddedAlias = ref<string>('');\n const currentMessage = ref<string>('');\n const currentWarnings = ref<ActionInfo[]>([]);\n const currentErrors = ref<ActionInfo[]>([]);\n const aliases: AliasItem[] = [...(props.data.alias.aliases || [])];\n const isFormValid = computed<boolean>(() => toBeAddedAlias.value.length > 2);\n const resetErrorsAndWarnings = () => {\n currentMessage.value = '';\n currentWarnings.value = [];\n currentErrors.value = [];\n };\n const setErrorsAndWarnings = (actionResult: ActionResult | undefined) => {\n if (actionResult) {\n if (actionResult.message) {\n currentMessage.value = actionResult.message;\n }\n if (actionResult.warnings) {\n currentWarnings.value = [...actionResult.warnings];\n }\n if (actionResult.errors) {\n currentErrors.value = [...actionResult.errors];\n }\n }\n };\n const onAddAlias = async (aliasValue: string): Promise<unknown> => {\n resetErrorsAndWarnings();\n if (!productId.value) {\n return;\n }\n try {\n const actionResult: AliasActionResult | undefined = await instance.execute(\n new AddAliasesCommand({\n doNotHandleErrors: true,\n onSuccessMessage: '',\n aliases: [{ productId: productId.value, value: aliasValue }],\n }).from('alias-edit-modal'),\n );\n setErrorsAndWarnings(actionResult);\n if (actionResult && actionResult.success) {\n aliases.push(...(actionResult.aliases || []).map((a) => ({ ...a, editable: true })));\n toBeAddedAlias.value = '';\n }\n } catch {\n // Ignore Error\n }\n };\n const onDeleteAlias = async (toBeDeleted: AliasItem) => {\n resetErrorsAndWarnings();\n try {\n const actionResult: ActionResult | undefined = await instance.execute(\n new DeleteAliasesCommand({\n onSuccessMessage: '',\n doNotHandleErrors: true,\n aliases: [{ id: toBeDeleted.id }],\n }).from('alias-edit-modal'),\n );\n setErrorsAndWarnings(actionResult);\n if (actionResult && actionResult.success) {\n const index: number = aliases.indexOf(toBeDeleted);\n if (index !== -1) {\n aliases.splice(index, 1);\n }\n }\n } catch {\n // Ignore Error\n }\n };\n const onCurrentAliasUpdate = (value: string) => (toBeAddedAlias.value = value);\n const onModalShowUpdate = async (shown: boolean) => {\n try {\n show.value = shown;\n emit('update:show', shown);\n if (shown === false) {\n await instance.execute(new AliasesReloadCommand().from('alias-edit-modal'));\n }\n } catch {\n //Ignore Error\n }\n };\n return {\n show,\n aliases,\n isFormValid,\n toBeAddedAlias,\n currentErrors,\n currentMessage,\n currentWarnings,\n onModalShowUpdate,\n attrValue,\n onAddAlias,\n onDeleteAlias,\n onCurrentAliasUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('EditProductAliases')\"\n :close-on-outer-click=\"false\"\n lg\n @update:show=\"onModalShowUpdate\"\n >\n <form @submit.prevent=\"\">\n <div class=\"d-flex justify-content-start\">\n <strong>{{ t('Product') }} {{ attrValue(data.alias, '#DisplayName') }}</strong>\n </div>\n <div>\n <ul class=\"list-unstyled mt-3\">\n <li\n v-for=\"(alias, index) of aliases\"\n :key=\"index\"\n class=\"btn-group d-flex justify-content-between align-items-center mb-2\"\n >\n <div class=\"w-75\">\n <input type=\"text\" class=\"form-control\" :value=\"alias.value\" readonly />\n </div>\n <Btn v-if=\"alias.editable\" secondary @click.prevent=\"onDeleteAlias(alias)\">\n {{ t('DeleteAlias') }}\n </Btn>\n </li>\n <li class=\"btn-group d-flex justify-content-between align-items-center\">\n <div class=\"w-75\">\n <FormInputClearable\n :model-value=\"toBeAddedAlias\"\n @update:model-value=\"onCurrentAliasUpdate\"\n />\n </div>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onAddAlias(toBeAddedAlias)\">\n {{ t('AddAlias') }}\n </Btn>\n </li>\n </ul>\n </div>\n <div>\n <strong>{{ currentMessage }}</strong>\n <ul class=\"list-unstyled ms-4 mt-3\">\n <li\n v-for=\"(error, index) of currentErrors\"\n :key=\"index\"\n class=\"d-flex justify-content-start align-items-center text-danger\"\n >\n <span>{{ error.message }}</span>\n </li>\n <li\n v-for=\"(warning, index) of currentWarnings\"\n :key=\"index\"\n class=\"d-flex justify-content-start align-items-center text-warning\"\n >\n <span>{{ warning.message }}</span>\n </li>\n </ul>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddAliasesCommand,\n AliasesReloadCommand,\n DeleteAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { ActionInfo, ActionResult, AliasItem, AliasActionResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref<boolean>(true);\n const productId = computed<string | undefined>(\n () => props.data.alias.alternateProductId || props.data.alias.productId,\n );\n const toBeAddedAlias = ref<string>('');\n const currentMessage = ref<string>('');\n const currentWarnings = ref<ActionInfo[]>([]);\n const currentErrors = ref<ActionInfo[]>([]);\n const aliases: AliasItem[] = [...(props.data.alias.aliases || [])];\n const isFormValid = computed<boolean>(() => toBeAddedAlias.value.length > 2);\n const resetErrorsAndWarnings = () => {\n currentMessage.value = '';\n currentWarnings.value = [];\n currentErrors.value = [];\n };\n const setErrorsAndWarnings = (actionResult: ActionResult | undefined) => {\n if (actionResult) {\n if (actionResult.message) {\n currentMessage.value = actionResult.message;\n }\n if (actionResult.warnings) {\n currentWarnings.value = [...actionResult.warnings];\n }\n if (actionResult.errors) {\n currentErrors.value = [...actionResult.errors];\n }\n }\n };\n const onAddAlias = async (aliasValue: string): Promise<unknown> => {\n resetErrorsAndWarnings();\n if (!productId.value) {\n return;\n }\n try {\n const actionResult: AliasActionResult | undefined = await instance.execute(\n new AddAliasesCommand({\n doNotHandleErrors: true,\n onSuccessMessage: '',\n aliases: [{ productId: productId.value, value: aliasValue }],\n }).from('alias-edit-modal'),\n );\n setErrorsAndWarnings(actionResult);\n if (actionResult && actionResult.success) {\n aliases.push(...(actionResult.aliases || []).map((a) => ({ ...a, editable: true })));\n toBeAddedAlias.value = '';\n }\n } catch {\n // Ignore Error\n }\n };\n const onDeleteAlias = async (toBeDeleted: AliasItem) => {\n resetErrorsAndWarnings();\n try {\n const actionResult: ActionResult | undefined = await instance.execute(\n new DeleteAliasesCommand({\n onSuccessMessage: '',\n doNotHandleErrors: true,\n aliases: [{ id: toBeDeleted.id }],\n }).from('alias-edit-modal'),\n );\n setErrorsAndWarnings(actionResult);\n if (actionResult && actionResult.success) {\n const index: number = aliases.indexOf(toBeDeleted);\n if (index !== -1) {\n aliases.splice(index, 1);\n }\n }\n } catch {\n // Ignore Error\n }\n };\n const onCurrentAliasUpdate = (value: string) => (toBeAddedAlias.value = value);\n const onModalShowUpdate = async (shown: boolean) => {\n try {\n show.value = shown;\n emit('update:show', shown);\n if (shown === false) {\n await instance.execute(new AliasesReloadCommand().from('alias-edit-modal'));\n }\n } catch {\n //Ignore Error\n }\n };\n return {\n show,\n aliases,\n isFormValid,\n toBeAddedAlias,\n currentErrors,\n currentMessage,\n currentWarnings,\n onModalShowUpdate,\n attrValue,\n onAddAlias,\n onDeleteAlias,\n onCurrentAliasUpdate,\n };\n },\n});\n</script>\n","<template><div></div></template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasExportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n ExportAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\n\nexport default defineComponent({\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasExportActionData>, required: false, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n onMounted(async () => {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n try {\n const isJob: boolean | undefined = await instance.execute(\n new ExportAliasesCommand({ onSuccessMessage: props.t('AliasesExportReady') }).from(\n 'aliases-export-modal',\n ),\n );\n if (isJob === true) {\n await instance.execute(\n new AddNotificationCommand({\n type: 'success',\n message: props.t('AliasesExportScheduled'),\n }).from('aliases-export-modal'),\n );\n }\n } catch {\n // Ignore error\n }\n emit('update:show', false);\n });\n return {};\n },\n});\n</script>\n","<template><div></div></template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasExportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n ExportAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\n\nexport default defineComponent({\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasExportActionData>, required: false, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n onMounted(async () => {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n try {\n const isJob: boolean | undefined = await instance.execute(\n new ExportAliasesCommand({ onSuccessMessage: props.t('AliasesExportReady') }).from(\n 'aliases-export-modal',\n ),\n );\n if (isJob === true) {\n await instance.execute(\n new AddNotificationCommand({\n type: 'success',\n message: props.t('AliasesExportScheduled'),\n }).from('aliases-export-modal'),\n );\n }\n } catch {\n // Ignore error\n }\n emit('update:show', false);\n });\n return {};\n },\n});\n</script>\n","const toBase64 = (file: File) =>\n new Promise<string>((resolve, reject) => {\n if (!window.FileReader) {\n return reject(new Error('FileReader not available!'));\n }\n const reader = new FileReader();\n reader.onerror = (error) => reject(error);\n reader.onload = () => resolve(reader.result as string);\n reader.readAsDataURL(file);\n });\nexport default toBase64;\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('ImportAliasList')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n </label>\n <div class=\"pt-2 has-validation\">\n <div class=\"form-label fw-bolder\">{{ t('File') }}</div>\n <input type=\"file\" class=\"form-control\" @change=\"onFileUpload($event)\" />\n </div>\n <p class=\"mt-3\">{{ t('ImportAliasWarning') }}</p>\n <p>{{ t('ImportAliasInfo') }}</p>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onImport()\">\n {{ t('Import') }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasImportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { ImportAliasesCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport toBase64 from '@/common/helpers/toBase64';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasImportActionData>, required: false, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const show = ref<boolean>(true);\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const uploadedFile = ref<File | null>();\n const isFormValid = computed(() => !!uploadedFile.value);\n const validators: Record<string, Validators> = {\n uploadedFile: { [ValidationType.required]: {} },\n };\n const onFileUpload = ($event: Event) => {\n const input = $event.target as HTMLInputElement;\n if (input && input.files) {\n uploadedFile.value = input.files[0];\n }\n };\n const close = () => emit('update:show', false);\n const onImport = async () => {\n if (!uploadedFile.value) {\n return;\n }\n try {\n const file = await toBase64(uploadedFile.value);\n await instance.execute(\n new ImportAliasesCommand({\n file,\n fileName: uploadedFile.value.name,\n onSuccessMessage: props.t('CatalogImportAliasesSuccess'),\n }).from('aliases-import-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n return {\n show,\n validators,\n isFormValid,\n uploadedFile,\n close,\n onImport,\n onFileUpload,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('ImportAliasList')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n </label>\n <div class=\"pt-2 has-validation\">\n <div class=\"form-label fw-bolder\">{{ t('File') }}</div>\n <input type=\"file\" class=\"form-control\" @change=\"onFileUpload($event)\" />\n </div>\n <p class=\"mt-3\">{{ t('ImportAliasWarning') }}</p>\n <p>{{ t('ImportAliasInfo') }}</p>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onImport()\">\n {{ t('Import') }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { AliasImportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { ImportAliasesCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport toBase64 from '@/common/helpers/toBase64';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<AliasImportActionData>, required: false, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const show = ref<boolean>(true);\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const uploadedFile = ref<File | null>();\n const isFormValid = computed(() => !!uploadedFile.value);\n const validators: Record<string, Validators> = {\n uploadedFile: { [ValidationType.required]: {} },\n };\n const onFileUpload = ($event: Event) => {\n const input = $event.target as HTMLInputElement;\n if (input && input.files) {\n uploadedFile.value = input.files[0];\n }\n };\n const close = () => emit('update:show', false);\n const onImport = async () => {\n if (!uploadedFile.value) {\n return;\n }\n try {\n const file = await toBase64(uploadedFile.value);\n await instance.execute(\n new ImportAliasesCommand({\n file,\n fileName: uploadedFile.value.name,\n onSuccessMessage: props.t('CatalogImportAliasesSuccess'),\n }).from('aliases-import-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n return {\n show,\n validators,\n isFormValid,\n uploadedFile,\n close,\n onImport,\n onFileUpload,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <AliasEditModal\n v-if=\"currentActionName === CatalogAction.aliasEdit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasEditActionData\"\n @update:show=\"onActionCompleted\"\n ></AliasEditModal>\n <AliasesImportModal\n v-if=\"currentActionName === CatalogAction.aliasImport\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasImportActionData\"\n @update:show=\"onActionCompleted\"\n >\n </AliasesImportModal>\n <AliasesExportModal\n v-if=\"currentActionName === CatalogAction.aliasExport\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasExportActionData\"\n @update:show=\"onActionCompleted\"\n >\n </AliasesExportModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.aliasDelete\"\n :title=\"t('DeleteProductAliases')\"\n :item=\"(currentActionData as AliasDeleteActionData).aliases\"\n :t=\"t\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onAliasDelete\"\n >\n <div class=\"mb-4\">\n {{ t('AliasesConfirmDelete') }}\n <ul class=\"list-unstyled\">\n <li\n v-for=\"(alias, index) of (currentActionData as AliasDeleteActionData).aliases\"\n :key=\"index\"\n >\n <strong>\n {{ alias.value }}\n </strong>\n </li>\n </ul>\n </div>\n </Confirmation>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue';\n\nimport {\n AliasesReloadCommand,\n CatalogActionCompleted,\n DeleteAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport AliasEditModal from '@/catalogs/components/aliases/AliasEditModal.vue';\nimport AliasesExportModal from '@/catalogs/components/aliases/AliasesExportModal.vue';\nimport AliasesImportModal from '@/catalogs/components/aliases/AliasesImportModal.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { AliasItem } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n AliasDeleteActionData,\n AliasEditActionData,\n AliasExportActionData,\n AliasImportActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-actions-modals',\n components: {\n Confirmation,\n AliasEditModal,\n AliasesImportModal,\n AliasesExportModal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n const onAliasesDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.aliasDelete) {\n return;\n }\n const aliasesForDeletion: AliasItem[] = (currentActions.data as AliasDeleteActionData)\n ?.aliases;\n if (!aliasesForDeletion || !aliasesForDeletion.length) {\n return;\n }\n try {\n await instance.value?.execute(\n new DeleteAliasesCommand({\n onSuccessMessage: t('AliasDeleteSuccess'),\n aliases: aliasesForDeletion.map((alias: AliasItem) => ({\n id: alias.id,\n })),\n }).from(componentName),\n );\n\n await instance.value?.execute(new AliasesReloadCommand().from(componentName));\n } catch {\n // Ignore Error\n }\n onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n componentName,\n isWebComponent,\n currentActionName,\n currentActionData,\n CatalogAction,\n t,\n attrValue,\n onAliasDelete: onAliasesDelete,\n onActionCompleted,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <AliasEditModal\n v-if=\"currentActionName === CatalogAction.aliasEdit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasEditActionData\"\n @update:show=\"onActionCompleted\"\n ></AliasEditModal>\n <AliasesImportModal\n v-if=\"currentActionName === CatalogAction.aliasImport\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasImportActionData\"\n @update:show=\"onActionCompleted\"\n >\n </AliasesImportModal>\n <AliasesExportModal\n v-if=\"currentActionName === CatalogAction.aliasExport\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as AliasExportActionData\"\n @update:show=\"onActionCompleted\"\n >\n </AliasesExportModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.aliasDelete\"\n :title=\"t('DeleteProductAliases')\"\n :item=\"(currentActionData as AliasDeleteActionData).aliases\"\n :t=\"t\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onAliasDelete\"\n >\n <div class=\"mb-4\">\n {{ t('AliasesConfirmDelete') }}\n <ul class=\"list-unstyled\">\n <li\n v-for=\"(alias, index) of (currentActionData as AliasDeleteActionData).aliases\"\n :key=\"index\"\n >\n <strong>\n {{ alias.value }}\n </strong>\n </li>\n </ul>\n </div>\n </Confirmation>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue';\n\nimport {\n AliasesReloadCommand,\n CatalogActionCompleted,\n DeleteAliasesCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport AliasEditModal from '@/catalogs/components/aliases/AliasEditModal.vue';\nimport AliasesExportModal from '@/catalogs/components/aliases/AliasesExportModal.vue';\nimport AliasesImportModal from '@/catalogs/components/aliases/AliasesImportModal.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { AliasItem } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n AliasDeleteActionData,\n AliasEditActionData,\n AliasExportActionData,\n AliasImportActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-actions-modals',\n components: {\n Confirmation,\n AliasEditModal,\n AliasesImportModal,\n AliasesExportModal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n const onAliasesDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.aliasDelete) {\n return;\n }\n const aliasesForDeletion: AliasItem[] = (currentActions.data as AliasDeleteActionData)\n ?.aliases;\n if (!aliasesForDeletion || !aliasesForDeletion.length) {\n return;\n }\n try {\n await instance.value?.execute(\n new DeleteAliasesCommand({\n onSuccessMessage: t('AliasDeleteSuccess'),\n aliases: aliasesForDeletion.map((alias: AliasItem) => ({\n id: alias.id,\n })),\n }).from(componentName),\n );\n\n await instance.value?.execute(new AliasesReloadCommand().from(componentName));\n } catch {\n // Ignore Error\n }\n onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n componentName,\n isWebComponent,\n currentActionName,\n currentActionData,\n CatalogAction,\n t,\n attrValue,\n onAliasDelete: onAliasesDelete,\n onActionCompleted,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && visible\">\n <ul v-if=\"breadcrumbs && breadcrumbs.length > 0\" class=\"list-unstyled\">\n <li v-for=\"(item, index) in breadcrumbs\" :key=\"index\" class=\"list-inline-item\">\n <div class=\"d-flex align-items-center\">\n <Clickable\n v-if=\"index < breadcrumbs.length - 1\"\n class=\"d-flex align-items-center\"\n @click.prevent=\"setClassification(item)\"\n >\n <Icon v-if=\"index == 0\" name=\"house-home\" class=\"me-1\" :size=\"16\" />\n {{ item.name }}\n </Clickable>\n <template v-else>\n <Icon v-if=\"index == 0\" name=\"house-home\" class=\"me-1\" :size=\"16\" />\n <span>{{ item.name }}</span>\n </template>\n\n <Arrow v-if=\"index < breadcrumbs.length - 1\" class=\"ms-2\" />\n </div>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport { BreadcrumbItem, ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-breadcrumbs',\n\n components: {\n Arrow,\n Clickable,\n Icon,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Breadcrumbs],\n );\n\n const breadcrumbs = computed(() => (store.value ? store.value?.data.breadcrumbs?.items : null));\n\n const setClassification = ({ cid }: ClassificationItem | BreadcrumbItem) => {\n if (instance.value && cid) {\n try {\n if (cid == 'ROOT') {\n instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: true,\n treeType: undefined,\n }).from(componentName),\n );\n } else {\n instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: true,\n treeType: routeData.value?.products.treeType,\n }).from(componentName),\n );\n }\n } catch {\n // ignore\n }\n }\n };\n\n const visible = computed(\n () => store.value?.options.components?.products?.search?.breadcrumbs?.visible,\n );\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n breadcrumbs,\n visible,\n setClassification,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && visible\">\n <ul v-if=\"breadcrumbs && breadcrumbs.length > 0\" class=\"list-unstyled\">\n <li v-for=\"(item, index) in breadcrumbs\" :key=\"index\" class=\"list-inline-item\">\n <div class=\"d-flex align-items-center\">\n <Clickable\n v-if=\"index < breadcrumbs.length - 1\"\n class=\"d-flex align-items-center\"\n @click.prevent=\"setClassification(item)\"\n >\n <Icon v-if=\"index == 0\" name=\"house-home\" class=\"me-1\" :size=\"16\" />\n {{ item.name }}\n </Clickable>\n <template v-else>\n <Icon v-if=\"index == 0\" name=\"house-home\" class=\"me-1\" :size=\"16\" />\n <span>{{ item.name }}</span>\n </template>\n\n <Arrow v-if=\"index < breadcrumbs.length - 1\" class=\"ms-2\" />\n </div>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport { BreadcrumbItem, ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-breadcrumbs',\n\n components: {\n Arrow,\n Clickable,\n Icon,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Breadcrumbs],\n );\n\n const breadcrumbs = computed(() => (store.value ? store.value?.data.breadcrumbs?.items : null));\n\n const setClassification = ({ cid }: ClassificationItem | BreadcrumbItem) => {\n if (instance.value && cid) {\n try {\n if (cid == 'ROOT') {\n instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: true,\n treeType: undefined,\n }).from(componentName),\n );\n } else {\n instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: true,\n treeType: routeData.value?.products.treeType,\n }).from(componentName),\n );\n }\n } catch {\n // ignore\n }\n }\n };\n\n const visible = computed(\n () => store.value?.options.components?.products?.search?.breadcrumbs?.visible,\n );\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n breadcrumbs,\n visible,\n setClassification,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('AliasFilters')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <AliasFilters></AliasFilters>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchAliasFiltersOptions } from '@/catalogs/api/configuration/components/SearchAliasFiltersOptions';\nimport AliasFilters from '@/catalogs/components/aliases/AliasFilters.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Card from '@/common/components/Card.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-filters',\n\n components: {\n Card,\n AliasFilters,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { isReady, isWebComponent, componentName, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.aliases?.search?.filters ??\n ({} as SearchAliasFiltersOptions),\n );\n\n const visible = computed(() => componentOptions.value.visible);\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n store,\n visible,\n t,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('AliasFilters')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <AliasFilters></AliasFilters>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchAliasFiltersOptions } from '@/catalogs/api/configuration/components/SearchAliasFiltersOptions';\nimport AliasFilters from '@/catalogs/components/aliases/AliasFilters.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Card from '@/common/components/Card.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-aliases-search-filters',\n\n components: {\n Card,\n AliasFilters,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { isReady, isWebComponent, componentName, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.aliases?.search?.filters ??\n ({} as SearchAliasFiltersOptions),\n );\n\n const visible = computed(() => componentOptions.value.visible);\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n store,\n visible,\n t,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <Card\n class=\"mb-4\"\n sticky-footer\n :icon=\"componentOptions.icon && 'funnel-filter'\"\n :header=\"t('Filters', true)\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <div\n v-if=\"\n filtersToDisplay?.length &&\n (componentOptions.expandAllVisible || componentOptions.collapseAllVisible)\n \"\n class=\"d-flex mb-3\"\n >\n <LinkSecondary\n v-if=\"componentOptions.expandAllVisible\"\n icon=\"expand-maximize\"\n class=\"ms-1 me-4 ext-expand-all-filters\"\n @click.prevent=\"expandAll\"\n >\n {{ t('ExpandAllFilters') }}\n </LinkSecondary>\n\n <LinkSecondary\n v-if=\"componentOptions.collapseAllVisible\"\n icon=\"shrink-minimise\"\n class=\"ext-collapse-all-filters\"\n @click.prevent=\"collapseAll\"\n >\n {{ t('CollapseAllFilters') }}\n </LinkSecondary>\n </div>\n\n <ul v-if=\"filtersToDisplay?.length\" class=\"list-unstyled mb-0\">\n <li v-for=\"filter in filtersToDisplay\" :key=\"filter.attributeCode\" class=\"pb-2\">\n <Clickable\n class=\"py-1 d-flex align-items-start text-decoration-none lh-sm\"\n :aria-expanded=\"isFilterOpen(filter)\"\n @click=\"toggleFilter(filter)\"\n >\n <Spinner v-if=\"isFilterLoading(filter)\" sm />\n <Arrow v-else :dir=\"isFilterOpen(filter) ? 'up' : 'down'\" />\n <span\n v-safe-html=\"filter.attributeNameHtml\"\n class=\"d-block ms-2 text-body text-break pis-label\"\n >\n </span>\n <Badge class=\"ms-auto\" v-text=\"filter.hitCount\" />\n </Clickable>\n\n <div v-if=\"isFilterOpen(filter)\">\n <ScrollableList\n v-if=\"filtersFetched.get(filter.attributeCode)?.length\"\n class=\"list-unstyled my-1 ms-2\"\n height=\"30vh\"\n :items=\"filtersFetched.get(filter.attributeCode) || []\"\n >\n <template #item=\"{ item }\">\n <div class=\"form-check pe-1\">\n <label class=\"form-check-label d-flex align-items-start py-1 ms-1\">\n <input\n v-model=\"filtersModel[filter.attributeCode][criterionValueKey(item.value)]\"\n type=\"checkbox\"\n class=\"form-check-input mt-1 me-2 flex-shrink-0\"\n :name=\"item.text\"\n @change=\"onFilterValueChange\"\n />\n <span class=\"text-break user-select-none\" v-text=\"item.text\" />\n <Badge class=\"ms-auto\" v-text=\"item.hitCount\" />\n </label>\n </div>\n </template>\n </ScrollableList>\n <Message v-else>{{ t('NoFilterValues') }}</Message>\n </div>\n </li>\n </ul>\n\n <Message v-else>{{ t('NoFilters') }}</Message>\n\n <template v-if=\"areFiltersApplied || filtersAll?.length\" #footer>\n <Btn\n v-if=\"filteredResultCount !== null && areFiltersDirty\"\n class=\"w-100 mb-2 justify-content-between\"\n :disabled=\"areFiltersDirty !== true || filteredResultCount === 0\"\n :is-loading=\"filteredResultCountLoading\"\n @click.prevent=\"applyModelFilters\"\n >\n <template v-if=\"filteredResultCount === null\">\n {{ t('ShowResults', true) }}\n </template>\n <template v-else-if=\"filteredResultCount === 0\">\n {{ t('NoFilteringResultsFound') }}\n </template>\n <template v-else>\n {{ t('ShowNResults', true, [`${filteredResultCount || '0'}`]) }}\n </template>\n </Btn>\n\n <LinkSecondary\n v-if=\"areFiltersApplied\"\n icon=\"stop-not-allowed\"\n class=\"mt-2\"\n @click.prevent=\"clearAndCloseFilters\"\n >\n {{ t('ClearFilters', true) }}\n </LinkSecondary>\n\n <LinkSecondary icon=\"pop-out-window\" class=\"mt-2\" @click.prevent=\"showAllFilters\">\n {{ t('ShowAllFilters') }} ({{ filtersAll.length }})\n </LinkSecondary>\n </template>\n </Card>\n\n <FiltersNavigator\n :show=\"allFiltersModalShown\"\n :title=\"t('AllFiltersModalTitle')\"\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-fetched=\"filtersFetched\"\n :filters-model=\"filtersModel\"\n :fetch-filter-values=\"fetchFilterValues\"\n :filtered-result-count=\"filteredResultCount\"\n :filtered-result-count-loading=\"filteredResultCountLoading\"\n @value-change=\"onModalFilterValueChange\"\n @apply-filters=\"onModalApplyFilters\"\n @clear=\"resetFiltersApplied\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchFiltersOptions } from '@/catalogs/api/configuration/components/SearchFiltersOptions';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Badge from '@/common/components/Badge.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport Card from '@/common/components/Card.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport ScrollableList from '@/common/components/ScrollableList.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { criterionValueKey } from '@/common/helpers/filterCriteria';\nimport { FilterItem } from '@/common/services/swagger';\nimport FiltersNavigator from '@/products/components/common/FiltersNavigatorModal.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-filters',\n\n components: {\n Spinner,\n Badge,\n LinkSecondary,\n Btn,\n Clickable,\n Arrow,\n Card,\n FiltersNavigator,\n ScrollableList,\n Message,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const areFiltersDirty = ref(false);\n const allFiltersModalShown = ref(false);\n\n const { componentName, isReady, isWebComponent, instance, store, t, useProductsFilters } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Filters]);\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.filters ?? ({} as SearchFiltersOptions),\n );\n\n const {\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filtersLoading,\n areFiltersApplied,\n filteredResultCount,\n filteredResultCountLoading,\n filtersOpen,\n fetchFilterValues,\n applyModelFilters,\n resetFiltersApplied,\n refreshResultCount,\n refreshFetchedFilterValues,\n syncSelectedFilters,\n expandAllFilters,\n collapseAllFilters,\n } = useProductsFilters();\n\n const unwatch = watch(\n () => instance.value,\n () => {\n instance.value?.eventBus.on('search-changed', () => {\n setTimeout(() => {\n if (filtersFetched.value.size > 0) {\n refreshFetchedFilterValues();\n refreshResultCount();\n }\n }, 500);\n\n syncSelectedFilters();\n });\n unwatch();\n },\n );\n\n const trimFilters = (filters) =>\n filters.slice(0, componentOptions.value.maxFiltersVisible || 10) ?? [];\n\n const filtersToDisplay = computed(() =>\n filtersPromoted.value.length ? filtersPromoted.value : trimFilters(filtersAdditional.value),\n );\n\n const toggleFilter = async ({ attributeCode }: FilterItem) => {\n if (!attributeCode || !instance.value) return;\n\n if (filtersOpen.value.has(attributeCode)) {\n filtersOpen.value.delete(attributeCode);\n } else {\n if (!filtersFetched.value.has(attributeCode)) {\n await fetchFilterValues([attributeCode]);\n }\n\n filtersOpen.value.add(attributeCode);\n }\n };\n\n const isFilterOpen = ({ attributeCode }: FilterItem) => filtersOpen.value.has(attributeCode);\n const isFilterLoading = ({ attributeCode }: FilterItem) =>\n filtersLoading.value.has(attributeCode);\n\n const showAllFilters = () => {\n // some issue with updating value from modal, workaround to trigger change on allFiltersModalShown\n allFiltersModalShown.value = false;\n setTimeout(() => {\n allFiltersModalShown.value = true;\n }, 1);\n };\n\n const clearAndCloseFilters = async () => {\n resetFiltersApplied().then(() => {\n filtersOpen.value.clear();\n });\n };\n\n const onModalFilterValueChange = ({ attributeCode, filterValueName, value }) => {\n filtersModel.value[attributeCode] ??= {};\n filtersModel.value[attributeCode][filterValueName] = value;\n refreshResultCount();\n };\n\n const onModalApplyFilters = () => {\n applyModelFilters();\n allFiltersModalShown.value = false;\n };\n\n const onFilterValueChange = () => {\n areFiltersDirty.value = true;\n refreshResultCount();\n };\n\n const expandAll = () => {\n expandAllFilters(filtersToDisplay.value);\n };\n\n const collapseAll = () => {\n collapseAllFilters();\n };\n\n return {\n root,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n store,\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersToDisplay,\n filtersOpen,\n filtersFetched,\n areFiltersDirty,\n filtersModel,\n areFiltersApplied,\n allFiltersModalShown,\n filteredResultCount,\n filteredResultCountLoading,\n t,\n toggleFilter,\n clearAndCloseFilters,\n isFilterOpen,\n isFilterLoading,\n showAllFilters,\n applyModelFilters,\n fetchFilterValues,\n onModalFilterValueChange,\n onModalApplyFilters,\n onFilterValueChange,\n resetFiltersApplied,\n expandAll,\n collapseAll,\n criterionValueKey,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <Card\n class=\"mb-4\"\n sticky-footer\n :icon=\"componentOptions.icon && 'funnel-filter'\"\n :header=\"t('Filters', true)\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <div\n v-if=\"\n filtersToDisplay?.length &&\n (componentOptions.expandAllVisible || componentOptions.collapseAllVisible)\n \"\n class=\"d-flex mb-3\"\n >\n <LinkSecondary\n v-if=\"componentOptions.expandAllVisible\"\n icon=\"expand-maximize\"\n class=\"ms-1 me-4 ext-expand-all-filters\"\n @click.prevent=\"expandAll\"\n >\n {{ t('ExpandAllFilters') }}\n </LinkSecondary>\n\n <LinkSecondary\n v-if=\"componentOptions.collapseAllVisible\"\n icon=\"shrink-minimise\"\n class=\"ext-collapse-all-filters\"\n @click.prevent=\"collapseAll\"\n >\n {{ t('CollapseAllFilters') }}\n </LinkSecondary>\n </div>\n\n <ul v-if=\"filtersToDisplay?.length\" class=\"list-unstyled mb-0\">\n <li v-for=\"filter in filtersToDisplay\" :key=\"filter.attributeCode\" class=\"pb-2\">\n <Clickable\n class=\"py-1 d-flex align-items-start text-decoration-none lh-sm\"\n :aria-expanded=\"isFilterOpen(filter)\"\n @click=\"toggleFilter(filter)\"\n >\n <Spinner v-if=\"isFilterLoading(filter)\" sm />\n <Arrow v-else :dir=\"isFilterOpen(filter) ? 'up' : 'down'\" />\n <span\n v-safe-html=\"filter.attributeNameHtml\"\n class=\"d-block ms-2 text-body text-break pis-label\"\n >\n </span>\n <Badge class=\"ms-auto\" v-text=\"filter.hitCount\" />\n </Clickable>\n\n <div v-if=\"isFilterOpen(filter)\">\n <ScrollableList\n v-if=\"filtersFetched.get(filter.attributeCode)?.length\"\n class=\"list-unstyled my-1 ms-2\"\n height=\"30vh\"\n :items=\"filtersFetched.get(filter.attributeCode) || []\"\n >\n <template #item=\"{ item }\">\n <div class=\"form-check pe-1\">\n <label class=\"form-check-label d-flex align-items-start py-1 ms-1\">\n <input\n v-model=\"filtersModel[filter.attributeCode][criterionValueKey(item.value)]\"\n type=\"checkbox\"\n class=\"form-check-input mt-1 me-2 flex-shrink-0\"\n :name=\"item.text\"\n @change=\"onFilterValueChange\"\n />\n <span class=\"text-break user-select-none\" v-text=\"item.text\" />\n <Badge class=\"ms-auto\" v-text=\"item.hitCount\" />\n </label>\n </div>\n </template>\n </ScrollableList>\n <Message v-else>{{ t('NoFilterValues') }}</Message>\n </div>\n </li>\n </ul>\n\n <Message v-else>{{ t('NoFilters') }}</Message>\n\n <template v-if=\"areFiltersApplied || filtersAll?.length\" #footer>\n <Btn\n v-if=\"filteredResultCount !== null && areFiltersDirty\"\n class=\"w-100 mb-2 justify-content-between\"\n :disabled=\"areFiltersDirty !== true || filteredResultCount === 0\"\n :is-loading=\"filteredResultCountLoading\"\n @click.prevent=\"applyModelFilters\"\n >\n <template v-if=\"filteredResultCount === null\">\n {{ t('ShowResults', true) }}\n </template>\n <template v-else-if=\"filteredResultCount === 0\">\n {{ t('NoFilteringResultsFound') }}\n </template>\n <template v-else>\n {{ t('ShowNResults', true, [`${filteredResultCount || '0'}`]) }}\n </template>\n </Btn>\n\n <LinkSecondary\n v-if=\"areFiltersApplied\"\n icon=\"stop-not-allowed\"\n class=\"mt-2\"\n @click.prevent=\"clearAndCloseFilters\"\n >\n {{ t('ClearFilters', true) }}\n </LinkSecondary>\n\n <LinkSecondary icon=\"pop-out-window\" class=\"mt-2\" @click.prevent=\"showAllFilters\">\n {{ t('ShowAllFilters') }} ({{ filtersAll.length }})\n </LinkSecondary>\n </template>\n </Card>\n\n <FiltersNavigator\n :show=\"allFiltersModalShown\"\n :title=\"t('AllFiltersModalTitle')\"\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-fetched=\"filtersFetched\"\n :filters-model=\"filtersModel\"\n :fetch-filter-values=\"fetchFilterValues\"\n :filtered-result-count=\"filteredResultCount\"\n :filtered-result-count-loading=\"filteredResultCountLoading\"\n @value-change=\"onModalFilterValueChange\"\n @apply-filters=\"onModalApplyFilters\"\n @clear=\"resetFiltersApplied\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchFiltersOptions } from '@/catalogs/api/configuration/components/SearchFiltersOptions';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Badge from '@/common/components/Badge.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport Card from '@/common/components/Card.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport ScrollableList from '@/common/components/ScrollableList.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { criterionValueKey } from '@/common/helpers/filterCriteria';\nimport { FilterItem } from '@/common/services/swagger';\nimport FiltersNavigator from '@/products/components/common/FiltersNavigatorModal.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-filters',\n\n components: {\n Spinner,\n Badge,\n LinkSecondary,\n Btn,\n Clickable,\n Arrow,\n Card,\n FiltersNavigator,\n ScrollableList,\n Message,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const areFiltersDirty = ref(false);\n const allFiltersModalShown = ref(false);\n\n const { componentName, isReady, isWebComponent, instance, store, t, useProductsFilters } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Filters]);\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.filters ?? ({} as SearchFiltersOptions),\n );\n\n const {\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filtersLoading,\n areFiltersApplied,\n filteredResultCount,\n filteredResultCountLoading,\n filtersOpen,\n fetchFilterValues,\n applyModelFilters,\n resetFiltersApplied,\n refreshResultCount,\n refreshFetchedFilterValues,\n syncSelectedFilters,\n expandAllFilters,\n collapseAllFilters,\n } = useProductsFilters();\n\n const unwatch = watch(\n () => instance.value,\n () => {\n instance.value?.eventBus.on('search-changed', () => {\n setTimeout(() => {\n if (filtersFetched.value.size > 0) {\n refreshFetchedFilterValues();\n refreshResultCount();\n }\n }, 500);\n\n syncSelectedFilters();\n });\n unwatch();\n },\n );\n\n const trimFilters = (filters) =>\n filters.slice(0, componentOptions.value.maxFiltersVisible || 10) ?? [];\n\n const filtersToDisplay = computed(() =>\n filtersPromoted.value.length ? filtersPromoted.value : trimFilters(filtersAdditional.value),\n );\n\n const toggleFilter = async ({ attributeCode }: FilterItem) => {\n if (!attributeCode || !instance.value) return;\n\n if (filtersOpen.value.has(attributeCode)) {\n filtersOpen.value.delete(attributeCode);\n } else {\n if (!filtersFetched.value.has(attributeCode)) {\n await fetchFilterValues([attributeCode]);\n }\n\n filtersOpen.value.add(attributeCode);\n }\n };\n\n const isFilterOpen = ({ attributeCode }: FilterItem) => filtersOpen.value.has(attributeCode);\n const isFilterLoading = ({ attributeCode }: FilterItem) =>\n filtersLoading.value.has(attributeCode);\n\n const showAllFilters = () => {\n // some issue with updating value from modal, workaround to trigger change on allFiltersModalShown\n allFiltersModalShown.value = false;\n setTimeout(() => {\n allFiltersModalShown.value = true;\n }, 1);\n };\n\n const clearAndCloseFilters = async () => {\n resetFiltersApplied().then(() => {\n filtersOpen.value.clear();\n });\n };\n\n const onModalFilterValueChange = ({ attributeCode, filterValueName, value }) => {\n filtersModel.value[attributeCode] ??= {};\n filtersModel.value[attributeCode][filterValueName] = value;\n refreshResultCount();\n };\n\n const onModalApplyFilters = () => {\n applyModelFilters();\n allFiltersModalShown.value = false;\n };\n\n const onFilterValueChange = () => {\n areFiltersDirty.value = true;\n refreshResultCount();\n };\n\n const expandAll = () => {\n expandAllFilters(filtersToDisplay.value);\n };\n\n const collapseAll = () => {\n collapseAllFilters();\n };\n\n return {\n root,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n store,\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersToDisplay,\n filtersOpen,\n filtersFetched,\n areFiltersDirty,\n filtersModel,\n areFiltersApplied,\n allFiltersModalShown,\n filteredResultCount,\n filteredResultCountLoading,\n t,\n toggleFilter,\n clearAndCloseFilters,\n isFilterOpen,\n isFilterLoading,\n showAllFilters,\n applyModelFilters,\n fetchFilterValues,\n onModalFilterValueChange,\n onModalApplyFilters,\n onFilterValueChange,\n resetFiltersApplied,\n expandAll,\n collapseAll,\n criterionValueKey,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && componentOptions.visible\" class=\"mt-3\">\n <div v-if=\"filtersApplied.length\">\n <small class=\"d-inline-block me-2\">{{ t('AppliedFilters') }}:</small>\n\n <template v-for=\"(filter, fIndex) in filtersApplied\">\n <Badge\n v-for=\"(value, vIndex) in filter.values\"\n :key=\"`${fIndex}${vIndex}`\"\n class=\"me-2 my-1 py-2\"\n removable\n :title=\"`${filter.attributeName ?? filter.code}: ${value.text}`\"\n :remove-title=\"t('RemoveBadgeTitle')\"\n @remove=\"excludeFilter(filter, value.value)\"\n >\n {{ truncateText(filter.attributeName ?? filter.code) }}:\n {{ truncateText(value.text) }}\n </Badge>\n </template>\n\n <LinkSecondary icon=\"stop-not-allowed\" class=\"d-inline-flex align-middle\" @click=\"resetAll\">\n {{ t('ClearAll') }}\n </LinkSecondary>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { BaseComponentOptions } from '@/common/api/components/BaseComponentOptions';\nimport Badge from '@/common/components/Badge.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\n\nconst BADGE_TEXT_MAX_LEN = 20;\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-filters-status',\n\n components: {\n Badge,\n LinkSecondary,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, store, t, useProductsFilters } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Filters],\n );\n\n const { filtersApplied, excludeFilter, resetFiltersApplied } = useProductsFilters();\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.filtersStatus ??\n ({} as BaseComponentOptions),\n );\n\n const resetAll = () => {\n if (filtersApplied.value.length) {\n resetFiltersApplied();\n }\n };\n\n const truncateText = (text: string) => {\n return text.length > BADGE_TEXT_MAX_LEN\n ? text.substring(0, BADGE_TEXT_MAX_LEN) + '...'\n : text;\n };\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n filtersApplied,\n componentOptions,\n t,\n excludeFilter,\n resetAll,\n truncateText,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && componentOptions.visible\" class=\"mt-3\">\n <div v-if=\"filtersApplied.length\">\n <small class=\"d-inline-block me-2\">{{ t('AppliedFilters') }}:</small>\n\n <template v-for=\"(filter, fIndex) in filtersApplied\">\n <Badge\n v-for=\"(value, vIndex) in filter.values\"\n :key=\"`${fIndex}${vIndex}`\"\n class=\"me-2 my-1 py-2\"\n removable\n :title=\"`${filter.attributeName ?? filter.code}: ${value.text}`\"\n :remove-title=\"t('RemoveBadgeTitle')\"\n @remove=\"excludeFilter(filter, value.value)\"\n >\n {{ truncateText(filter.attributeName ?? filter.code) }}:\n {{ truncateText(value.text) }}\n </Badge>\n </template>\n\n <LinkSecondary icon=\"stop-not-allowed\" class=\"d-inline-flex align-middle\" @click=\"resetAll\">\n {{ t('ClearAll') }}\n </LinkSecondary>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { BaseComponentOptions } from '@/common/api/components/BaseComponentOptions';\nimport Badge from '@/common/components/Badge.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\n\nconst BADGE_TEXT_MAX_LEN = 20;\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-filters-status',\n\n components: {\n Badge,\n LinkSecondary,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, store, t, useProductsFilters } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.Filters],\n );\n\n const { filtersApplied, excludeFilter, resetFiltersApplied } = useProductsFilters();\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.filtersStatus ??\n ({} as BaseComponentOptions),\n );\n\n const resetAll = () => {\n if (filtersApplied.value.length) {\n resetFiltersApplied();\n }\n };\n\n const truncateText = (text: string) => {\n return text.length > BADGE_TEXT_MAX_LEN\n ? text.substring(0, BADGE_TEXT_MAX_LEN) + '...'\n : text;\n };\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n filtersApplied,\n componentOptions,\n t,\n excludeFilter,\n resetAll,\n truncateText,\n };\n },\n});\n</script>\n","<template>\n <SearchFormView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :adapter=\"formAdapter\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport { ProductsSearchFormOptions } from '@/catalogs/api/configuration/components/ProductsSearchFormOptions';\nimport {\n GetAutocompleteCommand,\n SearchProductsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport SearchFormView from '@/common/components/search/SearchFormView.vue';\nimport type {\n SearchFormAdapter,\n SearchFormSearchArgs,\n} from '@/common/components/search/searchViewTypes';\nimport { CatalogProductSearchTypeEnum } from '@/common/services/swagger';\nimport type { AutocompleteSearchResult } from '@/common/services/swagger';\n\nconst searchTypeAllWords = {\n value: CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n translate: 'SearchTypeAllWords',\n};\nconst searchTypeOneWord = {\n value: CatalogProductSearchTypeEnum.WITH_AT_LEAST_ONE_WORD,\n translate: 'SearchTypeOneWord',\n};\nconst searchTypeExact = {\n value: CatalogProductSearchTypeEnum.EXACT_PHRASE,\n translate: 'SearchTypeExact',\n};\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-form',\n\n components: {\n SearchFormView,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n widerThan,\n narrowerThan,\n t,\n emit,\n } = setupComponent(root, props.instanceId);\n\n const componentOptions = computed<ProductsSearchFormOptions | undefined>(\n () => store.value?.options.components?.products?.search?.form,\n );\n\n // The domain adapter for the shared search form: plain functions pinning\n // the catalogs search/autocomplete commands and the nested\n // `products.*` route accessors. No behavioral flags — the shared defaults\n // (immediate input handling, no focus refresh, no ready sync, default\n // dropdown height, no category badge) are the historical catalogs\n // behavior.\n const formAdapter: SearchFormAdapter = {\n t,\n widerThan,\n narrowerThan,\n initialSearchType: CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n search: async ({\n searchText,\n searchType,\n resetCategories,\n resetFilters,\n }: SearchFormSearchArgs) => {\n await instance.value?.execute(\n new SearchProductsCommand({\n searchText,\n searchType: searchType as CatalogProductSearchTypeEnum,\n resetCategories,\n resetFilters,\n }).from(componentName),\n );\n },\n autocomplete: (text: string) =>\n instance.value?.execute(\n new GetAutocompleteCommand({ searchText: text }).from(componentName),\n ) as Promise<AutocompleteSearchResult | undefined>,\n isRootCategory: () =>\n !routeData.value?.products?.cid || routeData.value?.products?.cid === 'ROOT',\n routeSearchText: () => routeData.value?.products.searchText,\n routeSearchType: () => routeData.value?.products.searchType,\n acceptsRouteSearchType: () => true,\n applyRouteSearchType: (type: string) => {\n if (routeData.value) {\n routeData.value.products.searchType = type as CatalogProductSearchTypeEnum;\n }\n },\n searchTypeOptions: () => [searchTypeAllWords, searchTypeOneWord, searchTypeExact],\n placeholder: () => t('SearchProductsInputPlaceholder'),\n searchAriaLabel: () => t('SearchButtonText'),\n isSearchTypeDropdownVisible: () => true,\n onAutocompleteItemClick: (item, searchText) => searchText(item.text ?? ''),\n buildAutocompleteItemCtx: (item) => ({\n instance: instance.value,\n item,\n emit,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n componentName,\n isReady,\n isWebComponent,\n store,\n componentOptions,\n formAdapter,\n };\n },\n});\n</script>\n","<template>\n <SearchFormView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :adapter=\"formAdapter\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport { ProductsSearchFormOptions } from '@/catalogs/api/configuration/components/ProductsSearchFormOptions';\nimport {\n GetAutocompleteCommand,\n SearchProductsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport SearchFormView from '@/common/components/search/SearchFormView.vue';\nimport type {\n SearchFormAdapter,\n SearchFormSearchArgs,\n} from '@/common/components/search/searchViewTypes';\nimport { CatalogProductSearchTypeEnum } from '@/common/services/swagger';\nimport type { AutocompleteSearchResult } from '@/common/services/swagger';\n\nconst searchTypeAllWords = {\n value: CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n translate: 'SearchTypeAllWords',\n};\nconst searchTypeOneWord = {\n value: CatalogProductSearchTypeEnum.WITH_AT_LEAST_ONE_WORD,\n translate: 'SearchTypeOneWord',\n};\nconst searchTypeExact = {\n value: CatalogProductSearchTypeEnum.EXACT_PHRASE,\n translate: 'SearchTypeExact',\n};\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-form',\n\n components: {\n SearchFormView,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n widerThan,\n narrowerThan,\n t,\n emit,\n } = setupComponent(root, props.instanceId);\n\n const componentOptions = computed<ProductsSearchFormOptions | undefined>(\n () => store.value?.options.components?.products?.search?.form,\n );\n\n // The domain adapter for the shared search form: plain functions pinning\n // the catalogs search/autocomplete commands and the nested\n // `products.*` route accessors. No behavioral flags — the shared defaults\n // (immediate input handling, no focus refresh, no ready sync, default\n // dropdown height, no category badge) are the historical catalogs\n // behavior.\n const formAdapter: SearchFormAdapter = {\n t,\n widerThan,\n narrowerThan,\n initialSearchType: CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n search: async ({\n searchText,\n searchType,\n resetCategories,\n resetFilters,\n }: SearchFormSearchArgs) => {\n await instance.value?.execute(\n new SearchProductsCommand({\n searchText,\n searchType: searchType as CatalogProductSearchTypeEnum,\n resetCategories,\n resetFilters,\n }).from(componentName),\n );\n },\n autocomplete: (text: string) =>\n instance.value?.execute(\n new GetAutocompleteCommand({ searchText: text }).from(componentName),\n ) as Promise<AutocompleteSearchResult | undefined>,\n isRootCategory: () =>\n !routeData.value?.products?.cid || routeData.value?.products?.cid === 'ROOT',\n routeSearchText: () => routeData.value?.products.searchText,\n routeSearchType: () => routeData.value?.products.searchType,\n acceptsRouteSearchType: () => true,\n applyRouteSearchType: (type: string) => {\n if (routeData.value) {\n routeData.value.products.searchType = type as CatalogProductSearchTypeEnum;\n }\n },\n searchTypeOptions: () => [searchTypeAllWords, searchTypeOneWord, searchTypeExact],\n placeholder: () => t('SearchProductsInputPlaceholder'),\n searchAriaLabel: () => t('SearchButtonText'),\n isSearchTypeDropdownVisible: () => true,\n onAutocompleteItemClick: (item, searchText) => searchText(item.text ?? ''),\n buildAutocompleteItemCtx: (item) => ({\n instance: instance.value,\n item,\n emit,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n componentName,\n isReady,\n isWebComponent,\n store,\n componentOptions,\n formAdapter,\n };\n },\n});\n</script>\n","<template>\n <div class=\"my-1\" style=\"cursor: pointer\" @click.prevent=\"loadConfiguredOptions\">\n <span class=\"me-1\">\n <Icon name=\"arrow-right\" :size=\"16\" :style=\"{ transform: expanded ? 'rotate(90deg)' : '' }\" />\n </span>\n <a>{{ productId }}</a>\n </div>\n <div v-if=\"expanded\">\n <table v-if=\"hasBeenLoaded && configurator?.groups?.length\" class=\"table table-sm\">\n <colgroup>\n <col />\n <col />\n <col />\n <col />\n </colgroup>\n <thead>\n <tr class=\"bg-light\">\n <th>\n <small>{{ t('Product') }}</small>\n </th>\n <th>\n <small>{{ t('Description') }}</small>\n </th>\n <th>\n <small>{{ t('Quantity') }}</small>\n </th>\n <th>\n <small>{{ t('UnitOfMeasure') }}</small>\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-for=\"confGroup in configurator.groups\" :key=\"confGroup.name\">\n <tr>\n <td></td>\n <td>\n <strong>{{ confGroup.name }}</strong>\n </td>\n <td></td>\n <td></td>\n </tr>\n\n <template v-for=\"groupItem in confGroup.elements\" :key=\"groupItem.product\">\n <tr>\n <td>{{ groupItem.product }}</td>\n <td>{{ groupItem.description }}</td>\n <td>{{ groupItem.quantity }}</td>\n <td>{{ groupItem.unitOfMeasure }}</td>\n </tr>\n </template>\n </template>\n </tbody>\n </table>\n <span v-else-if=\"hasBeenLoaded\" class=\"text-muted\">{{ t('NoOptionsAvailable') }}</span>\n <div v-else class=\"text-center\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n </div>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { ConfiguredProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Icon from '@/common/components/Icon.vue';\nimport { CatalogDetail, QuantityItem, ConfigurationItem } from '@/common/services/swagger';\nexport default defineComponent({\n components: { Icon },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n qty: { type: Object as PropType<QuantityItem>, required: true },\n configurationId: { type: String, required: true },\n productId: { type: String, required: true },\n catalog: { type: Object as PropType<CatalogDetail>, required: true },\n },\n setup(props) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const expanded = ref(false);\n const hasBeenLoaded = ref<boolean>(false);\n const configurator = ref<ConfigurationItem | undefined>();\n\n const loadConfiguredOptions = async () => {\n try {\n expanded.value = !expanded.value;\n if (!hasBeenLoaded.value && props.catalog?.id) {\n const result: ConfigurationItem | undefined = await instance.commandExecutor.execute(\n new ConfiguredProductsCommand({\n catalogId: props.catalog.id,\n configurationId: props.configurationId,\n }).from('item-configured-option'),\n );\n if (result) {\n configurator.value = result;\n }\n hasBeenLoaded.value = true;\n }\n } catch {\n // Ignore error\n }\n };\n\n return { loadConfiguredOptions, configurator, expanded, hasBeenLoaded };\n },\n});\n</script>\n","<template>\n <div class=\"my-1\" style=\"cursor: pointer\" @click.prevent=\"loadConfiguredOptions\">\n <span class=\"me-1\">\n <Icon name=\"arrow-right\" :size=\"16\" :style=\"{ transform: expanded ? 'rotate(90deg)' : '' }\" />\n </span>\n <a>{{ productId }}</a>\n </div>\n <div v-if=\"expanded\">\n <table v-if=\"hasBeenLoaded && configurator?.groups?.length\" class=\"table table-sm\">\n <colgroup>\n <col />\n <col />\n <col />\n <col />\n </colgroup>\n <thead>\n <tr class=\"bg-light\">\n <th>\n <small>{{ t('Product') }}</small>\n </th>\n <th>\n <small>{{ t('Description') }}</small>\n </th>\n <th>\n <small>{{ t('Quantity') }}</small>\n </th>\n <th>\n <small>{{ t('UnitOfMeasure') }}</small>\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-for=\"confGroup in configurator.groups\" :key=\"confGroup.name\">\n <tr>\n <td></td>\n <td>\n <strong>{{ confGroup.name }}</strong>\n </td>\n <td></td>\n <td></td>\n </tr>\n\n <template v-for=\"groupItem in confGroup.elements\" :key=\"groupItem.product\">\n <tr>\n <td>{{ groupItem.product }}</td>\n <td>{{ groupItem.description }}</td>\n <td>{{ groupItem.quantity }}</td>\n <td>{{ groupItem.unitOfMeasure }}</td>\n </tr>\n </template>\n </template>\n </tbody>\n </table>\n <span v-else-if=\"hasBeenLoaded\" class=\"text-muted\">{{ t('NoOptionsAvailable') }}</span>\n <div v-else class=\"text-center\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n </div>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { ConfiguredProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Icon from '@/common/components/Icon.vue';\nimport { CatalogDetail, QuantityItem, ConfigurationItem } from '@/common/services/swagger';\nexport default defineComponent({\n components: { Icon },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n qty: { type: Object as PropType<QuantityItem>, required: true },\n configurationId: { type: String, required: true },\n productId: { type: String, required: true },\n catalog: { type: Object as PropType<CatalogDetail>, required: true },\n },\n setup(props) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const expanded = ref(false);\n const hasBeenLoaded = ref<boolean>(false);\n const configurator = ref<ConfigurationItem | undefined>();\n\n const loadConfiguredOptions = async () => {\n try {\n expanded.value = !expanded.value;\n if (!hasBeenLoaded.value && props.catalog?.id) {\n const result: ConfigurationItem | undefined = await instance.commandExecutor.execute(\n new ConfiguredProductsCommand({\n catalogId: props.catalog.id,\n configurationId: props.configurationId,\n }).from('item-configured-option'),\n );\n if (result) {\n configurator.value = result;\n }\n hasBeenLoaded.value = true;\n }\n } catch {\n // Ignore error\n }\n };\n\n return { loadConfiguredOptions, configurator, expanded, hasBeenLoaded };\n },\n});\n</script>\n","<template>\n <div class=\"fw-bold\">\n {{ t('ConfiguredOptions') }}\n </div>\n <div v-for=\"configurationId in qty.configurationIds\" :key=\"configurationId.id\">\n <ItemConfiguredOption\n :configuration-id=\"configurationId.id\"\n :product-id=\"configurationId.productId\"\n :instance-id=\"instanceId\"\n :catalog=\"catalog\"\n :qty=\"qty\"\n :t=\"t\"\n >\n </ItemConfiguredOption>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport ItemConfiguredOption from './ItemConfiguredOption.vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport { CatalogDetail, QuantityItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: { ItemConfiguredOption },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n qty: { type: Object as PropType<QuantityItem>, required: true },\n catalog: { type: Object as PropType<CatalogDetail>, required: true },\n },\n});\n</script>\n","<template>\n <div class=\"fw-bold\">\n {{ t('ConfiguredOptions') }}\n </div>\n <div v-for=\"configurationId in qty.configurationIds\" :key=\"configurationId.id\">\n <ItemConfiguredOption\n :configuration-id=\"configurationId.id\"\n :product-id=\"configurationId.productId\"\n :instance-id=\"instanceId\"\n :catalog=\"catalog\"\n :qty=\"qty\"\n :t=\"t\"\n >\n </ItemConfiguredOption>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport ItemConfiguredOption from './ItemConfiguredOption.vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport { CatalogDetail, QuantityItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: { ItemConfiguredOption },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n qty: { type: Object as PropType<QuantityItem>, required: true },\n catalog: { type: Object as PropType<CatalogDetail>, required: true },\n },\n});\n</script>\n","<template>\n <table class=\"table table-sm\">\n <colgroup>\n <col v-if=\"allCatalogs\" style=\"width: 30%\" />\n <col v-if=\"allCatalogs\" style=\"width: 40%\" />\n <col style=\"width: 10%\" />\n <col style=\"width: 10%\" />\n <col v-if=\"actionsEnabled\" />\n </colgroup>\n <thead>\n <tr class=\"bg-light\">\n <th v-if=\"allCatalogs\">\n <small>{{ t('CatalogCode') }}</small>\n </th>\n <th v-if=\"allCatalogs\">\n <small>{{ t('Description') }}</small>\n </th>\n <th>\n <small>{{ t('Quantity') }}</small>\n </th>\n <th>\n <small>{{ t('UnitOfMeasure') }}</small>\n </th>\n <th v-if=\"actionsEnabled\" class=\"text-end\">\n <small>{{ t('Actions') }}</small>\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-for=\"cat in item.catalogs\" :key=\"cat.code + cat.owner\">\n <template v-for=\"qty in cat.quantities\" :key=\"qty.id\">\n <tr\n :class=\"{\n 'no-border-bottom': qty.configurationIds && qty.configurationIds.length,\n }\"\n >\n <td v-if=\"allCatalogs\">\n <div class=\"fw-bold\">\n <a href=\"\" @click.prevent=\"details(cat.id)\">{{ cat.code }}</a>\n </div>\n <div class=\"small text-muted\">\n {{ cat.owner.userId }}\n </div>\n </td>\n <td v-if=\"allCatalogs\">\n <div>\n {{ cat.description }}\n </div>\n </td>\n <td>{{ qty.value }}</td>\n <td>{{ qty.unitOfMeasure }}</td>\n <td v-if=\"actionsEnabled && catalogProductItemMenu?.items?.length\" class=\"text-end\">\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\" class=\"d-inline-block\">\n <template #trigger>\n <button type=\"button\" class=\"btn btn-link text-dark\">\n <Icon name=\"menu\" />\n </button>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(menuItem, index) in productItemMenuItems(item)\" :key=\"index\">\n <hr v-if=\"menuItem.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(menuItem, item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n {{ menuItem.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onProductItemMenuAction(menuItem, item, cat.id);\n close();\n \"\n >\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n {{ menuItem.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </td>\n </tr>\n <tr v-if=\"qty.configurationIds && qty.configurationIds.length\">\n <td :colspan=\"allCatalogs ? 5 : 3\">\n <div class=\"pt-2 px-4\">\n <ItemConfiguredOptions\n :instance-id=\"instanceId\"\n :catalog=\"cat\"\n :qty=\"qty\"\n :t=\"t\"\n ></ItemConfiguredOptions>\n </div>\n </td>\n </tr>\n </template>\n </template>\n </tbody>\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, Ref, ref } from 'vue';\n\nimport ItemConfiguredOptions from './ItemConfiguredOptions.vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport PIS from '@/common/api/PisGlobal';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'ItemCatalogs',\n components: { DropdownPopper, ItemConfiguredOptions, Icon, MountPoint },\n props: {\n item: { type: Object as PropType<CatalogProductItem>, required: true },\n t: { type: Function as PropType<TranslateFunc>, required: true },\n allCatalogs: { type: Boolean, default: false },\n instanceId: { type: String, default: undefined },\n },\n emits: ['navigate'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const { onProductItemMenuAction } = useCatalogActions(\n ref(instance) as Ref<Instance>,\n props.t,\n 'item-catalogs',\n );\n\n const details = async (catalogId: string) => {\n if (catalogId) {\n try {\n emit('navigate');\n await instance.execute(new CatalogProductsCommand({ catalogId }).from('item-catalogs'));\n } catch {\n // Ignore error\n }\n }\n };\n\n const catalogProductItemMenu = computed(\n () => instance.store?.options.components?.search?.common?.actions?.productItemMenu,\n );\n\n const productItemMenuItems = (product: CatalogProductItem): MenuItem<CatalogProductItem>[] =>\n (catalogProductItemMenu.value?.items || []).filter((item: MenuItem<CatalogProductItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(product);\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<CatalogProductItem>, product: CatalogProductItem) =>\n typeof item.disabled === 'function' ? item.disabled(product) : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.registeredComponents.has('pis-catalogs-products-search-actions-modals') &&\n catalogProductItemMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache. ctx.item is the product prop, not\n // the loop variable — but the cache key is the loop menuItem so each menu\n // entry gets a stable ctx across re-renders (D-N2).\n const menuItemCtx = reactiveContextCache((_key: { item: MenuItem<CatalogProductItem> }) => ({\n instance,\n item: props.item,\n emit,\n t: props.t,\n }));\n\n return {\n instance,\n actionsEnabled,\n catalogProductItemMenu,\n emit,\n details,\n isDisabled,\n productItemMenuItems,\n onProductItemMenuAction,\n menuItemCtx,\n };\n },\n});\n</script>\n","<template>\n <table class=\"table table-sm\">\n <colgroup>\n <col v-if=\"allCatalogs\" style=\"width: 30%\" />\n <col v-if=\"allCatalogs\" style=\"width: 40%\" />\n <col style=\"width: 10%\" />\n <col style=\"width: 10%\" />\n <col v-if=\"actionsEnabled\" />\n </colgroup>\n <thead>\n <tr class=\"bg-light\">\n <th v-if=\"allCatalogs\">\n <small>{{ t('CatalogCode') }}</small>\n </th>\n <th v-if=\"allCatalogs\">\n <small>{{ t('Description') }}</small>\n </th>\n <th>\n <small>{{ t('Quantity') }}</small>\n </th>\n <th>\n <small>{{ t('UnitOfMeasure') }}</small>\n </th>\n <th v-if=\"actionsEnabled\" class=\"text-end\">\n <small>{{ t('Actions') }}</small>\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-for=\"cat in item.catalogs\" :key=\"cat.code + cat.owner\">\n <template v-for=\"qty in cat.quantities\" :key=\"qty.id\">\n <tr\n :class=\"{\n 'no-border-bottom': qty.configurationIds && qty.configurationIds.length,\n }\"\n >\n <td v-if=\"allCatalogs\">\n <div class=\"fw-bold\">\n <a href=\"\" @click.prevent=\"details(cat.id)\">{{ cat.code }}</a>\n </div>\n <div class=\"small text-muted\">\n {{ cat.owner.userId }}\n </div>\n </td>\n <td v-if=\"allCatalogs\">\n <div>\n {{ cat.description }}\n </div>\n </td>\n <td>{{ qty.value }}</td>\n <td>{{ qty.unitOfMeasure }}</td>\n <td v-if=\"actionsEnabled && catalogProductItemMenu?.items?.length\" class=\"text-end\">\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\" class=\"d-inline-block\">\n <template #trigger>\n <button type=\"button\" class=\"btn btn-link text-dark\">\n <Icon name=\"menu\" />\n </button>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(menuItem, index) in productItemMenuItems(item)\" :key=\"index\">\n <hr v-if=\"menuItem.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(menuItem, item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n {{ menuItem.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onProductItemMenuAction(menuItem, item, cat.id);\n close();\n \"\n >\n <template v-if=\"menuItem.itemTemplate\">\n <MountPoint\n :callbacks=\"menuItem.itemTemplate\"\n :ctx=\"menuItemCtx({ item: menuItem })\"\n />\n </template>\n <template v-else>\n {{ menuItem.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </td>\n </tr>\n <tr v-if=\"qty.configurationIds && qty.configurationIds.length\">\n <td :colspan=\"allCatalogs ? 5 : 3\">\n <div class=\"pt-2 px-4\">\n <ItemConfiguredOptions\n :instance-id=\"instanceId\"\n :catalog=\"cat\"\n :qty=\"qty\"\n :t=\"t\"\n ></ItemConfiguredOptions>\n </div>\n </td>\n </tr>\n </template>\n </template>\n </tbody>\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, Ref, ref } from 'vue';\n\nimport ItemConfiguredOptions from './ItemConfiguredOptions.vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport PIS from '@/common/api/PisGlobal';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'ItemCatalogs',\n components: { DropdownPopper, ItemConfiguredOptions, Icon, MountPoint },\n props: {\n item: { type: Object as PropType<CatalogProductItem>, required: true },\n t: { type: Function as PropType<TranslateFunc>, required: true },\n allCatalogs: { type: Boolean, default: false },\n instanceId: { type: String, default: undefined },\n },\n emits: ['navigate'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const { onProductItemMenuAction } = useCatalogActions(\n ref(instance) as Ref<Instance>,\n props.t,\n 'item-catalogs',\n );\n\n const details = async (catalogId: string) => {\n if (catalogId) {\n try {\n emit('navigate');\n await instance.execute(new CatalogProductsCommand({ catalogId }).from('item-catalogs'));\n } catch {\n // Ignore error\n }\n }\n };\n\n const catalogProductItemMenu = computed(\n () => instance.store?.options.components?.search?.common?.actions?.productItemMenu,\n );\n\n const productItemMenuItems = (product: CatalogProductItem): MenuItem<CatalogProductItem>[] =>\n (catalogProductItemMenu.value?.items || []).filter((item: MenuItem<CatalogProductItem>) => {\n if (typeof item.visible === 'function') {\n return item.visible(product);\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<CatalogProductItem>, product: CatalogProductItem) =>\n typeof item.disabled === 'function' ? item.disabled(product) : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.registeredComponents.has('pis-catalogs-products-search-actions-modals') &&\n catalogProductItemMenu.value?.visible,\n );\n\n // v7: per-menu-item reactive ctx cache. ctx.item is the product prop, not\n // the loop variable — but the cache key is the loop menuItem so each menu\n // entry gets a stable ctx across re-renders (D-N2).\n const menuItemCtx = reactiveContextCache((_key: { item: MenuItem<CatalogProductItem> }) => ({\n instance,\n item: props.item,\n emit,\n t: props.t,\n }));\n\n return {\n instance,\n actionsEnabled,\n catalogProductItemMenu,\n emit,\n details,\n isDisabled,\n productItemMenuItems,\n onProductItemMenuAction,\n menuItemCtx,\n };\n },\n});\n</script>\n","<template>\n <Modal :show=\"show\" :title=\"item?.alternateProductId || item?.productId\" xl>\n <div>\n <div v-if=\"item\">\n <ItemCatalogsDetails\n :item=\"item\"\n :t=\"t\"\n :all-catalogs=\"allCatalogs\"\n :instance-id=\"instanceId\"\n @navigate=\"$emit('hidden')\"\n ></ItemCatalogsDetails>\n </div>\n <div v-else class=\"text-center\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport ItemCatalogsDetails from './ItemCatalogsDetails.vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport Modal from '@/common/components/Modal.vue';\nimport { CatalogProductItem } from '@/common/services/swagger';\nexport default defineComponent({\n components: { Modal, ItemCatalogsDetails },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n item: { type: Object as PropType<CatalogProductItem>, default: undefined },\n instanceId: { type: String, default: undefined },\n show: Boolean,\n allCatalogs: { type: Boolean, default: false },\n },\n emits: ['hidden'],\n setup() {\n return {};\n },\n});\n</script>\n","<template>\n <Modal :show=\"show\" :title=\"item?.alternateProductId || item?.productId\" xl>\n <div>\n <div v-if=\"item\">\n <ItemCatalogsDetails\n :item=\"item\"\n :t=\"t\"\n :all-catalogs=\"allCatalogs\"\n :instance-id=\"instanceId\"\n @navigate=\"$emit('hidden')\"\n ></ItemCatalogsDetails>\n </div>\n <div v-else class=\"text-center\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n </div>\n </div>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport ItemCatalogsDetails from './ItemCatalogsDetails.vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport Modal from '@/common/components/Modal.vue';\nimport { CatalogProductItem } from '@/common/services/swagger';\nexport default defineComponent({\n components: { Modal, ItemCatalogsDetails },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n item: { type: Object as PropType<CatalogProductItem>, default: undefined },\n instanceId: { type: String, default: undefined },\n show: Boolean,\n allCatalogs: { type: Boolean, default: false },\n },\n emits: ['hidden'],\n setup() {\n return {};\n },\n});\n</script>\n","<template>\n <SearchGridView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :items=\"productsItems\"\n :instance=\"instance\"\n card-class=\"card h-100 pt-0 pb-4\"\n select-checkbox-style=\"z-index: 1; width: auto\"\n :preview-enabled=\"previewEnabled\"\n :adapter=\"gridAdapter\"\n >\n <template #body-top=\"{ item }\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0; right: 0; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item as CatalogProductItem)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n </template>\n\n <template #title-fallback=\"{ item }\">\n <div class=\"d-flex flex-column\">\n <strong v-if=\"item.inactive\" class=\"text-muted\">\n {{ attrValue(item, '#DisplayName') }}\n </strong>\n <a v-else href=\"#\" @click.prevent=\"details(item as CatalogProductItem)\">\n <strong>{{ attrValue(item, '#DisplayName') }}</strong>\n </a>\n <div\n v-if=\"(item as CatalogProductItem).productType === catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n </template>\n\n <template #item-fallback=\"{ item }\">\n <em v-if=\"(item as CatalogProductItem).customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ (item as CatalogProductItem).customerClassification }}\n <br />\n </em>\n <em v-if=\"(item as CatalogProductItem).baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!(item as CatalogProductItem).baseProduct?.inactive\"\n @click=\"baseProductDetails((item as CatalogProductItem).baseProduct)\"\n >\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </span>\n <br />\n </em>\n </template>\n </SearchGridView>\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsGridOptions } from '@/catalogs/api/configuration/components/ItemsGridOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport SearchGridView from '@/common/components/search/SearchGridView.vue';\nimport type {\n SearchGridViewAdapter,\n SearchViewItem,\n} from '@/common/components/search/searchViewTypes';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid',\n\n components: {\n SearchGridView,\n Clickable,\n Icon,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n const catalogProductType = CatalogProductTypeEnum;\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.grid ?? ({} as ItemsGridOptions),\n );\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // The domain adapter for the shared grid view: plain functions pinning the\n // catalogs commands, the base-product image/preview fallbacks, and the\n // public per-surface template-context shapes (reactive caching lives in\n // the shared view). Catalogs never disables image clicks; the action\n // footer shares the item ctx, exactly like the pre-shared copy.\n const gridAdapter: SearchGridViewAdapter = {\n t,\n widerThan,\n details: (item: SearchViewItem) => details(item as CatalogProductItem),\n getItemImage: (item: SearchViewItem) => getItemImage(item as CatalogProductItem),\n isImageDisabled: () => false,\n isPreviewDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n preview: (item: SearchViewItem) => {\n const catalogItem = item as CatalogProductItem;\n return previewByProductId(\n catalogItem.baseProduct?.productId ||\n catalogItem.alternateProductId ||\n catalogItem.productId,\n );\n },\n buildImageOverlayCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n t,\n }),\n buildTitleCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildItemCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }),\n buildActionCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n instance,\n componentName,\n componentOptions,\n isWebComponent,\n isReady,\n store,\n productsItems,\n previewEnabled,\n selectedItem,\n catalogsModalVisible,\n showingAllCatalogs,\n catalogProductType,\n details,\n baseProductDetails,\n toggleItemDetails,\n t,\n attrValue,\n emit,\n gridAdapter,\n };\n },\n});\n</script>\n","<template>\n <SearchGridView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :items=\"productsItems\"\n :instance=\"instance\"\n card-class=\"card h-100 pt-0 pb-4\"\n select-checkbox-style=\"z-index: 1; width: auto\"\n :preview-enabled=\"previewEnabled\"\n :adapter=\"gridAdapter\"\n >\n <template #body-top=\"{ item }\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0; right: 0; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item as CatalogProductItem)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n </template>\n\n <template #title-fallback=\"{ item }\">\n <div class=\"d-flex flex-column\">\n <strong v-if=\"item.inactive\" class=\"text-muted\">\n {{ attrValue(item, '#DisplayName') }}\n </strong>\n <a v-else href=\"#\" @click.prevent=\"details(item as CatalogProductItem)\">\n <strong>{{ attrValue(item, '#DisplayName') }}</strong>\n </a>\n <div\n v-if=\"(item as CatalogProductItem).productType === catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n </template>\n\n <template #item-fallback=\"{ item }\">\n <em v-if=\"(item as CatalogProductItem).customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ (item as CatalogProductItem).customerClassification }}\n <br />\n </em>\n <em v-if=\"(item as CatalogProductItem).baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!(item as CatalogProductItem).baseProduct?.inactive\"\n @click=\"baseProductDetails((item as CatalogProductItem).baseProduct)\"\n >\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </span>\n <br />\n </em>\n </template>\n </SearchGridView>\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsGridOptions } from '@/catalogs/api/configuration/components/ItemsGridOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport SearchGridView from '@/common/components/search/SearchGridView.vue';\nimport type {\n SearchGridViewAdapter,\n SearchViewItem,\n} from '@/common/components/search/searchViewTypes';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid',\n\n components: {\n SearchGridView,\n Clickable,\n Icon,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n const catalogProductType = CatalogProductTypeEnum;\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.grid ?? ({} as ItemsGridOptions),\n );\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // The domain adapter for the shared grid view: plain functions pinning the\n // catalogs commands, the base-product image/preview fallbacks, and the\n // public per-surface template-context shapes (reactive caching lives in\n // the shared view). Catalogs never disables image clicks; the action\n // footer shares the item ctx, exactly like the pre-shared copy.\n const gridAdapter: SearchGridViewAdapter = {\n t,\n widerThan,\n details: (item: SearchViewItem) => details(item as CatalogProductItem),\n getItemImage: (item: SearchViewItem) => getItemImage(item as CatalogProductItem),\n isImageDisabled: () => false,\n isPreviewDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n preview: (item: SearchViewItem) => {\n const catalogItem = item as CatalogProductItem;\n return previewByProductId(\n catalogItem.baseProduct?.productId ||\n catalogItem.alternateProductId ||\n catalogItem.productId,\n );\n },\n buildImageOverlayCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n t,\n }),\n buildTitleCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildItemCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }),\n buildActionCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n instance,\n componentName,\n componentOptions,\n isWebComponent,\n isReady,\n store,\n productsItems,\n previewEnabled,\n selectedItem,\n catalogsModalVisible,\n showingAllCatalogs,\n catalogProductType,\n details,\n baseProductDetails,\n toggleItemDetails,\n t,\n attrValue,\n emit,\n gridAdapter,\n };\n },\n});\n</script>\n","<template>\n <SearchListView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :items=\"productsItems\"\n :instance=\"instance\"\n :is-desktop=\"isDesktopView\"\n :preview-enabled=\"previewEnabled\"\n :adapter=\"listAdapter\"\n >\n <template #body-top=\"{ item }\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0.4rem; right: 0.4rem; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item as CatalogProductItem)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n </template>\n\n <template #item-fallback=\"{ item }\">\n <div>\n <span>{{ attrValue(item, '#Description') }}</span>\n </div>\n <em v-if=\"(item as CatalogProductItem).customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ (item as CatalogProductItem).customerClassification }}\n <br />\n </em>\n <em v-if=\"(item as CatalogProductItem).baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!(item as CatalogProductItem).baseProduct?.inactive\"\n @click=\"baseProductDetails((item as CatalogProductItem).baseProduct)\"\n >\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </span>\n <br />\n </em>\n </template>\n </SearchListView>\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsListOptions } from '@/catalogs/api/configuration/components/ItemsListOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport SearchListView from '@/common/components/search/SearchListView.vue';\nimport type {\n SearchListViewAdapter,\n SearchViewItem,\n} from '@/common/components/search/searchViewTypes';\nimport { attrValue, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-list',\n\n components: {\n SearchListView,\n Icon,\n Clickable,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n emits: ['click-content'],\n\n setup(props, { emit: emitComponentEvent }) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n const catalogProductType = CatalogProductTypeEnum;\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.list ?? ({} as ItemsListOptions),\n );\n\n const isDesktopView = computed(() => widerThan('md'));\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // The domain adapter for the shared list view. The list ctx surfaces all\n // share one shape (the historical catalogs item ctx, with the\n // base-product details helper); the stacked mobile layout emits the\n // `click-content` component event instead of navigating.\n const listAdapter: SearchListViewAdapter = {\n t,\n details: (item: SearchViewItem) => details(item as CatalogProductItem),\n getItemImage: (item: SearchViewItem) => getItemImage(item as CatalogProductItem),\n isImageDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n isPreviewDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n preview: (item: SearchViewItem) => {\n const catalogItem = item as CatalogProductItem;\n return previewByProductId(\n catalogItem.baseProduct?.productId ||\n catalogItem.alternateProductId ||\n catalogItem.productId,\n );\n },\n onImageClick: (item: SearchViewItem, isMobile: boolean) => {\n if (isMobile) {\n emitComponentEvent('click-content');\n } else {\n details(item as CatalogProductItem);\n }\n },\n buildImageOverlayCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n t,\n }),\n buildTitleCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildItemCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildAdditionalColumnCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildActionCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n instance,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n isDesktopView,\n store,\n selectedItem,\n productsItems,\n previewEnabled,\n showingAllCatalogs,\n catalogProductType,\n catalogsModalVisible,\n t,\n narrowerThan,\n attrValue,\n additionalInfo,\n details,\n baseProductDetails,\n toggleItemDetails,\n emit,\n listAdapter,\n };\n },\n});\n</script>\n","<template>\n <SearchListView\n :set-root=\"setRoot\"\n :component-name=\"componentName\"\n :is-ready=\"isReady\"\n :options=\"componentOptions\"\n :items=\"productsItems\"\n :instance=\"instance\"\n :is-desktop=\"isDesktopView\"\n :preview-enabled=\"previewEnabled\"\n :adapter=\"listAdapter\"\n >\n <template #body-top=\"{ item }\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0.4rem; right: 0.4rem; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item as CatalogProductItem)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n </template>\n\n <template #item-fallback=\"{ item }\">\n <div>\n <span>{{ attrValue(item, '#Description') }}</span>\n </div>\n <em v-if=\"(item as CatalogProductItem).customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ (item as CatalogProductItem).customerClassification }}\n <br />\n </em>\n <em v-if=\"(item as CatalogProductItem).baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!(item as CatalogProductItem).baseProduct?.inactive\"\n @click=\"baseProductDetails((item as CatalogProductItem).baseProduct)\"\n >\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ (item as CatalogProductItem).baseProduct?.productId }}\n </span>\n <br />\n </em>\n </template>\n </SearchListView>\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentPublicInstance } from 'vue';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsListOptions } from '@/catalogs/api/configuration/components/ItemsListOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport SearchListView from '@/common/components/search/SearchListView.vue';\nimport type {\n SearchListViewAdapter,\n SearchViewItem,\n} from '@/common/components/search/searchViewTypes';\nimport { attrValue, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-list',\n\n components: {\n SearchListView,\n Icon,\n Clickable,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n emits: ['click-content'],\n\n setup(props, { emit: emitComponentEvent }) {\n const root = ref<HTMLElement>();\n const setRoot = (el: Element | ComponentPublicInstance | null) => {\n root.value = (el as HTMLElement) ?? undefined;\n };\n const catalogProductType = CatalogProductTypeEnum;\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.list ?? ({} as ItemsListOptions),\n );\n\n const isDesktopView = computed(() => widerThan('md'));\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items);\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // The domain adapter for the shared list view. The list ctx surfaces all\n // share one shape (the historical catalogs item ctx, with the\n // base-product details helper); the stacked mobile layout emits the\n // `click-content` component event instead of navigating.\n const listAdapter: SearchListViewAdapter = {\n t,\n details: (item: SearchViewItem) => details(item as CatalogProductItem),\n getItemImage: (item: SearchViewItem) => getItemImage(item as CatalogProductItem),\n isImageDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n isPreviewDisabled: (item: SearchViewItem) => isPreviewDisabled(item as CatalogProductItem),\n preview: (item: SearchViewItem) => {\n const catalogItem = item as CatalogProductItem;\n return previewByProductId(\n catalogItem.baseProduct?.productId ||\n catalogItem.alternateProductId ||\n catalogItem.productId,\n );\n },\n onImageClick: (item: SearchViewItem, isMobile: boolean) => {\n if (isMobile) {\n emitComponentEvent('click-content');\n } else {\n details(item as CatalogProductItem);\n }\n },\n buildImageOverlayCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n t,\n }),\n buildTitleCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildItemCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildAdditionalColumnCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n buildActionCtx: (item: SearchViewItem) => ({\n instance: instance.value,\n item: item as CatalogProductItem,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }),\n };\n\n return {\n root,\n setRoot,\n instance,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n isDesktopView,\n store,\n selectedItem,\n productsItems,\n previewEnabled,\n showingAllCatalogs,\n catalogProductType,\n catalogsModalVisible,\n t,\n narrowerThan,\n attrValue,\n additionalInfo,\n details,\n baseProductDetails,\n toggleItemDetails,\n emit,\n listAdapter,\n };\n },\n});\n</script>\n","<template>\n <nav ref=\"root\" class=\"pis-component\" aria-label=\"Items page navigation\">\n <template v-if=\"isReady\">\n <div\n v-if=\"totalCount && pagination\"\n class=\"d-flex align-items-center justify-content-between mt-4\"\n :class=\"[widerThan('md') ? 'flex-row' : 'flex-column']\"\n >\n <div class=\"my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </div>\n\n <Pagination\n class=\"my-2\"\n :class=\"componentName\"\n :total=\"Math.ceil(totalCount / pagination.pageSize)\"\n :current=\"pagination.page\"\n :narrow-than=\"narrowerThan\"\n @change=\"changePage\"\n />\n </div>\n </template>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ProductsPaginateCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Pagination from '@/common/components/Pagination.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-pagination',\n\n components: {\n Pagination,\n PaginationAmount,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const totalCount = computed(() => store.value?.data.products?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.products.pagination);\n\n const changePage = (page: number) => {\n if (instance.value) {\n instance.value.execute(new ProductsPaginateCommand({ page }).from(componentName));\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n totalCount,\n pagination,\n routeData,\n t,\n widerThan,\n narrowerThan,\n changePage,\n };\n },\n});\n</script>\n","<template>\n <nav ref=\"root\" class=\"pis-component\" aria-label=\"Items page navigation\">\n <template v-if=\"isReady\">\n <div\n v-if=\"totalCount && pagination\"\n class=\"d-flex align-items-center justify-content-between mt-4\"\n :class=\"[widerThan('md') ? 'flex-row' : 'flex-column']\"\n >\n <div class=\"my-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n />\n </div>\n\n <Pagination\n class=\"my-2\"\n :class=\"componentName\"\n :total=\"Math.ceil(totalCount / pagination.pageSize)\"\n :current=\"pagination.page\"\n :narrow-than=\"narrowerThan\"\n @change=\"changePage\"\n />\n </div>\n </template>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ProductsPaginateCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Pagination from '@/common/components/Pagination.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-pagination',\n\n components: {\n Pagination,\n PaginationAmount,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const totalCount = computed(() => store.value?.data.products?.totalCount ?? 0);\n const pagination = computed(() => routeData.value?.products.pagination);\n\n const changePage = (page: number) => {\n if (instance.value) {\n instance.value.execute(new ProductsPaginateCommand({ page }).from(componentName));\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n totalCount,\n pagination,\n routeData,\n t,\n widerThan,\n narrowerThan,\n changePage,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('PartsAndServices')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <template v-if=\"categories?.length\">\n <CategoriesList\n v-if=\"categories?.length\"\n :categories=\"categoriesTrimmed\"\n @click-item=\"setCategory\"\n />\n\n <div v-if=\"showMoreBtn\" class=\"card-body\">\n <LinkSecondary @click.prevent=\"showAllCategories\">\n <Arrow class=\"me-2\" :dir=\"trimList ? 'down' : 'up'\" />\n {{ trimList ? t('ShowAllCategories') : t('HideAllCategories') }}\n ({{ categories.length }})\n </LinkSecondary>\n </div>\n </template>\n\n <div v-else class=\"card-body\">\n <Message>{{ t('NoCategories') }}</Message>\n </div>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { SearchCategoriesOptions } from '@/common/api/components/SearchCategoriesOptions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Card from '@/common/components/Card.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-part-categories',\n\n components: {\n LinkSecondary,\n Card,\n CategoriesList,\n Message,\n Arrow,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.partCategories ??\n ({} as SearchCategoriesOptions),\n );\n\n const categories = computed(() => store.value?.data.partClassifications?.items ?? []);\n\n const visible = computed(() => componentOptions.value.visible);\n\n const categoriesTrimmed = computed(() =>\n trimList.value\n ? categories.value?.slice(0, componentOptions.value.maxCategoriesVisible)\n : categories.value,\n );\n\n const showMoreBtn = computed(\n () =>\n categories.value &&\n categories.value.length > (componentOptions.value.maxCategoriesVisible ?? 0),\n );\n\n const setCategory = ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n instance.value.execute(\n new ClassificationCommand({ cid, treeType: 'Parts', clearSearch: false }).from(\n componentName,\n ),\n );\n }\n };\n\n const showAllCategories = () => {\n trimList.value = !trimList.value;\n };\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n trimList,\n store,\n visible,\n categories,\n categoriesTrimmed,\n showMoreBtn,\n t,\n setCategory,\n showAllCategories,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('PartsAndServices')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <template v-if=\"categories?.length\">\n <CategoriesList\n v-if=\"categories?.length\"\n :categories=\"categoriesTrimmed\"\n @click-item=\"setCategory\"\n />\n\n <div v-if=\"showMoreBtn\" class=\"card-body\">\n <LinkSecondary @click.prevent=\"showAllCategories\">\n <Arrow class=\"me-2\" :dir=\"trimList ? 'down' : 'up'\" />\n {{ trimList ? t('ShowAllCategories') : t('HideAllCategories') }}\n ({{ categories.length }})\n </LinkSecondary>\n </div>\n </template>\n\n <div v-else class=\"card-body\">\n <Message>{{ t('NoCategories') }}</Message>\n </div>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { SearchCategoriesOptions } from '@/common/api/components/SearchCategoriesOptions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Card from '@/common/components/Card.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-part-categories',\n\n components: {\n LinkSecondary,\n Card,\n CategoriesList,\n Message,\n Arrow,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.partCategories ??\n ({} as SearchCategoriesOptions),\n );\n\n const categories = computed(() => store.value?.data.partClassifications?.items ?? []);\n\n const visible = computed(() => componentOptions.value.visible);\n\n const categoriesTrimmed = computed(() =>\n trimList.value\n ? categories.value?.slice(0, componentOptions.value.maxCategoriesVisible)\n : categories.value,\n );\n\n const showMoreBtn = computed(\n () =>\n categories.value &&\n categories.value.length > (componentOptions.value.maxCategoriesVisible ?? 0),\n );\n\n const setCategory = ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n instance.value.execute(\n new ClassificationCommand({ cid, treeType: 'Parts', clearSearch: false }).from(\n componentName,\n ),\n );\n }\n };\n\n const showAllCategories = () => {\n trimList.value = !trimList.value;\n };\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n trimList,\n store,\n visible,\n categories,\n categoriesTrimmed,\n showMoreBtn,\n t,\n setCategory,\n showAllCategories,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('Products')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <template v-if=\"categories?.length\">\n <CategoriesList\n v-if=\"categories?.length\"\n :categories=\"categoriesTrimmed\"\n @click-item=\"setCategory\"\n />\n\n <div v-if=\"showMoreBtn\" class=\"card-body\">\n <LinkSecondary @click.prevent=\"showAllCategories\">\n <Arrow class=\"me-2\" :dir=\"trimList ? 'down' : 'up'\" />\n {{ trimList ? t('ShowAllCategories') : t('HideAllCategories') }}\n ({{ categories.length }})\n </LinkSecondary>\n </div>\n </template>\n\n <div v-else class=\"card-body\">\n <Message>{{ t('NoCategories') }}</Message>\n </div>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { SearchCategoriesOptions } from '@/common/api/components/SearchCategoriesOptions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Card from '@/common/components/Card.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-product-categories',\n\n components: {\n LinkSecondary,\n Card,\n CategoriesList,\n Message,\n Arrow,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.productCategories ??\n ({} as SearchCategoriesOptions),\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n\n const visible = computed(() => componentOptions.value.visible);\n\n const categoriesTrimmed = computed(() =>\n trimList.value\n ? categories.value?.slice(0, componentOptions.value.maxCategoriesVisible)\n : categories.value,\n );\n\n const showMoreBtn = computed(\n () =>\n categories.value &&\n categories.value.length > (componentOptions.value.maxCategoriesVisible ?? 0),\n );\n\n const setCategory = ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n instance.value.execute(\n new ClassificationCommand({ cid, treeType: 'Products', clearSearch: false }).from(\n componentName,\n ),\n );\n }\n };\n\n const showAllCategories = () => {\n trimList.value = !trimList.value;\n };\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n trimList,\n store,\n visible,\n categories,\n categoriesTrimmed,\n showMoreBtn,\n t,\n setCategory,\n showAllCategories,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <Card\n class=\"mb-4\"\n :icon=\"componentOptions.icon && 'folder-open'\"\n :header=\"t('Products')\"\n :use-markup=\"componentOptions.card\"\n :collapsed=\"componentOptions.collapsed\"\n >\n <template #list>\n <template v-if=\"categories?.length\">\n <CategoriesList\n v-if=\"categories?.length\"\n :categories=\"categoriesTrimmed\"\n @click-item=\"setCategory\"\n />\n\n <div v-if=\"showMoreBtn\" class=\"card-body\">\n <LinkSecondary @click.prevent=\"showAllCategories\">\n <Arrow class=\"me-2\" :dir=\"trimList ? 'down' : 'up'\" />\n {{ trimList ? t('ShowAllCategories') : t('HideAllCategories') }}\n ({{ categories.length }})\n </LinkSecondary>\n </div>\n </template>\n\n <div v-else class=\"card-body\">\n <Message>{{ t('NoCategories') }}</Message>\n </div>\n </template>\n </Card>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { SearchCategoriesOptions } from '@/common/api/components/SearchCategoriesOptions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Card from '@/common/components/Card.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport LinkSecondary from '@/common/components/LinkSecondary.vue';\nimport Message from '@/common/components/Message.vue';\nimport { ClassificationItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-product-categories',\n\n components: {\n LinkSecondary,\n Card,\n CategoriesList,\n Message,\n Arrow,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const trimList = ref(true);\n\n const { isReady, isWebComponent, componentName, instance, store, t } = setupComponent(\n root,\n props.instanceId,\n [CatalogsDataType.ProductClassifications],\n );\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.productCategories ??\n ({} as SearchCategoriesOptions),\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n\n const visible = computed(() => componentOptions.value.visible);\n\n const categoriesTrimmed = computed(() =>\n trimList.value\n ? categories.value?.slice(0, componentOptions.value.maxCategoriesVisible)\n : categories.value,\n );\n\n const showMoreBtn = computed(\n () =>\n categories.value &&\n categories.value.length > (componentOptions.value.maxCategoriesVisible ?? 0),\n );\n\n const setCategory = ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n instance.value.execute(\n new ClassificationCommand({ cid, treeType: 'Products', clearSearch: false }).from(\n componentName,\n ),\n );\n }\n };\n\n const showAllCategories = () => {\n trimList.value = !trimList.value;\n };\n\n return {\n root,\n isReady,\n isWebComponent,\n componentName,\n componentOptions,\n trimList,\n store,\n visible,\n categories,\n categoriesTrimmed,\n showMoreBtn,\n t,\n setCategory,\n showAllCategories,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <div class=\"card p-2\">\n <div class=\"row\">\n <div\n v-if=\"componentOptions?.countVisible\"\n :class=\"[widerThan('md') ? 'col-2' : 'col-12']\"\n >\n <strong> {{ instance?.selection.count }}</strong>\n {{ t('ItemsSelected', true) }}\n </div>\n <div :class=\"[widerThan('md') ? 'col-4' : 'col-12']\" class=\"d-flex flex-row\">\n <div v-if=\"componentOptions?.selectAllVisible\" class=\"me-3\">\n <a href=\"\" @click.prevent=\"() => instance?.selection.selectAll()\">{{\n t('SelectAll', true)\n }}</a>\n </div>\n <div v-if=\"componentOptions?.deselectAllVisible && instance?.selection.count\">\n <a href=\"\" @click.prevent=\"() => instance?.selection.clear()\">{{\n t('DeselectAll', true)\n }}</a>\n </div>\n </div>\n <div\n v-if=\"componentOptions?.actionsTemplate\"\n :class=\"[widerThan('md') ? 'col-6 text-end' : 'col-12 ']\"\n >\n <MountPoint\n :callbacks=\"componentOptions.actionsTemplate\"\n :ctx=\"reactiveContext({ instance, t })\"\n />\n </div>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext } from '@/common/composables/useReactiveContext';\nexport default defineComponent({\n name: 'pis-catalogs-products-search-selection',\n\n components: {\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { instance, componentName, isReady, isWebComponent, store, widerThan, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(() => {\n return store.value?.options?.components?.products?.search?.selection;\n });\n const visible = computed(() => {\n return store.value?.options?.components?.products?.search?.selection?.visible;\n });\n\n return {\n root,\n instance,\n componentName,\n isReady,\n visible,\n isWebComponent,\n store,\n componentOptions,\n widerThan,\n t,\n reactiveContext,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && visible\">\n <div class=\"card p-2\">\n <div class=\"row\">\n <div\n v-if=\"componentOptions?.countVisible\"\n :class=\"[widerThan('md') ? 'col-2' : 'col-12']\"\n >\n <strong> {{ instance?.selection.count }}</strong>\n {{ t('ItemsSelected', true) }}\n </div>\n <div :class=\"[widerThan('md') ? 'col-4' : 'col-12']\" class=\"d-flex flex-row\">\n <div v-if=\"componentOptions?.selectAllVisible\" class=\"me-3\">\n <a href=\"\" @click.prevent=\"() => instance?.selection.selectAll()\">{{\n t('SelectAll', true)\n }}</a>\n </div>\n <div v-if=\"componentOptions?.deselectAllVisible && instance?.selection.count\">\n <a href=\"\" @click.prevent=\"() => instance?.selection.clear()\">{{\n t('DeselectAll', true)\n }}</a>\n </div>\n </div>\n <div\n v-if=\"componentOptions?.actionsTemplate\"\n :class=\"[widerThan('md') ? 'col-6 text-end' : 'col-12 ']\"\n >\n <MountPoint\n :callbacks=\"componentOptions.actionsTemplate\"\n :ctx=\"reactiveContext({ instance, t })\"\n />\n </div>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext } from '@/common/composables/useReactiveContext';\nexport default defineComponent({\n name: 'pis-catalogs-products-search-selection',\n\n components: {\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { instance, componentName, isReady, isWebComponent, store, widerThan, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(() => {\n return store.value?.options?.components?.products?.search?.selection;\n });\n const visible = computed(() => {\n return store.value?.options?.components?.products?.search?.selection?.visible;\n });\n\n return {\n root,\n instance,\n componentName,\n isReady,\n visible,\n isWebComponent,\n store,\n componentOptions,\n widerThan,\n t,\n reactiveContext,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"productsItems && productsItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-if=\"componentOptions.selectable\" style=\"width: 1%\" />\n <col v-if=\"previewEnabled\" style=\"width: 1%\" />\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col v-if=\"componentOptions.detailsVisible\" style=\"width: 1%\" />\n </colgroup>\n\n <thead>\n <tr>\n <th v-if=\"componentOptions.selectable\"></th>\n <th v-if=\"previewEnabled\"></th>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"componentOptions.detailsVisible\"></th>\n </tr>\n </thead>\n\n <tbody>\n <template v-for=\"item in productsItems\" :key=\"item.productId\">\n <tr\n :class=\"{\n 'bg-light': item.exactMatch,\n 'no-border-bottom': item['expanded'],\n 'ext-selected': instance?.selection.isSelected(item),\n }\"\n >\n <td v-if=\"componentOptions.selectable\">\n <div class=\"ext-select-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </td>\n <td v-if=\"previewEnabled\">\n <Clickable\n class=\"d-flex ext-icon-preview\"\n :title=\"t(isPreviewDisabled(item) ? 'PreviewNotAvailable' : 'Preview', true)\"\n :disabled=\"isPreviewDisabled(item)\"\n @click.prevent=\"\n !isPreviewDisabled(item) &&\n previewByProductId(\n item.baseProduct?.productId || item.alternateProductId || item.productId,\n )\n \"\n >\n <Icon name=\"eye-show\" :size=\"24\" />\n </Clickable>\n </td>\n <td v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item, col })\"\n />\n <div v-else-if=\"col.dataField === 'ProductId'\">\n <Clickable v-if=\"!item.inactive\" @click=\"details(item)\">\n {{ attrValue(item, col.dataField) }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ attrValue(item, col.dataField) }}\n </span>\n <div class=\"text-muted small\">\n <em v-if=\"item.productType == catalogProductType.CONFIGURED\">\n {{ t('ConfiguredProducts') }}\n <br />\n </em>\n <em v-if=\"item.customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ item.customerClassification }}\n <br />\n </em>\n <em v-if=\"item.baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!item.baseProduct.inactive\"\n @click=\"baseProductDetails(item.baseProduct)\"\n >\n {{ item.baseProduct.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ item.baseProduct.productId }}\n </span>\n <br />\n </em>\n </div>\n </div>\n <div v-else>{{ attrValue(item, col.dataField) }}</div>\n\n <template v-if=\"col.showAllIdentifiers\">\n <div\n v-for=\"(val, idx) in attrValues(item, '#AllIdentifiers')\"\n :key=\"idx\"\n class=\"small text-muted fw-bold\"\n >\n {{ val }}\n </div>\n </template>\n </td>\n <td v-if=\"componentOptions.detailsVisible\">\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item)\"\n >\n <Icon\n :name=\"item['expanded'] ? 'minus-remove' : 'plus-add'\"\n class=\"py-1\"\n style=\"font-size: 1.1rem\"\n />\n </a>\n </td>\n </tr>\n\n <tr v-if=\"item['expanded']\">\n <td v-if=\"componentOptions.selectable\"></td>\n <td v-if=\"previewEnabled\"></td>\n <td :colspan=\"columns?.length\">\n <ItemCatalogsDetails\n :item=\"item\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n :instance-id=\"instance?.id\"\n ></ItemCatalogsDetails>\n </td>\n <td></td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport ItemCatalogsDetails from './components/ItemCatalogsDetails.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsTableOptions } from '@/catalogs/api/configuration/components/ItemsTableOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogProductItem, CatalogProductTypeEnum, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-table',\n\n components: {\n Icon,\n Clickable,\n MountPoint,\n ItemCatalogsDetails,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const catalogProductType = CatalogProductTypeEnum;\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const productsItems = computed<CatalogProductItem[]>(\n () => store.value?.data.products?.items || [],\n );\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.table ?? ({} as ItemsTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n product['expanded'] = !product['expanded'];\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // v7: per-cell reactive context cache. Each (item, col) pair reuses one\n // stable reactive ctx across re-renders — identity preserved, mutations\n // propagate via reactivity (D-N2). Avoids re-mounting cells on data change.\n const cellCtx = reactiveContextCache((key: { item: CatalogProductItem; col: unknown }) => ({\n col: key.col,\n item: key.item,\n instance: instance.value,\n catalogProductType,\n CatalogProductTypeEnum,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n baseProductDetails,\n }));\n\n return {\n root,\n componentName,\n componentOptions,\n instance,\n isReady,\n isWebComponent,\n store,\n routeData,\n productsItems,\n previewEnabled,\n columns,\n showingAllCatalogs,\n catalogProductType,\n CatalogProductTypeEnum,\n t,\n emit,\n details,\n previewByProductId,\n attrValue,\n additionalInfo,\n attrValues,\n isPreviewDisabled,\n toggleItemDetails,\n baseProductDetails,\n reactiveContext,\n cellCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions.visible\">\n <div v-if=\"productsItems && productsItems.length\" class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <colgroup>\n <col v-if=\"componentOptions.selectable\" style=\"width: 1%\" />\n <col v-if=\"previewEnabled\" style=\"width: 1%\" />\n <col v-for=\"(col, index) in columns\" :key=\"index\" :style=\"{ width: col.width }\" />\n <col v-if=\"componentOptions.detailsVisible\" style=\"width: 1%\" />\n </colgroup>\n\n <thead>\n <tr>\n <th v-if=\"componentOptions.selectable\"></th>\n <th v-if=\"previewEnabled\"></th>\n <th v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.headerTemplate\"\n :callbacks=\"col.headerTemplate\"\n :ctx=\"reactiveContext({ t, col })\"\n />\n <template v-else>\n {{ col.caption }}\n </template>\n </th>\n <th v-if=\"componentOptions.detailsVisible\"></th>\n </tr>\n </thead>\n\n <tbody>\n <template v-for=\"item in productsItems\" :key=\"item.productId\">\n <tr\n :class=\"{\n 'bg-light': item.exactMatch,\n 'no-border-bottom': item['expanded'],\n 'ext-selected': instance?.selection.isSelected(item),\n }\"\n >\n <td v-if=\"componentOptions.selectable\">\n <div class=\"ext-select-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </td>\n <td v-if=\"previewEnabled\">\n <Clickable\n class=\"d-flex ext-icon-preview\"\n :title=\"t(isPreviewDisabled(item) ? 'PreviewNotAvailable' : 'Preview', true)\"\n :disabled=\"isPreviewDisabled(item)\"\n @click.prevent=\"\n !isPreviewDisabled(item) &&\n previewByProductId(\n item.baseProduct?.productId || item.alternateProductId || item.productId,\n )\n \"\n >\n <Icon name=\"eye-show\" :size=\"24\" />\n </Clickable>\n </td>\n <td v-for=\"(col, index) in columns\" :key=\"index\">\n <MountPoint\n v-if=\"col.cellTemplate\"\n :callbacks=\"col.cellTemplate\"\n :ctx=\"cellCtx({ item, col })\"\n />\n <div v-else-if=\"col.dataField === 'ProductId'\">\n <Clickable v-if=\"!item.inactive\" @click=\"details(item)\">\n {{ attrValue(item, col.dataField) }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ attrValue(item, col.dataField) }}\n </span>\n <div class=\"text-muted small\">\n <em v-if=\"item.productType == catalogProductType.CONFIGURED\">\n {{ t('ConfiguredProducts') }}\n <br />\n </em>\n <em v-if=\"item.customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ item.customerClassification }}\n <br />\n </em>\n <em v-if=\"item.baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!item.baseProduct.inactive\"\n @click=\"baseProductDetails(item.baseProduct)\"\n >\n {{ item.baseProduct.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ item.baseProduct.productId }}\n </span>\n <br />\n </em>\n </div>\n </div>\n <div v-else>{{ attrValue(item, col.dataField) }}</div>\n\n <template v-if=\"col.showAllIdentifiers\">\n <div\n v-for=\"(val, idx) in attrValues(item, '#AllIdentifiers')\"\n :key=\"idx\"\n class=\"small text-muted fw-bold\"\n >\n {{ val }}\n </div>\n </template>\n </td>\n <td v-if=\"componentOptions.detailsVisible\">\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item)\"\n >\n <Icon\n :name=\"item['expanded'] ? 'minus-remove' : 'plus-add'\"\n class=\"py-1\"\n style=\"font-size: 1.1rem\"\n />\n </a>\n </td>\n </tr>\n\n <tr v-if=\"item['expanded']\">\n <td v-if=\"componentOptions.selectable\"></td>\n <td v-if=\"previewEnabled\"></td>\n <td :colspan=\"columns?.length\">\n <ItemCatalogsDetails\n :item=\"item\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n :instance-id=\"instance?.id\"\n ></ItemCatalogsDetails>\n </td>\n <td></td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport ItemCatalogsDetails from './components/ItemCatalogsDetails.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsTableOptions } from '@/catalogs/api/configuration/components/ItemsTableOptions';\nimport { DetailsCommand, PreviewCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues, additionalInfo } from '@/common/helpers/productAttributes';\nimport { CatalogProductItem, CatalogProductTypeEnum, ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-table',\n\n components: {\n Icon,\n Clickable,\n MountPoint,\n ItemCatalogsDetails,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const catalogProductType = CatalogProductTypeEnum;\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, emit, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const productsItems = computed<CatalogProductItem[]>(\n () => store.value?.data.products?.items || [],\n );\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const isPreviewDisabled = (item: CatalogProductItem) =>\n (item.baseProduct && item.baseProduct.inactive) || item.inactive;\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.search?.table ?? ({} as ItemsTableOptions),\n );\n\n const columns = computed(() => {\n return componentOptions.value.columns;\n });\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const previewByProductId = async (productId: string): Promise<void> => {\n try {\n await instance.value?.execute(new PreviewCommand({ productId }).from(componentName));\n } catch {\n // Ignore Error\n }\n };\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n product['expanded'] = !product['expanded'];\n };\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // v7: per-cell reactive context cache. Each (item, col) pair reuses one\n // stable reactive ctx across re-renders — identity preserved, mutations\n // propagate via reactivity (D-N2). Avoids re-mounting cells on data change.\n const cellCtx = reactiveContextCache((key: { item: CatalogProductItem; col: unknown }) => ({\n col: key.col,\n item: key.item,\n instance: instance.value,\n catalogProductType,\n CatalogProductTypeEnum,\n t,\n emit,\n details,\n attrValue,\n attrValues,\n baseProductDetails,\n }));\n\n return {\n root,\n componentName,\n componentOptions,\n instance,\n isReady,\n isWebComponent,\n store,\n routeData,\n productsItems,\n previewEnabled,\n columns,\n showingAllCatalogs,\n catalogProductType,\n CatalogProductTypeEnum,\n t,\n emit,\n details,\n previewByProductId,\n attrValue,\n additionalInfo,\n attrValues,\n isPreviewDisabled,\n toggleItemDetails,\n baseProductDetails,\n reactiveContext,\n cellCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && toolbarVisible\">\n <!-- Sorting & Page size -->\n <div class=\"d-flex flex-row justify-content-between align-items-center flex-wrap w-100\">\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('SortBy') }}:</span\n >\n <select\n v-model=\"sortBy\"\n class=\"form-select ms-2\"\n :class=\"[narrowerThan('xl') && 'w-100']\"\n >\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortKey\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('PageSize') }}:</span\n >\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n\n <div class=\"my-3 d-flex flex-row justify-content-between align-items-center flex-wrap\">\n <!-- Pagination -->\n <div v-if=\"totalCount && pagination\" class=\"my-2 mx-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n :class=\"[narrowerThan('sm') && 'w-100 text-center']\"\n />\n </div>\n\n <!-- Sub-views -->\n <ul\n v-if=\"visibleSubViews?.length && visibleSubViews.length > 1\"\n class=\"list-unstyled d-flex justify-content-center my-2 mx-2\"\n >\n <li v-for=\"subView in visibleSubViews\" :key=\"subView.type\">\n <component\n :is=\"isSubViewActive(subView) ? 'div' : 'Clickable'\"\n class=\"d-flex align-items-center py-2 mx-2 text-body text-decoration-none\"\n role=\"tab\"\n :class=\"[isSubViewActive(subView) && 'active border-bottom border-primary border-2']\"\n :aria-selected=\"isSubViewActive(subView)\"\n :title=\"`${t('ChangeDisplayModeTo')} ${t(subView.tName)}`\"\n @click.prevent=\"changeSubView(subView.type)\"\n >\n <Icon :name=\"subView.icon\" class=\"mx-1\" />\n <span v-if=\"widerThan('sm')\">{{ t(subView.tName) }}</span>\n </component>\n </li>\n </ul>\n\n <div\n v-if=\"actionsEnabled && productListMenu?.items\"\n class=\"d-flex my-1\"\n :class=\"[narrowerThan('sm') && 'w-100 justify-content-end']\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"productListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"productListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in productListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onProductListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref, watch } from 'vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n ProductsSubViewCommand,\n ProductsPageSizeCommand,\n ProductsSortByCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { SubView } from '@/catalogs/api/runtime/RouteData';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Dropdown from '@/common/components/Dropdown.vue';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogItem, CatalogProductSortFieldEnum } from '@/common/services/swagger';\nimport type { CatalogsComponentName as ComponentName } from '@/generated/component-names';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-toolbar',\n\n components: {\n PaginationAmount,\n Icon,\n Clickable,\n Btn,\n Dropdown,\n Arrow,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props, { emit }) {\n const root = ref<HTMLElement>();\n const exportMenuOpen = ref(false);\n const currentCatalog = ref<CatalogItem | undefined>(undefined);\n const sortByItems = {\n LastImport: CatalogProductSortFieldEnum.LAST_IMPORT,\n Product: CatalogProductSortFieldEnum.PRODUCT,\n LastModified: CatalogProductSortFieldEnum.LAST_MODIFIED,\n };\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId);\n\n const { onProductListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const subViews: ReadonlyArray<{\n type: SubView;\n tName: string;\n icon: string;\n relatedComponent: ComponentName;\n }> = [\n {\n type: 'table',\n tName: 'DisplayModeTable',\n icon: 'data-table-grid',\n relatedComponent: 'pis-catalogs-products-search-table-router-view',\n },\n {\n type: 'list',\n tName: 'DisplayModeList',\n icon: 'list-bullet-options',\n relatedComponent: 'pis-catalogs-products-search-list-router-view',\n },\n {\n type: 'grid',\n tName: 'DisplayModeGrid',\n icon: 'grid-matrix',\n relatedComponent: 'pis-catalogs-products-search-grid-router-view',\n },\n ];\n\n const allowedSubViews = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.subViews,\n );\n\n const visibleSubViews = computed(() => {\n if (!allowedSubViews.value) {\n return subViews;\n }\n\n const filtered = subViews.filter(\n ({ type, relatedComponent }) =>\n allowedSubViews.value?.includes(type) &&\n instance.value?.registeredComponents.has(relatedComponent),\n );\n\n const ordered: any[] = [];\n\n allowedSubViews.value.forEach((type) => {\n var item = filtered.find((a) => a.type == type);\n if (item) {\n ordered.push(item);\n }\n });\n\n return ordered;\n });\n\n const totalCount = computed(() => store.value?.data.products?.totalCount);\n const pagination = computed(() => routeData.value?.products.pagination);\n\n const sortBy = computed({\n get: () => routeData.value?.products.sortField,\n set: (sortField: any) =>\n instance.value?.execute(new ProductsSortByCommand({ sortField }).from(componentName)),\n });\n\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new ProductsPageSizeCommand({ pageSize }).from(componentName)),\n });\n\n const pageSizeItems = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.pageSizes,\n );\n const toolbarVisible = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.visible,\n );\n\n const changeSubView = (subView: SubView) => {\n instance.value?.execute(new ProductsSubViewCommand({ subView }).from(componentName));\n };\n\n const isSubViewActive = ({ type }) => type === routeData.value?.products.subView;\n\n const productListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.productListMenu,\n );\n\n const productListMenuItems = (): MenuItem<void>[] =>\n (productListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n productListMenu.value?.visible,\n );\n\n const setCurrentCatalog = () => {\n if (!routeData?.value?.products.catalogId) {\n currentCatalog.value = undefined;\n return;\n }\n currentCatalog.value =\n store.value?.data.catalogs?.items?.find(\n (catalog: CatalogItem) => catalog.id === routeData?.value?.products.catalogId,\n ) || undefined;\n };\n\n watch(\n () => routeData?.value?.products.catalogId,\n () => setCurrentCatalog(),\n );\n\n // v7: per-menu-item reactive ctx cache. Each item reuses one stable reactive\n // ctx across re-renders — identity preserved (D-N2).\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n toolbarVisible,\n subViews,\n visibleSubViews,\n totalCount,\n pagination,\n sortByItems,\n sortBy,\n pageSizeItems,\n pageSize,\n exportMenuOpen,\n productListMenu,\n actionsEnabled,\n instance,\n currentCatalog,\n t,\n emit,\n widerThan,\n isDisabled,\n isSubViewActive,\n narrowerThan,\n changeSubView,\n productListMenuItems,\n onProductListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady && toolbarVisible\">\n <!-- Sorting & Page size -->\n <div class=\"d-flex flex-row justify-content-between align-items-center flex-wrap w-100\">\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('SortBy') }}:</span\n >\n <select\n v-model=\"sortBy\"\n class=\"form-select ms-2\"\n :class=\"[narrowerThan('xl') && 'w-100']\"\n >\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortKey\">\n {{ t(`SortBy${sortName}`) }}\n </option>\n </select>\n </label>\n\n <label class=\"d-flex align-items-center my-1\" :class=\"[narrowerThan('sm') && 'w-100']\">\n <span class=\"text-nowrap\" :class=\"[narrowerThan('sm') && 'w-100']\"\n >{{ t('PageSize') }}:</span\n >\n <select v-model=\"pageSize\" class=\"form-select ms-2\">\n <option v-for=\"size in pageSizeItems\" :key=\"size\" :value=\"size\" v-text=\"size\" />\n </select>\n </label>\n </div>\n\n <div class=\"my-3 d-flex flex-row justify-content-between align-items-center flex-wrap\">\n <!-- Pagination -->\n <div v-if=\"totalCount && pagination\" class=\"my-2 mx-2\">\n <PaginationAmount\n :total-count=\"totalCount\"\n :page=\"pagination.page\"\n :page-size=\"pagination.pageSize\"\n :showing-text=\"t('PaginationShowing', true)\"\n :of-text=\"t('PaginationOf', true)\"\n :class=\"[narrowerThan('sm') && 'w-100 text-center']\"\n />\n </div>\n\n <!-- Sub-views -->\n <ul\n v-if=\"visibleSubViews?.length && visibleSubViews.length > 1\"\n class=\"list-unstyled d-flex justify-content-center my-2 mx-2\"\n >\n <li v-for=\"subView in visibleSubViews\" :key=\"subView.type\">\n <component\n :is=\"isSubViewActive(subView) ? 'div' : 'Clickable'\"\n class=\"d-flex align-items-center py-2 mx-2 text-body text-decoration-none\"\n role=\"tab\"\n :class=\"[isSubViewActive(subView) && 'active border-bottom border-primary border-2']\"\n :aria-selected=\"isSubViewActive(subView)\"\n :title=\"`${t('ChangeDisplayModeTo')} ${t(subView.tName)}`\"\n @click.prevent=\"changeSubView(subView.type)\"\n >\n <Icon :name=\"subView.icon\" class=\"mx-1\" />\n <span v-if=\"widerThan('sm')\">{{ t(subView.tName) }}</span>\n </component>\n </li>\n </ul>\n\n <div\n v-if=\"actionsEnabled && productListMenu?.items\"\n class=\"d-flex my-1\"\n :class=\"[narrowerThan('sm') && 'w-100 justify-content-end']\"\n >\n <DropdownPopper placement=\"bottom-start\" :interactive=\"true\">\n <template #trigger>\n <template v-if=\"productListMenu.buttonTemplate\">\n <MountPoint\n :callbacks=\"productListMenu.buttonTemplate\"\n :ctx=\"reactiveContext({ instance, emit, t })\"\n />\n </template>\n <template v-else>\n <button type=\"button\" class=\"btn btn-primary dropdown-toggle\">\n {{ t('Actions') }}\n </button>\n </template>\n </template>\n <template #dropdown=\"{ close }\">\n <ul class=\"dropdown-menu show\">\n <li v-for=\"(item, index) in productListMenuItems()\" :key=\"index\">\n <hr v-if=\"item.text === '-'\" class=\"dropdown-divider\" />\n <span v-else-if=\"isDisabled(item)\" class=\"dropdown-item text-muted\">\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </span>\n <a\n v-else\n class=\"dropdown-item\"\n href=\"\"\n @click.prevent=\"\n onProductListMenuAction(item);\n close();\n \"\n >\n <template v-if=\"item.itemTemplate\">\n <MountPoint :callbacks=\"item.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n {{ item.text }}\n </template>\n </a>\n </li>\n </ul>\n </template>\n </DropdownPopper>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { Ref, computed, defineComponent, ref, watch } from 'vue';\n\nimport { MenuItem } from '@/catalogs/api/configuration/components/ExportMenuOptions';\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n ProductsSubViewCommand,\n ProductsPageSizeCommand,\n ProductsSortByCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { SubView } from '@/catalogs/api/runtime/RouteData';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport useCatalogActions from '@/catalogs/composables/useCatalogActions';\nimport Arrow from '@/common/components/Arrow.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Dropdown from '@/common/components/Dropdown.vue';\nimport DropdownPopper from '@/common/components/DropdownPopper.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport PaginationAmount from '@/common/components/PaginationAmount.vue';\nimport { reactiveContext, reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { CatalogItem, CatalogProductSortFieldEnum } from '@/common/services/swagger';\nimport type { CatalogsComponentName as ComponentName } from '@/generated/component-names';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-toolbar',\n\n components: {\n PaginationAmount,\n Icon,\n Clickable,\n Btn,\n Dropdown,\n Arrow,\n DropdownPopper,\n MountPoint,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props, { emit }) {\n const root = ref<HTMLElement>();\n const exportMenuOpen = ref(false);\n const currentCatalog = ref<CatalogItem | undefined>(undefined);\n const sortByItems = {\n LastImport: CatalogProductSortFieldEnum.LAST_IMPORT,\n Product: CatalogProductSortFieldEnum.PRODUCT,\n LastModified: CatalogProductSortFieldEnum.LAST_MODIFIED,\n };\n\n const {\n componentName,\n isReady,\n isWebComponent,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n } = setupComponent(root, props.instanceId);\n\n const { onProductListMenuAction } = useCatalogActions(\n instance as Ref<Instance>,\n t,\n componentName,\n );\n\n const subViews: ReadonlyArray<{\n type: SubView;\n tName: string;\n icon: string;\n relatedComponent: ComponentName;\n }> = [\n {\n type: 'table',\n tName: 'DisplayModeTable',\n icon: 'data-table-grid',\n relatedComponent: 'pis-catalogs-products-search-table-router-view',\n },\n {\n type: 'list',\n tName: 'DisplayModeList',\n icon: 'list-bullet-options',\n relatedComponent: 'pis-catalogs-products-search-list-router-view',\n },\n {\n type: 'grid',\n tName: 'DisplayModeGrid',\n icon: 'grid-matrix',\n relatedComponent: 'pis-catalogs-products-search-grid-router-view',\n },\n ];\n\n const allowedSubViews = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.subViews,\n );\n\n const visibleSubViews = computed(() => {\n if (!allowedSubViews.value) {\n return subViews;\n }\n\n const filtered = subViews.filter(\n ({ type, relatedComponent }) =>\n allowedSubViews.value?.includes(type) &&\n instance.value?.registeredComponents.has(relatedComponent),\n );\n\n const ordered: any[] = [];\n\n allowedSubViews.value.forEach((type) => {\n var item = filtered.find((a) => a.type == type);\n if (item) {\n ordered.push(item);\n }\n });\n\n return ordered;\n });\n\n const totalCount = computed(() => store.value?.data.products?.totalCount);\n const pagination = computed(() => routeData.value?.products.pagination);\n\n const sortBy = computed({\n get: () => routeData.value?.products.sortField,\n set: (sortField: any) =>\n instance.value?.execute(new ProductsSortByCommand({ sortField }).from(componentName)),\n });\n\n const pageSize = computed({\n get: () => pagination.value?.pageSize ?? 24,\n set: (pageSize: number) =>\n instance.value?.execute(new ProductsPageSizeCommand({ pageSize }).from(componentName)),\n });\n\n const pageSizeItems = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.pageSizes,\n );\n const toolbarVisible = computed(\n () => store.value?.options.components?.products?.search?.toolbar?.visible,\n );\n\n const changeSubView = (subView: SubView) => {\n instance.value?.execute(new ProductsSubViewCommand({ subView }).from(componentName));\n };\n\n const isSubViewActive = ({ type }) => type === routeData.value?.products.subView;\n\n const productListMenu = computed(\n () => store.value?.options.components?.search?.common?.actions?.productListMenu,\n );\n\n const productListMenuItems = (): MenuItem<void>[] =>\n (productListMenu.value?.items || []).filter((item: MenuItem<void>) => {\n if (typeof item.visible === 'function') {\n return item.visible();\n }\n return item.visible;\n });\n\n const isDisabled = (item: MenuItem<void>) =>\n typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n const actionsEnabled = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-search-actions-modals') &&\n productListMenu.value?.visible,\n );\n\n const setCurrentCatalog = () => {\n if (!routeData?.value?.products.catalogId) {\n currentCatalog.value = undefined;\n return;\n }\n currentCatalog.value =\n store.value?.data.catalogs?.items?.find(\n (catalog: CatalogItem) => catalog.id === routeData?.value?.products.catalogId,\n ) || undefined;\n };\n\n watch(\n () => routeData?.value?.products.catalogId,\n () => setCurrentCatalog(),\n );\n\n // v7: per-menu-item reactive ctx cache. Each item reuses one stable reactive\n // ctx across re-renders — identity preserved (D-N2).\n const itemCtx = reactiveContextCache((key: { item: MenuItem<void> }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n routeData,\n toolbarVisible,\n subViews,\n visibleSubViews,\n totalCount,\n pagination,\n sortByItems,\n sortBy,\n pageSizeItems,\n pageSize,\n exportMenuOpen,\n productListMenu,\n actionsEnabled,\n instance,\n currentCatalog,\n t,\n emit,\n widerThan,\n isDisabled,\n isSubViewActive,\n narrowerThan,\n changeSubView,\n productListMenuItems,\n onProductListMenuAction,\n reactiveContext,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'grid'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'grid'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'list'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-list-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'list'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-list-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'table'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-table-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" :class=\"componentName\">\n <div\n v-if=\"\n isReady &&\n routeData &&\n routeData.view === 'products' &&\n routeData.products.subView == 'table'\n \"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-table-router-view',\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, store, routeData } = setupComponent(root, props.instanceId, [\n CatalogsDataType.Products,\n ]);\n\n return {\n root,\n componentName,\n isReady,\n store,\n routeData,\n };\n },\n});\n</script>\n","<template>\n <FiltersNavigatorModalBase\n v-bind=\"$attrs\"\n :show=\"show\"\n :title=\"title\"\n :is-mobile=\"isMobile\"\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-fetched=\"filtersFetched\"\n :filters-model=\"filtersModel\"\n :filtered-result-count=\"filteredResultCount\"\n :filtered-result-count-loading=\"filteredResultCountLoading\"\n :fetch-filter-values=\"fetchFilterValues\"\n :available-filters-label-suffix=\"':'\"\n />\n</template>\n\n<script lang=\"ts\">\n// Thin catalogs re-skin of the shared filters navigator modal: keeps the\n// historical catalogs deltas — no open-reset watch (the shared default) and\n// the trailing colon after the promoted/additional filters label. Props and\n// events pass straight through to the shared implementation; emits stay\n// undeclared here so the listeners keep flowing via $attrs.\nimport { defineComponent, PropType } from 'vue';\n\nimport FiltersNavigatorModalBase from '@/common/components/FiltersNavigatorModal.vue';\nimport type { TranslateFunc } from '@/common/composables/translateFunc';\nimport { FilterItem, FilterValue } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: { FiltersNavigatorModalBase },\n\n inheritAttrs: false,\n\n props: {\n show: Boolean,\n title: { type: String, required: true },\n isMobile: Boolean,\n t: { type: Function as PropType<TranslateFunc>, required: true },\n filtersAll: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersPromoted: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersAdditional: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersFetched: Map as PropType<Map<string, FilterValue[]>>,\n filtersModel: { type: Object, default: undefined },\n filteredResultCount: { type: Number, default: undefined },\n filteredResultCountLoading: Boolean,\n fetchFilterValues: { type: Function, required: true },\n },\n});\n</script>\n","<template>\n <FiltersNavigatorModalBase\n v-bind=\"$attrs\"\n :show=\"show\"\n :title=\"title\"\n :is-mobile=\"isMobile\"\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-fetched=\"filtersFetched\"\n :filters-model=\"filtersModel\"\n :filtered-result-count=\"filteredResultCount\"\n :filtered-result-count-loading=\"filteredResultCountLoading\"\n :fetch-filter-values=\"fetchFilterValues\"\n :available-filters-label-suffix=\"':'\"\n />\n</template>\n\n<script lang=\"ts\">\n// Thin catalogs re-skin of the shared filters navigator modal: keeps the\n// historical catalogs deltas — no open-reset watch (the shared default) and\n// the trailing colon after the promoted/additional filters label. Props and\n// events pass straight through to the shared implementation; emits stay\n// undeclared here so the listeners keep flowing via $attrs.\nimport { defineComponent, PropType } from 'vue';\n\nimport FiltersNavigatorModalBase from '@/common/components/FiltersNavigatorModal.vue';\nimport type { TranslateFunc } from '@/common/composables/translateFunc';\nimport { FilterItem, FilterValue } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: { FiltersNavigatorModalBase },\n\n inheritAttrs: false,\n\n props: {\n show: Boolean,\n title: { type: String, required: true },\n isMobile: Boolean,\n t: { type: Function as PropType<TranslateFunc>, required: true },\n filtersAll: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersPromoted: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersAdditional: { type: Array as PropType<FilterItem[]>, default: undefined },\n filtersFetched: Map as PropType<Map<string, FilterValue[]>>,\n filtersModel: { type: Object, default: undefined },\n filteredResultCount: { type: Number, default: undefined },\n filteredResultCountLoading: Boolean,\n fetchFilterValues: { type: Function, required: true },\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <nav class=\"mb-4 row g-2\">\n <div v-if=\"categoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!categories.length\"\n :number=\"categories.length\"\n @click.prevent=\"categoriesModalOpen = true\"\n >\n {{ t('Products') }}\n </Btn>\n </div>\n\n <div v-if=\"partCategoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!partCategories.length\"\n :number=\"partCategories.length\"\n @click.prevent=\"partCategoriesModalOpen = true\"\n >\n {{ t('PartsAndServices') }}\n </Btn>\n </div>\n\n <div v-if=\"filtersShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"funnel-filter\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!filtersAll.length\"\n :number=\"filtersAll.length\"\n @click.prevent=\"filtersModalOpen = true\"\n >\n {{ t('Filters', true) }}\n </Btn>\n </div>\n </nav>\n\n <Modal v-model:show=\"categoriesModalOpen\" :title=\"t('AllOfferings')\">\n <CategoriesList\n :categories=\"categories\"\n :configurators-visible=\"false\"\n @click-item=\"setCategory\"\n />\n </Modal>\n\n <Modal v-model:show=\"partCategoriesModalOpen\" :title=\"t('PartsAndServices')\">\n <CategoriesList\n :categories=\"partCategories\"\n :configurators-visible=\"false\"\n @click-item=\"setPartCategory\"\n />\n </Modal>\n\n <FiltersNavigatorModal\n v-if=\"filtersModalOpen\"\n v-model:show=\"filtersModalOpen\"\n :title=\"t('Filters', true)\"\n is-mobile\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-model=\"filtersModel\"\n :filters-fetched=\"filtersFetched\"\n :filtered-result-count=\"filteredResultCount\"\n :fetch-filter-values=\"fetchFilterValues\"\n @value-change=\"onModalFilterValueChange\"\n @apply-filters=\"applyFilters\"\n @clear=\"resetFiltersApplied\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '../api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '../api/runtime/CommandExecutor';\nimport { setupComponent } from '../composables/setupComponent';\n\nimport FiltersNavigatorModal from '@/catalogs/components/common/FiltersNavigatorModal.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ClassificationItem, TreeTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-mobile-nav',\n\n components: {\n Btn,\n Modal,\n CategoriesList,\n FiltersNavigatorModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const categoriesModalOpen = ref(false);\n const partCategoriesModalOpen = ref(false);\n const filtersModalOpen = ref(false);\n\n const { componentName, isWebComponent, isReady, instance, store, t, useProductsFilters } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Breadcrumbs]);\n\n const {\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filteredResultCount,\n fetchFilterValues,\n applyModelFilters,\n refreshResultCount,\n resetFiltersApplied,\n } = useProductsFilters();\n\n const categoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has(\n 'pis-catalogs-products-search-product-categories',\n ) && store.value?.options.components?.products?.search?.productCategories?.visible,\n );\n\n const partCategoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-part-categories') &&\n store.value?.options.components?.products?.search?.partCategories?.visible,\n );\n\n const filtersShown = computed(() =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-filters'),\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n const partCategories = computed(() => store.value?.data.partClassifications?.items ?? []);\n\n const columnsNumber = computed(() => {\n const itemsNumber = [\n categoriesShown.value,\n partCategoriesShown.value,\n filtersShown.value,\n ].filter(Boolean).length;\n\n return itemsNumber > 3 ? 3 : itemsNumber; // 3 or less columns\n });\n\n const applyFilters = () => {\n filtersModalOpen.value = false;\n applyModelFilters();\n };\n\n const onModalFilterValueChange = ({ attributeCode, filterValueName, value }) => {\n filtersModel.value[attributeCode][filterValueName] = value;\n refreshResultCount();\n };\n\n const setCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n categoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: false,\n treeType: TreeTypeEnum.PRODUCTS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n const setPartCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n partCategoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: false,\n treeType: TreeTypeEnum.PARTS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n columnsNumber,\n t,\n instance,\n\n // Categories\n categoriesModalOpen,\n categories,\n categoriesShown,\n setCategory,\n\n // Part Categories\n partCategoriesModalOpen,\n partCategories,\n partCategoriesShown,\n setPartCategory,\n\n // Filters\n filtersModalOpen,\n filtersShown,\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filteredResultCount,\n onModalFilterValueChange,\n fetchFilterValues,\n resetFiltersApplied,\n applyFilters,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <nav class=\"mb-4 row g-2\">\n <div v-if=\"categoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!categories.length\"\n :number=\"categories.length\"\n @click.prevent=\"categoriesModalOpen = true\"\n >\n {{ t('Products') }}\n </Btn>\n </div>\n\n <div v-if=\"partCategoriesShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"folder-open\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!partCategories.length\"\n :number=\"partCategories.length\"\n @click.prevent=\"partCategoriesModalOpen = true\"\n >\n {{ t('PartsAndServices') }}\n </Btn>\n </div>\n\n <div v-if=\"filtersShown\" :class=\"[`col-${12 / columnsNumber}`]\">\n <Btn\n icon=\"funnel-filter\"\n class=\"w-100 h-100\"\n vertical\n :disabled=\"!filtersAll.length\"\n :number=\"filtersAll.length\"\n @click.prevent=\"filtersModalOpen = true\"\n >\n {{ t('Filters', true) }}\n </Btn>\n </div>\n </nav>\n\n <Modal v-model:show=\"categoriesModalOpen\" :title=\"t('AllOfferings')\">\n <CategoriesList\n :categories=\"categories\"\n :configurators-visible=\"false\"\n @click-item=\"setCategory\"\n />\n </Modal>\n\n <Modal v-model:show=\"partCategoriesModalOpen\" :title=\"t('PartsAndServices')\">\n <CategoriesList\n :categories=\"partCategories\"\n :configurators-visible=\"false\"\n @click-item=\"setPartCategory\"\n />\n </Modal>\n\n <FiltersNavigatorModal\n v-if=\"filtersModalOpen\"\n v-model:show=\"filtersModalOpen\"\n :title=\"t('Filters', true)\"\n is-mobile\n :t=\"t\"\n :filters-all=\"filtersAll\"\n :filters-promoted=\"filtersPromoted\"\n :filters-additional=\"filtersAdditional\"\n :filters-model=\"filtersModel\"\n :filters-fetched=\"filtersFetched\"\n :filtered-result-count=\"filteredResultCount\"\n :fetch-filter-values=\"fetchFilterValues\"\n @value-change=\"onModalFilterValueChange\"\n @apply-filters=\"applyFilters\"\n @clear=\"resetFiltersApplied\"\n />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '../api/configuration/application/CatalogsDataType';\nimport { ClassificationCommand } from '../api/runtime/CommandExecutor';\nimport { setupComponent } from '../composables/setupComponent';\n\nimport FiltersNavigatorModal from '@/catalogs/components/common/FiltersNavigatorModal.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport CategoriesList from '@/common/components/CategoriesList.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ClassificationItem, TreeTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-mobile-nav',\n\n components: {\n Btn,\n Modal,\n CategoriesList,\n FiltersNavigatorModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const categoriesModalOpen = ref(false);\n const partCategoriesModalOpen = ref(false);\n const filtersModalOpen = ref(false);\n\n const { componentName, isWebComponent, isReady, instance, store, t, useProductsFilters } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Breadcrumbs]);\n\n const {\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filteredResultCount,\n fetchFilterValues,\n applyModelFilters,\n refreshResultCount,\n resetFiltersApplied,\n } = useProductsFilters();\n\n const categoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has(\n 'pis-catalogs-products-search-product-categories',\n ) && store.value?.options.components?.products?.search?.productCategories?.visible,\n );\n\n const partCategoriesShown = computed(\n () =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-part-categories') &&\n store.value?.options.components?.products?.search?.partCategories?.visible,\n );\n\n const filtersShown = computed(() =>\n instance.value?.registeredComponents.has('pis-catalogs-products-search-filters'),\n );\n\n const categories = computed(() => store.value?.data.productClassifications?.items ?? []);\n const partCategories = computed(() => store.value?.data.partClassifications?.items ?? []);\n\n const columnsNumber = computed(() => {\n const itemsNumber = [\n categoriesShown.value,\n partCategoriesShown.value,\n filtersShown.value,\n ].filter(Boolean).length;\n\n return itemsNumber > 3 ? 3 : itemsNumber; // 3 or less columns\n });\n\n const applyFilters = () => {\n filtersModalOpen.value = false;\n applyModelFilters();\n };\n\n const onModalFilterValueChange = ({ attributeCode, filterValueName, value }) => {\n filtersModel.value[attributeCode][filterValueName] = value;\n refreshResultCount();\n };\n\n const setCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n categoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: false,\n treeType: TreeTypeEnum.PRODUCTS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n const setPartCategory = async ({ cid }: ClassificationItem) => {\n if (instance.value && cid) {\n partCategoriesModalOpen.value = false;\n try {\n await instance.value.execute(\n new ClassificationCommand({\n cid,\n clearSearch: false,\n treeType: TreeTypeEnum.PARTS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n }\n };\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n store,\n columnsNumber,\n t,\n instance,\n\n // Categories\n categoriesModalOpen,\n categories,\n categoriesShown,\n setCategory,\n\n // Part Categories\n partCategoriesModalOpen,\n partCategories,\n partCategoriesShown,\n setPartCategory,\n\n // Filters\n filtersModalOpen,\n filtersShown,\n filtersAll,\n filtersPromoted,\n filtersAdditional,\n filtersModel,\n filtersFetched,\n filteredResultCount,\n onModalFilterValueChange,\n fetchFilterValues,\n resetFiltersApplied,\n applyFilters,\n };\n },\n});\n</script>\n","<template>\n <div v-for=\"catalogOption of catalogOptions\" :key=\"catalogOption.type\">\n <div class=\"form-check mt-3\">\n <label class=\"form-check-label\">\n <input\n v-model=\"ownerType\"\n name=\"catalogType\"\n type=\"radio\"\n class=\"form-check-input\"\n :value=\"catalogOption.type\"\n :disabled=\"!editable\"\n />\n <div class=\"form-label fw-bolder\">{{ t(`${catalogOption.type}Catalog`) }}</div>\n </label>\n </div>\n </div>\n</template>\n<script lang=\"ts\">\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n AddNotificationCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport { CatalogOption, CatalogTypeEnum, CatalogOptionsResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n editable: { type: Boolean, default: true },\n type: { type: String as PropType<CatalogTypeEnum>, default: CatalogTypeEnum.PERSONAL },\n },\n emits: ['on-type-updated'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const catalogOptions = ref<CatalogOption[]>([]);\n const ownerType = ref<CatalogTypeEnum>(props.type);\n watch(\n () => ownerType.value,\n () => emit('on-type-updated', ownerType.value),\n );\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-options'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items || [];\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-options',\n ),\n );\n }\n });\n\n return {\n ownerType,\n catalogType,\n catalogOptions,\n };\n },\n});\n</script>\n","<template>\n <div v-for=\"catalogOption of catalogOptions\" :key=\"catalogOption.type\">\n <div class=\"form-check mt-3\">\n <label class=\"form-check-label\">\n <input\n v-model=\"ownerType\"\n name=\"catalogType\"\n type=\"radio\"\n class=\"form-check-input\"\n :value=\"catalogOption.type\"\n :disabled=\"!editable\"\n />\n <div class=\"form-label fw-bolder\">{{ t(`${catalogOption.type}Catalog`) }}</div>\n </label>\n </div>\n </div>\n</template>\n<script lang=\"ts\">\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n AddNotificationCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport { CatalogOption, CatalogTypeEnum, CatalogOptionsResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n editable: { type: Boolean, default: true },\n type: { type: String as PropType<CatalogTypeEnum>, default: CatalogTypeEnum.PERSONAL },\n },\n emits: ['on-type-updated'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const catalogOptions = ref<CatalogOption[]>([]);\n const ownerType = ref<CatalogTypeEnum>(props.type);\n watch(\n () => ownerType.value,\n () => emit('on-type-updated', ownerType.value),\n );\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-options'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items || [];\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-options',\n ),\n );\n }\n });\n\n return {\n ownerType,\n catalogType,\n catalogOptions,\n };\n },\n});\n</script>\n","<template>\n <div class=\"position-relative w-100\">\n <Popper class=\"pis-no-transform\" placement=\"bottom-start\" @open:popper=\"open\">\n <button\n ref=\"toggleEl\"\n type=\"button\"\n class=\"btn btn-secondary dropdown-toggle dropdown-toggle-select w-100 text-start form-select\"\n >\n {{ innerValue?.text }}\n </button>\n\n <template #content=\"{ close }\">\n <ul\n ref=\"ddEl\"\n class=\"dropdown-menu p-1 dropdown-menu-select position-relative d-block shadow\"\n style=\"margin-top: 3rem\"\n >\n <li v-for=\"(item, index) in fixedItems\" :key=\"index\">\n <template v-if=\"item.type === 'fixed'\">\n <a\n class=\"dropdown-item text-wrap w-100\"\n href=\"#\"\n @click=\"\n close();\n select(item);\n \"\n >{{ item.text }}</a\n >\n </template>\n <template v-else-if=\"item.type === 'divider'\">\n <hr class=\"dropdown-divider\" />\n </template>\n </li>\n <li class=\"p-2\">\n <input ref=\"inputEl\" v-model=\"filter\" type=\"text\" class=\"form-control\" />\n </li>\n <li>\n <ul>\n <li v-for=\"(item, index) in filteredItems\" :key=\"index\">\n <a\n class=\"dropdown-item text-wrap w-100\"\n href=\"#\"\n @click=\"\n close();\n select(item);\n \"\n >\n {{ item.text }}</a\n >\n </li>\n </ul>\n </li>\n </ul>\n </template>\n </Popper>\n </div>\n</template>\n<script lang=\"ts\">\nimport { PropType, computed, defineComponent, ref } from 'vue';\nimport Popper from 'vue3-popper';\nexport default defineComponent({\n components: { Popper },\n props: {\n modelValue: {\n type: null as unknown as PropType<string | null>,\n default: null,\n required: false,\n },\n items: { type: Array as PropType<SelectItem[]>, default: undefined },\n },\n\n emits: ['update:modelValue'],\n\n setup(props, { emit }) {\n const expanded = ref<boolean>(false);\n const innerValue = ref<SelectItem | null>();\n const toggleEl = ref<HTMLElement>();\n const inputEl = ref<HTMLElement>();\n const ddEl = ref<HTMLElement>();\n const filter = ref<string>('');\n const fixedItems = computed(() =>\n props.items != null\n ? props.items.filter((x) => x.type === 'fixed' || x.type === 'divider')\n : [],\n );\n const filteredItems = computed(() => {\n if (filter.value != null && props.items != null)\n return props.items.filter(\n (x) =>\n x.type === 'standard' && x.text.toLowerCase().indexOf(filter.value.toLowerCase()) >= 0,\n );\n else return [];\n });\n\n const open = () => {\n if (ddEl.value && toggleEl.value) {\n ddEl.value.style.width = toggleEl.value.clientWidth + 2 + 'px';\n }\n\n setTimeout(() => {\n if (inputEl.value) {\n inputEl.value.focus();\n }\n }, 10);\n };\n\n const select = (item: SelectItem) => {\n emit('update:modelValue', item.value);\n innerValue.value = item;\n };\n\n return {\n expanded,\n innerValue,\n inputEl,\n toggleEl,\n ddEl,\n filter,\n filteredItems,\n fixedItems,\n open,\n select,\n };\n },\n});\n\nexport interface SelectItem {\n text: string;\n value: string;\n type: SelectItemType;\n}\n\nexport type SelectItemType = 'standard' | 'fixed' | 'divider';\n</script>\n","<template>\n <div class=\"position-relative w-100\">\n <Popper class=\"pis-no-transform\" placement=\"bottom-start\" @open:popper=\"open\">\n <button\n ref=\"toggleEl\"\n type=\"button\"\n class=\"btn btn-secondary dropdown-toggle dropdown-toggle-select w-100 text-start form-select\"\n >\n {{ innerValue?.text }}\n </button>\n\n <template #content=\"{ close }\">\n <ul\n ref=\"ddEl\"\n class=\"dropdown-menu p-1 dropdown-menu-select position-relative d-block shadow\"\n style=\"margin-top: 3rem\"\n >\n <li v-for=\"(item, index) in fixedItems\" :key=\"index\">\n <template v-if=\"item.type === 'fixed'\">\n <a\n class=\"dropdown-item text-wrap w-100\"\n href=\"#\"\n @click=\"\n close();\n select(item);\n \"\n >{{ item.text }}</a\n >\n </template>\n <template v-else-if=\"item.type === 'divider'\">\n <hr class=\"dropdown-divider\" />\n </template>\n </li>\n <li class=\"p-2\">\n <input ref=\"inputEl\" v-model=\"filter\" type=\"text\" class=\"form-control\" />\n </li>\n <li>\n <ul>\n <li v-for=\"(item, index) in filteredItems\" :key=\"index\">\n <a\n class=\"dropdown-item text-wrap w-100\"\n href=\"#\"\n @click=\"\n close();\n select(item);\n \"\n >\n {{ item.text }}</a\n >\n </li>\n </ul>\n </li>\n </ul>\n </template>\n </Popper>\n </div>\n</template>\n<script lang=\"ts\">\nimport { PropType, computed, defineComponent, ref } from 'vue';\nimport Popper from 'vue3-popper';\nexport default defineComponent({\n components: { Popper },\n props: {\n modelValue: {\n type: null as unknown as PropType<string | null>,\n default: null,\n required: false,\n },\n items: { type: Array as PropType<SelectItem[]>, default: undefined },\n },\n\n emits: ['update:modelValue'],\n\n setup(props, { emit }) {\n const expanded = ref<boolean>(false);\n const innerValue = ref<SelectItem | null>();\n const toggleEl = ref<HTMLElement>();\n const inputEl = ref<HTMLElement>();\n const ddEl = ref<HTMLElement>();\n const filter = ref<string>('');\n const fixedItems = computed(() =>\n props.items != null\n ? props.items.filter((x) => x.type === 'fixed' || x.type === 'divider')\n : [],\n );\n const filteredItems = computed(() => {\n if (filter.value != null && props.items != null)\n return props.items.filter(\n (x) =>\n x.type === 'standard' && x.text.toLowerCase().indexOf(filter.value.toLowerCase()) >= 0,\n );\n else return [];\n });\n\n const open = () => {\n if (ddEl.value && toggleEl.value) {\n ddEl.value.style.width = toggleEl.value.clientWidth + 2 + 'px';\n }\n\n setTimeout(() => {\n if (inputEl.value) {\n inputEl.value.focus();\n }\n }, 10);\n };\n\n const select = (item: SelectItem) => {\n emit('update:modelValue', item.value);\n innerValue.value = item;\n };\n\n return {\n expanded,\n innerValue,\n inputEl,\n toggleEl,\n ddEl,\n filter,\n filteredItems,\n fixedItems,\n open,\n select,\n };\n },\n});\n\nexport interface SelectItem {\n text: string;\n value: string;\n type: SelectItemType;\n}\n\nexport type SelectItemType = 'standard' | 'fixed' | 'divider';\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CopyCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CopyCatalogTo') }}</div>\n <FormSelectFilterable\n :model-value=\"copyTo\"\n :items=\"copyToOptions\"\n @update:model-value=\"onCopyToUpdate\"\n />\n </label>\n <div v-if=\"copyTo == newCatalogValue\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogCopyActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n CatalogCopyCommand,\n CatalogCopyCommandArgs,\n CatalogCopyToNewCommand,\n CatalogCopyToNewCommandArgs,\n CatalogGetOptionsCommand,\n GetAllCatalogsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormSelectFilterable, { SelectItem } from '@/common/components/FormSelectFilterable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogItem, CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormSelectFilterable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogCopyActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const newCatalogValue = 'NEW_CATALOG';\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const copyTo = ref<string | null>(null);\n const code = ref('');\n const description = ref('');\n const type = ref(CatalogTypeEnum.PERSONAL);\n const allCatalogs = ref<CatalogItem[]>([]);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n const copyToOptions = computed<SelectItem[]>(() =>\n [\n { value: newCatalogValue, text: props.t('CreateNewCatalog'), type: 'fixed' } as SelectItem,\n { type: 'divider' } as SelectItem,\n ].concat(\n allCatalogs.value.reduce((result: SelectItem[], current: CatalogItem) => {\n if (current.code !== props.data.catalog.code && current.editable) {\n return result.concat([{ value: current.code, text: current.code, type: 'standard' }]);\n }\n return result;\n }, []),\n ),\n );\n const isFormValid = computed<boolean>(\n () =>\n copyTo.value !== null &&\n (copyTo.value !== newCatalogValue ||\n (copyTo.value === newCatalogValue &&\n !!code.value &&\n !!type.value &&\n !!description.value)),\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const onCopyToUpdate = (newCopyToValue: string) => (copyTo.value = newCopyToValue);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const close = () => emit('update:show', false);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n try {\n if (copyTo.value === newCatalogValue) {\n const copyToNewArgs: CatalogCopyToNewCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: props.data.catalog.id,\n code: code.value,\n type: type.value,\n description: description.value,\n };\n await instance.execute(\n new CatalogCopyToNewCommand(copyToNewArgs).from('catalog-copy-modal'),\n );\n } else {\n const copyArgs: CatalogCopyCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: props.data.catalog.id,\n targetCatalogId: '',\n };\n const found: CatalogItem | undefined = allCatalogs.value.find(\n (destination: CatalogItem) => destination.code === copyTo.value,\n );\n if (!found) {\n return;\n }\n copyArgs.targetCatalogId = found.id;\n await instance.execute(new CatalogCopyCommand(copyArgs).from('catalog-copy-modal'));\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const onAllCatalogsLoad = async () => {\n try {\n allCatalogs.value = (await instance.execute(\n new GetAllCatalogsCommand().from('catalog-copy-modal'),\n )) as CatalogItem[];\n } catch {\n // Ignore error\n }\n };\n\n onMounted(async () => {\n try {\n onAllCatalogsLoad();\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-copy-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-copy-modal',\n ),\n );\n }\n });\n\n return {\n newCatalogValue,\n show,\n code,\n type,\n copyTo,\n validators,\n catalogType,\n description,\n isFormValid,\n copyToOptions,\n catalogOptions,\n close,\n onSave,\n onCopyToUpdate,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CopyCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CopyCatalogTo') }}</div>\n <FormSelectFilterable\n :model-value=\"copyTo\"\n :items=\"copyToOptions\"\n @update:model-value=\"onCopyToUpdate\"\n />\n </label>\n <div v-if=\"copyTo == newCatalogValue\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogCopyActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n CatalogCopyCommand,\n CatalogCopyCommandArgs,\n CatalogCopyToNewCommand,\n CatalogCopyToNewCommandArgs,\n CatalogGetOptionsCommand,\n GetAllCatalogsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormSelectFilterable, { SelectItem } from '@/common/components/FormSelectFilterable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogItem, CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormSelectFilterable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogCopyActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const newCatalogValue = 'NEW_CATALOG';\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const copyTo = ref<string | null>(null);\n const code = ref('');\n const description = ref('');\n const type = ref(CatalogTypeEnum.PERSONAL);\n const allCatalogs = ref<CatalogItem[]>([]);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n const copyToOptions = computed<SelectItem[]>(() =>\n [\n { value: newCatalogValue, text: props.t('CreateNewCatalog'), type: 'fixed' } as SelectItem,\n { type: 'divider' } as SelectItem,\n ].concat(\n allCatalogs.value.reduce((result: SelectItem[], current: CatalogItem) => {\n if (current.code !== props.data.catalog.code && current.editable) {\n return result.concat([{ value: current.code, text: current.code, type: 'standard' }]);\n }\n return result;\n }, []),\n ),\n );\n const isFormValid = computed<boolean>(\n () =>\n copyTo.value !== null &&\n (copyTo.value !== newCatalogValue ||\n (copyTo.value === newCatalogValue &&\n !!code.value &&\n !!type.value &&\n !!description.value)),\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const onCopyToUpdate = (newCopyToValue: string) => (copyTo.value = newCopyToValue);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const close = () => emit('update:show', false);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n try {\n if (copyTo.value === newCatalogValue) {\n const copyToNewArgs: CatalogCopyToNewCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: props.data.catalog.id,\n code: code.value,\n type: type.value,\n description: description.value,\n };\n await instance.execute(\n new CatalogCopyToNewCommand(copyToNewArgs).from('catalog-copy-modal'),\n );\n } else {\n const copyArgs: CatalogCopyCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: props.data.catalog.id,\n targetCatalogId: '',\n };\n const found: CatalogItem | undefined = allCatalogs.value.find(\n (destination: CatalogItem) => destination.code === copyTo.value,\n );\n if (!found) {\n return;\n }\n copyArgs.targetCatalogId = found.id;\n await instance.execute(new CatalogCopyCommand(copyArgs).from('catalog-copy-modal'));\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const onAllCatalogsLoad = async () => {\n try {\n allCatalogs.value = (await instance.execute(\n new GetAllCatalogsCommand().from('catalog-copy-modal'),\n )) as CatalogItem[];\n } catch {\n // Ignore error\n }\n };\n\n onMounted(async () => {\n try {\n onAllCatalogsLoad();\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-copy-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-copy-modal',\n ),\n );\n }\n });\n\n return {\n newCatalogValue,\n show,\n code,\n type,\n copyTo,\n validators,\n catalogType,\n description,\n isFormValid,\n copyToOptions,\n catalogOptions,\n close,\n onSave,\n onCopyToUpdate,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('NewCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n SwitchToCatalogsCommand,\n AddNotificationCommand,\n CatalogCreateNewCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const code = ref<string>('');\n const description = ref<string>('');\n const type = ref<CatalogTypeEnum>(catalogType.PERSONAL);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n const isFormValid = computed<boolean>(\n () => !!code.value && !!type.value && !!description.value,\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const close = () => emit('update:show', false);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const onSave = async () => {\n try {\n await instance.execute(\n new CatalogCreateNewCommand({\n code: code.value,\n type: type.value,\n description: description.value,\n onSuccessMessage: props.t('CatalogCreateNewSuccess'),\n }).from('catalog-create-new-modal'),\n );\n await instance.execute(new SwitchToCatalogsCommand().from('catalog-create-new-modal'));\n } catch {\n // Ignore error\n }\n close();\n };\n\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-create-new-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-create-new-modal',\n ),\n );\n }\n });\n\n return {\n show,\n code,\n type,\n validators,\n description,\n isFormValid,\n catalogType,\n catalogOptions,\n close,\n onSave,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('NewCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n SwitchToCatalogsCommand,\n AddNotificationCommand,\n CatalogCreateNewCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const code = ref<string>('');\n const description = ref<string>('');\n const type = ref<CatalogTypeEnum>(catalogType.PERSONAL);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n const isFormValid = computed<boolean>(\n () => !!code.value && !!type.value && !!description.value,\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const close = () => emit('update:show', false);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const onSave = async () => {\n try {\n await instance.execute(\n new CatalogCreateNewCommand({\n code: code.value,\n type: type.value,\n description: description.value,\n onSuccessMessage: props.t('CatalogCreateNewSuccess'),\n }).from('catalog-create-new-modal'),\n );\n await instance.execute(new SwitchToCatalogsCommand().from('catalog-create-new-modal'));\n } catch {\n // Ignore error\n }\n close();\n };\n\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-create-new-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-create-new-modal',\n ),\n );\n }\n });\n\n return {\n show,\n code,\n type,\n validators,\n description,\n isFormValid,\n catalogType,\n catalogOptions,\n close,\n onSave,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show && catalog\"\n :title=\"t('EditCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"catalog.code\" disabled />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n :type=\"catalog.type\"\n :editable=\"false\"\n ></CatalogOptions>\n <hr />\n <div class=\"d-flex justify-content-between mt-3\">\n <div v-if=\"catalog.editable\" class=\"d-flex justify-content-start\">\n <Btn v-if=\"catalog.default\" @click.prevent=\"onUnMakeDefault\">\n {{ t('RemoveFromFavorites') }}\n </Btn>\n <Btn v-else @click.prevent=\"onMakeDefault\">\n {{ t('MarkAsFavorite') }}\n </Btn>\n </div>\n <div class=\"d-flex justify-content-end\">\n <Btn class=\"me-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n CatalogUpdateCommand,\n CatalogMakeDefaultCommand,\n CatalogUnMakeDefaultCommand,\n AddNotificationCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n CatalogOptions,\n FormTextAreaClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const catalog = ref(props.data.catalog);\n const description = ref<string>(catalog.value.description);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n\n const isFormValid = computed<boolean>(() => !!catalog.value.code);\n const validators: Record<string, Validators> = {\n description: { [ValidationType.required]: {} },\n };\n const close = () => emit('update:show', false);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogUpdateCommand({\n catalogId: catalog.value.id,\n description: description.value,\n onSuccessMessage: props.t('CatalogEditSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n const onMakeDefault = async () => {\n if (!catalog.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogMakeDefaultCommand({\n catalogId: catalog.value.id,\n onSuccessMessage: props.t('CatalogSetAsDefaultSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n const onUnMakeDefault = async () => {\n if (!catalog.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogUnMakeDefaultCommand({\n catalogId: catalog.value.id,\n onSuccessMessage: props.t('CatalogUnsetAsDefaultSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-edit-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-edit-modal',\n ),\n );\n }\n });\n\n return {\n show,\n catalog,\n validators,\n description,\n catalogType,\n isFormValid,\n catalogOptions,\n close,\n onSave,\n onMakeDefault,\n onUnMakeDefault,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show && catalog\"\n :title=\"t('EditCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"catalog.code\" disabled />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n :type=\"catalog.type\"\n :editable=\"false\"\n ></CatalogOptions>\n <hr />\n <div class=\"d-flex justify-content-between mt-3\">\n <div v-if=\"catalog.editable\" class=\"d-flex justify-content-start\">\n <Btn v-if=\"catalog.default\" @click.prevent=\"onUnMakeDefault\">\n {{ t('RemoveFromFavorites') }}\n </Btn>\n <Btn v-else @click.prevent=\"onMakeDefault\">\n {{ t('MarkAsFavorite') }}\n </Btn>\n </div>\n <div class=\"d-flex justify-content-end\">\n <Btn class=\"me-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n CatalogUpdateCommand,\n CatalogMakeDefaultCommand,\n CatalogUnMakeDefaultCommand,\n AddNotificationCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, CatalogTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n CatalogOptions,\n FormTextAreaClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const show = ref(false);\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const catalog = ref(props.data.catalog);\n const description = ref<string>(catalog.value.description);\n const catalogOptions = ref<CatalogOptionsResult['items']>([]);\n\n const isFormValid = computed<boolean>(() => !!catalog.value.code);\n const validators: Record<string, Validators> = {\n description: { [ValidationType.required]: {} },\n };\n const close = () => emit('update:show', false);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogUpdateCommand({\n catalogId: catalog.value.id,\n description: description.value,\n onSuccessMessage: props.t('CatalogEditSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n const onMakeDefault = async () => {\n if (!catalog.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogMakeDefaultCommand({\n catalogId: catalog.value.id,\n onSuccessMessage: props.t('CatalogSetAsDefaultSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n const onUnMakeDefault = async () => {\n if (!catalog.value) {\n return;\n }\n try {\n await instance.execute(\n new CatalogUnMakeDefaultCommand({\n catalogId: catalog.value.id,\n onSuccessMessage: props.t('CatalogUnsetAsDefaultSuccess'),\n }).from('catalog-edit-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n onMounted(async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-edit-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n catalogOptions.value = catalogOptionsResult.items;\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-edit-modal',\n ),\n );\n }\n });\n\n return {\n show,\n catalog,\n validators,\n description,\n catalogType,\n isFormValid,\n catalogOptions,\n close,\n onSave,\n onMakeDefault,\n onUnMakeDefault,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"canExportPrices\"\n :title=\"t('ExportCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <div>{{ data.catalog.code }}</div>\n </label>\n <Spinner v-if=\"isLoadingJobs\"></Spinner>\n <label v-else-if=\"canExportPrices\" class=\"d-block pt-2\">\n <div class=\"form-check align-items-start\">\n <input\n v-model=\"models.exportPrices\"\n name=\"exportPrices\"\n type=\"checkbox\"\n class=\"form-check-input me-2\"\n value=\"true\"\n />\n <span\n class=\"form-check-label text-break user-select-none pis-label\"\n v-text=\"t('ExportPrices')\"\n />\n <br />\n <small>{{ t('ExportPricesDescription') }}</small>\n </div>\n </label>\n <div v-if=\"models.exportPrices\" class=\"d-block pt-2\">\n <label class=\"d-block\">\n <span class=\"form-label fw-bolder\">{{ t('Emails') }}</span>\n <FormInputClearable\n :model-value=\"models.emails\"\n :rows=\"3\"\n :validators=\"validators.emails\"\n @update:model-value=\"onEmailsUpdate\"\n />\n <br />\n <small>{{ t('EmailsDescription') }}</small>\n </label>\n <label v-if=\"lastScheduledJob\" class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('LastScheduledJob') }}</div>\n <span class=\"me-1\">{{ lastScheduledJob.catalog?.code }}</span>\n <span class=\"me-1\">{{ lastScheduledJob.type }}</span>\n <Badge class=\"ms-auto\" v-text=\"lastScheduledJob.status\" />\n </label>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onExport()\">\n {{ t('Export', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogExportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n CatalogExportCommand,\n CatalogExportCommandArgs,\n DownloadJobHistoryCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Badge from '@/common/components/Badge.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, JobItem, JobSearchResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Badge,\n Modal,\n Spinner,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogExportActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const isLoadingJobs = ref(false);\n const canExportPrices = ref(false);\n const componentOptions = computed(\n () => instance.store.options.components?.search?.table?.export,\n );\n const lastScheduledJob = ref<JobItem | null>(null);\n const models = ref({\n exportPrices: false,\n emails: '',\n });\n const validators: Record<string, Validators> = {\n emails: {\n [ValidationType.required]:\n canExportPrices.value && models.value.exportPrices.valueOf() ? {} : undefined,\n [ValidationType.commaSeparatedEmails]: {},\n },\n };\n const isFormValid = computed<boolean>(\n () => !canExportPrices.value || !models.value.exportPrices || !!models.value.emails.valueOf(),\n );\n const onEmailsUpdate = (newEmails: string) => (models.value.emails = newEmails);\n const close = () => emit('update:show', false);\n const onExport = async () => {\n try {\n const commandArgs: CatalogExportCommandArgs = {\n catalogId: props.data.catalog.id,\n catalogCode: props.data.catalog.code,\n onSuccessMessage: props.t('CatalogExportReady'),\n };\n if (canExportPrices.value) {\n commandArgs.priceSettings = {\n emails: models.value.emails.split(','),\n enabled: models.value.exportPrices,\n };\n }\n const isJob: boolean | undefined = await instance.execute(\n new CatalogExportCommand(commandArgs).from('catalog-export-modal'),\n );\n if (isJob === true) {\n await instance.execute(\n new AddNotificationCommand({\n type: 'success',\n message: props.t('CatalogExportScheduled'),\n }).from('catalog-export-modal'),\n );\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const init = async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-export-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n models.value.emails = catalogOptionsResult.email || '';\n if (catalogOptionsResult.pricesAvailable && componentOptions.value?.exportPrices) {\n canExportPrices.value = true;\n isLoadingJobs.value = true;\n const data: JobSearchResult = (await instance.execute(\n new DownloadJobHistoryCommand({}).from('catalog-export-modal'),\n )) as JobSearchResult;\n if (data && data.items) {\n lastScheduledJob.value = data.items[0];\n }\n isLoadingJobs.value = false;\n } else {\n await onExport();\n }\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-export-modal',\n ),\n );\n }\n };\n\n onMounted(() => init());\n\n return {\n models,\n validators,\n isFormValid,\n isLoadingJobs,\n canExportPrices,\n lastScheduledJob,\n close,\n onExport,\n onEmailsUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"canExportPrices\"\n :title=\"t('ExportCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <div>{{ data.catalog.code }}</div>\n </label>\n <Spinner v-if=\"isLoadingJobs\"></Spinner>\n <label v-else-if=\"canExportPrices\" class=\"d-block pt-2\">\n <div class=\"form-check align-items-start\">\n <input\n v-model=\"models.exportPrices\"\n name=\"exportPrices\"\n type=\"checkbox\"\n class=\"form-check-input me-2\"\n value=\"true\"\n />\n <span\n class=\"form-check-label text-break user-select-none pis-label\"\n v-text=\"t('ExportPrices')\"\n />\n <br />\n <small>{{ t('ExportPricesDescription') }}</small>\n </div>\n </label>\n <div v-if=\"models.exportPrices\" class=\"d-block pt-2\">\n <label class=\"d-block\">\n <span class=\"form-label fw-bolder\">{{ t('Emails') }}</span>\n <FormInputClearable\n :model-value=\"models.emails\"\n :rows=\"3\"\n :validators=\"validators.emails\"\n @update:model-value=\"onEmailsUpdate\"\n />\n <br />\n <small>{{ t('EmailsDescription') }}</small>\n </label>\n <label v-if=\"lastScheduledJob\" class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('LastScheduledJob') }}</div>\n <span class=\"me-1\">{{ lastScheduledJob.catalog?.code }}</span>\n <span class=\"me-1\">{{ lastScheduledJob.type }}</span>\n <Badge class=\"ms-auto\" v-text=\"lastScheduledJob.status\" />\n </label>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onExport()\">\n {{ t('Export', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogExportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n AddNotificationCommand,\n CatalogExportCommand,\n CatalogExportCommandArgs,\n DownloadJobHistoryCommand,\n CatalogGetOptionsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Badge from '@/common/components/Badge.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport { CatalogOptionsResult, JobItem, JobSearchResult } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Badge,\n Modal,\n Spinner,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogExportActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const isLoadingJobs = ref(false);\n const canExportPrices = ref(false);\n const componentOptions = computed(\n () => instance.store.options.components?.search?.table?.export,\n );\n const lastScheduledJob = ref<JobItem | null>(null);\n const models = ref({\n exportPrices: false,\n emails: '',\n });\n const validators: Record<string, Validators> = {\n emails: {\n [ValidationType.required]:\n canExportPrices.value && models.value.exportPrices.valueOf() ? {} : undefined,\n [ValidationType.commaSeparatedEmails]: {},\n },\n };\n const isFormValid = computed<boolean>(\n () => !canExportPrices.value || !models.value.exportPrices || !!models.value.emails.valueOf(),\n );\n const onEmailsUpdate = (newEmails: string) => (models.value.emails = newEmails);\n const close = () => emit('update:show', false);\n const onExport = async () => {\n try {\n const commandArgs: CatalogExportCommandArgs = {\n catalogId: props.data.catalog.id,\n catalogCode: props.data.catalog.code,\n onSuccessMessage: props.t('CatalogExportReady'),\n };\n if (canExportPrices.value) {\n commandArgs.priceSettings = {\n emails: models.value.emails.split(','),\n enabled: models.value.exportPrices,\n };\n }\n const isJob: boolean | undefined = await instance.execute(\n new CatalogExportCommand(commandArgs).from('catalog-export-modal'),\n );\n if (isJob === true) {\n await instance.execute(\n new AddNotificationCommand({\n type: 'success',\n message: props.t('CatalogExportScheduled'),\n }).from('catalog-export-modal'),\n );\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const init = async () => {\n try {\n const catalogOptionsResult: CatalogOptionsResult | undefined = (await instance.execute(\n new CatalogGetOptionsCommand().from('catalog-export-modal'),\n )) as CatalogOptionsResult;\n if (!catalogOptionsResult) {\n throw new Error(props.t('CatalogOptionsLoadingError'));\n }\n models.value.emails = catalogOptionsResult.email || '';\n if (catalogOptionsResult.pricesAvailable && componentOptions.value?.exportPrices) {\n canExportPrices.value = true;\n isLoadingJobs.value = true;\n const data: JobSearchResult = (await instance.execute(\n new DownloadJobHistoryCommand({}).from('catalog-export-modal'),\n )) as JobSearchResult;\n if (data && data.items) {\n lastScheduledJob.value = data.items[0];\n }\n isLoadingJobs.value = false;\n } else {\n await onExport();\n }\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'catalog-export-modal',\n ),\n );\n }\n };\n\n onMounted(() => init());\n\n return {\n models,\n validators,\n isFormValid,\n isLoadingJobs,\n canExportPrices,\n lastScheduledJob,\n close,\n onExport,\n onEmailsUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CatalogHistoryModal')\"\n lg\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form v-if=\"isReady\" @submit.prevent=\"\">\n <div v-if=\"items && items.length\">\n <div class=\"my-3 d-flex flex-row justify-content-center align-items-center flex-wrap\">\n <label class=\"d-flex align-items-center\">\n <span class=\"text-nowrap\">{{ t('SortBy') }}:</span>\n <select v-model=\"sortBy\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`JobHistorySortBy${sortName}`) }}\n </option>\n </select>\n </label>\n </div>\n <div class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ t('CatalogCode') }}</th>\n <th>{{ t('JobType') }}</th>\n <th>{{ t('JobStatus') }}</th>\n <th>{{ t('DateModified') }}</th>\n <th>{{ t('Actions') }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in items\" :key=\"index\">\n <td>{{ item.catalog?.code }}</td>\n <td>{{ t(`JobType${item.type}`) }}</td>\n <td>{{ t(`JobStatus${item.status}`) }}</td>\n <td>\n {{\n new Date(item.dateModified).toLocaleString([], {\n dateStyle: 'medium',\n timeStyle: 'medium',\n })\n }}\n </td>\n <td>\n <Btn\n v-if=\"item.status === JobStatusEnum.SUCCESS\"\n primary\n @click.prevent=\"onDownload(item.id)\"\n >\n {{ t('Download', true) }}\n </Btn>\n <Btn\n v-else-if=\"item.status === JobStatusEnum.IN_QUEUE\"\n primary\n @click.prevent=\"onCancel(item.id)\"\n >\n {{ t('Cancel', true) }}\n </Btn>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div v-else class=\"d-flex justify-content-center align-items-center\">\n <span>{{ t('JobHistoryListEmpty') }}</span>\n </div>\n </form>\n <div v-else class=\"d-flex justify-content-center align-items-center\">\n <Spinner />\n </div>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref, watch } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CancelJobCommand,\n DownloadJobCommand,\n DownloadJobHistoryCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport {\n JobItem,\n JobSearchResult,\n JobSortFieldEnum,\n JobStatusEnum,\n SortDirectionEnum,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n Spinner,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(true);\n const isReady = ref(false);\n const items = ref<JobItem[]>([]);\n const sortByItems = JobSortFieldEnum;\n const sortBy = ref<JobSortFieldEnum>(JobSortFieldEnum.CATALOG);\n const close = () => emit('update:show', false);\n const onDownload = async (jobId: string) => {\n try {\n await instance.execute(\n new DownloadJobCommand({\n jobId,\n onSuccessMessage: props.t('JobDownloadReady'),\n }).from('catalog-history-modal'),\n );\n } catch {\n // Ignore error\n }\n };\n const onCancel = async (jobId: string) => {\n try {\n await instance.execute(\n new CancelJobCommand({\n jobId,\n onSuccessMessage: props.t('JobCancelled'),\n }).from('catalog-history-modal'),\n );\n return loadJobHistory();\n } catch {\n // Ignore error\n }\n };\n const loadJobHistory = async () => {\n try {\n const data: JobSearchResult | undefined = await instance.execute(\n new DownloadJobHistoryCommand({\n sortSettings: {\n field: sortBy.value,\n direction:\n sortBy.value === JobSortFieldEnum.LAST_MODIFIED\n ? SortDirectionEnum.DESCENDING\n : SortDirectionEnum.ASCENDING,\n },\n }).from('catalog-history-modal'),\n );\n if (data && data.items) {\n items.value = data.items;\n }\n } catch {\n // Ignore error\n }\n isReady.value = true;\n };\n\n watch(\n () => sortBy.value,\n () => loadJobHistory(),\n );\n\n onMounted(() => {\n loadJobHistory();\n });\n\n return {\n show,\n items,\n sortBy,\n isReady,\n sortByItems,\n JobStatusEnum,\n close,\n onCancel,\n onDownload,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CatalogHistoryModal')\"\n lg\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form v-if=\"isReady\" @submit.prevent=\"\">\n <div v-if=\"items && items.length\">\n <div class=\"my-3 d-flex flex-row justify-content-center align-items-center flex-wrap\">\n <label class=\"d-flex align-items-center\">\n <span class=\"text-nowrap\">{{ t('SortBy') }}:</span>\n <select v-model=\"sortBy\" class=\"form-select ms-2 w-100\">\n <option v-for=\"(sortName, sortKey) in sortByItems\" :key=\"sortKey\" :value=\"sortName\">\n {{ t(`JobHistorySortBy${sortName}`) }}\n </option>\n </select>\n </label>\n </div>\n <div class=\"table-responsive pis-scroll\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ t('CatalogCode') }}</th>\n <th>{{ t('JobType') }}</th>\n <th>{{ t('JobStatus') }}</th>\n <th>{{ t('DateModified') }}</th>\n <th>{{ t('Actions') }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in items\" :key=\"index\">\n <td>{{ item.catalog?.code }}</td>\n <td>{{ t(`JobType${item.type}`) }}</td>\n <td>{{ t(`JobStatus${item.status}`) }}</td>\n <td>\n {{\n new Date(item.dateModified).toLocaleString([], {\n dateStyle: 'medium',\n timeStyle: 'medium',\n })\n }}\n </td>\n <td>\n <Btn\n v-if=\"item.status === JobStatusEnum.SUCCESS\"\n primary\n @click.prevent=\"onDownload(item.id)\"\n >\n {{ t('Download', true) }}\n </Btn>\n <Btn\n v-else-if=\"item.status === JobStatusEnum.IN_QUEUE\"\n primary\n @click.prevent=\"onCancel(item.id)\"\n >\n {{ t('Cancel', true) }}\n </Btn>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div v-else class=\"d-flex justify-content-center align-items-center\">\n <span>{{ t('JobHistoryListEmpty') }}</span>\n </div>\n </form>\n <div v-else class=\"d-flex justify-content-center align-items-center\">\n <Spinner />\n </div>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref, watch } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport {\n CancelJobCommand,\n DownloadJobCommand,\n DownloadJobHistoryCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport Spinner from '@/common/components/Spinner.vue';\nimport {\n JobItem,\n JobSearchResult,\n JobSortFieldEnum,\n JobStatusEnum,\n SortDirectionEnum,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n Spinner,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const show = ref(true);\n const isReady = ref(false);\n const items = ref<JobItem[]>([]);\n const sortByItems = JobSortFieldEnum;\n const sortBy = ref<JobSortFieldEnum>(JobSortFieldEnum.CATALOG);\n const close = () => emit('update:show', false);\n const onDownload = async (jobId: string) => {\n try {\n await instance.execute(\n new DownloadJobCommand({\n jobId,\n onSuccessMessage: props.t('JobDownloadReady'),\n }).from('catalog-history-modal'),\n );\n } catch {\n // Ignore error\n }\n };\n const onCancel = async (jobId: string) => {\n try {\n await instance.execute(\n new CancelJobCommand({\n jobId,\n onSuccessMessage: props.t('JobCancelled'),\n }).from('catalog-history-modal'),\n );\n return loadJobHistory();\n } catch {\n // Ignore error\n }\n };\n const loadJobHistory = async () => {\n try {\n const data: JobSearchResult | undefined = await instance.execute(\n new DownloadJobHistoryCommand({\n sortSettings: {\n field: sortBy.value,\n direction:\n sortBy.value === JobSortFieldEnum.LAST_MODIFIED\n ? SortDirectionEnum.DESCENDING\n : SortDirectionEnum.ASCENDING,\n },\n }).from('catalog-history-modal'),\n );\n if (data && data.items) {\n items.value = data.items;\n }\n } catch {\n // Ignore error\n }\n isReady.value = true;\n };\n\n watch(\n () => sortBy.value,\n () => loadJobHistory(),\n );\n\n onMounted(() => {\n loadJobHistory();\n });\n\n return {\n show,\n items,\n sortBy,\n isReady,\n sortByItems,\n JobStatusEnum,\n close,\n onCancel,\n onDownload,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('ImportCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CompanyNameCode') }}</div>\n <div>{{ data.catalog.code }}</div>\n </label>\n <div class=\"pt-2 has-validation\">\n <div class=\"form-label fw-bolder\">{{ t('File') }}</div>\n <input type=\"file\" class=\"form-control\" @change=\"onFileUpload($event)\" />\n </div>\n <p class=\"mt-3\">{{ t('ImportWarning') }}</p>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onImport()\">\n {{ t('Import') }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogImportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { CatalogImportCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport toBase64 from '@/common/helpers/toBase64';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogImportActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const uploadedFile = ref<File | null>();\n const isFormValid = computed(() => !!uploadedFile.value);\n const validators: Record<string, Validators> = {\n uploadedFile: { [ValidationType.required]: {} },\n };\n const onFileUpload = ($event: Event) => {\n const input = $event.target as HTMLInputElement;\n if (input && input.files) {\n uploadedFile.value = input.files[0];\n }\n };\n const close = () => emit('update:show', false);\n\n const onImport = async () => {\n if (!uploadedFile.value) {\n return;\n }\n try {\n const file = await toBase64(uploadedFile.value);\n await instance.execute(\n new CatalogImportCommand({\n catalogId: props.data.catalog.id,\n file,\n fileName: uploadedFile.value.name,\n onSuccessMessage: props.t('CatalogImportSuccess'),\n }).from('catalog-import-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n return {\n validators,\n isFormValid,\n uploadedFile,\n close,\n onImport,\n onFileUpload,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('ImportCatalog')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CompanyNameCode') }}</div>\n <div>{{ data.catalog.code }}</div>\n </label>\n <div class=\"pt-2 has-validation\">\n <div class=\"form-label fw-bolder\">{{ t('File') }}</div>\n <input type=\"file\" class=\"form-control\" @change=\"onFileUpload($event)\" />\n </div>\n <p class=\"mt-3\">{{ t('ImportWarning') }}</p>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onImport()\">\n {{ t('Import') }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogImportActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { CatalogImportCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport toBase64 from '@/common/helpers/toBase64';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogImportActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const uploadedFile = ref<File | null>();\n const isFormValid = computed(() => !!uploadedFile.value);\n const validators: Record<string, Validators> = {\n uploadedFile: { [ValidationType.required]: {} },\n };\n const onFileUpload = ($event: Event) => {\n const input = $event.target as HTMLInputElement;\n if (input && input.files) {\n uploadedFile.value = input.files[0];\n }\n };\n const close = () => emit('update:show', false);\n\n const onImport = async () => {\n if (!uploadedFile.value) {\n return;\n }\n try {\n const file = await toBase64(uploadedFile.value);\n await instance.execute(\n new CatalogImportCommand({\n catalogId: props.data.catalog.id,\n file,\n fileName: uploadedFile.value.name,\n onSuccessMessage: props.t('CatalogImportSuccess'),\n }).from('catalog-import-modal'),\n );\n } catch {\n // Ignore Error\n }\n close();\n };\n\n return {\n validators,\n isFormValid,\n uploadedFile,\n close,\n onImport,\n onFileUpload,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('Errors')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <ul>\n <template v-for=\"error of errors\" :key=\"error.id\">\n <li>{{ error.message }}</li>\n </template>\n <template v-for=\"warning of warnings\" :key=\"warning.id\">\n <li>{{ warning.message }}</li>\n </template>\n </ul>\n </Modal>\n</template>\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport Modal from '@/common/components/Modal.vue';\nimport { ActionInfo } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Modal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n t: { type: Function as PropType<TranslateFunc>, required: true },\n errors: { type: Array as PropType<ActionInfo[]>, required: true },\n warnings: { type: Array as PropType<ActionInfo[]>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const close = () => emit('update:show', false);\n return { close };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('Errors')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <ul>\n <template v-for=\"error of errors\" :key=\"error.id\">\n <li>{{ error.message }}</li>\n </template>\n <template v-for=\"warning of warnings\" :key=\"warning.id\">\n <li>{{ warning.message }}</li>\n </template>\n </ul>\n </Modal>\n</template>\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue';\n\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport Modal from '@/common/components/Modal.vue';\nimport { ActionInfo } from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Modal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n t: { type: Function as PropType<TranslateFunc>, required: true },\n errors: { type: Array as PropType<ActionInfo[]>, required: true },\n warnings: { type: Array as PropType<ActionInfo[]>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const close = () => emit('update:show', false);\n return { close };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <CatalogEditModal\n v-if=\"currentActionName === CatalogAction.edit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogEditActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogEditModal>\n <CatalogCopyModal\n v-else-if=\"currentActionName === CatalogAction.copy\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogCopyActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogCopyModal>\n <CatalogImportModal\n v-else-if=\"currentActionName === CatalogAction.import\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogImportActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogImportModal>\n <CatalogExportModal\n v-else-if=\"currentActionName === CatalogAction.export\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogExportActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogExportModal>\n <CatalogCreateNewModal\n v-else-if=\"currentActionName === CatalogAction.createNew\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n @update:show=\"onActionCompleted\"\n ></CatalogCreateNewModal>\n <CatalogHistoryModal\n v-else-if=\"currentActionName === CatalogAction.history\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n @update:show=\"onActionCompleted\"\n ></CatalogHistoryModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.delete\"\n :t=\"t\"\n :title=\"t('DeleteCatalog')\"\n :item=\"(currentActionData as CatalogDeleteActionData).catalog\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onCatalogDelete\"\n >\n <div class=\"mb-4\">\n {{ t('CatalogConfirmDelete') }}:\n <strong>{{ (currentActionData as CatalogDeleteActionData).catalog.code }}</strong>\n </div>\n </Confirmation>\n <CatalogActionErrors\n v-else-if=\"currentActionName === CatalogAction.errors\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :errors=\"(currentActionData as CatalogErrorsActionData).errors\"\n :warnings=\"(currentActionData as CatalogErrorsActionData).warnings\"\n ></CatalogActionErrors>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue';\n\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n CatalogDeleteCommand,\n CatalogActionCompleted,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogCopyModal from '@/catalogs/components/catalogs/CatalogCopyModal.vue';\nimport CatalogCreateNewModal from '@/catalogs/components/catalogs/CatalogCreateNewModal.vue';\nimport CatalogEditModal from '@/catalogs/components/catalogs/CatalogEditModal.vue';\nimport CatalogExportModal from '@/catalogs/components/catalogs/CatalogExportModal.vue';\nimport CatalogHistoryModal from '@/catalogs/components/catalogs/CatalogHistoryModal.vue';\nimport CatalogImportModal from '@/catalogs/components/catalogs/CatalogImportModal.vue';\nimport CatalogActionErrors from '@/catalogs/components/common/CatalogActionErrors.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { Catalog } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport {\n CatalogEditActionData,\n CatalogCopyActionData,\n CatalogDeleteActionData,\n CatalogImportActionData,\n CatalogExportActionData,\n CatalogErrorsActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-search-actions-modals',\n components: {\n Confirmation,\n CatalogEditModal,\n CatalogCopyModal,\n CatalogImportModal,\n CatalogExportModal,\n CatalogHistoryModal,\n CatalogActionErrors,\n CatalogCreateNewModal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n\n const onCatalogDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.delete) {\n return;\n }\n const catalogForDeletion: Catalog = (currentActions.data as CatalogDeleteActionData)?.catalog;\n if (!catalogForDeletion) {\n return;\n }\n try {\n await instance.value?.execute(\n new CatalogDeleteCommand({\n catalogId: catalogForDeletion.id,\n onSuccessMessage: t('CatalogDeleteSuccess'),\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n await onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n componentName,\n CatalogAction,\n isWebComponent,\n currentActionName,\n currentActionData,\n t,\n onCatalogDelete,\n onActionCompleted,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <CatalogEditModal\n v-if=\"currentActionName === CatalogAction.edit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogEditActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogEditModal>\n <CatalogCopyModal\n v-else-if=\"currentActionName === CatalogAction.copy\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogCopyActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogCopyModal>\n <CatalogImportModal\n v-else-if=\"currentActionName === CatalogAction.import\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogImportActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogImportModal>\n <CatalogExportModal\n v-else-if=\"currentActionName === CatalogAction.export\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogExportActionData\"\n @update:show=\"onActionCompleted\"\n ></CatalogExportModal>\n <CatalogCreateNewModal\n v-else-if=\"currentActionName === CatalogAction.createNew\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n @update:show=\"onActionCompleted\"\n ></CatalogCreateNewModal>\n <CatalogHistoryModal\n v-else-if=\"currentActionName === CatalogAction.history\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n @update:show=\"onActionCompleted\"\n ></CatalogHistoryModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.delete\"\n :t=\"t\"\n :title=\"t('DeleteCatalog')\"\n :item=\"(currentActionData as CatalogDeleteActionData).catalog\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onCatalogDelete\"\n >\n <div class=\"mb-4\">\n {{ t('CatalogConfirmDelete') }}:\n <strong>{{ (currentActionData as CatalogDeleteActionData).catalog.code }}</strong>\n </div>\n </Confirmation>\n <CatalogActionErrors\n v-else-if=\"currentActionName === CatalogAction.errors\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :errors=\"(currentActionData as CatalogErrorsActionData).errors\"\n :warnings=\"(currentActionData as CatalogErrorsActionData).warnings\"\n ></CatalogActionErrors>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue';\n\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n CatalogDeleteCommand,\n CatalogActionCompleted,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogCopyModal from '@/catalogs/components/catalogs/CatalogCopyModal.vue';\nimport CatalogCreateNewModal from '@/catalogs/components/catalogs/CatalogCreateNewModal.vue';\nimport CatalogEditModal from '@/catalogs/components/catalogs/CatalogEditModal.vue';\nimport CatalogExportModal from '@/catalogs/components/catalogs/CatalogExportModal.vue';\nimport CatalogHistoryModal from '@/catalogs/components/catalogs/CatalogHistoryModal.vue';\nimport CatalogImportModal from '@/catalogs/components/catalogs/CatalogImportModal.vue';\nimport CatalogActionErrors from '@/catalogs/components/common/CatalogActionErrors.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { Catalog } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport {\n CatalogEditActionData,\n CatalogCopyActionData,\n CatalogDeleteActionData,\n CatalogImportActionData,\n CatalogExportActionData,\n CatalogErrorsActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-search-actions-modals',\n components: {\n Confirmation,\n CatalogEditModal,\n CatalogCopyModal,\n CatalogImportModal,\n CatalogExportModal,\n CatalogHistoryModal,\n CatalogActionErrors,\n CatalogCreateNewModal,\n },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n\n const onCatalogDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.delete) {\n return;\n }\n const catalogForDeletion: Catalog = (currentActions.data as CatalogDeleteActionData)?.catalog;\n if (!catalogForDeletion) {\n return;\n }\n try {\n await instance.value?.execute(\n new CatalogDeleteCommand({\n catalogId: catalogForDeletion.id,\n onSuccessMessage: t('CatalogDeleteSuccess'),\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n await onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n componentName,\n CatalogAction,\n isWebComponent,\n currentActionName,\n currentActionData,\n t,\n onCatalogDelete,\n onActionCompleted,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CopyProduct')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CopyProductTo') }}</div>\n <FormSelectFilterable\n :model-value=\"copyTo\"\n :items=\"copyToOptions\"\n @update:model-value=\"onCopyToUpdate\"\n />\n </label>\n <div v-if=\"copyTo == newCatalogValue\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductCopyActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n CopyProductCommand,\n CopyProductToNewCommand,\n GetAllCatalogsCommand,\n CopyProductCommandArgs,\n CopyProductToNewCommandArgs,\n AddNotificationCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormSelectFilterable, { SelectItem } from '@/common/components/FormSelectFilterable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport {\n Catalog,\n CatalogDetail,\n CatalogItem,\n CatalogTypeEnum,\n QuantityItem,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormSelectFilterable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogProductCopyActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const newCatalogValue = 'NEW_CATALOG';\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const show = ref(false);\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const copyTo = ref<string | null>(null);\n const code = ref('');\n const description = ref('');\n const type = ref(CatalogTypeEnum.PERSONAL);\n const allCatalogs = ref<CatalogItem[]>([]);\n const isFormValid = computed<boolean>(\n () =>\n copyTo.value !== null &&\n (copyTo.value !== newCatalogValue ||\n (copyTo.value === newCatalogValue &&\n !!code.value &&\n !!type.value &&\n !!description.value)),\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const productCatalog = computed<CatalogDetail | undefined>(\n () => (props.data.product.catalogs ?? {})[0] || undefined,\n );\n const copyToOptions = computed<SelectItem[]>(() =>\n [\n { value: newCatalogValue, text: props.t('CreateNewCatalog'), type: 'fixed' } as SelectItem,\n { type: 'divider' } as SelectItem,\n ].concat(\n allCatalogs.value.reduce((result: SelectItem[], current: CatalogItem) => {\n if (current.code !== productCatalog.value?.code && current.editable) {\n return result.concat([{ value: current.code, text: current.code, type: 'standard' }]);\n }\n return result;\n }, []),\n ),\n );\n const close = () => emit('update:show', false);\n const onCopyToUpdate = (newCopyToValue: string) => (copyTo.value = newCopyToValue);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n\n const catalogItem: Catalog = props.data.catalog;\n const catalogDetail: CatalogDetail | undefined = props.data.product.catalogs?.find(\n (catalog: CatalogDetail) => catalog.code === catalogItem.code,\n );\n if (!catalogDetail) {\n return;\n }\n const quantity: QuantityItem | undefined = (catalogDetail?.quantities ?? {})[0];\n if (!quantity) {\n return;\n }\n try {\n if (copyTo.value === newCatalogValue) {\n const copyToNewArgs: CopyProductToNewCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: catalogDetail?.id,\n sourceQuantityIds: [quantity.id],\n code: code.value,\n type: type.value,\n description: description.value,\n };\n await instance.execute(\n new CopyProductToNewCommand(copyToNewArgs).from('product-copy-modal'),\n );\n } else {\n const copyArgs: CopyProductCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: catalogDetail?.id,\n sourceQuantityIds: [quantity.id],\n targetCatalogId: '',\n };\n const targetCatalog: CatalogItem | undefined = allCatalogs.value.find(\n (catalogItem: CatalogItem) => catalogItem.code === copyTo.value,\n );\n const targetCatalogId = targetCatalog?.id;\n if (!targetCatalogId) {\n return;\n }\n copyArgs.targetCatalogId = targetCatalogId;\n await instance.execute(new CopyProductCommand(copyArgs).from('product-copy-modal'));\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const onAllCatalogsLoad = async () => {\n try {\n allCatalogs.value = (await instance.execute(\n new GetAllCatalogsCommand().from('product-copy-modal'),\n )) as CatalogItem[];\n } catch {\n // Ignore error\n }\n };\n\n onMounted(async () => {\n try {\n onAllCatalogsLoad();\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'product-copy-modal',\n ),\n );\n }\n });\n\n return {\n newCatalogValue,\n show,\n copyTo,\n isFormValid,\n validators,\n catalogType,\n copyToOptions,\n code,\n type,\n description,\n close,\n onSave,\n onCopyToUpdate,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"show\"\n :title=\"t('CopyProduct')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CopyProductTo') }}</div>\n <FormSelectFilterable\n :model-value=\"copyTo\"\n :items=\"copyToOptions\"\n @update:model-value=\"onCopyToUpdate\"\n />\n </label>\n <div v-if=\"copyTo == newCatalogValue\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogCode') }}</div>\n <FormInputClearable\n :model-value=\"code\"\n :validators=\"validators.code\"\n @update:model-value=\"onCodeUpdate\"\n />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CatalogDescription') }}</div>\n <FormTextAreaClearable\n :model-value=\"description\"\n :rows=\"3\"\n :validators=\"validators.description\"\n @update:model-value=\"onDescriptionUpdate\"\n />\n </label>\n <CatalogOptions\n :t=\"t\"\n :instance-id=\"instanceId\"\n @on-type-updated=\"onTypeUpdated\"\n ></CatalogOptions>\n </div>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductCopyActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport {\n CopyProductCommand,\n CopyProductToNewCommand,\n GetAllCatalogsCommand,\n CopyProductCommandArgs,\n CopyProductToNewCommandArgs,\n AddNotificationCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport CatalogOptions from '@/catalogs/components/common/CatalogOptions.vue';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport FormSelectFilterable, { SelectItem } from '@/common/components/FormSelectFilterable.vue';\nimport FormTextAreaClearable from '@/common/components/FormTextAreaClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport {\n Catalog,\n CatalogDetail,\n CatalogItem,\n CatalogTypeEnum,\n QuantityItem,\n} from '@/common/services/swagger';\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n FormSelectFilterable,\n FormTextAreaClearable,\n CatalogOptions,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogProductCopyActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const newCatalogValue = 'NEW_CATALOG';\n const catalogType: typeof CatalogTypeEnum = CatalogTypeEnum;\n const show = ref(false);\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const copyTo = ref<string | null>(null);\n const code = ref('');\n const description = ref('');\n const type = ref(CatalogTypeEnum.PERSONAL);\n const allCatalogs = ref<CatalogItem[]>([]);\n const isFormValid = computed<boolean>(\n () =>\n copyTo.value !== null &&\n (copyTo.value !== newCatalogValue ||\n (copyTo.value === newCatalogValue &&\n !!code.value &&\n !!type.value &&\n !!description.value)),\n );\n const validators: Record<string, Validators> = {\n code: { [ValidationType.required]: {} },\n description: { [ValidationType.required]: {} },\n };\n const productCatalog = computed<CatalogDetail | undefined>(\n () => (props.data.product.catalogs ?? {})[0] || undefined,\n );\n const copyToOptions = computed<SelectItem[]>(() =>\n [\n { value: newCatalogValue, text: props.t('CreateNewCatalog'), type: 'fixed' } as SelectItem,\n { type: 'divider' } as SelectItem,\n ].concat(\n allCatalogs.value.reduce((result: SelectItem[], current: CatalogItem) => {\n if (current.code !== productCatalog.value?.code && current.editable) {\n return result.concat([{ value: current.code, text: current.code, type: 'standard' }]);\n }\n return result;\n }, []),\n ),\n );\n const close = () => emit('update:show', false);\n const onCopyToUpdate = (newCopyToValue: string) => (copyTo.value = newCopyToValue);\n const onCodeUpdate = (newCodeValue: string) => (code.value = newCodeValue);\n const onDescriptionUpdate = (newDescriptionValue: string) =>\n (description.value = newDescriptionValue);\n const onTypeUpdated = (newType: CatalogTypeEnum) => (type.value = newType);\n const onSave = async () => {\n if (!isFormValid.value) {\n return;\n }\n\n const catalogItem: Catalog = props.data.catalog;\n const catalogDetail: CatalogDetail | undefined = props.data.product.catalogs?.find(\n (catalog: CatalogDetail) => catalog.code === catalogItem.code,\n );\n if (!catalogDetail) {\n return;\n }\n const quantity: QuantityItem | undefined = (catalogDetail?.quantities ?? {})[0];\n if (!quantity) {\n return;\n }\n try {\n if (copyTo.value === newCatalogValue) {\n const copyToNewArgs: CopyProductToNewCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: catalogDetail?.id,\n sourceQuantityIds: [quantity.id],\n code: code.value,\n type: type.value,\n description: description.value,\n };\n await instance.execute(\n new CopyProductToNewCommand(copyToNewArgs).from('product-copy-modal'),\n );\n } else {\n const copyArgs: CopyProductCommandArgs = {\n onSuccessMessage: props.t('CatalogProductCopySuccess'),\n sourceCatalogId: catalogDetail?.id,\n sourceQuantityIds: [quantity.id],\n targetCatalogId: '',\n };\n const targetCatalog: CatalogItem | undefined = allCatalogs.value.find(\n (catalogItem: CatalogItem) => catalogItem.code === copyTo.value,\n );\n const targetCatalogId = targetCatalog?.id;\n if (!targetCatalogId) {\n return;\n }\n copyArgs.targetCatalogId = targetCatalogId;\n await instance.execute(new CopyProductCommand(copyArgs).from('product-copy-modal'));\n }\n } catch {\n // Ignore error\n }\n close();\n };\n\n const onAllCatalogsLoad = async () => {\n try {\n allCatalogs.value = (await instance.execute(\n new GetAllCatalogsCommand().from('product-copy-modal'),\n )) as CatalogItem[];\n } catch {\n // Ignore error\n }\n };\n\n onMounted(async () => {\n try {\n onAllCatalogsLoad();\n show.value = true;\n } catch (error) {\n await instance.execute(\n new AddNotificationCommand({ type: 'danger', message: error.message }).from(\n 'product-copy-modal',\n ),\n );\n }\n });\n\n return {\n newCatalogValue,\n show,\n copyTo,\n isFormValid,\n validators,\n catalogType,\n copyToOptions,\n code,\n type,\n description,\n close,\n onSave,\n onCopyToUpdate,\n onCodeUpdate,\n onTypeUpdated,\n onDescriptionUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('EditProduct')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('Product') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.productDisplayName\" disabled />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('Description') }}</div>\n <textarea\n v-model=\"formData.description\"\n class=\"form-control\"\n rows=\"2\"\n :disabled=\"!isProductDescriptionEditable\"\n ></textarea>\n </label>\n <div class=\"row\">\n <div class=\"col\">\n <label>\n <div class=\"form-label fw-bolder\">{{ t('Quantity') }}</div>\n <FormInputClearable\n :model-value=\"formData.quantityValue\"\n :validators=\"validators.quantity\"\n :clearable=\"false\"\n type=\"number\"\n @update:model-value=\"onQuantityUpdate\"\n />\n </label>\n </div>\n <div class=\"col\">\n <label>\n <div class=\"form-label fw-bolder\">{{ t('UnitOfMeasure') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.uom\" disabled />\n </label>\n </div>\n </div>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CustomerClassification') }}</div>\n <FormInputClearable\n :model-value=\"formData.customerClassification\"\n type=\"text\"\n @update:model-value=\"onClassificationUpdate\"\n />\n </label>\n <label v-if=\"formData.baseProductId\" class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('BaseProductId') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.baseProductId\" disabled />\n </label>\n <div v-if=\"formData.customFields && formData.customFields.length\" class=\"d-block pt-2\">\n <label class=\"form-label fw-bolder\">{{ t('CustomFields') }}</label>\n </div>\n <table class=\"table\">\n <tbody>\n <tr v-for=\"customField of formData.customFields\" :key=\"customField.key\">\n <td>{{ customField.key }}:</td>\n <td>{{ customField.value }}</td>\n </tr>\n </tbody>\n </table>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, reactive } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { UpdateProductCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport {\n Catalog,\n CatalogDetail,\n CatalogProductTypeEnum,\n CatalogProductUpdateItem,\n ProductItem,\n CustomFieldItem,\n} from '@/common/services/swagger';\n\ninterface ProductEditModalFormData {\n uom: string;\n guid: string;\n quantityValue: string;\n productId: string;\n productDisplayName: string;\n description: string;\n customerClassification: string | undefined;\n baseProductId: string | undefined;\n customFields: CustomFieldItem[];\n alternateProductId?: string;\n}\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogProductEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const isProductDescriptionEditable = computed(\n () => props.data.product.productType === CatalogProductTypeEnum.UNLISTED,\n );\n const formData = reactive<ProductEditModalFormData>({\n uom: '',\n guid: '',\n quantityValue: '',\n productId: '',\n productDisplayName: '',\n description: '',\n customerClassification: undefined,\n baseProductId: undefined,\n customFields: [],\n alternateProductId: '',\n });\n const validators: Record<string, Validators> = {\n quantity: {\n [ValidationType.required]: {},\n [ValidationType.min]: { min: 1 },\n [ValidationType.max]: { max: 1000000 },\n },\n };\n const isFormValid = computed(\n () => (!isProductDescriptionEditable.value || formData.description) && formData.quantityValue,\n );\n const close = () => emit('update:show', false);\n const onDescriptionUpdate = (newDescription: string) => (formData.description = newDescription);\n const onQuantityUpdate = (newQuantity: string) => (formData.quantityValue = newQuantity);\n const onClassificationUpdate = (newClassification: string) =>\n (formData.customerClassification = newClassification);\n const onSave = async () => {\n try {\n const catalogId = props.data.catalog.id;\n if (!catalogId) {\n return;\n }\n const productPatch: CatalogProductUpdateItem = {\n description: formData.description,\n productId: formData.productId,\n quantity: Number.parseInt(formData.quantityValue, 10),\n unitOfMeasure: formData.uom,\n customerClassification: formData.customerClassification,\n baseProductId: formData.baseProductId,\n customFields: formData.customFields,\n alternateProductId: formData.alternateProductId,\n };\n if (isProductDescriptionEditable.value) {\n productPatch.description = formData.description;\n }\n await instance.execute(\n new UpdateProductCommand({\n catalogId,\n product: productPatch,\n onSuccessMessage: props.t('CatalogProductEditSuccess'),\n }).from('product-edit-modal'),\n );\n } catch {\n // Ignore error\n }\n close();\n };\n\n onMounted(() => {\n const product = props.data.product;\n formData.productId = product.productId;\n formData.productDisplayName = attrValue(product as ProductItem, '#DisplayName');\n formData.description = attrValue(product as ProductItem, '#Description');\n formData.customerClassification = product.customerClassification;\n formData.baseProductId = product.baseProduct?.productId;\n formData.customFields = [...(product.customFields || [])];\n formData.alternateProductId = product.alternateProductId;\n const catalogItem: Catalog | undefined = props.data.catalog;\n const catalogDetail: CatalogDetail | undefined = catalogItem\n ? product.catalogs?.find((catalog: CatalogDetail) => catalog.code === catalogItem.code)\n : (product.catalogs ?? {})[0];\n const productQuantity = (catalogDetail?.quantities ?? {})[0];\n if (productQuantity) {\n formData.quantityValue = `${productQuantity.value}`;\n formData.guid = productQuantity.guid;\n formData.uom = productQuantity.unitOfMeasure;\n }\n });\n\n return {\n formData,\n validators,\n isFormValid,\n isProductDescriptionEditable,\n close,\n onSave,\n onQuantityUpdate,\n onDescriptionUpdate,\n onClassificationUpdate,\n };\n },\n});\n</script>\n","<template>\n <Modal\n :show=\"true\"\n :title=\"t('EditProduct')\"\n :close-on-outer-click=\"false\"\n @update:show=\"$emit('update:show')\"\n >\n <form @submit.prevent=\"\">\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('Product') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.productDisplayName\" disabled />\n </label>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('Description') }}</div>\n <textarea\n v-model=\"formData.description\"\n class=\"form-control\"\n rows=\"2\"\n :disabled=\"!isProductDescriptionEditable\"\n ></textarea>\n </label>\n <div class=\"row\">\n <div class=\"col\">\n <label>\n <div class=\"form-label fw-bolder\">{{ t('Quantity') }}</div>\n <FormInputClearable\n :model-value=\"formData.quantityValue\"\n :validators=\"validators.quantity\"\n :clearable=\"false\"\n type=\"number\"\n @update:model-value=\"onQuantityUpdate\"\n />\n </label>\n </div>\n <div class=\"col\">\n <label>\n <div class=\"form-label fw-bolder\">{{ t('UnitOfMeasure') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.uom\" disabled />\n </label>\n </div>\n </div>\n <label class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('CustomerClassification') }}</div>\n <FormInputClearable\n :model-value=\"formData.customerClassification\"\n type=\"text\"\n @update:model-value=\"onClassificationUpdate\"\n />\n </label>\n <label v-if=\"formData.baseProductId\" class=\"d-block pt-2\">\n <div class=\"form-label fw-bolder\">{{ t('BaseProductId') }}</div>\n <input type=\"text\" class=\"form-control\" :value=\"formData.baseProductId\" disabled />\n </label>\n <div v-if=\"formData.customFields && formData.customFields.length\" class=\"d-block pt-2\">\n <label class=\"form-label fw-bolder\">{{ t('CustomFields') }}</label>\n </div>\n <table class=\"table\">\n <tbody>\n <tr v-for=\"customField of formData.customFields\" :key=\"customField.key\">\n <td>{{ customField.key }}:</td>\n <td>{{ customField.value }}</td>\n </tr>\n </tbody>\n </table>\n <hr />\n <div class=\"d-flex justify-content-end mt-3\">\n <Btn class=\"mx-2\" @click.prevent=\"close()\">\n {{ t('Cancel', true) }}\n </Btn>\n <Btn :disabled=\"!isFormValid\" primary @click.prevent=\"onSave()\">\n {{ t('Save', true) }}\n </Btn>\n </div>\n </form>\n </Modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, reactive } from 'vue';\n\nimport { Instance } from '@/catalogs/api/Instance';\nimport { CatalogProductEditActionData } from '@/catalogs/api/runtime/CatalogActionData';\nimport { UpdateProductCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { TranslateFunc } from '@/catalogs/composables/setupComponent';\nimport PIS from '@/common/api/PisGlobal';\nimport Btn from '@/common/components/Btn.vue';\nimport FormInputClearable from '@/common/components/FormInputClearable.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { ValidationType, Validators } from '@/common/helpers/validation';\nimport {\n Catalog,\n CatalogDetail,\n CatalogProductTypeEnum,\n CatalogProductUpdateItem,\n ProductItem,\n CustomFieldItem,\n} from '@/common/services/swagger';\n\ninterface ProductEditModalFormData {\n uom: string;\n guid: string;\n quantityValue: string;\n productId: string;\n productDisplayName: string;\n description: string;\n customerClassification: string | undefined;\n baseProductId: string | undefined;\n customFields: CustomFieldItem[];\n alternateProductId?: string;\n}\n\nexport default defineComponent({\n components: {\n Btn,\n Modal,\n FormInputClearable,\n },\n props: {\n t: { type: Function as PropType<TranslateFunc>, required: true },\n instanceId: { type: String, default: undefined },\n data: { type: Object as PropType<CatalogProductEditActionData>, required: true },\n },\n emits: ['update:show'],\n setup(props, { emit }) {\n const instance = PIS.Catalogs.getInstance(props.instanceId) as Instance;\n const isProductDescriptionEditable = computed(\n () => props.data.product.productType === CatalogProductTypeEnum.UNLISTED,\n );\n const formData = reactive<ProductEditModalFormData>({\n uom: '',\n guid: '',\n quantityValue: '',\n productId: '',\n productDisplayName: '',\n description: '',\n customerClassification: undefined,\n baseProductId: undefined,\n customFields: [],\n alternateProductId: '',\n });\n const validators: Record<string, Validators> = {\n quantity: {\n [ValidationType.required]: {},\n [ValidationType.min]: { min: 1 },\n [ValidationType.max]: { max: 1000000 },\n },\n };\n const isFormValid = computed(\n () => (!isProductDescriptionEditable.value || formData.description) && formData.quantityValue,\n );\n const close = () => emit('update:show', false);\n const onDescriptionUpdate = (newDescription: string) => (formData.description = newDescription);\n const onQuantityUpdate = (newQuantity: string) => (formData.quantityValue = newQuantity);\n const onClassificationUpdate = (newClassification: string) =>\n (formData.customerClassification = newClassification);\n const onSave = async () => {\n try {\n const catalogId = props.data.catalog.id;\n if (!catalogId) {\n return;\n }\n const productPatch: CatalogProductUpdateItem = {\n description: formData.description,\n productId: formData.productId,\n quantity: Number.parseInt(formData.quantityValue, 10),\n unitOfMeasure: formData.uom,\n customerClassification: formData.customerClassification,\n baseProductId: formData.baseProductId,\n customFields: formData.customFields,\n alternateProductId: formData.alternateProductId,\n };\n if (isProductDescriptionEditable.value) {\n productPatch.description = formData.description;\n }\n await instance.execute(\n new UpdateProductCommand({\n catalogId,\n product: productPatch,\n onSuccessMessage: props.t('CatalogProductEditSuccess'),\n }).from('product-edit-modal'),\n );\n } catch {\n // Ignore error\n }\n close();\n };\n\n onMounted(() => {\n const product = props.data.product;\n formData.productId = product.productId;\n formData.productDisplayName = attrValue(product as ProductItem, '#DisplayName');\n formData.description = attrValue(product as ProductItem, '#Description');\n formData.customerClassification = product.customerClassification;\n formData.baseProductId = product.baseProduct?.productId;\n formData.customFields = [...(product.customFields || [])];\n formData.alternateProductId = product.alternateProductId;\n const catalogItem: Catalog | undefined = props.data.catalog;\n const catalogDetail: CatalogDetail | undefined = catalogItem\n ? product.catalogs?.find((catalog: CatalogDetail) => catalog.code === catalogItem.code)\n : (product.catalogs ?? {})[0];\n const productQuantity = (catalogDetail?.quantities ?? {})[0];\n if (productQuantity) {\n formData.quantityValue = `${productQuantity.value}`;\n formData.guid = productQuantity.guid;\n formData.uom = productQuantity.unitOfMeasure;\n }\n });\n\n return {\n formData,\n validators,\n isFormValid,\n isProductDescriptionEditable,\n close,\n onSave,\n onQuantityUpdate,\n onDescriptionUpdate,\n onClassificationUpdate,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <ProductEditModal\n v-if=\"currentActionName === CatalogAction.productEdit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogProductEditActionData\"\n @update:show=\"onActionCompleted\"\n ></ProductEditModal>\n <ProductCopyModal\n v-else-if=\"currentActionName === CatalogAction.productCopy\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogProductCopyActionData\"\n @update:show=\"onActionCompleted\"\n ></ProductCopyModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.productDelete\"\n :t=\"t\"\n :title=\"t('DeleteCatalogProduct')\"\n :item=\"currentActionData as CatalogProductDeleteActionData\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onCatalogProductDelete\"\n >\n <div class=\"mb-4\">\n {{ t('CatalogProductConfirmDelete') }}\n <strong class=\"d-block\">\n {{\n attrValue(\n (currentActionData as CatalogProductDeleteActionData).product,\n '#DisplayName',\n )\n }}\n </strong>\n </div>\n </Confirmation>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, computed } from 'vue';\n\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n CatalogActionCompleted,\n CatalogProductDeleteCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport ProductCopyModal from '@/catalogs/components/products/ProductCopyModal.vue';\nimport ProductEditModal from '@/catalogs/components/products/ProductEditModal.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { CatalogProductItem } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport {\n CatalogProductEditActionData,\n CatalogProductDeleteActionData,\n CatalogProductCopyActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-actions-modals',\n components: { ProductEditModal, ProductCopyModal, Confirmation },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const getProductDisplayName = (product: CatalogProductItem) =>\n (product.attributes['#DisplayName']?.values ?? [\n {\n text: product.productId,\n },\n ])[0].text;\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n const onCatalogProductDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.productDelete) {\n return;\n }\n const catalogProductForDeletion: CatalogProductDeleteActionData =\n currentActions.data as CatalogProductDeleteActionData;\n if (\n !catalogProductForDeletion ||\n !catalogProductForDeletion.product ||\n !catalogProductForDeletion.product.productId ||\n !catalogProductForDeletion.catalog ||\n !catalogProductForDeletion.catalog.id\n ) {\n return;\n }\n try {\n await instance.value?.execute(\n new CatalogProductDeleteCommand({\n onSuccessMessage: t('CatalogProductDeleteSuccess'),\n products: [\n {\n productId: catalogProductForDeletion.product.productId,\n },\n ],\n catalogId: catalogProductForDeletion.catalog.id,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n instance,\n CatalogAction,\n componentName,\n isWebComponent,\n currentActionName,\n currentActionData,\n t,\n attrValue,\n onActionCompleted,\n getProductDisplayName,\n onCatalogProductDelete,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\">\n <template v-if=\"isReady\">\n <ProductEditModal\n v-if=\"currentActionName === CatalogAction.productEdit\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogProductEditActionData\"\n @update:show=\"onActionCompleted\"\n ></ProductEditModal>\n <ProductCopyModal\n v-else-if=\"currentActionName === CatalogAction.productCopy\"\n :t=\"t\"\n :instance-id=\"instanceId\"\n :data=\"currentActionData as CatalogProductCopyActionData\"\n @update:show=\"onActionCompleted\"\n ></ProductCopyModal>\n <Confirmation\n v-else-if=\"currentActionName === CatalogAction.productDelete\"\n :t=\"t\"\n :title=\"t('DeleteCatalogProduct')\"\n :item=\"currentActionData as CatalogProductDeleteActionData\"\n @update:show=\"onActionCompleted\"\n @confirmation-cancelled=\"onActionCompleted\"\n @confirmation-ok=\"onCatalogProductDelete\"\n >\n <div class=\"mb-4\">\n {{ t('CatalogProductConfirmDelete') }}\n <strong class=\"d-block\">\n {{\n attrValue(\n (currentActionData as CatalogProductDeleteActionData).product,\n '#DisplayName',\n )\n }}\n </strong>\n </div>\n </Confirmation>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, computed } from 'vue';\n\nimport { CatalogAction } from '@/catalogs/api/runtime/CatalogAction';\nimport {\n CatalogActionCompleted,\n CatalogProductDeleteCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport ProductCopyModal from '@/catalogs/components/products/ProductCopyModal.vue';\nimport ProductEditModal from '@/catalogs/components/products/ProductEditModal.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Confirmation from '@/common/components/Confirmation.vue';\nimport { attrValue } from '@/common/helpers/productAttributes';\nimport { CatalogProductItem } from '@/common/services/swagger';\n// Used in template\n/* eslint-disable */\nimport {\n CatalogProductEditActionData,\n CatalogProductDeleteActionData,\n CatalogProductCopyActionData,\n} from '@/catalogs/api/runtime/CatalogActionData';\n/* eslint-enable */\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-actions-modals',\n components: { ProductEditModal, ProductCopyModal, Confirmation },\n props: {\n instanceId: { type: String, default: undefined },\n },\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t } = setupComponent(\n root,\n props.instanceId,\n );\n const actions = computed(() => instance.value?.store.data.actions);\n const currentActionName = computed(() => actions.value?.current);\n const currentActionData = computed(() => actions.value?.data);\n const getProductDisplayName = (product: CatalogProductItem) =>\n (product.attributes['#DisplayName']?.values ?? [\n {\n text: product.productId,\n },\n ])[0].text;\n const onActionCompleted = async () => {\n try {\n instance.value?.execute(new CatalogActionCompleted().from(componentName));\n } catch {\n // Ignore error\n }\n };\n const onCatalogProductDelete = async () => {\n const currentActions = actions.value;\n if (!currentActions?.current || currentActions.current !== CatalogAction.productDelete) {\n return;\n }\n const catalogProductForDeletion: CatalogProductDeleteActionData =\n currentActions.data as CatalogProductDeleteActionData;\n if (\n !catalogProductForDeletion ||\n !catalogProductForDeletion.product ||\n !catalogProductForDeletion.product.productId ||\n !catalogProductForDeletion.catalog ||\n !catalogProductForDeletion.catalog.id\n ) {\n return;\n }\n try {\n await instance.value?.execute(\n new CatalogProductDeleteCommand({\n onSuccessMessage: t('CatalogProductDeleteSuccess'),\n products: [\n {\n productId: catalogProductForDeletion.product.productId,\n },\n ],\n catalogId: catalogProductForDeletion.catalog.id,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n onActionCompleted();\n };\n\n return {\n root,\n store,\n isReady,\n instance,\n CatalogAction,\n componentName,\n isWebComponent,\n currentActionName,\n currentActionData,\n t,\n attrValue,\n onActionCompleted,\n getProductDisplayName,\n onCatalogProductDelete,\n };\n },\n});\n</script>\n","export const CATALOG_PRODUCT_SWITCH_VIEWS = ['catalog', 'product', 'alias'] as const;\n\n/** View offered by the catalog/product/alias view switch (the switch drives `routeData.view`). */\nexport type CatalogProductSwitchView = (typeof CATALOG_PRODUCT_SWITCH_VIEWS)[number];\n\nexport interface CatalogProductSwitchOptions {\n /** Views offered by the catalog/product/alias switch. */\n views?: CatalogProductSwitchView[];\n /** View selected initially. */\n defaultView?: CatalogProductSwitchView;\n}\n","import { CatalogProductSwitchView } from '@/catalogs/api/configuration/components/CatalogProductSwitchOptions';\nimport { ViewType } from '@/catalogs/api/runtime/RouteData';\n\nexport const routeMap: Record<CatalogProductSwitchView, ViewType> = {\n catalog: 'catalogs',\n product: 'products',\n alias: 'aliases',\n};\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <div class=\"mb-3\">\n <ul class=\"nav nav-tabs\">\n <li\n v-for=\"view in allowedViews\"\n :key=\"view\"\n class=\"nav-item\"\n :class=\"{ 'w-100': narrowerThan('sm') }\"\n >\n <a\n class=\"nav-link\"\n :class=\"routeView === routeMap[view] ? 'active' : ''\"\n href=\"#\"\n @click.prevent=\"switchToView(view)\"\n >\n {{ t(translationMap[view]) }}\n </a>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport {\n CATALOG_PRODUCT_SWITCH_VIEWS,\n CatalogProductSwitchView,\n CatalogProductSwitchOptions,\n} from '@/catalogs/api/configuration/components/CatalogProductSwitchOptions';\nimport {\n SwitchToAliasesCommand,\n SwitchToCatalogsCommand,\n CommandBase,\n SwitchToProductsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { ViewType } from '@/catalogs/api/runtime/RouteData';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { routeMap } from '@/common/helpers/switchViewToRoute';\n\ntype NewableCommand = { new (): CommandBase<unknown, unknown> };\n\nexport default defineComponent({\n name: 'pis-catalogs-common-view-switch',\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t, narrowerThan } =\n setupComponent(root, props.instanceId);\n const componentOptions = computed<CatalogProductSwitchOptions | undefined>(\n () =>\n store.value?.options.components?.common?.viewSwitch ?? ({} as CatalogProductSwitchOptions),\n );\n const validViews: readonly string[] = CATALOG_PRODUCT_SWITCH_VIEWS;\n const isValidView = (view: string): boolean => validViews.includes(view);\n const allowedViews = computed(() => {\n if (componentOptions.value) {\n return (componentOptions.value.views || []).filter(isValidView);\n }\n return [];\n });\n const routeView = computed<ViewType | undefined>(() => instance.value?.router.routeData.view);\n const translationMap: Record<CatalogProductSwitchView, string> = {\n catalog: 'Catalogs',\n product: 'Products',\n alias: 'Aliases',\n };\n const viewCommandMap: Record<CatalogProductSwitchView, NewableCommand> = {\n catalog: SwitchToCatalogsCommand,\n product: SwitchToProductsCommand,\n alias: SwitchToAliasesCommand,\n };\n const switchToView = async (view: CatalogProductSwitchView) => {\n if (!isValidView(view)) {\n return;\n }\n try {\n if (viewCommandMap[view]) {\n await instance.value?.execute(new viewCommandMap[view]());\n }\n } catch {\n // Ignore error\n }\n };\n\n // watch(\n // // Watch both - instance init & default view, as it could have changed\n // () => `${instance.value?.isInitialized()}${componentOptions.value?.defaultView}`,\n // async () => {\n // if (!instance.value?.isInitialized()) {\n // return;\n // }\n // const defaultView: CatalogProductSwitchView | undefined =\n // componentOptions.value?.defaultView;\n\n // const currentView: CatalogProductSwitchView | undefined = routeView.value\n // ? routeMap[routeView.value]\n // : undefined;\n\n // if (defaultView && currentView !== defaultView) {\n\n // await switchToView(defaultView);\n // }\n // },\n // );\n\n return {\n root,\n store,\n isReady,\n routeMap,\n routeView,\n allowedViews,\n componentName,\n isWebComponent,\n translationMap,\n t,\n switchToView,\n narrowerThan,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <div class=\"mb-3\">\n <ul class=\"nav nav-tabs\">\n <li\n v-for=\"view in allowedViews\"\n :key=\"view\"\n class=\"nav-item\"\n :class=\"{ 'w-100': narrowerThan('sm') }\"\n >\n <a\n class=\"nav-link\"\n :class=\"routeView === routeMap[view] ? 'active' : ''\"\n href=\"#\"\n @click.prevent=\"switchToView(view)\"\n >\n {{ t(translationMap[view]) }}\n </a>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport {\n CATALOG_PRODUCT_SWITCH_VIEWS,\n CatalogProductSwitchView,\n CatalogProductSwitchOptions,\n} from '@/catalogs/api/configuration/components/CatalogProductSwitchOptions';\nimport {\n SwitchToAliasesCommand,\n SwitchToCatalogsCommand,\n CommandBase,\n SwitchToProductsCommand,\n} from '@/catalogs/api/runtime/CommandExecutor';\nimport { ViewType } from '@/catalogs/api/runtime/RouteData';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport { routeMap } from '@/common/helpers/switchViewToRoute';\n\ntype NewableCommand = { new (): CommandBase<unknown, unknown> };\n\nexport default defineComponent({\n name: 'pis-catalogs-common-view-switch',\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n const { componentName, instance, isReady, isWebComponent, store, t, narrowerThan } =\n setupComponent(root, props.instanceId);\n const componentOptions = computed<CatalogProductSwitchOptions | undefined>(\n () =>\n store.value?.options.components?.common?.viewSwitch ?? ({} as CatalogProductSwitchOptions),\n );\n const validViews: readonly string[] = CATALOG_PRODUCT_SWITCH_VIEWS;\n const isValidView = (view: string): boolean => validViews.includes(view);\n const allowedViews = computed(() => {\n if (componentOptions.value) {\n return (componentOptions.value.views || []).filter(isValidView);\n }\n return [];\n });\n const routeView = computed<ViewType | undefined>(() => instance.value?.router.routeData.view);\n const translationMap: Record<CatalogProductSwitchView, string> = {\n catalog: 'Catalogs',\n product: 'Products',\n alias: 'Aliases',\n };\n const viewCommandMap: Record<CatalogProductSwitchView, NewableCommand> = {\n catalog: SwitchToCatalogsCommand,\n product: SwitchToProductsCommand,\n alias: SwitchToAliasesCommand,\n };\n const switchToView = async (view: CatalogProductSwitchView) => {\n if (!isValidView(view)) {\n return;\n }\n try {\n if (viewCommandMap[view]) {\n await instance.value?.execute(new viewCommandMap[view]());\n }\n } catch {\n // Ignore error\n }\n };\n\n // watch(\n // // Watch both - instance init & default view, as it could have changed\n // () => `${instance.value?.isInitialized()}${componentOptions.value?.defaultView}`,\n // async () => {\n // if (!instance.value?.isInitialized()) {\n // return;\n // }\n // const defaultView: CatalogProductSwitchView | undefined =\n // componentOptions.value?.defaultView;\n\n // const currentView: CatalogProductSwitchView | undefined = routeView.value\n // ? routeMap[routeView.value]\n // : undefined;\n\n // if (defaultView && currentView !== defaultView) {\n\n // await switchToView(defaultView);\n // }\n // },\n // );\n\n return {\n root,\n store,\n isReady,\n routeMap,\n routeView,\n allowedViews,\n componentName,\n isWebComponent,\n translationMap,\n t,\n switchToView,\n narrowerThan,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && componentOptions.visible\">\n <Modal v-model:show=\"previewData\" :title=\"title\" xl>\n <template #header-actions>\n <Btn @click=\"item && details(item)\">{{ t('ViewDetails') }}</Btn>\n </template>\n\n <div v-if=\"identifiers.length\" class=\"mb-4\">\n <div v-for=\"identifier in identifiers\" :key=\"identifier\" class=\"text-muted\">\n {{ identifier }}\n </div>\n </div>\n\n <div class=\"row my-4\">\n <div class=\"col-12 col-md-4 mb-4\">\n <ImageGallery\n show-preview\n hide-thumbnails\n disable-modal\n :images=\"item?.images\"\n :show-overlay-arrows=\"true\"\n :title=\"t('ProductGallery')\"\n >\n <div v-if=\"componentOptions.imageOverlayTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.imageOverlayTemplate\"\n :ctx=\"reactiveContext({ instance, item, emit, t })\"\n />\n </div>\n </ImageGallery>\n\n <div class=\"mt-4\">\n <template v-if=\"componentOptions.actionTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.actionTemplate\"\n :ctx=\"\n reactiveContext({\n instance,\n item,\n emit,\n details,\n attrValue,\n attrValues,\n close,\n t,\n })\n \"\n />\n </template>\n </div>\n </div>\n <div class=\"col-12 col-md-8 order-md-first\">\n <AttributesTable\n :instance=\"instance\"\n :attributes=\"attributes\"\n :hide-document-links=\"hideDocumentLinks\"\n :t=\"t\"\n />\n </div>\n </div>\n </Modal>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { PreviewOptions } from '@/catalogs/api/configuration/components/PreviewOptions';\nimport { DetailsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport AttributesTable from '@/common/components/AttributesTable.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport ImageGallery from '@/common/components/ImageGallery.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-preview',\n\n components: {\n MountPoint,\n Modal,\n AttributesTable,\n ImageGallery,\n Btn,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { instance, componentName, isReady, isWebComponent, store, routeData, t, emit } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.preview?.view ?? ({} as PreviewOptions),\n );\n\n const previewData = computed({\n get: () => store.value?.data.productPreview,\n set: (val) => {\n if (store.value?.data && 'productPreview' in store.value.data) {\n store.value.data.productPreview = val;\n }\n },\n });\n\n const item = computed<ProductItem | undefined>(() => previewData.value?.item);\n const attributes = computed(() => item.value?.attributes || {});\n const replacements = computed(() => item.value?.replacements || []);\n const title = computed(() => (item.value ? attrValue(item.value, '#DisplayName') : ''));\n const identifiers = computed(() =>\n item.value ? attrValues(item.value, '#AllIdentifiers') : [],\n );\n\n const hideDocumentLinks = computed(() => true);\n\n const details = async (product: ProductItem) => {\n if (product?.inactive) {\n return;\n }\n\n close();\n\n if (routeData.value && product) {\n try {\n await instance.value?.execute(new DetailsCommand(product).from(componentName));\n } catch {\n // Ignore Error\n }\n }\n };\n\n const close = () => (previewData.value = undefined);\n\n return {\n previewData,\n root,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n store,\n routeData,\n instance,\n title,\n attributes,\n replacements,\n identifiers,\n item,\n hideDocumentLinks,\n attrValues,\n t,\n emit,\n details,\n attrValue,\n close,\n reactiveContext,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <div v-if=\"isReady && componentOptions.visible\">\n <Modal v-model:show=\"previewData\" :title=\"title\" xl>\n <template #header-actions>\n <Btn @click=\"item && details(item)\">{{ t('ViewDetails') }}</Btn>\n </template>\n\n <div v-if=\"identifiers.length\" class=\"mb-4\">\n <div v-for=\"identifier in identifiers\" :key=\"identifier\" class=\"text-muted\">\n {{ identifier }}\n </div>\n </div>\n\n <div class=\"row my-4\">\n <div class=\"col-12 col-md-4 mb-4\">\n <ImageGallery\n show-preview\n hide-thumbnails\n disable-modal\n :images=\"item?.images\"\n :show-overlay-arrows=\"true\"\n :title=\"t('ProductGallery')\"\n >\n <div v-if=\"componentOptions.imageOverlayTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.imageOverlayTemplate\"\n :ctx=\"reactiveContext({ instance, item, emit, t })\"\n />\n </div>\n </ImageGallery>\n\n <div class=\"mt-4\">\n <template v-if=\"componentOptions.actionTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.actionTemplate\"\n :ctx=\"\n reactiveContext({\n instance,\n item,\n emit,\n details,\n attrValue,\n attrValues,\n close,\n t,\n })\n \"\n />\n </template>\n </div>\n </div>\n <div class=\"col-12 col-md-8 order-md-first\">\n <AttributesTable\n :instance=\"instance\"\n :attributes=\"attributes\"\n :hide-document-links=\"hideDocumentLinks\"\n :t=\"t\"\n />\n </div>\n </div>\n </Modal>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { PreviewOptions } from '@/catalogs/api/configuration/components/PreviewOptions';\nimport { DetailsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport AttributesTable from '@/common/components/AttributesTable.vue';\nimport Btn from '@/common/components/Btn.vue';\nimport ImageGallery from '@/common/components/ImageGallery.vue';\nimport Modal from '@/common/components/Modal.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContext } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { ProductItem } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-preview',\n\n components: {\n MountPoint,\n Modal,\n AttributesTable,\n ImageGallery,\n Btn,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { instance, componentName, isReady, isWebComponent, store, routeData, t, emit } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const componentOptions = computed(\n () => store.value?.options.components?.products?.preview?.view ?? ({} as PreviewOptions),\n );\n\n const previewData = computed({\n get: () => store.value?.data.productPreview,\n set: (val) => {\n if (store.value?.data && 'productPreview' in store.value.data) {\n store.value.data.productPreview = val;\n }\n },\n });\n\n const item = computed<ProductItem | undefined>(() => previewData.value?.item);\n const attributes = computed(() => item.value?.attributes || {});\n const replacements = computed(() => item.value?.replacements || []);\n const title = computed(() => (item.value ? attrValue(item.value, '#DisplayName') : ''));\n const identifiers = computed(() =>\n item.value ? attrValues(item.value, '#AllIdentifiers') : [],\n );\n\n const hideDocumentLinks = computed(() => true);\n\n const details = async (product: ProductItem) => {\n if (product?.inactive) {\n return;\n }\n\n close();\n\n if (routeData.value && product) {\n try {\n await instance.value?.execute(new DetailsCommand(product).from(componentName));\n } catch {\n // Ignore Error\n }\n }\n };\n\n const close = () => (previewData.value = undefined);\n\n return {\n previewData,\n root,\n componentName,\n componentOptions,\n isReady,\n isWebComponent,\n store,\n routeData,\n instance,\n title,\n attributes,\n replacements,\n identifiers,\n item,\n hideDocumentLinks,\n attrValues,\n t,\n emit,\n details,\n attrValue,\n close,\n reactiveContext,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <div v-if=\"noSearchResults\">\n <p class=\"h5\">{{ t('NoResults') }}</p>\n <p>\n <strong>{{ t('Suggestions') }}:</strong>\n </p>\n <ul>\n <li>{{ t('CheckSpelling') }}</li>\n <li>{{ t('DifferentKeywords') }}</li>\n <li>{{ t('ContactSupport') }}</li>\n </ul>\n\n <Btn @click.prevent=\"clearResults\">{{ t('Clear') }}</Btn>\n </div>\n\n <div v-if=\"noProducts\" class=\"my-3 text-muted\">\n {{ t('NoResults') }}\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Btn from '@/common/components/Btn.vue';\nimport { CatalogProductSearchTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-no-results',\n\n components: {\n Btn,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const noSearchResults = computed(\n () =>\n instance.value?.getRouteData().products.searchText &&\n !store.value?.data.products?.items?.length,\n );\n\n const noProducts = computed(\n () =>\n !instance.value?.getRouteData().products.searchText &&\n !instance.value?.getRouteData().products.filters?.rules.length &&\n store.value?.data.products?.totalCount == 0,\n );\n\n const clearResults = async () => {\n try {\n await instance.value?.execute(\n new SearchProductsCommand({\n searchText: '',\n searchType:\n routeData.value?.products.searchType ?? CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n };\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n noSearchResults,\n noProducts,\n t,\n clearResults,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component\" :class=\"componentName\">\n <template v-if=\"isReady\">\n <div v-if=\"noSearchResults\">\n <p class=\"h5\">{{ t('NoResults') }}</p>\n <p>\n <strong>{{ t('Suggestions') }}:</strong>\n </p>\n <ul>\n <li>{{ t('CheckSpelling') }}</li>\n <li>{{ t('DifferentKeywords') }}</li>\n <li>{{ t('ContactSupport') }}</li>\n </ul>\n\n <Btn @click.prevent=\"clearResults\">{{ t('Clear') }}</Btn>\n </div>\n\n <div v-if=\"noProducts\" class=\"my-3 text-muted\">\n {{ t('NoResults') }}\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { SearchProductsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Btn from '@/common/components/Btn.vue';\nimport { CatalogProductSearchTypeEnum } from '@/common/services/swagger';\n\nexport default defineComponent({\n name: 'pis-catalogs-products-search-no-results',\n\n components: {\n Btn,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const { componentName, isReady, isWebComponent, instance, store, routeData, t } =\n setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const noSearchResults = computed(\n () =>\n instance.value?.getRouteData().products.searchText &&\n !store.value?.data.products?.items?.length,\n );\n\n const noProducts = computed(\n () =>\n !instance.value?.getRouteData().products.searchText &&\n !instance.value?.getRouteData().products.filters?.rules.length &&\n store.value?.data.products?.totalCount == 0,\n );\n\n const clearResults = async () => {\n try {\n await instance.value?.execute(\n new SearchProductsCommand({\n searchText: '',\n searchType:\n routeData.value?.products.searchType ?? CatalogProductSearchTypeEnum.WITH_ALL_WORDS,\n }).from(componentName),\n );\n } catch {\n // Ignore Error\n }\n };\n\n return {\n root,\n componentName,\n isReady,\n isWebComponent,\n store,\n noSearchResults,\n noProducts,\n t,\n clearResults,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <div v-show=\"isReady\">\n <CatalogsNotifications />\n\n <LoadingIndicator>\n <div class=\"container-fluid\">\n <CatalogProductSwitch />\n </div>\n <div v-if=\"routeData?.view === 'catalogs'\">\n <div class=\"container-fluid\">\n <CatalogsSearchForm />\n <CatalogsSearchToolbar></CatalogsSearchToolbar>\n <hr />\n <CatalogsSearchTable />\n <CatalogsSearchPagination />\n </div>\n </div>\n <div v-else-if=\"routeData?.view === 'products'\">\n <div class=\"container-fluid\">\n <ProductsBreadcrumbs />\n <div class=\"row\">\n <div :class=\"[widerThan('xl') ? 'col-3' : widerThan('md') ? 'col-4' : 'col-12']\">\n <div v-show=\"allowMobileView\" class=\"d-sm-none\">\n <CatalogProductsMobileNav></CatalogProductsMobileNav>\n </div>\n <div :class=\"[allowMobileView && 'd-none d-sm-block']\">\n <ProductsSearchProductCategories />\n <ProductsSearchPartCategories />\n <ProductsSearchFilters />\n </div>\n </div>\n <div :class=\"[widerThan('xl') ? 'col-9' : widerThan('md') ? 'col-8' : 'col-12']\">\n <ProductsSearchForm />\n <ProductsSearchFiltersStatus />\n <ProductsSearchToolbar />\n\n <ProductsSearchSelection class=\"mb-2\" />\n <ProductsTableView>\n <ProductsSearchTable />\n </ProductsTableView>\n\n <ProductsListView> <ProductsSearchList /> </ProductsListView>\n <ProductsGridView> <ProductsSearchGrid /> </ProductsGridView>\n\n <ProductsSearchNoResults></ProductsSearchNoResults>\n\n <ProductsSearchPagination />\n <ProductsPreviewView></ProductsPreviewView>\n </div>\n </div>\n </div>\n </div>\n <div v-else-if=\"routeData?.view === 'aliases'\">\n <div class=\"container-fluid\">\n <ProductsBreadcrumbs />\n <div class=\"row\">\n <div :class=\"[widerThan('xl') ? 'col-3' : widerThan('md') ? 'col-4' : 'col-12']\">\n <div v-show=\"allowMobileView\" class=\"d-sm-none\">\n <AliasesMobileNav></AliasesMobileNav>\n </div>\n <div :class=\"[allowMobileView && 'd-none d-sm-block']\">\n <ProductsSearchAliasFilters></ProductsSearchAliasFilters>\n <ProductsSearchProductCategories />\n <ProductsSearchPartCategories />\n </div>\n </div>\n\n <div :class=\"[widerThan('xl') ? 'col-9' : widerThan('md') ? 'col-8' : 'col-12']\">\n <ProductsSearchForm />\n <AliasesSearchToolbar />\n <AliasesSearchTable />\n\n <ProductsSearchNoResults></ProductsSearchNoResults>\n\n <ProductsSearchPagination />\n </div>\n </div>\n </div>\n </div>\n </LoadingIndicator>\n </div>\n <CatalogActionModals :t=\"t\" :instance-id=\"instanceId\"></CatalogActionModals>\n <CatalogProductActionModals :t=\"t\" :instance-id=\"instanceId\"></CatalogProductActionModals>\n <AliasActionModals :t=\"t\" :instance-id=\"instanceId\"></AliasActionModals>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, watch } from 'vue';\n\n// Common components\nimport AliasesSearchTable from './aliases/AliasesSearchTable.vue';\nimport AliasesSearchToolbar from './aliases/AliasesSearchToolbar.vue';\n// Catalogs view\nimport AliasesMobileNav from './AliasesMobileNav.vue';\nimport CatalogsSearchForm from './catalogs/CatalogsSearchForm.vue';\nimport CatalogsSearchPagination from './catalogs/CatalogsSearchPagination.vue';\nimport CatalogsSearchTable from './catalogs/CatalogsSearchTable.vue';\nimport CatalogsSearchToolbar from './catalogs/CatalogsSearchToolbar.vue';\nimport LoadingIndicator from './CatalogsLoadingIndicator.vue';\n\n// Products view\nimport CatalogsNotifications from './CatalogsNotifications.vue';\nimport AliasActionModals from './common/AliasActionModals.vue';\nimport ProductsBreadcrumbs from './products/ProductsBreadcrumbs.vue';\nimport ProductsSearchAliasFilters from './products/ProductsSearchAliasFilters.vue';\nimport ProductsSearchFilters from './products/ProductsSearchFilters.vue';\nimport ProductsSearchFiltersStatus from './products/ProductsSearchFiltersStatus.vue';\nimport ProductsSearchForm from './products/ProductsSearchForm.vue';\nimport ProductsSearchGrid from './products/ProductsSearchGrid.vue';\nimport ProductsSearchList from './products/ProductsSearchList.vue';\nimport ProductsSearchPagination from './products/ProductsSearchPagination.vue';\nimport ProductsSearchPartCategories from './products/ProductsSearchPartCategories.vue';\nimport ProductsSearchProductCategories from './products/ProductsSearchProductCategories.vue';\nimport ProductsSearchSelection from './products/ProductsSearchSelection.vue';\nimport ProductsSearchTable from './products/ProductsSearchTable.vue';\nimport ProductsSearchToolbar from './products/ProductsSearchToolbar.vue';\nimport ProductsGridView from './views/ProductsGridView.vue';\nimport ProductsListView from './views/ProductsListView.vue';\nimport ProductsTableView from './views/ProductsTableView.vue';\n\nimport CatalogProductsMobileNav from '@/catalogs/components/CatalogProductsMobileNav.vue';\nimport CatalogActionModals from '@/catalogs/components/common/CatalogActionModals.vue';\nimport CatalogProductActionModals from '@/catalogs/components/common/CatalogProductActionModals.vue';\nimport CatalogProductSwitch from '@/catalogs/components/common/CatalogProductSwitch.vue';\nimport ProductsPreviewView from '@/catalogs/components/preview/ProductsPreviewView.vue';\nimport ProductsSearchNoResults from '@/catalogs/components/products/ProductsSearchNoResults.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\n// Preview View\n\nexport default defineComponent({\n name: 'pis-catalogs-layout',\n\n components: {\n LoadingIndicator,\n CatalogsSearchTable,\n CatalogsSearchForm,\n ProductsSearchTable,\n ProductsSearchFilters,\n ProductsSearchFiltersStatus,\n ProductsSearchProductCategories,\n ProductsSearchPartCategories,\n ProductsBreadcrumbs,\n ProductsSearchToolbar,\n ProductsSearchPagination,\n CatalogsSearchPagination,\n ProductsTableView,\n ProductsListView,\n ProductsGridView,\n ProductsSearchList,\n ProductsSearchGrid,\n ProductsSearchForm,\n CatalogProductSwitch,\n CatalogActionModals,\n CatalogProductActionModals,\n CatalogsSearchToolbar,\n ProductsPreviewView,\n ProductsSearchNoResults,\n CatalogsNotifications,\n ProductsSearchSelection,\n CatalogProductsMobileNav,\n ProductsSearchAliasFilters,\n AliasesSearchTable,\n AliasActionModals,\n AliasesSearchToolbar,\n AliasesMobileNav,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n instance,\n isWebComponent,\n isReady,\n translationsReady,\n store,\n routeData,\n widerThan,\n t,\n } = setupComponent(root, props.instanceId);\n\n const allowMobileView = computed(() => store.value?.options.allowMobileView);\n\n const scrollTo = (elem: HTMLElement | undefined) =>\n elem?.scrollIntoView({ behavior: 'smooth' });\n\n const scrollTop = () => {\n const args = { isHandled: false };\n instance.value?.eventBus.emit('scroll-to-top', args);\n if (!args.isHandled) {\n scrollTo(root.value);\n }\n };\n\n const routeView = computed(() => routeData.value?.view);\n\n // Scroll to top each time the route view changes. We need to use computed\n // because watching the routeData gives no chance to see if view has changed.\n watch(routeView, async (view, oldView) => {\n if (view && oldView && view !== oldView) {\n scrollTop();\n }\n });\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n instance,\n translationsReady,\n store,\n routeData,\n allowMobileView,\n widerThan,\n t,\n scrollTop,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <div v-show=\"isReady\">\n <CatalogsNotifications />\n\n <LoadingIndicator>\n <div class=\"container-fluid\">\n <CatalogProductSwitch />\n </div>\n <div v-if=\"routeData?.view === 'catalogs'\">\n <div class=\"container-fluid\">\n <CatalogsSearchForm />\n <CatalogsSearchToolbar></CatalogsSearchToolbar>\n <hr />\n <CatalogsSearchTable />\n <CatalogsSearchPagination />\n </div>\n </div>\n <div v-else-if=\"routeData?.view === 'products'\">\n <div class=\"container-fluid\">\n <ProductsBreadcrumbs />\n <div class=\"row\">\n <div :class=\"[widerThan('xl') ? 'col-3' : widerThan('md') ? 'col-4' : 'col-12']\">\n <div v-show=\"allowMobileView\" class=\"d-sm-none\">\n <CatalogProductsMobileNav></CatalogProductsMobileNav>\n </div>\n <div :class=\"[allowMobileView && 'd-none d-sm-block']\">\n <ProductsSearchProductCategories />\n <ProductsSearchPartCategories />\n <ProductsSearchFilters />\n </div>\n </div>\n <div :class=\"[widerThan('xl') ? 'col-9' : widerThan('md') ? 'col-8' : 'col-12']\">\n <ProductsSearchForm />\n <ProductsSearchFiltersStatus />\n <ProductsSearchToolbar />\n\n <ProductsSearchSelection class=\"mb-2\" />\n <ProductsTableView>\n <ProductsSearchTable />\n </ProductsTableView>\n\n <ProductsListView> <ProductsSearchList /> </ProductsListView>\n <ProductsGridView> <ProductsSearchGrid /> </ProductsGridView>\n\n <ProductsSearchNoResults></ProductsSearchNoResults>\n\n <ProductsSearchPagination />\n <ProductsPreviewView></ProductsPreviewView>\n </div>\n </div>\n </div>\n </div>\n <div v-else-if=\"routeData?.view === 'aliases'\">\n <div class=\"container-fluid\">\n <ProductsBreadcrumbs />\n <div class=\"row\">\n <div :class=\"[widerThan('xl') ? 'col-3' : widerThan('md') ? 'col-4' : 'col-12']\">\n <div v-show=\"allowMobileView\" class=\"d-sm-none\">\n <AliasesMobileNav></AliasesMobileNav>\n </div>\n <div :class=\"[allowMobileView && 'd-none d-sm-block']\">\n <ProductsSearchAliasFilters></ProductsSearchAliasFilters>\n <ProductsSearchProductCategories />\n <ProductsSearchPartCategories />\n </div>\n </div>\n\n <div :class=\"[widerThan('xl') ? 'col-9' : widerThan('md') ? 'col-8' : 'col-12']\">\n <ProductsSearchForm />\n <AliasesSearchToolbar />\n <AliasesSearchTable />\n\n <ProductsSearchNoResults></ProductsSearchNoResults>\n\n <ProductsSearchPagination />\n </div>\n </div>\n </div>\n </div>\n </LoadingIndicator>\n </div>\n <CatalogActionModals :t=\"t\" :instance-id=\"instanceId\"></CatalogActionModals>\n <CatalogProductActionModals :t=\"t\" :instance-id=\"instanceId\"></CatalogProductActionModals>\n <AliasActionModals :t=\"t\" :instance-id=\"instanceId\"></AliasActionModals>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, watch } from 'vue';\n\n// Common components\nimport AliasesSearchTable from './aliases/AliasesSearchTable.vue';\nimport AliasesSearchToolbar from './aliases/AliasesSearchToolbar.vue';\n// Catalogs view\nimport AliasesMobileNav from './AliasesMobileNav.vue';\nimport CatalogsSearchForm from './catalogs/CatalogsSearchForm.vue';\nimport CatalogsSearchPagination from './catalogs/CatalogsSearchPagination.vue';\nimport CatalogsSearchTable from './catalogs/CatalogsSearchTable.vue';\nimport CatalogsSearchToolbar from './catalogs/CatalogsSearchToolbar.vue';\nimport LoadingIndicator from './CatalogsLoadingIndicator.vue';\n\n// Products view\nimport CatalogsNotifications from './CatalogsNotifications.vue';\nimport AliasActionModals from './common/AliasActionModals.vue';\nimport ProductsBreadcrumbs from './products/ProductsBreadcrumbs.vue';\nimport ProductsSearchAliasFilters from './products/ProductsSearchAliasFilters.vue';\nimport ProductsSearchFilters from './products/ProductsSearchFilters.vue';\nimport ProductsSearchFiltersStatus from './products/ProductsSearchFiltersStatus.vue';\nimport ProductsSearchForm from './products/ProductsSearchForm.vue';\nimport ProductsSearchGrid from './products/ProductsSearchGrid.vue';\nimport ProductsSearchList from './products/ProductsSearchList.vue';\nimport ProductsSearchPagination from './products/ProductsSearchPagination.vue';\nimport ProductsSearchPartCategories from './products/ProductsSearchPartCategories.vue';\nimport ProductsSearchProductCategories from './products/ProductsSearchProductCategories.vue';\nimport ProductsSearchSelection from './products/ProductsSearchSelection.vue';\nimport ProductsSearchTable from './products/ProductsSearchTable.vue';\nimport ProductsSearchToolbar from './products/ProductsSearchToolbar.vue';\nimport ProductsGridView from './views/ProductsGridView.vue';\nimport ProductsListView from './views/ProductsListView.vue';\nimport ProductsTableView from './views/ProductsTableView.vue';\n\nimport CatalogProductsMobileNav from '@/catalogs/components/CatalogProductsMobileNav.vue';\nimport CatalogActionModals from '@/catalogs/components/common/CatalogActionModals.vue';\nimport CatalogProductActionModals from '@/catalogs/components/common/CatalogProductActionModals.vue';\nimport CatalogProductSwitch from '@/catalogs/components/common/CatalogProductSwitch.vue';\nimport ProductsPreviewView from '@/catalogs/components/preview/ProductsPreviewView.vue';\nimport ProductsSearchNoResults from '@/catalogs/components/products/ProductsSearchNoResults.vue';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\n\n// Preview View\n\nexport default defineComponent({\n name: 'pis-catalogs-layout',\n\n components: {\n LoadingIndicator,\n CatalogsSearchTable,\n CatalogsSearchForm,\n ProductsSearchTable,\n ProductsSearchFilters,\n ProductsSearchFiltersStatus,\n ProductsSearchProductCategories,\n ProductsSearchPartCategories,\n ProductsBreadcrumbs,\n ProductsSearchToolbar,\n ProductsSearchPagination,\n CatalogsSearchPagination,\n ProductsTableView,\n ProductsListView,\n ProductsGridView,\n ProductsSearchList,\n ProductsSearchGrid,\n ProductsSearchForm,\n CatalogProductSwitch,\n CatalogActionModals,\n CatalogProductActionModals,\n CatalogsSearchToolbar,\n ProductsPreviewView,\n ProductsSearchNoResults,\n CatalogsNotifications,\n ProductsSearchSelection,\n CatalogProductsMobileNav,\n ProductsSearchAliasFilters,\n AliasesSearchTable,\n AliasActionModals,\n AliasesSearchToolbar,\n AliasesMobileNav,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n instance,\n isWebComponent,\n isReady,\n translationsReady,\n store,\n routeData,\n widerThan,\n t,\n } = setupComponent(root, props.instanceId);\n\n const allowMobileView = computed(() => store.value?.options.allowMobileView);\n\n const scrollTo = (elem: HTMLElement | undefined) =>\n elem?.scrollIntoView({ behavior: 'smooth' });\n\n const scrollTop = () => {\n const args = { isHandled: false };\n instance.value?.eventBus.emit('scroll-to-top', args);\n if (!args.isHandled) {\n scrollTo(root.value);\n }\n };\n\n const routeView = computed(() => routeData.value?.view);\n\n // Scroll to top each time the route view changes. We need to use computed\n // because watching the routeData gives no chance to see if view has changed.\n watch(routeView, async (view, oldView) => {\n if (view && oldView && view !== oldView) {\n scrollTop();\n }\n });\n\n return {\n root,\n componentName,\n isWebComponent,\n isReady,\n instance,\n translationsReady,\n store,\n routeData,\n allowMobileView,\n widerThan,\n t,\n scrollTop,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions?.visible && currentSettings\">\n <carousel ref=\"carousel\" v-bind=\"settings\" :breakpoints=\"breakpoints\" :i18n=\"i18n\">\n <slide v-for=\"item in productsItems\" :key=\"item.productId\">\n <div class=\"card h-100 w-100\" :class=\"['mx-' + currentSettings.margin]\">\n <div class=\"card-img-top position-relative pt-5\">\n <Image\n :src=\"getItemImage(item)\"\n :max-size=\"300\"\n role=\"button\"\n hide-frame\n class=\"card-img-top\"\n style=\"max-width: 80% !important; margin: auto\"\n :clickable=\"componentOptions.navigateOnContentClick\"\n @click.prevent=\"componentOptions.navigateOnContentClick && details(item)\"\n />\n <div v-if=\"componentOptions.imageOverlayTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.imageOverlayTemplate\"\n :ctx=\"imageOverlayCtx({ item })\"\n />\n </div>\n </div>\n <div class=\"card-body\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0; right: 0; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n\n <div class=\"d-flex justify-content-center text-center\">\n <template v-if=\"componentOptions.titleTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.titleTemplate\"\n :ctx=\"titleCtx({ item })\"\n />\n </template>\n <template v-else>\n <div class=\"d-flex flex-column\">\n <strong v-if=\"item.inactive\" class=\"text-muted\">\n {{ attrValue(item, '#DisplayName') }}\n </strong>\n <a v-else href=\"#\" @click.prevent=\"details(item)\">\n <strong>{{ attrValue(item, '#DisplayName') }}</strong>\n </a>\n <div\n v-if=\"item.productType === catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n </template>\n </div>\n\n <template v-if=\"componentOptions.showAllIdentifiers\">\n <div\n v-for=\"(val, index) in attrValues(item, '#AllIdentifiers')\"\n :key=\"index\"\n class=\"text-center small text-muted fw-bold my-2\"\n >\n {{ val }}\n </div>\n </template>\n\n <template v-if=\"componentOptions.itemTemplate\">\n <MountPoint :callbacks=\"componentOptions.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n <em v-if=\"item.customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ item.customerClassification }}\n <br />\n </em>\n <em v-if=\"item.baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!item.baseProduct.inactive\"\n @click=\"baseProductDetails(item.baseProduct)\"\n >\n {{ item.baseProduct.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ item.baseProduct.productId }}\n </span>\n <br />\n </em>\n </template>\n </div>\n <div v-if=\"componentOptions.actionTemplate\" class=\"card-footer\">\n <div class=\"text-center\">\n <MountPoint :callbacks=\"componentOptions.actionTemplate\" :ctx=\"itemCtx({ item })\" />\n </div>\n </div>\n\n <template v-if=\"componentOptions.selectable\">\n <div\n class=\"position-absolute p-2 top-0 start-0 ext-select-checkbox\"\n style=\"z-index: 1; width: auto\"\n >\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </template>\n </div>\n </slide>\n\n <template #addons>\n <navigation v-if=\"currentSettings.navigationVisible\">\n <template #next>\n <Icon name=\"chevron-right\" />\n </template>\n <template #prev>\n <Icon name=\"chevron-left\" />\n </template>\n </navigation>\n <pagination v-if=\"currentSettings.paginationVisible\" />\n </template>\n </carousel>\n </template>\n\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, onMounted, onUnmounted, watch, nextTick } from 'vue';\nimport { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsGridHorizontalOptions } from '@/catalogs/api/configuration/components/ItemsGridHorizontalOptions';\nimport { DetailsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport Image from '@/common/components/Image.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid-horizontal',\n\n components: {\n Image,\n Icon,\n Carousel,\n Slide,\n Pagination,\n Navigation,\n MountPoint,\n Clickable,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const catalogProductType = CatalogProductTypeEnum;\n\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const carousel = ref();\n const unwatch = watch(\n () => isReady.value,\n () => {\n if (instance.value) {\n unwatch();\n instance.value.eventBus.on('route-changed', () => {\n const val = carousel.value as any;\n if (val) {\n nextTick(() => {\n val.slideTo(0);\n });\n\n setTimeout(() => {\n loaded.value = true;\n }, 100);\n }\n });\n resizeHandler();\n }\n },\n );\n\n const findSettings = () => {\n const settings = componentOptions.value.carousel;\n const width = window.innerWidth;\n if (settings) {\n if (!settings.breakpoints) return settings.defaults;\n const keys = Object.keys(settings.breakpoints);\n if (keys.length) {\n for (let i = keys.length - 1; i >= 0; i--) {\n if (width > parseInt(keys[i])) {\n return settings.breakpoints[keys[i]];\n }\n }\n }\n return settings.defaults;\n }\n return {};\n };\n\n const currentSettings = ref();\n const loaded = ref(false);\n const resizeHandler = () => {\n currentSettings.value = findSettings();\n };\n\n onMounted(() => {\n window.addEventListener('resize', resizeHandler);\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', resizeHandler);\n });\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.gridHorizontal ??\n ({} as ItemsGridHorizontalOptions),\n );\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items ?? []);\n\n const settings = computed(() => {\n const carousel = componentOptions.value.carousel;\n if (!carousel) return {};\n\n const defaultSettings = carousel.defaults || {};\n\n if (defaultSettings) {\n return {\n ...defaultSettings,\n mouseDrag: carousel.mouseDrag,\n touchDrag: carousel.touchDrag,\n wrapAround: carousel.wrapAround,\n transition: carousel.transition,\n };\n }\n\n return {};\n });\n\n const breakpoints = computed(() => componentOptions.value.carousel?.breakpoints || {});\n\n const i18n = computed(() => {\n return {\n ariaNextSlide: t('CarouselAriaNextSlide'),\n ariaPreviousSlide: t('CarouselAriaPreviousSlide'),\n ariaNavigateToSlide: t('CarouselAriaNavigateToSlide'),\n ariaGallery: t('CarouselAriaGallery'),\n itemXofY: t('CarouselItemXofY'),\n iconArrowUp: t('CarouselIconArrowUp'),\n iconArrowDown: t('CarouselIconArrowDown'),\n iconArrowRight: t('CarouselIconArrowRight'),\n iconArrowLeft: t('CarouselIconArrowLeft'),\n };\n });\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // v7: per-row reactive ctx caches. Each item reuses one stable reactive ctx\n // per surface across re-renders — identity preserved, mutations propagate\n // via reactivity (D-N2). Avoids re-mounting on data change.\n const imageOverlayCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n const titleCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }));\n\n const itemCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }));\n\n return {\n root,\n instance,\n loaded,\n componentName,\n componentOptions,\n isWebComponent,\n isReady,\n store,\n productsItems,\n settings,\n breakpoints,\n carousel,\n i18n,\n currentSettings,\n selectedItem,\n baseProductDetails,\n t,\n widerThan,\n narrowerThan,\n attrValue,\n attrValues,\n details,\n emit,\n toggleItemDetails,\n getItemImage,\n previewEnabled,\n catalogProductType,\n catalogsModalVisible,\n showingAllCatalogs,\n imageOverlayCtx,\n titleCtx,\n itemCtx,\n };\n },\n});\n</script>\n","<template>\n <div ref=\"root\" class=\"pis-component position-relative\" :class=\"componentName\">\n <template v-if=\"isReady && componentOptions?.visible && currentSettings\">\n <carousel ref=\"carousel\" v-bind=\"settings\" :breakpoints=\"breakpoints\" :i18n=\"i18n\">\n <slide v-for=\"item in productsItems\" :key=\"item.productId\">\n <div class=\"card h-100 w-100\" :class=\"['mx-' + currentSettings.margin]\">\n <div class=\"card-img-top position-relative pt-5\">\n <Image\n :src=\"getItemImage(item)\"\n :max-size=\"300\"\n role=\"button\"\n hide-frame\n class=\"card-img-top\"\n style=\"max-width: 80% !important; margin: auto\"\n :clickable=\"componentOptions.navigateOnContentClick\"\n @click.prevent=\"componentOptions.navigateOnContentClick && details(item)\"\n />\n <div v-if=\"componentOptions.imageOverlayTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.imageOverlayTemplate\"\n :ctx=\"imageOverlayCtx({ item })\"\n />\n </div>\n </div>\n <div class=\"card-body\">\n <div\n v-if=\"componentOptions.detailsVisible\"\n style=\"position: absolute; bottom: 0; right: 0; z-index: 2\"\n >\n <a\n href=\"\"\n class=\"btn btn-link text-dark d-flex align-items-center\"\n @click.prevent=\"toggleItemDetails(item)\"\n >\n <Icon name=\"plus-add\" class=\"py-1\" style=\"font-size: 1.1rem\" />\n </a>\n </div>\n\n <div class=\"d-flex justify-content-center text-center\">\n <template v-if=\"componentOptions.titleTemplate\">\n <MountPoint\n :callbacks=\"componentOptions.titleTemplate\"\n :ctx=\"titleCtx({ item })\"\n />\n </template>\n <template v-else>\n <div class=\"d-flex flex-column\">\n <strong v-if=\"item.inactive\" class=\"text-muted\">\n {{ attrValue(item, '#DisplayName') }}\n </strong>\n <a v-else href=\"#\" @click.prevent=\"details(item)\">\n <strong>{{ attrValue(item, '#DisplayName') }}</strong>\n </a>\n <div\n v-if=\"item.productType === catalogProductType.CONFIGURED\"\n class=\"text-muted small\"\n >\n <em>{{ t('ConfiguredProducts') }}</em>\n </div>\n </div>\n </template>\n </div>\n\n <template v-if=\"componentOptions.showAllIdentifiers\">\n <div\n v-for=\"(val, index) in attrValues(item, '#AllIdentifiers')\"\n :key=\"index\"\n class=\"text-center small text-muted fw-bold my-2\"\n >\n {{ val }}\n </div>\n </template>\n\n <template v-if=\"componentOptions.itemTemplate\">\n <MountPoint :callbacks=\"componentOptions.itemTemplate\" :ctx=\"itemCtx({ item })\" />\n </template>\n <template v-else>\n <em v-if=\"item.customerClassification\">\n {{ t('CustomerClassification') }}: \n {{ item.customerClassification }}\n <br />\n </em>\n <em v-if=\"item.baseProduct\">\n {{ t('BaseProductId') }}: \n <Clickable\n v-if=\"!item.baseProduct.inactive\"\n @click=\"baseProductDetails(item.baseProduct)\"\n >\n {{ item.baseProduct.productId }}\n </Clickable>\n <span v-else class=\"fw-bold text-muted\">\n {{ item.baseProduct.productId }}\n </span>\n <br />\n </em>\n </template>\n </div>\n <div v-if=\"componentOptions.actionTemplate\" class=\"card-footer\">\n <div class=\"text-center\">\n <MountPoint :callbacks=\"componentOptions.actionTemplate\" :ctx=\"itemCtx({ item })\" />\n </div>\n </div>\n\n <template v-if=\"componentOptions.selectable\">\n <div\n class=\"position-absolute p-2 top-0 start-0 ext-select-checkbox\"\n style=\"z-index: 1; width: auto\"\n >\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n :checked=\"instance?.selection.isSelected(item)\"\n @click=\"instance?.selection.toggle(item)\"\n />\n </div>\n </template>\n </div>\n </slide>\n\n <template #addons>\n <navigation v-if=\"currentSettings.navigationVisible\">\n <template #next>\n <Icon name=\"chevron-right\" />\n </template>\n <template #prev>\n <Icon name=\"chevron-left\" />\n </template>\n </navigation>\n <pagination v-if=\"currentSettings.paginationVisible\" />\n </template>\n </carousel>\n </template>\n\n <ItemCatalogsDetailsModal\n :instance-id=\"instanceId\"\n :item=\"selectedItem\"\n :show=\"catalogsModalVisible\"\n :t=\"t\"\n :all-catalogs=\"showingAllCatalogs\"\n @hidden=\"catalogsModalVisible = false\"\n ></ItemCatalogsDetailsModal>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, onMounted, onUnmounted, watch, nextTick } from 'vue';\nimport { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel';\n\nimport ItemCatalogsDetailsModal from './components/ItemCatalogsDetailsModal.vue';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport { ItemsGridHorizontalOptions } from '@/catalogs/api/configuration/components/ItemsGridHorizontalOptions';\nimport { DetailsCommand } from '@/catalogs/api/runtime/CommandExecutor';\nimport { setupComponent } from '@/catalogs/composables/setupComponent';\nimport Clickable from '@/common/components/Clickable.vue';\nimport Icon from '@/common/components/Icon.vue';\nimport Image from '@/common/components/Image.vue';\nimport MountPoint from '@/common/components/MountPoint.vue';\nimport { reactiveContextCache } from '@/common/composables/useReactiveContext';\nimport { attrValue, attrValues } from '@/common/helpers/productAttributes';\nimport { CatalogProductTypeEnum, CatalogProductItem, ProductItem } from '@/common/services/swagger';\nexport default defineComponent({\n name: 'pis-catalogs-products-search-grid-horizontal',\n\n components: {\n Image,\n Icon,\n Carousel,\n Slide,\n Pagination,\n Navigation,\n MountPoint,\n Clickable,\n ItemCatalogsDetailsModal,\n },\n\n props: {\n instanceId: { type: String, default: undefined },\n },\n\n setup(props) {\n const catalogProductType = CatalogProductTypeEnum;\n\n const root = ref<HTMLElement>();\n\n const {\n componentName,\n isWebComponent,\n isReady,\n instance,\n store,\n routeData,\n t,\n widerThan,\n narrowerThan,\n emit,\n } = setupComponent(root, props.instanceId, [CatalogsDataType.Products]);\n\n const carousel = ref();\n const unwatch = watch(\n () => isReady.value,\n () => {\n if (instance.value) {\n unwatch();\n instance.value.eventBus.on('route-changed', () => {\n const val = carousel.value as any;\n if (val) {\n nextTick(() => {\n val.slideTo(0);\n });\n\n setTimeout(() => {\n loaded.value = true;\n }, 100);\n }\n });\n resizeHandler();\n }\n },\n );\n\n const findSettings = () => {\n const settings = componentOptions.value.carousel;\n const width = window.innerWidth;\n if (settings) {\n if (!settings.breakpoints) return settings.defaults;\n const keys = Object.keys(settings.breakpoints);\n if (keys.length) {\n for (let i = keys.length - 1; i >= 0; i--) {\n if (width > parseInt(keys[i])) {\n return settings.breakpoints[keys[i]];\n }\n }\n }\n return settings.defaults;\n }\n return {};\n };\n\n const currentSettings = ref();\n const loaded = ref(false);\n const resizeHandler = () => {\n currentSettings.value = findSettings();\n };\n\n onMounted(() => {\n window.addEventListener('resize', resizeHandler);\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', resizeHandler);\n });\n\n const componentOptions = computed(\n () =>\n store.value?.options.components?.products?.search?.gridHorizontal ??\n ({} as ItemsGridHorizontalOptions),\n );\n\n const details = async (product: CatalogProductItem): Promise<void> => {\n if (product.inactive) {\n return;\n }\n try {\n if (routeData.value && product) {\n await instance.value?.execute(\n new DetailsCommand(product as ProductItem).from(componentName),\n );\n }\n } catch {\n //Ignore Error\n }\n };\n\n const baseProductDetails = async (baseProduct: ProductItem | undefined): Promise<void> => {\n if (!baseProduct) return;\n if (baseProduct.inactive) {\n return;\n }\n try {\n await instance.value?.execute(new DetailsCommand(baseProduct).from(componentName));\n } catch {\n //Ignore Error\n }\n };\n\n const productsItems = computed(() => store.value?.data.products?.items ?? []);\n\n const settings = computed(() => {\n const carousel = componentOptions.value.carousel;\n if (!carousel) return {};\n\n const defaultSettings = carousel.defaults || {};\n\n if (defaultSettings) {\n return {\n ...defaultSettings,\n mouseDrag: carousel.mouseDrag,\n touchDrag: carousel.touchDrag,\n wrapAround: carousel.wrapAround,\n transition: carousel.transition,\n };\n }\n\n return {};\n });\n\n const breakpoints = computed(() => componentOptions.value.carousel?.breakpoints || {});\n\n const i18n = computed(() => {\n return {\n ariaNextSlide: t('CarouselAriaNextSlide'),\n ariaPreviousSlide: t('CarouselAriaPreviousSlide'),\n ariaNavigateToSlide: t('CarouselAriaNavigateToSlide'),\n ariaGallery: t('CarouselAriaGallery'),\n itemXofY: t('CarouselItemXofY'),\n iconArrowUp: t('CarouselIconArrowUp'),\n iconArrowDown: t('CarouselIconArrowDown'),\n iconArrowRight: t('CarouselIconArrowRight'),\n iconArrowLeft: t('CarouselIconArrowLeft'),\n };\n });\n\n const selectedItem = ref();\n const catalogsModalVisible = ref(false);\n\n const toggleItemDetails = (product: CatalogProductItem) => {\n selectedItem.value = product;\n catalogsModalVisible.value = false;\n nextTick(() => {\n catalogsModalVisible.value = true;\n });\n };\n\n const getItemImage = (item: CatalogProductItem): string | undefined => {\n if (item.baseProduct) {\n return (item.baseProduct.images || [])[0]?.url;\n }\n return (item.images || [])[0]?.url;\n };\n\n const previewEnabled = computed(\n () => instance.value?.registeredComponents.has('pis-catalogs-products-preview') ?? false,\n );\n\n const showingAllCatalogs = computed(() => {\n return !routeData.value?.products.catalogId;\n });\n\n // v7: per-row reactive ctx caches. Each item reuses one stable reactive ctx\n // per surface across re-renders — identity preserved, mutations propagate\n // via reactivity (D-N2). Avoids re-mounting on data change.\n const imageOverlayCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n t,\n }));\n\n const titleCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n details,\n baseProductDetails,\n attrValue,\n t,\n }));\n\n const itemCtx = reactiveContextCache((key: { item: CatalogProductItem }) => ({\n instance: instance.value,\n item: key.item,\n emit,\n details,\n baseProductDetails,\n attrValue,\n attrValues,\n t,\n }));\n\n return {\n root,\n instance,\n loaded,\n componentName,\n componentOptions,\n isWebComponent,\n isReady,\n store,\n productsItems,\n settings,\n breakpoints,\n carousel,\n i18n,\n currentSettings,\n selectedItem,\n baseProductDetails,\n t,\n widerThan,\n narrowerThan,\n attrValue,\n attrValues,\n details,\n emit,\n toggleItemDetails,\n getItemImage,\n previewEnabled,\n catalogProductType,\n catalogsModalVisible,\n showingAllCatalogs,\n imageOverlayCtx,\n titleCtx,\n itemCtx,\n };\n },\n});\n</script>\n","import CatalogsLayout from './CatalogsLayout.vue';\nimport CatalogsNotifications from './CatalogsNotifications.vue';\n// Shadow-DOM reduction: the instance host, loading indicator, and the\n// views/* route-gate SFCs ship as NATIVE custom elements now\n// (../elements/nativeElements.ts) — removed from this Vue registry.\n// CatalogsLayout.vue still renders the loading indicator internally as a\n// plain Vue component.\nimport CatalogsProductSwitch from './common/CatalogProductSwitch.vue';\n\nimport AliasesSearchTable from '@/catalogs/components/aliases/AliasesSearchTable.vue';\nimport AliasesSearchToolbar from '@/catalogs/components/aliases/AliasesSearchToolbar.vue';\nimport AliasesMobileNav from '@/catalogs/components/AliasesMobileNav.vue';\nimport CatalogProductsMobileNav from '@/catalogs/components/CatalogProductsMobileNav.vue';\nimport CatalogsSearchForm from '@/catalogs/components/catalogs/CatalogsSearchForm.vue';\nimport CatalogsSearchPagination from '@/catalogs/components/catalogs/CatalogsSearchPagination.vue';\nimport CatalogsSearchTable from '@/catalogs/components/catalogs/CatalogsSearchTable.vue';\nimport CatalogsSearchToolbar from '@/catalogs/components/catalogs/CatalogsSearchToolbar.vue';\nimport AliasActionModals from '@/catalogs/components/common/AliasActionModals.vue';\nimport CatalogActionModals from '@/catalogs/components/common/CatalogActionModals.vue';\nimport CatalogProductActionModals from '@/catalogs/components/common/CatalogProductActionModals.vue';\nimport ProductsPreviewView from '@/catalogs/components/preview/ProductsPreviewView.vue';\nimport ProductsBreadcrumbs from '@/catalogs/components/products/ProductsBreadcrumbs.vue';\nimport ProductsSearchAliasFilters from '@/catalogs/components/products/ProductsSearchAliasFilters.vue';\nimport ProductsSearchFilters from '@/catalogs/components/products/ProductsSearchFilters.vue';\nimport ProductsSearchFiltersStatus from '@/catalogs/components/products/ProductsSearchFiltersStatus.vue';\nimport ProductsSearchForm from '@/catalogs/components/products/ProductsSearchForm.vue';\nimport ProductsSearchGrid from '@/catalogs/components/products/ProductsSearchGrid.vue';\nimport ProductsSearchGridHorizontal from '@/catalogs/components/products/ProductsSearchGridHorizontal.vue';\nimport ProductsSearchList from '@/catalogs/components/products/ProductsSearchList.vue';\nimport ProductsSearchNoResults from '@/catalogs/components/products/ProductsSearchNoResults.vue';\nimport ProductsSearchPagination from '@/catalogs/components/products/ProductsSearchPagination.vue';\nimport ProductsSearchPartCategories from '@/catalogs/components/products/ProductsSearchPartCategories.vue';\nimport ProductsSearchProductCategories from '@/catalogs/components/products/ProductsSearchProductCategories.vue';\nimport ProductsSearchSelection from '@/catalogs/components/products/ProductsSearchSelection.vue';\nimport ProductsSearchTable from '@/catalogs/components/products/ProductsSearchTable.vue';\nimport ProductsSearchToolbar from '@/catalogs/components/products/ProductsSearchToolbar.vue';\n\nexport default [\n CatalogsNotifications,\n CatalogsProductSwitch,\n CatalogsSearchTable,\n CatalogsLayout,\n CatalogsSearchPagination,\n CatalogsSearchForm,\n CatalogsSearchToolbar,\n ProductsBreadcrumbs,\n ProductsSearchProductCategories,\n ProductsSearchPartCategories,\n ProductsSearchFilters,\n ProductsSearchFiltersStatus,\n ProductsSearchForm,\n ProductsPreviewView,\n ProductsSearchToolbar,\n ProductsSearchTable,\n ProductsSearchList,\n ProductsSearchGrid,\n ProductsSearchSelection,\n ProductsSearchNoResults,\n ProductsSearchPagination,\n CatalogActionModals,\n CatalogProductActionModals,\n CatalogProductsMobileNav,\n ProductsSearchAliasFilters,\n AliasesSearchTable,\n AliasesSearchToolbar,\n AliasActionModals,\n AliasesMobileNav,\n ProductsSearchGridHorizontal,\n];\n","import { Instance } from '../api/Instance';\nimport { SubView } from '../api/runtime/RouteData';\nimport type { ViewType } from '../api/runtime/RouteData';\n\nimport { CatalogsDataType } from '@/catalogs/api/configuration/application/CatalogsDataType';\nimport PIS from '@/common/api/PisGlobal';\nimport type { NativeElementDefinition } from '@/common/api/registerCustomElements';\nimport { defineNativeElements } from '@/common/elements/defineNativeElements';\nimport type { CatalogsComponentName as ComponentName } from '@/generated/component-names';\n\n// Shadow-DOM reduction: the catalogs wrapper tags (`pis-catalogs-instance`, the\n// route-gate `pis-catalogs-*-router-view` wrappers, `pis-catalogs-loading-indicator`) ship as NATIVE\n// custom elements, declared here as a spec table expanded by\n// common/elements/defineNativeElements.ts. Tag names, `instance-id`, and the\n// consumer DOM structure are unchanged.\n//\n// Gate semantics ported verbatim from the SFC `v-if`s: the catalogs `isReady`\n// does NOT wait on `options.isInitialized` (matches\n// `catalogs/composables/setupComponent.ts`), and the products-in-catalog views\n// read `routeData.products.subView`.\n//\n// Entry shape is load-bearing for scripts/component-registry.ts: each entry\n// must keep a literal `name:` assigned from a `ComponentName` member (regex\n// source of the shipped-tag registry), and the instance element must stay\n// first — ancestors upgrade before children resolve via closest().\n\nconst getInstanceById = (id: string): Instance | undefined =>\n PIS.Catalogs.getInstance(id) as Instance;\n\nconst isReady = (instance: Instance): boolean =>\n !!(instance.store.data.isInitialized && instance.store.data.translationsReady);\n\n// Anti-flash overlay gate: reloading over populated catalog/product lists\n// keeps the content visible for the grace period; a content-less load is\n// immediate.\nconst hasContent = (instance: Instance): boolean =>\n !!instance.store.data.catalogs?.items?.length || !!instance.store.data.products?.items?.length;\n\nexport const nativeElements: readonly NativeElementDefinition[] = defineNativeElements<\n Instance,\n ViewType,\n SubView,\n ComponentName\n>({\n idPrefix: 'pisCatalogsInstance_',\n instanceTag: 'pis-catalogs-instance',\n getInstanceById,\n isReady,\n hasContent,\n subViewOf: (rd) => rd.products.subView,\n viewDataTypes: [CatalogsDataType.Products],\n elements: [\n { kind: 'instance', name: 'pis-catalogs-instance' },\n { kind: 'view', name: 'pis-catalogs-search-router-view', view: 'catalogs' },\n { kind: 'view', name: 'pis-catalogs-products-search-router-view', view: 'products' },\n { kind: 'view', name: 'pis-catalogs-aliases-search-router-view', view: 'aliases' },\n {\n kind: 'view',\n name: 'pis-catalogs-products-search-table-router-view',\n view: 'products',\n subView: 'table',\n },\n {\n kind: 'view',\n name: 'pis-catalogs-products-search-list-router-view',\n view: 'products',\n subView: 'list',\n },\n {\n kind: 'view',\n name: 'pis-catalogs-products-search-grid-router-view',\n view: 'products',\n subView: 'grid',\n },\n {\n kind: 'loader',\n name: 'pis-catalogs-loading-indicator',\n spinnerZIndex: 2000,\n backdropZIndex: 1900,\n backdropOpacity: 0.2,\n },\n ],\n});\n","import { Accessor } from './api/Accessor';\nimport components from './components';\nimport { nativeElements } from './elements/nativeElements';\n\nimport { exposePIS, registerCatalogsAccessor } from '@/common/api/PisGlobal';\nimport { registerCustomElements } from '@/common/api/registerCustomElements';\n\nexport function registerCatalogs(): void {\n registerCatalogsAccessor(new Accessor());\n registerCustomElements(components, nativeElements);\n exposePIS();\n}\n\n// Registration is EXPLICIT (C11 follow-up): importing this module defines the\n// registerCatalogs() function but does NOT invoke it. The consumer (or the\n// aggregate registerAll()) calls registerCatalogs() to register the\n// pis-catalogs-* elements. The global pis.js build auto-registers via main.ts.\nexport { components, nativeElements };\nexport { default as PIS } from '@/common/api/PisGlobal';\nexport default components;\n\n// Type-only re-export so the per-domain declaration rollups export the shared\n// item extension surface (vite-plugin-dts only exports entry-exported symbols).\nexport type {\n TemplateItem,\n TemplateItemCustomData,\n} from '@/common/api/components/ComponentTemplateMap';\n"],"x_google_ignoreList":[25],"mappings":"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AW;QACX,OAAO;QACP,oBAAoB;QACpB,gBAAgB;QAChB,cAAc;OAChB;OACA;QACE,SAAS;QACT,WAAW;QACX,gBAAgB;OAClB;OACA;QACE,SAAS;QACT,WAAW;QACX,OAAO;QACP,gBAAgB;QAChB,cAAc;OAChB;MACF;KACF;KACA,MAAM;MACJ,WAAW;MACX,SAAS;MACT,wBAAwB;MACxB,cAAc;MACd,YAAY;MACZ,gBAAgB;MAChB,oBAAoB;KACtB;KACA,MAAM;MACJ,SAAS;MACT,wBAAwB;MACxB,YAAY;MACZ,gBAAgB;MAChB,oBAAoB;KACtB;KACA,gBAAgB;MACd,SAAS;MACT,wBAAwB;MACxB,YAAY;MACZ,gBAAgB;MAChB,oBAAoB;MACpB,UAAU;OACR,WAAW;OACX,WAAW;OACX,YAAY;OACZ,YAAY;OACZ,UAAU;QACR,aAAa;QACb,eAAe;QACf,WAAW;QACX,QAAQ;QACR,mBAAmB;QACnB,mBAAmB;OACrB;OACA,aAAa;QACX,KAAK;SACH,aAAa;SACb,eAAe;SACf,WAAW;SACX,QAAQ;SACR,mBAAmB;SACnB,mBAAmB;QACrB;QACA,KAAK;SACH,aAAa;SACb,eAAe;SACf,WAAW;SACX,QAAQ;SACR,mBAAmB;SACnB,mBAAmB;QACrB;OACF;MACF;KACF;KACA,aAAa,EACX,SAAS,GACX;IACF;IACA,SAAS,EACP,MAAM,EACJ,SAAS,GACX,EACF;GACF;GACA,SAAS,EACP,QAAQ;IACN,QAAQ,CAAC;IACT,SAAS,EACP,SAAS,GACX;IACA,OAAO;KACL,YAAY;KACZ,SAAS;KACT,SAAS;MACP;OACE,SAAS;OACT,WAAW;OACX,gBAAgB;OAChB,cAAc;MAChB;MACA;OACE,SAAS;OACT,WAAW;OACX,gBAAgB;MAClB;MACA;OACE,SAAS;OACT,gBAAgB;OAChB,cAAc;MAChB;MACA;OACE,SAAS;OACT,WAAW;OACX,OAAO;OACP,gBAAgB;OAChB,cAAc;MAChB;KACF;IACF;GACF,EACF;GACA,QAAQ,EACN,YAAY;IACV,aAAa;IACb,OAAO,CAAC,WAAW,SAAS;GAC9B,EACF;EACF,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"}
|