{"version":3,"file":"vendure-admin-ui-catalog.mjs","sources":["../../src/lib/catalog/src/providers/product-detail/replace-last.ts","../../src/lib/catalog/src/providers/product-detail/product-detail.service.ts","../../src/lib/catalog/src/components/product-options-editor/product-options-editor.component.ts","../../src/lib/catalog/src/components/product-options-editor/product-options-editor.component.html","../../src/lib/catalog/src/components/create-product-option-group-dialog/create-product-option-group-dialog.component.ts","../../src/lib/catalog/src/components/create-product-option-group-dialog/create-product-option-group-dialog.component.html","../../src/lib/catalog/src/components/create-product-variant-dialog/create-product-variant-dialog.component.ts","../../src/lib/catalog/src/components/create-product-variant-dialog/create-product-variant-dialog.component.html","../../src/lib/catalog/src/components/option-value-input/option-value-input.component.ts","../../src/lib/catalog/src/components/option-value-input/option-value-input.component.html","../../src/lib/catalog/src/components/product-variants-editor/product-variants-editor.component.ts","../../src/lib/catalog/src/components/product-variants-editor/product-variants-editor.component.html","../../src/lib/catalog/src/providers/routing/product-variants-resolver.ts","../../src/lib/catalog/src/catalog.routes.ts","../../src/lib/catalog/src/components/apply-facet-dialog/apply-facet-dialog.component.ts","../../src/lib/catalog/src/components/apply-facet-dialog/apply-facet-dialog.component.html","../../src/lib/catalog/src/components/asset-detail/asset-detail.component.ts","../../src/lib/catalog/src/components/asset-detail/asset-detail.component.html","../../src/lib/catalog/src/components/asset-list/asset-list.component.ts","../../src/lib/catalog/src/components/asset-list/asset-list.component.html","../../src/lib/catalog/src/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.ts","../../src/lib/catalog/src/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.html","../../src/lib/catalog/src/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.ts","../../src/lib/catalog/src/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.ts","../../src/lib/catalog/src/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.html","../../src/lib/catalog/src/components/collection-contents/collection-contents.component.ts","../../src/lib/catalog/src/components/collection-contents/collection-contents.component.html","../../src/lib/catalog/src/components/collection-data-table/collection-data-table.component.ts","../../src/lib/catalog/src/components/collection-data-table/collection-data-table.component.html","../../src/lib/catalog/src/components/collection-detail/collection-detail.component.ts","../../src/lib/catalog/src/components/collection-detail/collection-detail.component.html","../../src/lib/catalog/src/components/collection-list/collection-breadcrumb.pipe.ts","../../src/lib/catalog/src/components/move-collections-dialog/move-collections-dialog.component.ts","../../src/lib/catalog/src/components/move-collections-dialog/move-collections-dialog.component.html","../../src/lib/catalog/src/components/collection-list/collection-list-bulk-actions.ts","../../src/lib/catalog/src/components/collection-list/collection-list.component.ts","../../src/lib/catalog/src/components/collection-list/collection-list.component.html","../../src/lib/catalog/src/components/collection-tree/collection-tree.service.ts","../../src/lib/catalog/src/components/collection-tree/collection-tree-node.component.ts","../../src/lib/catalog/src/components/collection-tree/collection-tree-node.component.html","../../src/lib/catalog/src/components/collection-tree/array-to-tree.ts","../../src/lib/catalog/src/components/collection-tree/collection-tree.component.ts","../../src/lib/catalog/src/components/collection-tree/collection-tree.component.html","../../src/lib/catalog/src/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.ts","../../src/lib/catalog/src/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.html","../../src/lib/catalog/src/components/create-facet-value-dialog/create-facet-value-dialog.component.ts","../../src/lib/catalog/src/components/create-facet-value-dialog/create-facet-value-dialog.component.html","../../src/lib/catalog/src/components/facet-detail/facet-detail.component.ts","../../src/lib/catalog/src/components/facet-detail/facet-detail.component.html","../../src/lib/catalog/src/components/facet-list/facet-list-bulk-actions.ts","../../src/lib/catalog/src/components/facet-list/facet-list.component.ts","../../src/lib/catalog/src/components/facet-list/facet-list.component.html","../../src/lib/catalog/src/components/generate-product-variants/generate-product-variants.component.ts","../../src/lib/catalog/src/components/generate-product-variants/generate-product-variants.component.html","../../src/lib/catalog/src/components/product-variant-list/product-variant-list.component.ts","../../src/lib/catalog/src/components/product-variant-list/product-variant-list.component.html","../../src/lib/catalog/src/components/product-detail/product-detail.component.ts","../../src/lib/catalog/src/components/product-detail/product-detail.component.html","../../src/lib/catalog/src/components/product-list/product-list-bulk-actions.ts","../../src/lib/catalog/src/components/product-list/product-list.component.ts","../../src/lib/catalog/src/components/product-list/product-list.component.html","../../src/lib/catalog/src/components/variant-price-detail/variant-price-detail.component.ts","../../src/lib/catalog/src/components/variant-price-detail/variant-price-detail.component.html","../../src/lib/catalog/src/components/variant-price-strategy-detail/variant-price-strategy-detail.component.ts","../../src/lib/catalog/src/components/variant-price-strategy-detail/variant-price-strategy-detail.component.html","../../src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.ts","../../src/lib/catalog/src/components/product-variant-quick-jump/product-variant-quick-jump.component.html","../../src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.ts","../../src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.html","../../src/lib/catalog/src/components/product-variant-list/product-variant-list-bulk-actions.ts","../../src/lib/catalog/src/components/product-variants-table/product-variants-table.component.ts","../../src/lib/catalog/src/components/product-variants-table/product-variants-table.component.html","../../src/lib/catalog/src/components/update-product-option-dialog/update-product-option-dialog.component.ts","../../src/lib/catalog/src/components/update-product-option-dialog/update-product-option-dialog.component.html","../../src/lib/catalog/src/catalog.module.ts","../../src/lib/catalog/src/components/product-list/product-list.graphql.ts","../../src/lib/catalog/src/components/product-variant-detail/product-variant-detail.graphql.ts","../../src/lib/catalog/src/components/product-variant-list/product-variant-list.graphql.ts","../../src/lib/catalog/src/public_api.ts","../../src/lib/catalog/src/vendure-admin-ui-catalog.ts"],"sourcesContent":["/**\n * @description\n * Like String.prototype.replace(), but replaces the last instance\n * rather than the first.\n */\nexport function replaceLast(target: string | undefined | null, search: string, replace: string): string {\n    if (!target) {\n        return '';\n    }\n    const lastIndex = target.lastIndexOf(search);\n    if (lastIndex === -1) {\n        return target;\n    }\n    const head = target.substr(0, lastIndex);\n    const tail = target.substr(lastIndex).replace(search, replace);\n    return head + tail;\n}\n","import { Injectable } from '@angular/core';\nimport {\n    CreateProductInput,\n    CreateProductVariantInput,\n    DataService,\n    DeletionResult,\n    FacetWithValuesFragment,\n    findTranslation,\n    GetProductDetailQuery,\n    GetProductWithVariantsQuery,\n    LanguageCode,\n    UpdateProductInput,\n    UpdateProductMutation,\n    UpdateProductOptionInput,\n    UpdateProductVariantInput,\n    UpdateProductVariantsMutation,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\nimport { map, mergeMap, shareReplay, switchMap } from 'rxjs/operators';\n\nimport { CreateProductVariantsConfig } from '../../components/generate-product-variants/generate-product-variants.component';\n\nimport { replaceLast } from './replace-last';\n\n/**\n * Handles the logic for making the API calls to perform CRUD operations on a Product and its related\n * entities. This logic was extracted out of the component because it became too large and hard to follow.\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class ProductDetailService {\n    constructor(private dataService: DataService) {}\n\n    getTaxCategories() {\n        return this.dataService.settings\n            .getTaxCategories()\n            .mapSingle(data => data.taxCategories.items)\n            .pipe(shareReplay(1));\n    }\n\n    createProductWithVariants(\n        input: CreateProductInput,\n        createVariantsConfig: CreateProductVariantsConfig,\n        languageCode: LanguageCode,\n    ) {\n        const createProduct$ = this.dataService.product.createProduct(input);\n        const nonEmptyOptionGroups = createVariantsConfig.groups.filter(g => 0 < g.values.length);\n        const createOptionGroups$ = this.createProductOptionGroups(nonEmptyOptionGroups, languageCode);\n\n        return forkJoin(createProduct$, createOptionGroups$).pipe(\n            mergeMap(([{ createProduct }, optionGroups]) => {\n                const addOptionsToProduct$ = optionGroups.length\n                    ? forkJoin(\n                          optionGroups.map(optionGroup =>\n                              this.dataService.product.addOptionGroupToProduct({\n                                  productId: createProduct.id,\n                                  optionGroupId: optionGroup.id,\n                              }),\n                          ),\n                      )\n                    : of([]);\n                return addOptionsToProduct$.pipe(map(() => ({ createProduct, optionGroups })));\n            }),\n            mergeMap(({ createProduct, optionGroups }) => {\n                const variants = createVariantsConfig.variants.map(v => {\n                    const optionIds = optionGroups.length\n                        ? v.optionValues.map((optionName, index) => {\n                              const option = optionGroups[index].options.find(o => o.name === optionName);\n                              if (!option) {\n                                  throw new Error(\n                                      `Could not find a matching ProductOption \"${optionName}\" when creating variant`,\n                                  );\n                              }\n                              return option.id;\n                          })\n                        : [];\n                    return {\n                        ...v,\n                        optionIds,\n                    };\n                });\n                const options = optionGroups.map(og => og.options).reduce((flat, o) => [...flat, ...o], []);\n                return this.createProductVariants(\n                    createProduct,\n                    variants,\n                    options,\n                    languageCode,\n                    createVariantsConfig.stockLocationId,\n                );\n            }),\n        );\n    }\n\n    createProductOptionGroups(groups: Array<{ name: string; values: string[] }>, languageCode: LanguageCode) {\n        return groups.length\n            ? forkJoin(\n                  groups.map(c =>\n                      this.dataService.product\n                          .createProductOptionGroups({\n                              code: normalizeString(c.name, '-'),\n                              translations: [{ languageCode, name: c.name }],\n                              options: c.values.map(v => ({\n                                  code: normalizeString(v, '-'),\n                                  translations: [{ languageCode, name: v }],\n                              })),\n                          })\n                          .pipe(map(data => data.createProductOptionGroup)),\n                  ),\n              )\n            : of([]);\n    }\n\n    createProductVariants(\n        product: { name: string; id: string },\n        variantData: Array<{ price: number; sku: string; stock: number; optionIds: string[] }>,\n        options: Array<{ id: string; name: string }>,\n        languageCode: LanguageCode,\n        stockLocationId: string,\n    ) {\n        const variants: CreateProductVariantInput[] = variantData.map(v => {\n            const name = options.length\n                ? `${product.name} ${v.optionIds\n                      .map(id => options.find(o => o.id === id))\n                      .filter(notNullOrUndefined)\n                      .map(o => o.name)\n                      .join(' ')}`\n                : product.name;\n            return {\n                productId: product.id,\n                price: v.price,\n                sku: v.sku,\n                translations: [\n                    {\n                        languageCode,\n                        name,\n                    },\n                ],\n                stockLevels: [\n                    {\n                        stockLocationId,\n                        stockOnHand: v.stock,\n                    },\n                ],\n                optionIds: v.optionIds,\n            };\n        });\n        return this.dataService.product.createProductVariants(variants).pipe(\n            map(({ createProductVariants }) => ({\n                createProductVariants,\n                productId: product.id,\n            })),\n        );\n    }\n\n    updateProduct(updateOptions: {\n        product: NonNullable<GetProductDetailQuery['product']>;\n        languageCode: LanguageCode;\n        autoUpdate: boolean;\n        productInput?: UpdateProductInput;\n        variantsInput?: UpdateProductVariantInput[];\n    }) {\n        const { product, languageCode, autoUpdate, productInput, variantsInput } = updateOptions;\n        const updateOperations: Array<Observable<UpdateProductMutation | UpdateProductVariantsMutation>> = [];\n        const updateVariantsInput = variantsInput || [];\n\n        const variants$ = autoUpdate\n            ? this.dataService.product\n                  .getProductVariantsForProduct({}, product.id)\n                  .mapSingle(({ productVariants }) => productVariants.items)\n            : of([]);\n\n        return variants$.pipe(\n            mergeMap(variants => {\n                if (productInput) {\n                    updateOperations.push(this.dataService.product.updateProduct(productInput));\n                    const productOldName = findTranslation(product, languageCode)?.name ?? '';\n                    const productNewName = findTranslation(productInput, languageCode)?.name;\n                    if (productNewName && productOldName !== productNewName && autoUpdate) {\n                        for (const variant of variants) {\n                            const currentVariantName = findTranslation(variant, languageCode)?.name || '';\n                            let variantInput: UpdateProductVariantInput;\n                            const existingVariantInput = updateVariantsInput.find(i => i.id === variant.id);\n                            if (existingVariantInput) {\n                                variantInput = existingVariantInput;\n                            } else {\n                                variantInput = {\n                                    id: variant.id,\n                                    translations: [{ languageCode, name: currentVariantName }],\n                                };\n                                updateVariantsInput.push(variantInput);\n                            }\n                            const variantTranslation = findTranslation(variantInput, languageCode);\n                            if (variantTranslation) {\n                                if (variantTranslation.name) {\n                                    variantTranslation.name = replaceLast(\n                                        variantTranslation.name,\n                                        productOldName,\n                                        productNewName,\n                                    );\n                                } else {\n                                    // The variant translation was falsy, which occurs\n                                    // when defining the product name for a new translation\n                                    // language that had not yet been defined.\n                                    variantTranslation.name = [\n                                        productNewName,\n                                        ...variant.options.map(o => o.name),\n                                    ].join(' ');\n                                }\n                            }\n                        }\n                    }\n                }\n                if (updateVariantsInput.length) {\n                    updateOperations.push(\n                        this.dataService.product.updateProductVariants(updateVariantsInput),\n                    );\n                }\n                return forkJoin(updateOperations);\n            }),\n        );\n    }\n\n    updateProductOptions(\n        inputs: UpdateProductOptionInput[],\n        autoUpdateProductNames: boolean,\n        product: NonNullable<GetProductDetailQuery['product']>,\n        languageCode: LanguageCode,\n    ) {\n        const variants$ = autoUpdateProductNames\n            ? this.dataService.product\n                  .getProductVariantsForProduct({}, product.id)\n                  .mapSingle(({ productVariants }) => productVariants.items)\n            : of([]);\n\n        return variants$.pipe(\n            mergeMap(variants => {\n                let updateProductVariantNames$: Observable<any> = of([]);\n                if (autoUpdateProductNames) {\n                    const replacementMap = new Map<string, string>();\n\n                    for (const input of inputs) {\n                        const newOptionName = findTranslation(input, languageCode)?.name;\n                        let oldOptionName: string | undefined;\n                        for (const variant of variants) {\n                            if (oldOptionName) {\n                                continue;\n                            }\n                            if (variant.options.map(o => o.id).includes(input.id)) {\n                                if (!oldOptionName) {\n                                    oldOptionName = findTranslation(\n                                        variant.options.find(o => o.id === input.id),\n                                        languageCode,\n                                    )?.name;\n                                }\n                            }\n                        }\n                        if (oldOptionName && newOptionName) {\n                            replacementMap.set(oldOptionName, newOptionName);\n                        }\n                    }\n\n                    const variantsToUpdate: UpdateProductVariantInput[] = [];\n                    if (replacementMap.size) {\n                        const oldOptionNames = Array.from(replacementMap.keys());\n                        for (const variant of variants) {\n                            const variantName = findTranslation(variant, languageCode)?.name;\n                            if (!variantName) {\n                                continue;\n                            }\n                            if (!oldOptionNames.some(oldOptionName => variantName.includes(oldOptionName))) {\n                                continue;\n                            }\n                            const updatedVariantName = oldOptionNames.reduce(\n                                (name, oldOptionName) =>\n                                    replaceLast(name, oldOptionName, replacementMap.get(oldOptionName)!),\n                                variantName,\n                            );\n                            variantsToUpdate.push({\n                                id: variant.id,\n                                translations: [\n                                    {\n                                        languageCode,\n                                        name: updatedVariantName,\n                                    },\n                                ],\n                            });\n                        }\n                    }\n                    if (variantsToUpdate.length) {\n                        updateProductVariantNames$ =\n                            this.dataService.product.updateProductVariants(variantsToUpdate);\n                    } else {\n                        updateProductVariantNames$ = of([]);\n                    }\n                }\n                return forkJoin(\n                    inputs.map(input => this.dataService.product.updateProductOption(input)),\n                ).pipe(mergeMap(() => updateProductVariantNames$));\n            }),\n        );\n    }\n\n    deleteProductVariant(id: string, productId: string) {\n        return this.dataService.product.deleteProductVariant(id).pipe(\n            switchMap(result => {\n                if (result.deleteProductVariant.result === DeletionResult.DELETED) {\n                    return this.dataService.product.getProduct(productId).single$;\n                } else {\n                    return throwError(result.deleteProductVariant.message);\n                }\n            }),\n        );\n    }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    BaseDetailComponent,\n    createUpdatedTranslatable,\n    CustomFieldConfig,\n    DataService,\n    findTranslation,\n    GetProductVariantOptionsQuery,\n    LanguageCode,\n    NotificationService,\n    Permission,\n    PermissionsService,\n    ProductOptionFragment,\n    ProductOptionGroupFragment,\n    ServerConfigService,\n    TranslationOf,\n    UpdateProductOptionGroupInput,\n    UpdateProductOptionInput,\n} from '@vendure/admin-ui/core';\nimport { combineLatest, forkJoin, Observable } from 'rxjs';\nimport { map, mergeMap, take, tap } from 'rxjs/operators';\n\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\n\ntype ProductWithOptions = NonNullable<GetProductVariantOptionsQuery['product']>;\n\n@Component({\n    selector: 'vdr-product-options-editor',\n    templateUrl: './product-options-editor.component.html',\n    styleUrls: ['./product-options-editor.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ProductOptionsEditorComponent extends BaseDetailComponent<ProductWithOptions> implements OnInit {\n    detailForm: UntypedFormGroup;\n    optionGroups$: Observable<ProductWithOptions['optionGroups']>;\n    languageCode$: Observable<LanguageCode>;\n    availableLanguages$: Observable<LanguageCode[]>;\n    optionGroupCustomFields: CustomFieldConfig[];\n    optionCustomFields: CustomFieldConfig[];\n    autoUpdateVariantNames = true;\n    paginationSettings: { [groupId: string]: { currentPage: number; itemsPerPage: number } } = {};\n    readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\n\n    constructor(\n        protected route: ActivatedRoute,\n        protected router: Router,\n        protected serverConfigService: ServerConfigService,\n        protected dataService: DataService,\n        protected permissionsService: PermissionsService,\n        private productDetailService: ProductDetailService,\n        private formBuilder: UntypedFormBuilder,\n        private changeDetector: ChangeDetectorRef,\n        private notificationService: NotificationService,\n    ) {\n        super(route, router, serverConfigService, dataService, permissionsService);\n        this.optionGroupCustomFields = this.getCustomFieldConfig('ProductOptionGroup');\n        this.optionCustomFields = this.getCustomFieldConfig('ProductOption');\n    }\n\n    ngOnInit(): void {\n        this.optionGroups$ = this.route.snapshot.data.entity.pipe(\n            map((product: ProductWithOptions) => product.optionGroups),\n            tap((optionGroups: ProductWithOptions['optionGroups']) => {\n                for (const group of optionGroups) {\n                    this.paginationSettings[group.id] = {\n                        currentPage: 1,\n                        itemsPerPage: 10,\n                    };\n                }\n            }),\n        );\n        this.detailForm = new UntypedFormGroup({\n            optionGroups: new UntypedFormArray([]),\n        });\n        super.init();\n    }\n\n    getOptionGroups(): UntypedFormGroup[] {\n        const optionGroups = this.detailForm.get('optionGroups');\n        return (optionGroups as UntypedFormArray).controls as UntypedFormGroup[];\n    }\n\n    getOptions(optionGroup: UntypedFormGroup): UntypedFormGroup[] {\n        const options = optionGroup.get('options');\n        return (options as UntypedFormArray).controls as UntypedFormGroup[];\n    }\n\n    save() {\n        if (this.detailForm.invalid || this.detailForm.pristine) {\n            return;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const $product = this.dataService.product.getProduct(this.id).mapSingle(data => data.product!);\n        combineLatest(this.entity$, this.languageCode$, $product)\n            .pipe(\n                take(1),\n                mergeMap(([{ optionGroups }, languageCode, product]) => {\n                    const updateOperations: Array<Observable<any>> = [];\n                    const updatedProductOptionInputs: UpdateProductOptionInput[] = [];\n                    for (const optionGroupForm of this.getOptionGroups()) {\n                        if (optionGroupForm.dirty) {\n                            const optionGroupEntity = optionGroups.find(\n                                og => og.id === optionGroupForm.value.id,\n                            );\n                            if (optionGroupEntity) {\n                                const input = this.getUpdatedOptionGroup(\n                                    optionGroupEntity,\n                                    optionGroupForm,\n                                    languageCode,\n                                );\n                                updateOperations.push(\n                                    this.dataService.product.updateProductOptionGroup(input),\n                                );\n                            }\n                        }\n\n                        for (const optionForm of this.getOptions(optionGroupForm)) {\n                            if (optionForm.dirty) {\n                                const optionGroup = optionGroups\n                                    .find(og => og.id === optionGroupForm.value.id)\n                                    ?.options.find(o => o.id === optionForm.value.id);\n                                if (optionGroup) {\n                                    const input = this.getUpdatedOption(\n                                        optionGroup,\n                                        optionForm,\n                                        languageCode,\n                                    );\n                                    updatedProductOptionInputs.push(input);\n                                }\n                            }\n                        }\n                    }\n                    if (updatedProductOptionInputs.length) {\n                        updateOperations.push(\n                            this.productDetailService.updateProductOptions(\n                                updatedProductOptionInputs,\n                                this.autoUpdateVariantNames,\n                                product,\n                                languageCode,\n                            ),\n                        );\n                    }\n                    return forkJoin(updateOperations);\n                }),\n            )\n            .subscribe(\n                () => {\n                    this.detailForm.markAsPristine();\n                    this.changeDetector.markForCheck();\n                    this.notificationService.success(_('common.notify-update-success'), {\n                        entity: 'ProductOptionGroup',\n                    });\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'ProductOptionGroup',\n                    });\n                },\n            );\n    }\n\n    private getUpdatedOptionGroup(\n        optionGroup: ProductOptionGroupFragment,\n        optionGroupFormGroup: UntypedFormGroup,\n        languageCode: LanguageCode,\n    ): UpdateProductOptionGroupInput {\n        const input = createUpdatedTranslatable({\n            translatable: optionGroup,\n            updatedFields: optionGroupFormGroup.value,\n            customFieldConfig: this.optionGroupCustomFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: optionGroup.name || '',\n            },\n        });\n        return input;\n    }\n\n    private getUpdatedOption(\n        option: ProductOptionFragment,\n        optionFormGroup: UntypedFormGroup,\n        languageCode: LanguageCode,\n    ): UpdateProductOptionInput {\n        const input = createUpdatedTranslatable({\n            translatable: option,\n            updatedFields: optionFormGroup.value,\n            customFieldConfig: this.optionCustomFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: option.name || '',\n            },\n        });\n        return input;\n    }\n\n    protected setFormValues(entity: ProductWithOptions, languageCode: LanguageCode): void {\n        const groupsForm = this.detailForm.get('optionGroups') as UntypedFormArray;\n        for (const optionGroup of entity.optionGroups) {\n            const groupTranslation = findTranslation(optionGroup, languageCode);\n\n            const groupForm = this.setOptionGroupForm(optionGroup, groupsForm, groupTranslation);\n            this.setCustomFieldsForm(this.optionGroupCustomFields, groupForm, optionGroup, groupTranslation);\n\n            let optionsForm = groupForm.get('options') as UntypedFormArray;\n            if (!optionsForm) {\n                optionsForm = this.formBuilder.array([]);\n                groupForm.addControl('options', optionsForm);\n            }\n            for (const option of optionGroup.options) {\n                const optionTranslation = findTranslation(option, languageCode);\n                const optionForm = this.setOptionForm(option, optionsForm, optionTranslation);\n\n                this.setCustomFieldsForm(this.optionCustomFields, optionForm, option, optionTranslation);\n            }\n        }\n    }\n\n    protected setCustomFieldsForm<\n        T extends ProductWithOptions['optionGroups'][0] | ProductWithOptions['optionGroups'][0]['options'][0],\n    >(\n        customFields: CustomFieldConfig[],\n        formGroup: UntypedFormGroup,\n        entity: T,\n        currentTranslation?: TranslationOf<T>,\n    ) {\n        if (customFields.length) {\n            let customValueFieldsGroup = formGroup.get(['customFields']);\n            if (!customValueFieldsGroup) {\n                customValueFieldsGroup = this.formBuilder.group(\n                    customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\n                );\n                formGroup.addControl('customFields', customValueFieldsGroup);\n            }\n            this.setCustomFieldFormValues(customFields, customValueFieldsGroup, entity, currentTranslation);\n        }\n    }\n\n    protected setOptionGroupForm(\n        entity: ProductWithOptions['optionGroups'][0],\n        groupsForm: UntypedFormArray,\n        currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]>,\n    ) {\n        const group = {\n            id: entity.id,\n            createdAt: entity.createdAt,\n            updatedAt: entity.updatedAt,\n            code: entity.code,\n            name: currentTranslation?.name ?? '',\n        };\n        let groupForm = groupsForm.controls.find(control => control.value.id === entity.id) as\n            | UntypedFormGroup\n            | undefined;\n        if (groupForm) {\n            groupForm.get('id')?.setValue(group.id);\n            groupForm.get('code')?.setValue(group.code);\n            groupForm.get('name')?.setValue(group.name);\n            groupForm.get('createdAt')?.setValue(group.createdAt);\n            groupForm.get('updatedAt')?.setValue(group.updatedAt);\n        } else {\n            groupForm = this.formBuilder.group(group);\n            groupsForm.push(groupForm);\n        }\n        return groupForm;\n    }\n\n    protected setOptionForm(\n        entity: ProductWithOptions['optionGroups'][0]['options'][0],\n        optionsForm: UntypedFormArray,\n        currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]['options'][0]>,\n    ) {\n        const group = {\n            id: entity.id,\n            createdAt: entity.createdAt,\n            updatedAt: entity.updatedAt,\n            code: entity.code,\n            name: currentTranslation?.name ?? '',\n        };\n        let optionForm = optionsForm.controls.find(control => control.value.id === entity.id) as\n            | UntypedFormGroup\n            | undefined;\n        if (optionForm) {\n            optionForm.get('id')?.setValue(group.id);\n            optionForm.get('code')?.setValue(group.code);\n            optionForm.get('name')?.setValue(group.name);\n            optionForm.get('createdAt')?.setValue(group.createdAt);\n            optionForm.get('updatedAt')?.setValue(group.updatedAt);\n        } else {\n            optionForm = this.formBuilder.group(group);\n            optionsForm.push(optionForm);\n        }\n        return optionForm;\n    }\n}\n","<vdr-page-header>\n    <vdr-page-title></vdr-page-title>\n    <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\n</vdr-page-header>\n<vdr-page-body>\n    <vdr-page-block>\n        <vdr-action-bar>\n            <vdr-ab-left>\n                <vdr-language-selector\n                    [availableLanguageCodes]=\"availableLanguages$ | async\"\n                    [currentLanguageCode]=\"languageCode$ | async\"\n                    (languageCodeChange)=\"setLanguage($event)\"\n                ></vdr-language-selector>\n            </vdr-ab-left>\n\n            <vdr-ab-right>\n                <div class=\"flex center\">\n                    <div class=\"mr-2\">\n                        <clr-checkbox-wrapper>\n                            <input\n                                clrCheckbox\n                                type=\"checkbox\"\n                                id=\"auto-update\"\n                                [(ngModel)]=\"autoUpdateVariantNames\"\n                            />\n                            <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\n                        </clr-checkbox-wrapper>\n                    </div>\n                    <button\n                        *vdrIfPermissions=\"updatePermission\"\n                        class=\"btn btn-primary\"\n                        (click)=\"save()\"\n                        [disabled]=\"detailForm.pristine || detailForm.invalid\"\n                    >\n                        {{ 'common.update' | translate }}\n                    </button>\n                </div>\n            </vdr-ab-right>\n        </vdr-action-bar>\n    </vdr-page-block>\n    <vdr-page-block>\n        <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\n            <div formGroupName=\"optionGroups\">\n                <vdr-card\n                    *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\n                    [formArrayName]=\"i\"\n                    [title]=\"optionGroup.value.code\"\n                >\n                    <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\n                    <div class=\"form-grid\">\n                        <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n                            <input\n                                [id]=\"'name-' + i\"\n                                type=\"text\"\n                                formControlName=\"name\"\n                                [readonly]=\"!(updatePermission | hasPermission)\"\n                            />\n                        </vdr-form-field>\n                        <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\n                            <input\n                                [id]=\"'code-' + i\"\n                                type=\"text\"\n                                [readonly]=\"!(updatePermission | hasPermission)\"\n                                formControlName=\"code\"\n                            />\n                        </vdr-form-field>\n                    </div>\n                    <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\n                        <vdr-tabbed-custom-fields\n                            entityName=\"ProductOptionGroup\"\n                            [customFields]=\"optionGroupCustomFields\"\n                            [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                        ></vdr-tabbed-custom-fields>\n                    </ng-container>\n\n                    <vdr-data-table-2\n                        id=\"edit-options-list\"\n                        *ngIf=\"getOptions(optionGroup) as options\"\n                        [items]=\"options\"\n                        [trackByPath]=\"'value.id'\"\n                        [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\n                        [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\n                        (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\n                        (itemsPerPageChange)=\"paginationSettings[optionGroup.value.id].itemsPerPage = $event\"\n                        [totalItems]=\"options.length\"\n                    >\n                        <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n                            <ng-template let-optionControl=\"item\">\n                                {{ optionControl.value.id }}\n                            </ng-template>\n                        </vdr-dt2-column>\n                        <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\n                            <ng-template let-optionControl=\"item\">\n                                {{ optionControl.value.createdAt | localeDate : 'short' }}\n                            </ng-template>\n                        </vdr-dt2-column>\n                        <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\n                            <ng-template let-optionControl=\"item\">\n                                {{ optionControl.value.updatedAt | localeDate : 'short' }}\n                            </ng-template>\n                        </vdr-dt2-column>\n                        <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\n                            <ng-template let-optionControl=\"item\">\n                                <input\n                                    type=\"text\"\n                                    [formControl]=\"optionControl.get('name')\"\n                                    [readonly]=\"!(updatePermission | hasPermission)\"\n                                />\n                            </ng-template>\n                        </vdr-dt2-column>\n                        <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\">\n                            <ng-template let-optionControl=\"item\">\n                                <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\n                            </ng-template>\n                        </vdr-dt2-column>\n                        <vdr-dt2-column\n                            [heading]=\"'common.custom-fields' | translate\" id=\"custom-fields\"\n                            [hiddenByDefault]=\"optionCustomFields.length === 0\"\n                        >\n                            <ng-template let-optionControl=\"item\">\n                                <vdr-tabbed-custom-fields\n                                    entityName=\"ProductOption\"\n                                    [customFields]=\"optionCustomFields\"\n                                    [compact]=\"true\"\n                                    [customFieldsFormGroup]=\"optionControl.get('customFields')\"\n                                    [readonly]=\"!(updatePermission | hasPermission)\"\n                                ></vdr-tabbed-custom-fields>\n                            </ng-template>\n                        </vdr-dt2-column>\n                    </vdr-data-table-2>\n                </vdr-card>\n            </div>\n        </form>\n    </vdr-page-block>\n</vdr-page-body>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport {\n    CreateProductOptionGroupInput,\n    Dialog,\n    findTranslation,\n    GetProductVariantOptionsQuery,\n    LanguageCode,\n    ServerConfigService,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\n\n@Component({\n    selector: 'vdr-create-product-option-group-dialog',\n    templateUrl: './create-product-option-group-dialog.component.html',\n    styleUrls: ['./create-product-option-group-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CreateProductOptionGroupDialogComponent implements Dialog<CreateProductOptionGroupInput> {\n    resolveWith: (result?: CreateProductOptionGroupInput) => void;\n    languageCode: LanguageCode;\n    form = this.formBuilder.group({\n        name: ['', Validators.required],\n        code: ['', Validators.required],\n    });\n    constructor(private formBuilder: FormBuilder) {}\n\n    updateCode() {\n        const nameControl = this.form.get('name');\n        const codeControl = this.form.get('code');\n        if (nameControl && codeControl && codeControl.pristine) {\n            codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\n        }\n    }\n\n    confirm() {\n        const { name, code } = this.form.value;\n        if (!name || !code) {\n            return;\n        }\n        this.resolveWith({\n            code,\n            options: [],\n            translations: [{ languageCode: this.languageCode, name }],\n        });\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.create-product-option-group' | translate }}\n</ng-template>\n<div class=\"form-grid\" [formGroup]=\"form\">\n    <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n        <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\n    </vdr-form-field>\n    <vdr-form-field\n        [label]=\"'common.code' | translate\"\n        for=\"code\"\n    >\n        <input\n            id=\"code\"\n            type=\"text\"\n            formControlName=\"code\"\n        />\n    </vdr-form-field>\n</div>\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n        {{ 'common.confirm' | translate }}\n    </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl, FormRecord, Validators } from '@angular/forms';\nimport {\n    CreateProductVariantInput,\n    CurrencyCode,\n    Dialog,\n    GetProductVariantOptionsQuery,\n} from '@vendure/admin-ui/core';\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\n\n@Component({\n    selector: 'vdr-create-product-variant-dialog',\n    templateUrl: './create-product-variant-dialog.component.html',\n    styleUrls: ['./create-product-variant-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CreateProductVariantDialogComponent implements Dialog<CreateProductVariantInput>, OnInit {\n    resolveWith: (result?: CreateProductVariantInput) => void;\n    product: NonNullable<GetProductVariantOptionsQuery['product']>;\n    form = this.formBuilder.group({\n        name: ['', Validators.required],\n        sku: [''],\n        price: [''],\n        options: this.formBuilder.record<string>({}),\n    });\n    existingVariant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number] | undefined;\n    currencyCode: CurrencyCode;\n\n    constructor(private formBuilder: FormBuilder) {}\n\n    ngOnInit() {\n        this.currencyCode = this.product.variants[0]?.currencyCode;\n        for (const optionGroup of this.product.optionGroups) {\n            (this.form.get('options') as FormRecord).addControl(\n                optionGroup.code,\n                new FormControl('', Validators.required),\n            );\n        }\n        const optionsRecord = this.form.get('options') as FormRecord;\n        optionsRecord.valueChanges.subscribe(value => {\n            const nameControl = this.form.get('name');\n            const allNull = Object.values(value).every(v => v == null);\n            if (!allNull && value && nameControl && !nameControl.dirty) {\n                const name = Object.entries(value)\n                    .map(\n                        ([groupCode, optionId]) =>\n                            this.product.optionGroups\n                                .find(og => og.code === groupCode)\n                                ?.options.find(o => o.id === optionId)?.name,\n                    )\n                    .join(' ');\n                nameControl.setValue(`${this.product.name} ${name}`);\n            }\n            const allSelected = Object.values(value).every(v => v != null);\n            if (allSelected) {\n                this.existingVariant = this.product.variants.find(v =>\n                    Object.entries(value).every(\n                        ([groupCode, optionId]) =>\n                            v.options.find(o => o.groupId === this.getGroupIdFromCode(groupCode))?.id ===\n                            optionId,\n                    ),\n                );\n            }\n        });\n    }\n\n    confirm() {\n        const { name, sku, options, price } = this.form.value;\n        if (!name || !options || price == null) {\n            return;\n        }\n\n        const optionIds = Object.values(options).filter(notNullOrUndefined);\n        this.resolveWith({\n            productId: this.product.id,\n            sku: sku || '',\n            price: Number(price),\n            optionIds,\n            translations: [\n                {\n                    languageCode: this.product.languageCode,\n                    name,\n                },\n            ],\n        });\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n\n    private getGroupCodeFromId(id: string): string {\n        return this.product.optionGroups.find(og => og.id === id)?.code ?? '';\n    }\n\n    private getGroupIdFromCode(code: string): string {\n        return this.product.optionGroups.find(og => og.code === code)?.id ?? '';\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.create-product-variant' | translate }}\n</ng-template>\n<form [formGroup]=\"form\">\n    <div formGroupName=\"options\" class=\"form-grid\">\n        <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\n            <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\n                bindValue=\"id\" appendTo=\"body\">\n            </ng-select>\n        </vdr-form-field>\n        <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\n            class=\"form-grid-span\">\n            <clr-alert-item>\n                <span class=\"alert-text\">\n                    {{ 'catalog.cannot-create-variants-without-options' | translate }}\n                </span>\n            </clr-alert-item>\n        </clr-alert>\n    </div>\n    <div *ngIf=\"existingVariant\" class=\"mt-2\">\n        <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\n            <clr-alert-item>\n                <span class=\"alert-text\">\n                    {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\n                    existingVariant.sku\n                    }})\n                </span>\n            </clr-alert-item>\n        </clr-alert>\n    </div>\n    <div class=\"form-grid mt-2\">\n        <vdr-form-field [label]=\"'common.name' | translate\">\n            <input type=\"text\" formControlName=\"name\" />\n        </vdr-form-field>\n        <vdr-form-field [label]=\"'catalog.sku' | translate\">\n            <input type=\"text\" formControlName=\"sku\" />\n        </vdr-form-field>\n        <vdr-form-field [label]=\"'catalog.price' | translate\">\n            <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\n        </vdr-form-field>\n    </div>\n</form>\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\n        [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\n        {{ 'common.confirm' | translate }}\n    </button>\n</ng-template>","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    Provider,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { unique } from '@vendure/common/lib/unique';\n\nexport const OPTION_VALUE_INPUT_VALUE_ACCESSOR: Provider = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => OptionValueInputComponent),\n    multi: true,\n};\n\ninterface Option {\n    id?: string;\n    name: string;\n    locked: boolean;\n}\n\n@Component({\n    selector: 'vdr-option-value-input',\n    templateUrl: './option-value-input.component.html',\n    styleUrls: ['./option-value-input.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Default,\n    providers: [OPTION_VALUE_INPUT_VALUE_ACCESSOR],\n    standalone: false\n})\nexport class OptionValueInputComponent implements ControlValueAccessor {\n    @Input() groupName = '';\n    @ViewChild('textArea', { static: true }) textArea: ElementRef<HTMLTextAreaElement>;\n    @ViewChildren('editNameInput', { read: ElementRef }) nameInputs: QueryList<ElementRef>;\n    @Input() options: Option[];\n    @Output() add = new EventEmitter<Option>();\n    @Output() remove = new EventEmitter<Option>();\n    @Output() edit = new EventEmitter<{ index: number; option: Option }>();\n    @Input() disabled = false;\n    input = '';\n    isFocussed = false;\n    lastSelected = false;\n    formValue: Option[];\n    editingIndex = -1;\n    onChangeFn: (value: any) => void;\n    onTouchFn: (value: any) => void;\n\n    get optionValues(): Option[] {\n        return this.formValue ?? this.options ?? [];\n    }\n\n    constructor(private changeDetector: ChangeDetectorRef) {}\n\n    registerOnChange(fn: any): void {\n        this.onChangeFn = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n        this.onTouchFn = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this.changeDetector.markForCheck();\n    }\n\n    writeValue(obj: any): void {\n        this.formValue = obj || [];\n    }\n\n    focus() {\n        this.textArea.nativeElement.focus();\n    }\n\n    editName(index: number, event: MouseEvent) {\n        const optionValue = this.optionValues[index];\n        if (!optionValue.locked && !optionValue.id) {\n            event.cancelBubble = true;\n            this.editingIndex = index;\n            const input = this.nameInputs.get(index)?.nativeElement;\n            setTimeout(() => input?.focus());\n        }\n    }\n\n    updateOption(index: number, event: InputEvent) {\n        const optionValue = this.optionValues[index];\n        const newName = (event.target as HTMLInputElement).value;\n        if (optionValue) {\n            if (newName) {\n                optionValue.name = newName;\n                this.edit.emit({ index, option: optionValue });\n            }\n            this.editingIndex = -1;\n        }\n    }\n\n    removeOption(option: Option) {\n        if (!option.locked) {\n            if (this.formValue) {\n                this.formValue = this.formValue?.filter(o => o.name !== option.name);\n                this.onChangeFn(this.formValue);\n            } else {\n                this.remove.emit(option);\n            }\n        }\n    }\n\n    handleKey(event: KeyboardEvent) {\n        switch (event.key) {\n            case ',':\n            case 'Enter':\n                this.addOptionValue();\n                event.preventDefault();\n                break;\n            case 'Backspace':\n                if (this.lastSelected) {\n                    this.removeLastOption();\n                    this.lastSelected = false;\n                } else if (this.input === '') {\n                    this.lastSelected = true;\n                }\n                break;\n            default:\n                this.lastSelected = false;\n        }\n    }\n\n    handleBlur() {\n        this.isFocussed = false;\n        this.addOptionValue();\n    }\n\n    private addOptionValue() {\n        const options = this.parseInputIntoOptions(this.input).filter(option => {\n            // do not add an option with the same name\n            // as an existing option\n            const existing = this.options ?? this.formValue;\n            return !existing?.find(o => o?.name === option.name);\n        });\n        if (!this.formValue && this.options) {\n            for (const option of options) {\n                this.add.emit(option);\n            }\n        } else {\n            this.formValue = unique([...this.formValue, ...options]);\n            this.onChangeFn(this.formValue);\n        }\n        this.input = '';\n    }\n\n    private parseInputIntoOptions(input: string): Option[] {\n        return input\n            .split(/[,\\n]/)\n            .map(s => s.trim())\n            .filter(s => s !== '')\n            .map(s => ({ name: s, locked: false }));\n    }\n\n    private removeLastOption() {\n        if (this.optionValues.length) {\n            const option = this.optionValues[this.optionValues.length - 1];\n            this.removeOption(option);\n        }\n    }\n}\n","<div class=\"input-wrapper\" [class.focus]=\"isFocussed\" (click)=\"textArea.focus()\">\n    <div class=\"chips\" *ngIf=\"0 < optionValues.length\">\n        <vdr-chip\n            *ngFor=\"let option of optionValues; last as isLast; index as i\"\n            [icon]=\"option.locked ? 'lock' : 'times'\"\n            [class.selected]=\"isLast && lastSelected\"\n            [class.locked]=\"option.locked\"\n            [colorFrom]=\"groupName\"\n            (iconClick)=\"removeOption(option)\"\n        >\n            <span [hidden]=\"editingIndex !== i\">\n                <input\n                    #editNameInput\n                    type=\"text\"\n                    [ngModel]=\"option.name\"\n                    (blur)=\"updateOption(i, $event)\"\n                    (click)=\"$event.cancelBubble = true\"\n                />\n            </span>\n            <span\n                class=\"option-name\"\n                [class.editable]=\"!option.locked && !option.id\"\n                (click)=\"editName(i, $event)\" [hidden]=\"editingIndex === i\">{{ option.name }}</span>\n        </vdr-chip>\n    </div>\n    <textarea\n        #textArea\n        (keyup)=\"handleKey($event)\"\n        (focus)=\"isFocussed = true\"\n        (blur)=\"handleBlur()\"\n        [(ngModel)]=\"input\"\n        [disabled]=\"disabled\"\n    ></textarea>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    CurrencyCode,\n    DataService,\n    DeactivateAware,\n    DeletionResult,\n    getDefaultUiLanguage,\n    GetProductVariantOptionsQuery,\n    LanguageCode,\n    ModalService,\n    NotificationService,\n    SelectionManager,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { unique } from '@vendure/common/lib/unique';\nimport { EMPTY, Observable, Subject } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\nimport { CreateProductOptionGroupDialogComponent } from '../create-product-option-group-dialog/create-product-option-group-dialog.component';\nimport { CreateProductVariantDialogComponent } from '../create-product-variant-dialog/create-product-variant-dialog.component';\n\nexport class GeneratedVariant {\n    isDefault: boolean;\n    options: Array<{ name: string; id?: string }>;\n    productVariantId?: string;\n    enabled: boolean;\n    existing: boolean;\n    sku: string;\n    price: number;\n    stock: number;\n\n    constructor(config: Partial<GeneratedVariant>) {\n        for (const key of Object.keys(config)) {\n            this[key] = config[key];\n        }\n    }\n}\n\ninterface OptionGroupUiModel {\n    id?: string;\n    isNew: boolean;\n    name: string;\n    locked: boolean;\n    values: Array<{\n        id: string;\n        name: string;\n        locked: boolean;\n    }>;\n}\n\n@Component({\n    selector: 'vdr-product-variants-editor',\n    templateUrl: './product-variants-editor.component.html',\n    styleUrls: ['./product-variants-editor.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Default,\n    standalone: false\n})\nexport class ProductVariantsEditorComponent implements OnInit, DeactivateAware {\n    formValueChanged = false;\n    optionsChanged = false;\n    optionGroups: OptionGroupUiModel[];\n    product: NonNullable<GetProductVariantOptionsQuery['product']>;\n    variants$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['variants']>;\n    optionGroups$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups']>;\n    totalItems$: Observable<number>;\n    currencyCode: CurrencyCode;\n    itemsPerPage = 100;\n    currentPage = 1;\n    searchTermControl = new FormControl('');\n    selectionManager = new SelectionManager<any>({\n        multiSelect: true,\n        itemsAreEqual: (a, b) => a.id === b.id,\n        additiveMode: true,\n    });\n    optionsToAddToVariant: {\n        [variantId: string]: { [groupId: string]: string };\n    } = {};\n    private refresh$ = new Subject<void>();\n    private languageCode: LanguageCode;\n\n    constructor(\n        private route: ActivatedRoute,\n        private dataService: DataService,\n        private productDetailService: ProductDetailService,\n        private notificationService: NotificationService,\n        private modalService: ModalService,\n        private changeDetector: ChangeDetectorRef,\n    ) {}\n\n    ngOnInit() {\n        this.languageCode =\n            (this.route.snapshot.paramMap.get('lang') as LanguageCode) || getDefaultUiLanguage();\n        this.dataService.settings.getActiveChannel().single$.subscribe(data => {\n            this.currencyCode = data.activeChannel.defaultCurrencyCode;\n        });\n\n        const product$ = this.refresh$.pipe(\n            switchMap(() =>\n                this.dataService.product\n                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                    .getProductVariantsOptions(this.route.parent?.snapshot.paramMap.get('id')!)\n                    .mapSingle(data => data.product),\n            ),\n            startWith(this.route.snapshot.data.product),\n        );\n\n        this.variants$ = product$.pipe(\n            switchMap(product =>\n                this.searchTermControl.valueChanges.pipe(\n                    startWith(''),\n                    map(term =>\n                        term\n                            ? product.variants.filter(v => v.name.toLowerCase().includes(term.toLowerCase()))\n                            : product.variants,\n                    ),\n                ),\n            ),\n        );\n        this.optionGroups$ = product$.pipe(map(product => product.optionGroups));\n        this.totalItems$ = this.variants$.pipe(map(variants => variants.length));\n\n        product$.subscribe(p => {\n            this.product = p;\n            const allUsedOptionIds = p.variants.map(v => v.options.map(option => option.id)).flat();\n            const allUsedOptionGroupIds = p.variants.map(v => v.options.map(option => option.groupId)).flat();\n            this.optionGroups = p.optionGroups.map(og => ({\n                id: og.id,\n                isNew: false,\n                name: og.name,\n                locked: allUsedOptionGroupIds.includes(og.id),\n                values: og.options.map(o => ({\n                    id: o.id,\n                    name: o.name,\n                    locked: allUsedOptionIds.includes(o.id),\n                })),\n            }));\n        });\n    }\n\n    setItemsPerPage(itemsPerPage: number) {\n        this.itemsPerPage = itemsPerPage;\n        this.currentPage = 1;\n    }\n\n    setPageNumber(page: number) {\n        this.currentPage = page;\n    }\n\n    onFormChanged(variantInfo: GeneratedVariant) {\n        this.formValueChanged = true;\n        variantInfo.enabled = true;\n    }\n\n    canDeactivate(): boolean {\n        return !this.formValueChanged;\n    }\n\n    addOptionGroup() {\n        this.modalService\n            .fromComponent(CreateProductOptionGroupDialogComponent, {\n                locals: {\n                    languageCode: this.languageCode,\n                },\n            })\n            .pipe(\n                switchMap(result => {\n                    if (result) {\n                        return this.dataService.product.createProductOptionGroups(result).pipe(\n                            switchMap(({ createProductOptionGroup }) =>\n                                this.dataService.product.addOptionGroupToProduct({\n                                    optionGroupId: createProductOptionGroup.id,\n                                    productId: this.product.id,\n                                }),\n                            ),\n                        );\n                    } else {\n                        return EMPTY;\n                    }\n                }),\n            )\n            .subscribe(result => {\n                this.notificationService.success(_('common.notify-create-success'), {\n                    entity: 'ProductOptionGroup',\n                });\n                this.refresh$.next();\n                this.changeDetector.markForCheck();\n            });\n    }\n\n    removeOptionGroup(\n        optionGroup: NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups'][number],\n    ) {\n        const id = optionGroup.id;\n        const usedByVariantsCount = this.product.variants.filter(v =>\n            v.options.map(o => o.groupId).includes(id),\n        ).length;\n        this.modalService\n            .dialog({\n                title: _('catalog.confirm-delete-product-option-group'),\n                body: usedByVariantsCount ? _('catalog.confirm-delete-product-option-group-body') : '',\n                translationVars: { name: optionGroup.name, count: usedByVariantsCount },\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(val => {\n                    if (val) {\n                        return this.dataService.product.removeOptionGroupFromProduct({\n                            optionGroupId: id,\n                            productId: this.product.id,\n                            force: true,\n                        });\n                    } else {\n                        return EMPTY;\n                    }\n                }),\n            )\n            .subscribe(({ removeOptionGroupFromProduct }) => {\n                if (removeOptionGroupFromProduct.__typename === 'Product') {\n                    this.notificationService.success(_('common.notify-delete-success'), {\n                        entity: 'ProductOptionGroup',\n                    });\n                    this.refresh$.next();\n                } else if (removeOptionGroupFromProduct.__typename === 'ProductOptionInUseError') {\n                    this.notificationService.error(removeOptionGroupFromProduct.message ?? '');\n                }\n            });\n    }\n\n    addOption(index: number, optionName: string) {\n        const group = this.optionGroups[index];\n        if (group && group.id) {\n            this.dataService.product\n                .addOptionToGroup({\n                    productOptionGroupId: group.id,\n                    code: normalizeString(optionName, '-'),\n                    translations: [{ name: optionName, languageCode: this.languageCode }],\n                })\n                .subscribe(({ createProductOption }) => {\n                    this.notificationService.success(_('common.notify-create-success'), {\n                        entity: 'ProductOption',\n                    });\n                    this.refresh$.next();\n                });\n        }\n    }\n\n    removeOption(index: number, { id, name }: { id: string; name: string }) {\n        const optionGroup = this.optionGroups[index];\n        if (optionGroup) {\n            this.modalService\n                .dialog({\n                    title: _('catalog.confirm-delete-product-option'),\n                    translationVars: { name },\n                    buttons: [\n                        { type: 'secondary', label: _('common.cancel') },\n                        { type: 'danger', label: _('common.delete'), returnValue: true },\n                    ],\n                })\n                .pipe(\n                    switchMap(val => {\n                        if (val) {\n                            return this.dataService.product.deleteProductOption(id);\n                        } else {\n                            return EMPTY;\n                        }\n                    }),\n                )\n                .subscribe(({ deleteProductOption }) => {\n                    if (deleteProductOption.result === DeletionResult.DELETED) {\n                        this.notificationService.success(_('common.notify-delete-success'), {\n                            entity: 'ProductOption',\n                        });\n                        optionGroup.values = optionGroup.values.filter(v => v.id !== id);\n                        this.refresh$.next();\n                    } else {\n                        this.notificationService.error(deleteProductOption.message ?? '');\n                    }\n                });\n        }\n    }\n\n    setOptionToAddToVariant(variantId: string, optionGroupId: string, optionId?: string) {\n        if (!this.optionsToAddToVariant[variantId]) {\n            this.optionsToAddToVariant[variantId] = {};\n        }\n        if (optionId) {\n            this.optionsToAddToVariant[variantId][optionGroupId] = optionId;\n        } else {\n            delete this.optionsToAddToVariant[variantId][optionGroupId];\n        }\n    }\n\n    addOptionToVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\n        const optionIds = [\n            ...variant.options.map(o => o.id),\n            ...Object.values(this.optionsToAddToVariant[variant.id]),\n        ];\n        this.dataService.product\n            .updateProductVariants([\n                {\n                    id: variant.id,\n                    optionIds: unique(optionIds),\n                },\n            ])\n            .subscribe(({ updateProductVariants }) => {\n                this.refresh$.next();\n            });\n    }\n\n    deleteVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\n        this.modalService\n            .dialog({\n                title: _('catalog.confirm-delete-product-variant'),\n                translationVars: { name: variant.name },\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(response =>\n                    response\n                        ? this.productDetailService.deleteProductVariant(variant.id, this.product.id)\n                        : EMPTY,\n                ),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('common.notify-delete-success'), {\n                        entity: 'ProductVariant',\n                    });\n                    this.refresh$.next();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-delete-error'), {\n                        entity: 'ProductVariant',\n                    });\n                },\n            );\n    }\n\n    createNewVariant() {\n        this.modalService\n            .fromComponent(CreateProductVariantDialogComponent, {\n                locals: {\n                    product: this.product,\n                },\n            })\n            .pipe(\n                switchMap(result => {\n                    if (result) {\n                        return this.dataService.product.createProductVariants([result]);\n                    } else {\n                        return EMPTY;\n                    }\n                }),\n            )\n            .subscribe(result => {\n                this.notificationService.success(_('common.notify-create-success'), {\n                    entity: 'ProductVariant',\n                });\n                this.refresh$.next();\n            });\n    }\n\n    getOption(\n        variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number],\n        groupId: string,\n    ) {\n        return variant.options.find(o => o.groupId === groupId);\n    }\n}\n","<vdr-page-block>\n    <vdr-card>\n        <div *ngFor=\"let group of optionGroups; index as i\" class=\"option-groups\">\n            <vdr-form-field [label]=\"'catalog.option' | translate\">\n                <input clrInput [(ngModel)]=\"group.name\" name=\"name\" [readonly]=\"!group.isNew\" />\n            </vdr-form-field>\n            <vdr-form-field [label]=\"'catalog.option-values' | translate\" class=\"flex-spacer\">\n                <vdr-option-value-input\n                    #optionValueInputComponent\n                    [options]=\"group.values\"\n                    [groupName]=\"group.name\"\n                    [disabled]=\"group.name === ''\"\n                    (add)=\"addOption(i, $event.name)\"\n                    (remove)=\"removeOption(i, $event)\"\n                ></vdr-option-value-input>\n            </vdr-form-field>\n            <div>\n                <button class=\"button-small mt-4\" (click)=\"removeOptionGroup(group)\">\n                    <clr-icon shape=\"trash\"></clr-icon>\n                </button>\n            </div>\n        </div>\n        <button class=\"button mt-1\" (click)=\"addOptionGroup()\">\n            <clr-icon shape=\"plus\"></clr-icon>\n            {{ 'catalog.create-product-option-group' | translate }}\n        </button>\n    </vdr-card>\n    <vdr-card [paddingX]=\"false\">\n        <div class=\"mx-3\">\n            <button class=\"button\" (click)=\"createNewVariant()\">\n                <clr-icon shape=\"plus\"></clr-icon>\n                {{ 'catalog.create-product-variant' | translate }}\n            </button>\n        </div>\n        <vdr-data-table-2\n            id=\"manage-product-variant-list\"\n            [items]=\"variants$ | async\"\n            [itemsPerPage]=\"itemsPerPage\"\n            [totalItems]=\"totalItems$ | async\"\n            [currentPage]=\"currentPage\"\n            (pageChange)=\"setPageNumber($event)\"\n            (itemsPerPageChange)=\"setItemsPerPage($event)\"\n        >\n            <vdr-dt2-search\n                [searchTermControl]=\"searchTermControl\"\n                [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n            />\n            <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.id }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.createdAt | localeDate : 'short' }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.updatedAt | localeDate : 'short' }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.name }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.sku }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column *ngFor=\"let optionGroup of optionGroups$ | async\" [heading]=\"optionGroup.name\" [id]=\"optionGroup.code\">\n                <ng-template let-variant=\"item\">\n                    <vdr-chip\n                        *ngIf=\"getOption(variant, optionGroup.id) as option; else selectOption\"\n                        [colorFrom]=\"optionGroup.code\"\n                        >{{ option.name }}</vdr-chip\n                    >\n                    <ng-template #selectOption>\n                        <div class=\"flex center\">\n                            <ng-select\n                                [items]=\"optionGroup.options\"\n                                bindLabel=\"name\"\n                                bindValue=\"id\"\n                                appendTo=\"body\"\n                                (change)=\"setOptionToAddToVariant(variant.id, optionGroup.id, $event?.id)\"\n                            ></ng-select>\n                            <button\n                                class=\"button-small ml-1\"\n                                [class.primary]=\"!!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\n                                (click)=\"addOptionToVariant(variant)\"\n                                [disabled]=\"!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\n                            >\n                                <clr-icon shape=\"floppy\"></clr-icon>\n                            </button>\n                        </div>\n                    </ng-template>\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.price' | translate\" id=\"price\" [hiddenByDefault]=\"true\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.price | localeCurrency : variant.currencyCode }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\" [hiddenByDefault]=\"true\">\n                <ng-template let-variant=\"item\">\n                    {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.delete' | translate\" id=\"delete\" [optional]=\"false\">\n                <ng-template let-variant=\"item\">\n                    <button class=\"button-small\" (click)=\"deleteVariant(variant)\">\n                        <clr-icon shape=\"trash is-danger\"></clr-icon>\n                    </button>\n                </ng-template>\n            </vdr-dt2-column>\n        </vdr-data-table-2>\n    </vdr-card>\n</vdr-page-block>\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BaseEntityResolver, GetProductVariantOptionsQuery, DataService } from '@vendure/admin-ui/core';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class ProductVariantsResolver extends BaseEntityResolver<GetProductVariantOptionsQuery['product']> {\n    constructor(router: Router, dataService: DataService) {\n        super(\n            router,\n            {\n                __typename: 'Product' as const,\n                id: '',\n                createdAt: '',\n                updatedAt: '',\n                name: '',\n                languageCode: '' as any,\n                optionGroups: [],\n                variants: [],\n            },\n            id => dataService.product.getProductVariantsOptions(id).mapStream(data => data.product),\n        );\n    }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    CanDeactivateDetailGuard,\n    createResolveData,\n    DataService,\n    PageComponent,\n    PageService,\n} from '@vendure/admin-ui/core';\nimport { map } from 'rxjs/operators';\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\nimport { ProductVariantsResolver } from './providers/routing/product-variants-resolver';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n    {\n        path: 'products',\n        component: PageComponent,\n        data: {\n            locationId: 'product-list',\n            breadcrumb: _('breadcrumb.products'),\n        },\n        children: pageService.getPageTabRoutes('product-list'),\n    },\n    {\n        path: 'inventory',\n        redirectTo: 'products',\n    },\n    {\n        path: 'products/:id',\n        component: PageComponent,\n        data: {\n            locationId: 'product-detail',\n            breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\n        },\n        children: [\n            {\n                path: 'manage-variants',\n                component: ProductVariantsEditorComponent,\n                canDeactivate: [CanDeactivateDetailGuard],\n                data: {\n                    breadcrumb: ({ product }) => [\n                        {\n                            label: `${product.name}`,\n                            link: ['../'],\n                        },\n                        {\n                            label: _('breadcrumb.manage-variants'),\n                            link: ['manage-variants'],\n                        },\n                    ],\n                },\n                resolve: {\n                    product: (route: ActivatedRouteSnapshot) =>\n                        inject(DataService)\n                            .product.getProductVariantsOptions(route.parent?.params.id)\n                            .mapSingle(data => data.product),\n                },\n            },\n            ...pageService.getPageTabRoutes('product-detail'),\n        ],\n    },\n    {\n        path: 'products/:productId/variants/:id',\n        component: PageComponent,\n        data: {\n            locationId: 'product-variant-detail',\n            breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\n        },\n        children: pageService.getPageTabRoutes('product-variant-detail'),\n    },\n    {\n        path: 'products/:id/options',\n        component: ProductOptionsEditorComponent,\n        resolve: createResolveData(ProductVariantsResolver),\n        canDeactivate: [CanDeactivateDetailGuard],\n        data: {\n            breadcrumb: productOptionsEditorBreadcrumb,\n        },\n    },\n    {\n        path: 'facets',\n        component: PageComponent,\n        data: {\n            locationId: 'facet-list',\n            breadcrumb: _('breadcrumb.facets'),\n        },\n        children: pageService.getPageTabRoutes('facet-list'),\n    },\n    {\n        path: 'facets/:id',\n        component: PageComponent,\n        data: {\n            locationId: 'facet-detail',\n            breadcrumb: { label: _('breadcrumb.facets'), link: ['../', 'facets'] },\n        },\n        children: pageService.getPageTabRoutes('facet-detail'),\n    },\n    {\n        path: 'collections',\n        component: PageComponent,\n        data: {\n            locationId: 'collection-list',\n            breadcrumb: _('breadcrumb.collections'),\n        },\n        children: pageService.getPageTabRoutes('collection-list'),\n    },\n    {\n        path: 'collections/:id',\n        component: PageComponent,\n        data: {\n            locationId: 'collection-detail',\n            breadcrumb: { label: _('breadcrumb.collections'), link: ['../', 'collections'] },\n        },\n        children: pageService.getPageTabRoutes('collection-detail'),\n    },\n    {\n        path: 'assets',\n        component: PageComponent,\n        data: {\n            locationId: 'asset-list',\n            breadcrumb: _('breadcrumb.assets'),\n        },\n        children: pageService.getPageTabRoutes('asset-list'),\n    },\n    {\n        path: 'assets/:id',\n        component: PageComponent,\n        data: {\n            locationId: 'asset-detail',\n            breadcrumb: { label: _('breadcrumb.assets'), link: ['../', 'assets'] },\n        },\n        children: pageService.getPageTabRoutes('asset-detail'),\n    },\n];\n\nexport function productOptionsEditorBreadcrumb(data: any, params: any) {\n    return data.entity.pipe(\n        map((entity: any) => [\n            {\n                label: _('breadcrumb.products'),\n                link: ['../', 'products'],\n            },\n            {\n                label: `${entity.name}`,\n                link: ['../', 'products', params.id],\n            },\n            {\n                label: _('breadcrumb.product-options'),\n                link: ['options'],\n            },\n        ]),\n    );\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ViewChild,\n} from '@angular/core';\nimport {\n    Dialog,\n    FacetValue,\n    FacetValueSelectorComponent,\n    FacetWithValuesFragment,\n} from '@vendure/admin-ui/core';\n\n@Component({\n    selector: 'vdr-apply-facet-dialog',\n    templateUrl: './apply-facet-dialog.component.html',\n    styleUrls: ['./apply-facet-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ApplyFacetDialogComponent implements Dialog<FacetValue[]>, AfterViewInit {\n    @ViewChild(FacetValueSelectorComponent) private selector: FacetValueSelectorComponent;\n    resolveWith: (result?: FacetValue[]) => void;\n    selectedValues: FacetValue[] = [];\n    // Provided by caller\n    facets: FacetWithValuesFragment[];\n\n    constructor(private changeDetector: ChangeDetectorRef) {}\n\n    ngAfterViewInit() {\n        setTimeout(() => this.selector.focus(), 0);\n    }\n\n    selectValues() {\n        this.resolveWith(this.selectedValues);\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n}\n","<ng-template vdrDialogTitle>{{ 'catalog.add-facets' | translate }}</ng-template>\n\n<vdr-facet-value-selector\n    (selectedValuesChange)=\"selectedValues = $event\"\n></vdr-facet-value-selector>\n\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button\n        type=\"submit\"\n        (click)=\"selectValues()\"\n        [disabled]=\"selectedValues.length === 0\"\n        class=\"btn btn-primary\"\n    >\n        {{ 'catalog.add-facets' | translate }}\n    </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormBuilder } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    ASSET_FRAGMENT,\n    AssetDetailQueryDocument,\n    AssetDetailQueryQuery,\n    DataService,\n    getCustomFieldsDefaults,\n    LanguageCode,\n    NotificationService,\n    TAG_FRAGMENT,\n    TypedBaseDetailComponent,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const ASSET_DETAIL_QUERY = gql`\n    query AssetDetailQuery($id: ID!) {\n        asset(id: $id) {\n            ...Asset\n            tags {\n                ...Tag\n            }\n        }\n    }\n    ${ASSET_FRAGMENT}\n    ${TAG_FRAGMENT}\n`;\n\n@Component({\n    selector: 'vdr-asset-detail',\n    templateUrl: './asset-detail.component.html',\n    styleUrls: ['./asset-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class AssetDetailComponent\n    extends TypedBaseDetailComponent<typeof AssetDetailQueryDocument, 'asset'>\n    implements OnInit, OnDestroy\n{\n    readonly customFields = this.getCustomFieldConfig('Asset');\n    detailForm = new FormGroup({\n        name: new FormControl(''),\n        tags: new FormControl([] as string[]),\n        customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n    });\n\n    constructor(\n        private notificationService: NotificationService,\n        protected dataService: DataService,\n        private formBuilder: UntypedFormBuilder,\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        this.init();\n    }\n\n    ngOnDestroy() {\n        this.destroy();\n    }\n\n    onAssetChange(event: { id: string; name: string; tags: string[] }) {\n        this.detailForm.get('name')?.setValue(event.name);\n        this.detailForm.get('tags')?.setValue(event.tags);\n        this.detailForm.markAsDirty();\n    }\n\n    save() {\n        this.dataService.product\n            .updateAsset({\n                id: this.id,\n                name: this.detailForm.value.name,\n                tags: this.detailForm.value.tags,\n                customFields: this.detailForm.value.customFields,\n            })\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('common.notify-update-success'), { entity: 'Asset' });\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'Asset',\n                    });\n                },\n            );\n    }\n\n    protected setFormValues(\n        entity: NonNullable<AssetDetailQueryQuery['asset']>,\n        languageCode: LanguageCode,\n    ): void {\n        this.detailForm.get('name')?.setValue(entity.name);\n        this.detailForm.get('tags')?.setValue(entity.tags.map(t => t.id));\n        if (this.customFields.length) {\n            this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\n        }\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left></vdr-ab-left>\n\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"asset-detail\" />\n            <button\n                *vdrIfPermissions=\"['UpdateCatalog', 'UpdateAsset']\"\n                class=\"btn btn-primary\"\n                (click)=\"save()\"\n                [disabled]=\"detailForm.invalid || detailForm.pristine\"\n            >\n                {{ 'common.update' | translate }}\n            </button>\n            <vdr-action-bar-dropdown-menu locationId=\"asset-detail\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<vdr-page-block>\n    <vdr-asset-preview\n        [asset]=\"entity$ | async\"\n        [editable]=\"true\"\n        [customFields]=\"customFields\"\n        [customFieldsForm]=\"detailForm.get('customFields')\"\n        (assetChange)=\"onAssetChange($event)\"\n    />\n</vdr-page-block>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    Asset,\n    BaseListComponent,\n    DataService,\n    DeletionResult,\n    GetAssetListQuery,\n    GetAssetListQueryVariables,\n    ItemOf,\n    LogicalOperator,\n    ModalService,\n    NotificationService,\n    SortOrder,\n    TagFragment,\n} from '@vendure/admin-ui/core';\nimport { PaginationInstance } from 'ngx-pagination';\nimport { BehaviorSubject, combineLatest, EMPTY, Observable } from 'rxjs';\nimport { debounceTime, finalize, map, switchMap, takeUntil } from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-asset-list',\n    templateUrl: './asset-list.component.html',\n    styleUrls: ['./asset-list.component.scss'],\n    standalone: false\n})\nexport class AssetListComponent\n    extends BaseListComponent<\n        GetAssetListQuery,\n        ItemOf<GetAssetListQuery, 'assets'>,\n        GetAssetListQueryVariables\n    >\n    implements OnInit\n{\n    searchTerm$ = new BehaviorSubject<string | undefined>(undefined);\n    filterByTags$ = new BehaviorSubject<TagFragment[] | undefined>(undefined);\n    uploading = false;\n    allTags$: Observable<TagFragment[]>;\n    paginationConfig$: Observable<PaginationInstance>;\n\n    constructor(\n        private notificationService: NotificationService,\n        private modalService: ModalService,\n        private dataService: DataService,\n        router: Router,\n        route: ActivatedRoute,\n    ) {\n        super(router, route);\n        super.setQueryFn(\n            (...args: any[]) => this.dataService.product.getAssetList(...args).refetchOnChannelChange(),\n            data => data.assets,\n            (skip, take) => {\n                const searchTerm = this.searchTerm$.value;\n                const tags = this.filterByTags$.value?.map(t => t.value);\n                return {\n                    options: {\n                        skip,\n                        take,\n                        ...(searchTerm\n                            ? {\n                                  filter: {\n                                      name: { contains: searchTerm },\n                                  },\n                              }\n                            : {}),\n                        sort: {\n                            createdAt: SortOrder.DESC,\n                        },\n                        tags,\n                        tagsOperator: LogicalOperator.AND,\n                    },\n                };\n            },\n            { take: 25, skip: 0 },\n        );\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.paginationConfig$ = combineLatest(this.itemsPerPage$, this.currentPage$, this.totalItems$).pipe(\n            map(([itemsPerPage, currentPage, totalItems]) => ({ itemsPerPage, currentPage, totalItems })),\n        );\n        this.searchTerm$.pipe(debounceTime(250), takeUntil(this.destroy$)).subscribe(() => this.refresh());\n\n        this.filterByTags$.pipe(takeUntil(this.destroy$)).subscribe(() => this.refresh());\n        this.allTags$ = this.dataService.product.getTagList().mapStream(data => data.tags.items);\n    }\n\n    filesSelected(files: File[]) {\n        if (files.length) {\n            this.uploading = true;\n            this.dataService.product\n                .createAssets(files)\n                .pipe(finalize(() => (this.uploading = false)))\n                .subscribe(({ createAssets }) => {\n                    let successCount = 0;\n                    for (const result of createAssets) {\n                        switch (result.__typename) {\n                            case 'Asset':\n                                successCount++;\n                                break;\n                            case 'MimeTypeError':\n                                this.notificationService.error(result.message);\n                                break;\n                        }\n                    }\n                    if (0 < successCount) {\n                        super.refresh();\n                        this.notificationService.success(_('asset.notify-create-assets-success'), {\n                            count: successCount,\n                        });\n                    }\n                });\n        }\n    }\n\n    deleteAssets(assets: Asset[]) {\n        this.showModalAndDelete(assets.map(a => a.id))\n            .pipe(\n                switchMap(response => {\n                    if (response.result === DeletionResult.DELETED) {\n                        return [true];\n                    } else {\n                        return this.showModalAndDelete(\n                            assets.map(a => a.id),\n                            response.message || '',\n                        ).pipe(map(r => r.result === DeletionResult.DELETED));\n                    }\n                }),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('common.notify-delete-success'), {\n                        entity: 'Assets',\n                    });\n                    this.refresh();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-delete-error'), {\n                        entity: 'Assets',\n                    });\n                },\n            );\n    }\n\n    private showModalAndDelete(assetIds: string[], message?: string) {\n        return this.modalService\n            .dialog({\n                title: _('catalog.confirm-delete-assets'),\n                translationVars: {\n                    count: assetIds.length,\n                },\n                body: message,\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(res => (res ? this.dataService.product.deleteAssets(assetIds, !!message) : EMPTY)),\n                map(res => res.deleteAssets),\n            );\n    }\n}\n","<vdr-page-block>\n    <div class=\"my-2\">\n        <vdr-asset-search-input\n            [tags]=\"allTags$ | async\"\n            (searchTermChange)=\"searchTerm$.next($event)\"\n            (tagsChange)=\"filterByTags$.next($event)\"\n        >\n            <vdr-asset-file-input\n                (selectFiles)=\"filesSelected($event)\"\n                [uploading]=\"uploading\"\n                dropZoneTarget=\".content-area\"\n            ></vdr-asset-file-input>\n        </vdr-asset-search-input>\n    </div>\n    <vdr-asset-gallery\n        [assets]=\"(items$ | async)! | paginate : (paginationConfig$ | async) || {}\"\n        [multiSelect]=\"true\"\n        [canDelete]=\"['DeleteCatalog', 'DeleteAsset'] | hasPermission\"\n        (deleteAssets)=\"deleteAssets($event)\"\n    ></vdr-asset-gallery>\n\n    <div class=\"paging-controls\">\n        <vdr-items-per-page-controls\n            [itemsPerPage]=\"itemsPerPage$ | async\"\n            (itemsPerPageChange)=\"setItemsPerPage($event)\"\n        ></vdr-items-per-page-controls>\n\n        <vdr-pagination-controls\n            [currentPage]=\"currentPage$ | async\"\n            [itemsPerPage]=\"itemsPerPage$ | async\"\n            [totalItems]=\"totalItems$ | async\"\n            (pageChange)=\"setPageNumber($event)\"\n        ></vdr-pagination-controls>\n    </div>\n</vdr-page-block>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    DataService,\n    Dialog,\n    GetChannelsQuery,\n    ItemOf,\n    LogicalOperator,\n    NotificationService,\n} from '@vendure/admin-ui/core';\nimport { combineLatest, from, lastValueFrom, Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\ntype Channel = ItemOf<GetChannelsQuery, 'channels'>;\n\n@Component({\n    selector: 'vdr-assign-products-to-channel-dialog',\n    templateUrl: './assign-products-to-channel-dialog.component.html',\n    styleUrls: ['./assign-products-to-channel-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class AssignProductsToChannelDialogComponent implements OnInit, Dialog<any> {\n    selectedChannel: Channel | null | undefined;\n    currentChannel: Channel;\n    availableChannels: Channel[];\n    resolveWith: (result?: any) => void;\n    variantsPreview$: Observable<Array<{ id: string; name: string; price: number; pricePreview: number }>>;\n    priceFactorControl = new UntypedFormControl(1);\n    selectedChannelIdControl = new UntypedFormControl();\n\n    // assigned by ModalService.fromComponent() call\n    productIds: string[];\n    productVariantIds: string[] | undefined;\n    currentChannelIds: string[];\n\n    get isProductVariantMode(): boolean {\n        return this.productVariantIds != null;\n    }\n\n    constructor(private dataService: DataService, private notificationService: NotificationService) {}\n\n    ngOnInit() {\n        const activeChannelId$ = this.dataService.client\n            .userStatus()\n            .mapSingle(({ userStatus }) => userStatus.activeChannelId);\n        const allChannels$ = this.dataService.settings.getChannels().mapSingle(data => data.channels);\n\n        combineLatest(activeChannelId$, allChannels$).subscribe(([activeChannelId, channels]) => {\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            this.currentChannel = channels.items.find(c => c.id === activeChannelId)!;\n            this.availableChannels = channels.items;\n        });\n\n        this.selectedChannelIdControl.valueChanges.subscribe(ids => {\n            this.selectChannel(ids);\n        });\n\n        this.variantsPreview$ = combineLatest(\n            from(this.getTopVariants(10)),\n            this.priceFactorControl.valueChanges.pipe(startWith(1)),\n        ).pipe(\n            map(([variants, factor]) =>\n                variants.map(v => ({\n                    id: v.id,\n                    name: v.name,\n                    price: v.price,\n                    pricePreview: v.price * +factor,\n                })),\n            ),\n        );\n    }\n\n    selectChannel(channelIds: string[]) {\n        this.selectedChannel = this.availableChannels.find(c => c.id === channelIds[0]);\n    }\n\n    assign() {\n        const selectedChannel = this.selectedChannel;\n        if (selectedChannel) {\n            if (!this.isProductVariantMode) {\n                this.dataService.product\n                    .assignProductsToChannel({\n                        channelId: selectedChannel.id,\n                        productIds: this.productIds,\n                        priceFactor: +this.priceFactorControl.value,\n                    })\n                    .subscribe(() => {\n                        this.notificationService.success(_('catalog.assign-product-to-channel-success'), {\n                            channel: selectedChannel.code,\n                            count: this.productIds.length,\n                        });\n                        this.resolveWith(true);\n                    });\n            } else if (this.productVariantIds) {\n                this.dataService.product\n                    .assignVariantsToChannel({\n                        channelId: selectedChannel.id,\n                        productVariantIds: this.productVariantIds,\n                        priceFactor: +this.priceFactorControl.value,\n                    })\n                    .subscribe(() => {\n                        this.notificationService.success(_('catalog.assign-variant-to-channel-success'), {\n                            channel: selectedChannel.code,\n                            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                            count: this.productVariantIds!.length,\n                        });\n                        this.resolveWith(true);\n                    });\n            }\n        }\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n\n    private async getTopVariants(take: number) {\n        return (\n            await lastValueFrom(\n                this.dataService.product.getProductVariants({\n                    filterOperator: LogicalOperator.OR,\n                    filter: {\n                        productId: { in: this.productIds },\n                        id: { in: this.productVariantIds },\n                    },\n                    take,\n                }).single$,\n            )\n        ).productVariants.items;\n    }\n}\n","<ng-template vdrDialogTitle>\n    <ng-container *ngIf=\"isProductVariantMode; else productModeTitle\">{{\n        'catalog.assign-variants-to-channel' | translate\n    }}</ng-container>\n    <ng-template #productModeTitle>{{ 'catalog.assign-products-to-channel' | translate }}</ng-template>\n</ng-template>\n\n<div class=\"flex\">\n    <clr-input-container>\n        <label>{{ 'common.channel' | translate }}</label>\n        <vdr-channel-assignment-control\n            clrInput\n            [multiple]=\"false\"\n            [includeDefaultChannel]=\"false\"\n            [disableChannelIds]=\"currentChannelIds\"\n            [formControl]=\"selectedChannelIdControl\"\n        ></vdr-channel-assignment-control>\n    </clr-input-container>\n    <div class=\"flex-spacer\"></div>\n    <clr-input-container>\n        <label>{{ 'catalog.price-conversion-factor' | translate }}</label>\n        <input clrInput type=\"number\" min=\"0\" max=\"99999\" [formControl]=\"priceFactorControl\" />\n    </clr-input-container>\n</div>\n\n<div class=\"channel-price-preview\">\n    <label class=\"clr-control-label\">{{ 'catalog.channel-price-preview' | translate }}</label>\n    <table class=\"table\">\n        <thead>\n            <tr>\n                <th>{{ 'common.name' | translate }}</th>\n                <th>\n                    {{\n                        'catalog.price-in-channel'\n                            | translate: { channel: currentChannel?.code | channelCodeToLabel | translate }\n                    }}\n                </th>\n                <th>\n                    <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\n                        {{ 'catalog.price-in-channel' | translate: { channel: selectedChannel?.code } }}\n                    </ng-template>\n                    <ng-template #noSelection>\n                        {{ 'catalog.no-channel-selected' | translate }}\n                    </ng-template>\n                </th>\n            </tr>\n        </thead>\n        <tbody>\n            <tr *ngFor=\"let row of variantsPreview$ | async\">\n                <td>{{ row.name }}</td>\n                <td>{{ row.price | localeCurrency: currentChannel?.defaultCurrencyCode }}</td>\n                <td>\n                    <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noChannelSelected\">\n                        {{ row.pricePreview | localeCurrency: selectedChannel?.defaultCurrencyCode }}\n                    </ng-template>\n                    <ng-template #noChannelSelected> - </ng-template>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</div>\n\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button type=\"submit\" (click)=\"assign()\" [disabled]=\"!selectedChannel\" class=\"btn btn-primary\">\n        <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\n            {{ 'catalog.assign-to-named-channel' | translate: { channelCode: selectedChannel?.code } }}\n        </ng-template>\n        <ng-template #noSelection>\n            {{ 'catalog.no-channel-selected' | translate }}\n        </ng-template>\n    </button>\n</ng-template>\n","import { gql } from 'apollo-angular';\n\nexport const GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS = gql`\n    query GetProductsWithFacetValuesByIds($ids: [String!]!) {\n        products(options: { filter: { id: { in: $ids } } }) {\n            items {\n                id\n                name\n                facetValues {\n                    id\n                    name\n                    code\n                    facet {\n                        id\n                        name\n                        code\n                    }\n                }\n            }\n        }\n    }\n`;\n\nexport const GET_VARIANTS_WITH_FACET_VALUES_BY_IDS = gql`\n    query GetVariantsWithFacetValuesByIds($ids: [String!]!) {\n        productVariants(options: { filter: { id: { in: $ids } } }) {\n            items {\n                id\n                name\n                sku\n                facetValues {\n                    id\n                    name\n                    code\n                    facet {\n                        id\n                        name\n                        code\n                    }\n                }\n            }\n        }\n    }\n`;\n\nexport const UPDATE_PRODUCTS_BULK = gql`\n    mutation UpdateProductsBulk($input: [UpdateProductInput!]!) {\n        updateProducts(input: $input) {\n            id\n            name\n            facetValues {\n                id\n                name\n                code\n            }\n        }\n    }\n`;\n\nexport const UPDATE_VARIANTS_BULK = gql`\n    mutation UpdateVariantsBulk($input: [UpdateProductVariantInput!]!) {\n        updateProductVariants(input: $input) {\n            id\n            name\n            facetValues {\n                id\n                name\n                code\n            }\n        }\n    }\n`;\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport {\n    DataService,\n    Dialog,\n    FacetValueFragment,\n    GetProductsWithFacetValuesByIdsQuery,\n    GetProductsWithFacetValuesByIdsQueryVariables,\n    GetVariantsWithFacetValuesByIdsQuery,\n    UpdateProductsBulkMutation,\n    UpdateProductsBulkMutationVariables,\n    UpdateVariantsBulkMutation,\n    UpdateVariantsBulkMutationVariables,\n} from '@vendure/admin-ui/core';\nimport { unique } from '@vendure/common/lib/unique';\nimport { Observable, Subscription } from 'rxjs';\n\nimport {\n    GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS,\n    GET_VARIANTS_WITH_FACET_VALUES_BY_IDS,\n    UPDATE_PRODUCTS_BULK,\n    UPDATE_VARIANTS_BULK,\n} from './bulk-add-facet-values-dialog.graphql';\n\ninterface ProductOrVariant {\n    id: string;\n    name: string;\n    sku?: string;\n    facetValues: Array<{\n        id: string;\n        name: string;\n        code: string;\n        facet: Array<{\n            id: string;\n            name: string;\n            code: string;\n        }>;\n    }>;\n}\n\n@Component({\n    selector: 'vdr-bulk-add-facet-values-dialog',\n    templateUrl: './bulk-add-facet-values-dialog.component.html',\n    styleUrls: ['./bulk-add-facet-values-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class BulkAddFacetValuesDialogComponent implements OnInit, OnDestroy, Dialog<FacetValueFragment[]> {\n    resolveWith: (result?: FacetValueFragment[]) => void;\n    /* provided by call to ModalService */\n    mode: 'product' | 'variant' = 'product';\n    ids?: string[];\n    state: 'loading' | 'ready' | 'saving' = 'loading';\n\n    selectedValues: FacetValueFragment[] = [];\n    items: ProductOrVariant[] = [];\n    facetValuesRemoved = false;\n    private subscription: Subscription;\n    constructor(\n        private dataService: DataService,\n        private changeDetectorRef: ChangeDetectorRef,\n    ) {}\n\n    ngOnInit(): void {\n        const fetchData$: Observable<any> =\n            this.mode === 'product'\n                ? this.dataService\n                      .query<\n                          GetProductsWithFacetValuesByIdsQuery,\n                          GetProductsWithFacetValuesByIdsQueryVariables\n                      >(GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS, {\n                          ids: this.ids ?? [],\n                      })\n                      .mapSingle(({ products }) =>\n                          products.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\n                      )\n                : this.dataService\n                      .query<\n                          GetVariantsWithFacetValuesByIdsQuery,\n                          GetProductsWithFacetValuesByIdsQueryVariables\n                      >(GET_VARIANTS_WITH_FACET_VALUES_BY_IDS, {\n                          ids: this.ids ?? [],\n                      })\n                      .mapSingle(({ productVariants }) =>\n                          productVariants.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\n                      );\n        this.subscription = fetchData$.subscribe({\n            next: items => {\n                this.items = items;\n                this.state = 'ready';\n                this.changeDetectorRef.markForCheck();\n            },\n        });\n    }\n\n    ngOnDestroy() {\n        this.subscription?.unsubscribe();\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n\n    removeFacetValue(item: ProductOrVariant, facetValueId: string) {\n        item.facetValues = item.facetValues.filter(fv => fv.id !== facetValueId);\n        this.facetValuesRemoved = true;\n    }\n\n    addFacetValues() {\n        const selectedFacetValueIds = this.selectedValues.map(sv => sv.id);\n        this.state = 'saving';\n        const save$: Observable<any> =\n            this.mode === 'product'\n                ? this.dataService.mutate<UpdateProductsBulkMutation, UpdateProductsBulkMutationVariables>(\n                      UPDATE_PRODUCTS_BULK,\n                      {\n                          input: this.items?.map(product => ({\n                              id: product.id,\n                              facetValueIds: unique([\n                                  ...product.facetValues.map(fv => fv.id),\n                                  ...selectedFacetValueIds,\n                              ]),\n                          })),\n                      },\n                  )\n                : this.dataService.mutate<UpdateVariantsBulkMutation, UpdateVariantsBulkMutationVariables>(\n                      UPDATE_VARIANTS_BULK,\n                      {\n                          input: this.items?.map(product => ({\n                              id: product.id,\n                              facetValueIds: unique([\n                                  ...product.facetValues.map(fv => fv.id),\n                                  ...selectedFacetValueIds,\n                              ]),\n                          })),\n                      },\n                  );\n        return save$.subscribe(result => {\n            this.resolveWith(this.selectedValues);\n        });\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.edit-facet-values' | translate }}\n</ng-template>\n\n<div class=\"flex\">\n    <div class=\"flex center\">\n        <div class=\"mr2\">\n            {{ 'catalog.add-facet-value' | translate }}\n        </div>\n        <vdr-facet-value-selector\n            (selectedValuesChange)=\"selectedValues = $event\"\n        ></vdr-facet-value-selector>\n    </div>\n</div>\n\n<table class=\"table\" *ngIf=\"state !== 'loading'; else placeholder\">\n    <tbody>\n        <tr *ngFor=\"let item of items\">\n            <td class=\"left align-middle\">\n                <div>{{ item.name }}</div>\n                <div *ngIf=\"item.sku\" class=\"sku\">{{ item.sku }}</div>\n            </td>\n            <td class=\"left\">\n                <vdr-facet-value-chip\n                    *ngFor=\"let facetValue of item.facetValues\"\n                    [facetValue]=\"facetValue\"\n                    (remove)=\"removeFacetValue(item, facetValue.id)\"\n                ></vdr-facet-value-chip>\n            </td>\n        </tr>\n    </tbody>\n</table>\n\n<ng-template #placeholder>\n    <div class=\"loading\">\n    <clr-spinner></clr-spinner>\n    </div>\n</ng-template>\n\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button\n        type=\"submit\"\n        (click)=\"addFacetValues()\"\n        [disabled]=\"selectedValues.length === 0 && facetValuesRemoved === false\"\n        class=\"btn btn-primary\"\n    >\n        {{ 'common.update' | translate }}\n    </button>\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n    TemplateRef,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n    CollectionFilterParameter,\n    ConfigurableOperationInput,\n    DataService,\n    GetCollectionContentsQuery,\n} from '@vendure/admin-ui/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport {\n    catchError,\n    debounceTime,\n    distinctUntilChanged,\n    filter,\n    finalize,\n    map,\n    startWith,\n    switchMap,\n    takeUntil,\n    tap,\n} from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-collection-contents',\n    templateUrl: './collection-contents.component.html',\n    styleUrls: ['./collection-contents.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CollectionContentsComponent implements OnInit, OnChanges, OnDestroy {\n    @Input() collectionId: string;\n    @Input() parentId: string;\n    @Input() inheritFilters: boolean;\n    @Input() updatedFilters: ConfigurableOperationInput[] | undefined;\n    @Input() previewUpdatedFilters = false;\n    @ContentChild(TemplateRef, { static: true }) headerTemplate: TemplateRef<any>;\n\n    contents$: Observable<NonNullable<GetCollectionContentsQuery['collection']>['productVariants']['items']>;\n    contentsTotalItems$: Observable<number>;\n    contentsItemsPerPage$: Observable<number>;\n    contentsCurrentPage$: Observable<number>;\n    filterTermControl = new UntypedFormControl('');\n    isLoading = false;\n    private collectionIdChange$ = new BehaviorSubject<string>('');\n    private parentIdChange$ = new BehaviorSubject<string>('');\n    private filterChanges$ = new BehaviorSubject<ConfigurableOperationInput[]>([]);\n    private inheritFiltersChanges$ = new BehaviorSubject<boolean>(true);\n    private refresh$ = new BehaviorSubject<boolean>(true);\n    private destroy$ = new Subject<void>();\n\n    constructor(private route: ActivatedRoute, private router: Router, private dataService: DataService) {}\n\n    ngOnInit() {\n        this.contentsCurrentPage$ = this.route.queryParamMap.pipe(\n            map(qpm => qpm.get('contentsPage')),\n            map(page => (!page ? 1 : +page)),\n            startWith(1),\n            distinctUntilChanged(),\n        );\n\n        this.contentsItemsPerPage$ = this.route.queryParamMap.pipe(\n            map(qpm => qpm.get('contentsPerPage')),\n            map(perPage => (!perPage ? 10 : +perPage)),\n            startWith(10),\n            distinctUntilChanged(),\n        );\n\n        const filterTerm$ = this.filterTermControl.valueChanges.pipe(\n            debounceTime(250),\n            tap(() => this.setContentsPageNumber(1)),\n            startWith(''),\n        );\n\n        const filterChanges$ = this.filterChanges$.asObservable().pipe(\n            filter(() => this.previewUpdatedFilters),\n            tap(() => this.setContentsPageNumber(1)),\n            startWith([]),\n        );\n\n        const inheritFiltersChanges$ = this.inheritFiltersChanges$.asObservable().pipe(\n            filter(() => this.inheritFilters != null),\n            distinctUntilChanged(),\n            tap(() => this.setContentsPageNumber(1)),\n            startWith(true),\n        );\n\n        const fetchUpdate$ = combineLatest(\n            this.collectionIdChange$,\n            this.parentIdChange$,\n            this.contentsCurrentPage$,\n            this.contentsItemsPerPage$,\n            filterTerm$,\n            filterChanges$,\n            inheritFiltersChanges$,\n            this.refresh$,\n        );\n\n        const collection$ = fetchUpdate$.pipe(\n            takeUntil(this.destroy$),\n            tap(() => (this.isLoading = true)),\n            debounceTime(50),\n            switchMap(([id, parentId, currentPage, itemsPerPage, filterTerm, filters, inheritFilters]) => {\n                const take = itemsPerPage;\n                const skip = (currentPage - 1) * itemsPerPage;\n                if (filters.length && this.previewUpdatedFilters) {\n                    const filterClause = filterTerm\n                        ? ({ name: { contains: filterTerm } } as CollectionFilterParameter)\n                        : undefined;\n                    return this.dataService.collection\n                        .previewCollectionVariants(\n                            {\n                                parentId,\n                                filters,\n                                inheritFilters,\n                            },\n                            {\n                                take,\n                                skip,\n                                filter: filterClause,\n                            },\n                        )\n                        .mapSingle(data => data.previewCollectionVariants)\n                        .pipe(catchError(() => of({ items: [], totalItems: 0 })));\n                } else if (id) {\n                    return this.dataService.collection\n                        .getCollectionContents(id, take, skip, filterTerm)\n                        .mapSingle(data => data.collection?.productVariants);\n                } else {\n                    return of(null);\n                }\n            }),\n            tap(() => (this.isLoading = false)),\n            finalize(() => (this.isLoading = false)),\n        );\n\n        this.contents$ = collection$.pipe(map(result => (result ? result.items : [])));\n        this.contentsTotalItems$ = collection$.pipe(map(result => (result ? result.totalItems : 0)));\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('collectionId' in changes) {\n            this.collectionIdChange$.next(changes.collectionId.currentValue);\n        }\n        if ('parentId' in changes) {\n            this.parentIdChange$.next(changes.parentId.currentValue);\n        }\n        if ('inheritFilters' in changes) {\n            this.inheritFiltersChanges$.next(changes.inheritFilters.currentValue);\n        }\n        if ('updatedFilters' in changes) {\n            if (this.updatedFilters) {\n                this.filterChanges$.next(this.updatedFilters);\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    setContentsPageNumber(page: number) {\n        this.setParam('contentsPage', page);\n    }\n\n    setContentsItemsPerPage(perPage: number) {\n        this.setParam('contentsPerPage', perPage);\n    }\n\n    refresh() {\n        this.refresh$.next(true);\n    }\n\n    private setParam(key: string, value: any) {\n        this.router.navigate(['./'], {\n            relativeTo: this.route,\n            queryParams: {\n                [key]: value,\n            },\n            queryParamsHandling: 'merge',\n            replaceUrl: true,\n        });\n    }\n}\n","<div class=\"table-wrapper\">\n    <div class=\"progress loop\" [class.visible]=\"isLoading\"></div>\n    <div class=\"header-title-row\">\n        <ng-container\n            *ngTemplateOutlet=\"headerTemplate; context: { $implicit: contentsTotalItems$ | async }\"\n        ></ng-container>\n    </div>\n    <vdr-data-table-2\n        id=\"collection-contents\"\n        [class.loading]=\"isLoading\"\n        [items]=\"contents$ | async\"\n        [itemsPerPage]=\"contentsItemsPerPage$ | async\"\n        [totalItems]=\"contentsTotalItems$ | async\"\n        [currentPage]=\"contentsCurrentPage$ | async\"\n        (pageChange)=\"setContentsPageNumber($event)\"\n        (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\n    >\n        <vdr-dt2-search\n            [searchTermControl]=\"filterTermControl\"\n            [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n        />\n        <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n            <ng-template let-variant=\"item\">\n                {{ variant.id }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\n            <ng-template let-variant=\"item\">\n                {{ variant.createdAt | localeDate : 'short' }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\n            <ng-template let-variant=\"item\">\n                {{ variant.updatedAt | localeDate : 'short' }}\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\n            <ng-template let-variant=\"item\">\n                <a class=\"button-ghost\" [routerLink]=\"['/catalog/products', variant.productId]\"\n                    ><span>{{ variant.name }}</span\n                    ><clr-icon shape=\"arrow right\"\n                /></a>\n            </ng-template>\n        </vdr-dt2-column>\n        <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\n            <ng-template let-variant=\"item\">\n                {{ variant.sku }}\n            </ng-template>\n        </vdr-dt2-column>\n    </vdr-data-table-2>\n</div>\n","import { CdkDrag, CdkDragDrop, CdkDropList, DragRef } from '@angular/cdk/drag-drop';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n} from '@angular/core';\nimport { DataService, DataTable2Component, GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\n\nexport type CollectionTableItem = ItemOf<GetCollectionListQuery, 'collections'>;\nexport type CollectionOrderEvent = {\n    collectionId: string;\n    parentId: string;\n    index: number;\n};\n@Component({\n    selector: 'vdr-collection-data-table',\n    templateUrl: './collection-data-table.component.html',\n    styleUrls: [\n        '../../../../core/src/shared/components/data-table-2/data-table2.component.scss',\n        './collection-data-table.component.scss',\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CollectionDataTableComponent\n    extends DataTable2Component<CollectionTableItem>\n    implements OnChanges, AfterViewInit\n{\n    @Input() subCollections: CollectionTableItem[];\n    @Output() changeOrder = new EventEmitter<CollectionOrderEvent>();\n    @ViewChild(CdkDropList, { static: true }) dropList: CdkDropList<{\n        depth: number;\n        collection: CollectionTableItem;\n    }>;\n    @ViewChildren('collectionRow', { read: CdkDrag }) collectionRowList: QueryList<CdkDrag>;\n    dragRefs: DragRef[] = [];\n    absoluteIndex: { [id: string]: number } = {};\n    constructor(\n        protected changeDetectorRef: ChangeDetectorRef,\n        protected dataService: DataService,\n    ) {\n        super(changeDetectorRef, dataService);\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        super.ngOnChanges(changes);\n        if (changes.subCollections || changes.items) {\n            const allCollections: CollectionTableItem[] = [];\n            for (const collection of this.items ?? []) {\n                allCollections.push(collection);\n                const subCollectionMatches = this.getSubcollections(collection);\n                allCollections.push(...subCollectionMatches.flat());\n            }\n            allCollections.forEach((collection, index) => (this.absoluteIndex[collection.id] = index));\n        }\n    }\n\n    ngAfterViewInit() {\n        this.collectionRowList.changes.subscribe((val: QueryList<CdkDrag>) => {\n            this.dropList.getSortedItems().forEach(item => this.dropList.removeItem(item));\n            for (const ref of val.toArray()) {\n                ref.dropContainer = this.dropList;\n                ref._dragRef._withDropContainer(this.dropList._dropListRef);\n                this.dropList.addItem(ref);\n            }\n        });\n    }\n\n    getSubcollections(item: CollectionTableItem) {\n        return this.subCollections?.filter(c => c.parentId === item.id) ?? [];\n    }\n\n    sortPredicate = (index: number, item: CdkDrag<{ depth: number; collection: CollectionTableItem }>) => {\n        const itemAtIndex = this.dropList.getSortedItems()[index];\n        return itemAtIndex?.data.collection.parentId === item.data.collection.parentId;\n    };\n\n    onDrop(\n        event: CdkDragDrop<{\n            depth: number;\n            collection: CollectionTableItem;\n        }>,\n    ) {\n        const isTopLevel = event.item.data.collection.breadcrumbs.length === 2;\n        const pageIndexOffset = isTopLevel ? (this.currentPage - 1) * this.itemsPerPage : 0;\n        const parentId = event.item.data.collection.parentId;\n        const parentIndex = this.items.findIndex(i => i.id === parentId);\n        const adjustedIndex = pageIndexOffset + event.currentIndex - parentIndex - 1;\n        this.changeOrder.emit({\n            collectionId: event.item.data.collection.id,\n            index: adjustedIndex,\n            parentId: event.item.data.collection.parentId,\n        });\n\n        if (isTopLevel) {\n            this.items = [...this.items];\n            this.items.splice(event.previousIndex, 1);\n            this.items.splice(event.currentIndex, 0, event.item.data.collection);\n        } else {\n            const parent = this.items.find(i => i.id === parentId);\n            if (parent) {\n                const subCollections = this.getSubcollections(parent);\n                const adjustedPreviousIndex = pageIndexOffset + event.previousIndex - parentIndex - 1;\n                subCollections.splice(adjustedPreviousIndex, 1);\n                subCollections.splice(event.currentIndex, 0, event.item.data.collection);\n            }\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n}\n","<vdr-data-table-filter-presets\n    *ngIf=\"filters\"\n    [filters]=\"filters\"\n    [dataTableId]=\"id\"\n></vdr-data-table-filter-presets>\n<div class=\"table-wrapper\">\n    <div class=\"bulk-actions\">\n        <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\n    </div>\n    <table class=\"\" [class.no-select]=\"disableSelect\">\n        <thead [class.items-selected]=\"selectionManager?.selection.length\">\n            <tr class=\"heading-row\">\n                <th *ngIf=\"selectionManager\" class=\"selection-col\">\n                    <div class=\"flex\">\n                        <div class=\"drag-handle-spacer\"></div>\n                        <input\n                            type=\"checkbox\"\n                            clrCheckbox\n                            [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\n                            (change)=\"onToggleAllClick()\"\n                        />\n                    </div>\n                </th>\n                <th\n                    *ngFor=\"let column of visibleSortedColumns; last as isLast\"\n                    [class.expand]=\"column.expand\"\n                >\n                    <div class=\"cell-content\" [ngClass]=\"column.align\">\n                        <vdr-ui-extension-point\n                            [locationId]=\"id\"\n                            [metadata]=\"column.id\"\n                            api=\"dataTable\"\n                            [topPx]=\"-6\"\n                            [leftPx]=\"-24\"\n                            display=\"block\"\n                        >\n                            <span>{{ column.heading }}</span>\n                        </vdr-ui-extension-point>\n                        <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\n                            <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\n                                <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\n                                <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\n                                <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\n                            </button>\n                            <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\n                        </div>\n                    </div>\n                </th>\n                <th>\n                    <div class=\"column-picker\">\n                        <vdr-data-table-colum-picker\n                            [uiLanguage]=\"uiLanguage$ | async\"\n                            [columns]=\"sortedColumns\"\n                            (reorder)=\"onColumnReorder($event)\"\n                            (resetColumns)=\"onColumnsReset()\"\n                        ></vdr-data-table-colum-picker>\n                    </div>\n                </th>\n            </tr>\n            <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\n                <th\n                    [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\n                    class=\"filter-row\"\n                    [class.active]=\"showSearchFilterRow\"\n                >\n                    <button\n                        class=\"button-ghost toggle-search-filter-row\"\n                        [class.active]=\"showSearchFilterRow\"\n                        (click)=\"toggleSearchFilterRow()\"\n                        [title]=\"'common.search-and-filter-list' | translate\"\n                    >\n                        <clr-icon shape=\"search\"></clr-icon>\n                    </button>\n                    <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\n                        <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\n                        <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\n                        <ng-container *ngIf=\"filters\">\n                            <div class=\"filters\">\n                                <vdr-data-table-filters\n                                    *ngFor=\"let activeFilter of filters.activeFilters\"\n                                    [filterWithValue]=\"activeFilter\"\n                                    [filters]=\"filters\"\n                                    class=\"mt-1\"\n                                ></vdr-data-table-filters>\n                                <vdr-data-table-filters\n                                    *ngIf=\"filters.length\"\n                                    [filters]=\"filters\"\n                                    class=\"mt-1\"\n                                ></vdr-data-table-filters>\n                                <vdr-add-filter-preset-button\n                                    [filters]=\"filters\"\n                                    [dataTableId]=\"id\"\n                                ></vdr-add-filter-preset-button>\n                            </div>\n                        </ng-container>\n                    </div>\n                </th>\n            </tr>\n        </thead>\n        <tbody\n            cdkDropList\n            cdkDropListLockAxis=\"y\"\n            (cdkDropListDropped)=\"onDrop($event)\"\n            [cdkDropListSortPredicate]=\"sortPredicate\"\n        >\n            <ng-container\n                *ngFor=\"\n                let item of items\n                    | paginate\n                        : {\n                              itemsPerPage: itemsPerPage,\n                              currentPage: currentPage,\n                              totalItems: totalItems,\n                              id: id,\n                          };\n                index as i;\n                trackBy: trackByFn.bind(this)\n            \"\n            >\n                <ng-container\n                    [ngTemplateOutlet]=\"collectionRowTmp\"\n                    [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\n                ></ng-container>\n            </ng-container>\n            <ng-container>\n                <tr *ngIf=\"!items?.length\">\n                    <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\n                        <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\n                    </td>\n                </tr>\n            </ng-container>\n        </tbody>\n    </table>\n</div>\n<div class=\"table-footer\">\n    <vdr-items-per-page-controls\n        *ngIf=\"totalItems\"\n        [itemsPerPage]=\"itemsPerPage\"\n        (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\n    ></vdr-items-per-page-controls>\n    <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\n        {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\n    </div>\n\n    <vdr-pagination-controls\n        *ngIf=\"totalItems\"\n        [id]=\"id\"\n        [currentPage]=\"currentPage\"\n        [itemsPerPage]=\"itemsPerPage\"\n        [totalItems]=\"totalItems\"\n        (pageChange)=\"pageChange.emit($event)\"\n    ></vdr-pagination-controls>\n</div>\n\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\n    <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\n        <td\n            *ngIf=\"selectionManager\"\n            [class.active]=\"activeIndex === absoluteIndex[item.id]\"\n            class=\"selection-col\"\n        >\n            <div class=\"flex\">\n                <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\n                    <clr-icon shape=\"drag-handle\"></clr-icon>\n                </div>\n                <input\n                    type=\"checkbox\"\n                    clrCheckbox\n                    [checked]=\"selectionManager?.isSelected(item)\"\n                    (click)=\"onRowClick(item, $event)\"\n                />\n            </div>\n        </td>\n        <td\n            *ngFor=\"let column of visibleSortedColumns\"\n            [class.active]=\"activeIndex === absoluteIndex[item.id]\"\n        >\n            <div class=\"cell-content\" [ngClass]=\"column.align\">\n                <ng-container\n                    *ngIf=\"customComponents.get(column.id) as componentConfig; else defaultComponent\"\n                >\n                    <ng-container\n                        *ngComponentOutlet=\"\n                            componentConfig.config.component;\n                            inputs: { rowItem: item };\n                            injector: componentConfig.injector\n                        \"\n                    ></ng-container>\n                </ng-container>\n                <ng-template #defaultComponent>\n                    <ng-container\n                        *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\n                    ></ng-container>\n                </ng-template>\n            </div>\n        </td>\n        <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\n    </tr>\n    <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\n        <ng-container\n            *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\n        ></ng-container>\n    </ng-container>\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    OnDestroy,\n    OnInit,\n    ViewChild,\n} from '@angular/core';\nimport { FormBuilder, UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    Asset,\n    COLLECTION_FRAGMENT,\n    CollectionDetailQueryDocument,\n    CollectionFragment,\n    ConfigurableOperation,\n    ConfigurableOperationDefinition,\n    ConfigurableOperationInput,\n    CreateCollectionInput,\n    createUpdatedTranslatable,\n    DataService,\n    encodeConfigArgValue,\n    findTranslation,\n    getConfigArgValue,\n    getCustomFieldsDefaults,\n    LanguageCode,\n    LocalStorageService,\n    ModalService,\n    NotificationService,\n    Permission,\n    TypedBaseDetailComponent,\n    unicodePatternValidator,\n    UpdateCollectionInput,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { gql } from 'apollo-angular';\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, take } from 'rxjs/operators';\n\nimport { CollectionContentsComponent } from '../collection-contents/collection-contents.component';\n\nexport const COLLECTION_DETAIL_QUERY = gql`\n    query CollectionDetailQuery($id: ID!) {\n        collection(id: $id) {\n            ...Collection\n        }\n    }\n    ${COLLECTION_FRAGMENT}\n`;\n\n@Component({\n    selector: 'vdr-collection-detail',\n    templateUrl: './collection-detail.component.html',\n    styleUrls: ['./collection-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class CollectionDetailComponent\n    extends TypedBaseDetailComponent<typeof CollectionDetailQueryDocument, 'collection'>\n    implements OnInit, OnDestroy\n{\n    customFields = this.getCustomFieldConfig('Collection');\n    detailForm = this.formBuilder.group({\n        name: ['', Validators.required],\n        slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/u)],\n        description: '',\n        visible: false,\n        inheritFilters: true,\n        filters: this.formBuilder.array([]),\n        customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n    });\n    assetChanges: { assets?: Asset[]; featuredAsset?: Asset } = {};\n    filters: ConfigurableOperation[] = [];\n    allFilters: ConfigurableOperationDefinition[] = [];\n    updatedFilters$: Observable<ConfigurableOperationInput[]>;\n    inheritFilters$: Observable<boolean>;\n    livePreview = false;\n    parentId$: Observable<string | undefined>;\n    readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateCollection];\n    private filterRemoved$ = new Subject<void>();\n    @ViewChild('collectionContents') contentsComponent: CollectionContentsComponent;\n\n    constructor(\n        private changeDetector: ChangeDetectorRef,\n        protected dataService: DataService,\n        private formBuilder: FormBuilder,\n        private notificationService: NotificationService,\n        private modalService: ModalService,\n        private localStorageService: LocalStorageService,\n    ) {\n        super();\n        this.livePreview = this.localStorageService.get('livePreviewCollectionContents') ?? false;\n    }\n\n    ngOnInit() {\n        this.init();\n        this.dataService.collection.getCollectionFilters().single$.subscribe(res => {\n            this.allFilters = res.collectionFilters;\n        });\n        const filtersFormArray = this.detailForm.get('filters') as UntypedFormArray;\n        const inheritFiltersControl = this.detailForm.get('inheritFilters') as UntypedFormControl;\n        this.inheritFilters$ = inheritFiltersControl.valueChanges.pipe(distinctUntilChanged());\n        this.updatedFilters$ = merge(filtersFormArray.statusChanges, this.filterRemoved$).pipe(\n            debounceTime(200),\n            filter(() => filtersFormArray.touched),\n            map(() =>\n                this.mapOperationsToInputs(this.filters, filtersFormArray.value).filter(_filter => {\n                    // ensure all the arguments have valid values. E.g. a newly-added\n                    // filter will not yet have valid values\n                    for (const arg of _filter.arguments) {\n                        if (arg.value === '') {\n                            return false;\n                        }\n                    }\n                    return true;\n                }),\n            ),\n        );\n        this.parentId$ = this.route.paramMap.pipe(\n            map(pm => pm.get('parentId') || undefined),\n            switchMap(parentId => {\n                if (parentId) {\n                    return of(parentId);\n                } else {\n                    return this.entity$.pipe(map(collection => collection.parent?.id));\n                }\n            }),\n        );\n    }\n\n    ngOnDestroy() {\n        this.destroy();\n    }\n\n    getFilterDefinition(_filter: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n        return this.allFilters.find(f => f.code === _filter.code);\n    }\n\n    assetsChanged(): boolean {\n        return !!Object.values(this.assetChanges).length;\n    }\n\n    /**\n     * If creating a new Collection, automatically generate the slug based on the collection name.\n     */\n    updateSlug(nameValue: string) {\n        const slugControl = this.detailForm.get(['slug']);\n        const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\n        const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\n        if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\n            slugControl.setValue(normalizeString(`${nameValue}`, '-'));\n        }\n    }\n\n    addFilter(collectionFilter: ConfigurableOperation) {\n        const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\n        const argsHash = collectionFilter.args.reduce(\n            (output, arg) => ({\n                ...output,\n                [arg.name]: getConfigArgValue(arg.value),\n            }),\n            {},\n        );\n        filtersArray.push(\n            this.formBuilder.control({\n                code: collectionFilter.code,\n                args: argsHash,\n            }),\n        );\n        this.filters.push({\n            code: collectionFilter.code,\n            args: collectionFilter.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\n        });\n    }\n\n    removeFilter(index: number) {\n        const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\n        if (index !== -1) {\n            filtersArray.removeAt(index);\n            filtersArray.markAsDirty();\n            filtersArray.markAsTouched();\n            this.filters.splice(index, 1);\n            this.filterRemoved$.next();\n        }\n    }\n\n    create() {\n        if (!this.detailForm.dirty) {\n            return;\n        }\n        const input = this.getUpdatedCollection(\n            {\n                id: '',\n                createdAt: '',\n                updatedAt: '',\n                languageCode: this.languageCode,\n                name: '',\n                slug: '',\n                isPrivate: false,\n                breadcrumbs: [],\n                description: '',\n                featuredAsset: null,\n                assets: [],\n                translations: [],\n                inheritFilters: true,\n                filters: [],\n                parent: {} as any,\n                children: null,\n            },\n            this.detailForm,\n            this.languageCode,\n        ) as CreateCollectionInput;\n        const parentId = this.route.snapshot.paramMap.get('parentId');\n        if (parentId) {\n            input.parentId = parentId;\n        }\n        this.dataService.collection.createCollection(input).subscribe(\n            data => {\n                this.notificationService.success(_('common.notify-create-success'), {\n                    entity: 'Collection',\n                });\n                this.assetChanges = {};\n                this.detailForm.markAsPristine();\n                this.changeDetector.markForCheck();\n                this.router.navigate(['../', data.createCollection.id], { relativeTo: this.route });\n            },\n            err => {\n                this.notificationService.error(_('common.notify-create-error'), {\n                    entity: 'Collection',\n                });\n            },\n        );\n    }\n\n    save() {\n        combineLatest(this.entity$, this.languageCode$)\n            .pipe(\n                take(1),\n                mergeMap(([category, languageCode]) => {\n                    const input = this.getUpdatedCollection(\n                        category,\n                        this.detailForm,\n                        languageCode,\n                    ) as UpdateCollectionInput;\n                    return this.dataService.collection.updateCollection(input);\n                }),\n            )\n            .subscribe(\n                () => {\n                    this.assetChanges = {};\n                    this.detailForm.markAsPristine();\n                    this.changeDetector.markForCheck();\n                    this.notificationService.success(_('common.notify-update-success'), {\n                        entity: 'Collection',\n                    });\n                    this.contentsComponent.refresh();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'Collection',\n                    });\n                },\n            );\n    }\n\n    canDeactivate(): boolean {\n        return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\n    }\n\n    toggleLivePreview() {\n        this.livePreview = !this.livePreview;\n        this.localStorageService.set('livePreviewCollectionContents', this.livePreview);\n    }\n\n    trackByFn(index: number, item: ConfigurableOperation) {\n        return JSON.stringify(item);\n    }\n\n    /**\n     * Sets the values of the form on changes to the category or current language.\n     */\n    protected setFormValues(entity: CollectionFragment, languageCode: LanguageCode) {\n        const currentTranslation = findTranslation(entity, languageCode);\n\n        this.detailForm.patchValue({\n            name: currentTranslation ? currentTranslation.name : '',\n            slug: currentTranslation ? currentTranslation.slug : '',\n            description: currentTranslation ? currentTranslation.description : '',\n            visible: !entity.isPrivate,\n            inheritFilters: entity.inheritFilters,\n        });\n\n        const formArray = this.detailForm.get('filters') as UntypedFormArray;\n        if (formArray.length !== entity.filters.length) {\n            formArray.clear();\n            this.filters = [];\n            entity.filters.forEach(f => this.addFilter(f));\n        }\n\n        if (this.customFields.length) {\n            this.setCustomFieldFormValues(\n                this.customFields,\n                this.detailForm.get(['customFields']),\n                entity,\n                currentTranslation,\n            );\n        }\n    }\n\n    /**\n     * Given a category and the value of the form, this method creates an updated copy of the category which\n     * can then be persisted to the API.\n     */\n    private getUpdatedCollection(\n        category: CollectionFragment,\n        form: typeof this.detailForm,\n        languageCode: LanguageCode,\n    ): CreateCollectionInput | UpdateCollectionInput {\n        const updatedCategory = createUpdatedTranslatable({\n            translatable: category,\n            updatedFields: form.value,\n            customFieldConfig: this.customFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: category.name || '',\n                slug: category.slug || '',\n                description: category.description || '',\n            },\n        });\n        return {\n            ...updatedCategory,\n            assetIds: this.assetChanges.assets?.map(a => a.id),\n            featuredAssetId: this.assetChanges.featuredAsset?.id,\n            isPrivate: !form.value.visible,\n            filters: this.mapOperationsToInputs(this.filters, this.detailForm.value.filters),\n        };\n    }\n\n    /**\n     * Maps an array of conditions or actions to the input format expected by the GraphQL API.\n     */\n    private mapOperationsToInputs(\n        operations: ConfigurableOperation[],\n        formValueOperations: any,\n    ): ConfigurableOperationInput[] {\n        return operations.map((o, i) => ({\n            code: o.code,\n            arguments: Object.entries(formValueOperations[i].args).map(([name, value], j) => ({\n                name,\n                value: encodeConfigArgValue(value),\n            })),\n        }));\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector\n                [disabled]=\"isNew$ | async\"\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"languageCode$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"collection-detail\" />\n            <button\n                class=\"btn btn-primary\"\n                *ngIf=\"isNew$ | async; else updateButton\"\n                (click)=\"create()\"\n                [disabled]=\"detailForm.invalid || detailForm.pristine\"\n            >\n                {{ 'common.create' | translate }}\n            </button>\n            <ng-template #updateButton>\n                <button\n                    *vdrIfPermissions=\"updatePermission\"\n                    class=\"btn btn-primary\"\n                    (click)=\"save()\"\n                    [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\n                >\n                    {{ 'common.update' | translate }}\n                </button>\n            </ng-template>\n            <vdr-action-bar-dropdown-menu locationId=\"collection-detail\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\">\n    <vdr-page-detail-layout>\n        <vdr-page-detail-sidebar>\n            <vdr-card>\n                <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n                    <clr-toggle-wrapper>\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            formControlName=\"visible\"\n                            id=\"visibility\"\n                            [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n                        />\n                        <label class=\"visible-toggle\">\n                            <ng-container *ngIf=\"detailForm.value.visible; else private\">{{\n                                'catalog.public' | translate\n                            }}</ng-container>\n                            <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\n                        </label>\n                    </clr-toggle-wrapper>\n                </vdr-form-field>\n            </vdr-card>\n            <vdr-card *ngIf=\"entity$ | async as entity\">\n                <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\n            </vdr-card>\n        </vdr-page-detail-sidebar>\n\n        <vdr-page-block *ngIf=\"entity$ | async as entity\"\n            ><nav role=\"navigation\">\n                <ul class=\"collection-breadcrumbs\">\n                    <li *ngFor=\"let breadcrumb of entity.breadcrumbs; let isFirst = first; let isLast = last\">\n                        <a [routerLink]=\"['/catalog/collections']\" *ngIf=\"isFirst\">{{\n                            'catalog.root-collection' | translate\n                        }}</a>\n                        <a\n                            [routerLink]=\"['/catalog/collections', breadcrumb.id]\"\n                            *ngIf=\"!isFirst && !isLast\"\n                            >{{ breadcrumb.name | translate }}</a\n                        >\n                        <ng-container *ngIf=\"isLast\">{{ breadcrumb.name | translate }}</ng-container>\n                    </li>\n                </ul>\n            </nav>\n        </vdr-page-block>\n\n        <vdr-page-block>\n            <vdr-card>\n                <div class=\"form-grid\">\n                    <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n                        <input\n                            id=\"name\"\n                            type=\"text\"\n                            formControlName=\"name\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            (input)=\"updateSlug($event.target.value)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-field\n                        [label]=\"'catalog.slug' | translate\"\n                        for=\"slug\"\n                        [errors]=\"{ pattern: ('catalog.slug-pattern-error' | translate) }\"\n                    >\n                        <input\n                            id=\"slug\"\n                            type=\"text\"\n                            formControlName=\"slug\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-field\n                        class=\"form-grid-span\"\n                        [label]=\"'common.description' | translate\"\n                        for=\"slug\"\n                    >\n                        <vdr-rich-text-editor\n                            formControlName=\"description\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                        ></vdr-rich-text-editor>\n                    </vdr-form-field>\n                </div>\n            </vdr-card>\n            <vdr-card\n                formGroupName=\"customFields\"\n                *ngIf=\"customFields.length\"\n                [title]=\"'common.custom-fields' | translate\"\n            >\n                <vdr-tabbed-custom-fields\n                    entityName=\"Collection\"\n                    [customFields]=\"customFields\"\n                    [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n                    [readonly]=\"!(updatePermission | hasPermission)\"\n                ></vdr-tabbed-custom-fields>\n            </vdr-card>\n            <vdr-custom-detail-component-host\n                locationId=\"collection-detail\"\n                [entity$]=\"entity$\"\n                [detailForm]=\"detailForm\"\n            ></vdr-custom-detail-component-host>\n            <vdr-card [title]=\"'catalog.assets' | translate\">\n                <vdr-assets\n                    [assets]=\"entity?.assets\"\n                    [featuredAsset]=\"entity?.featuredAsset\"\n                    [updatePermissions]=\"updatePermission\"\n                    (change)=\"assetChanges = $event\"\n                ></vdr-assets>\n            </vdr-card>\n            <vdr-card [title]=\"'catalog.filters' | translate\">\n                <vdr-form-field [label]=\"'catalog.filter-inheritance' | translate\" for=\"inheritFilters\">\n                    <clr-toggle-wrapper>\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            formControlName=\"inheritFilters\"\n                            id=\"inheritFilters\"\n                            [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n                        />\n                        <label class=\"visible-toggle\">\n                            <ng-container *ngIf=\"detailForm.value.inheritFilters; else noInherit\">{{\n                                'catalog.inherit-filters-from-parent' | translate\n                            }}</ng-container>\n                            <ng-template #noInherit>{{\n                                'catalog.do-not-inherit-filters' | translate\n                            }}</ng-template>\n                        </label>\n                    </clr-toggle-wrapper>\n                </vdr-form-field>\n                <div formArrayName=\"filters\">\n                    <ng-container *ngFor=\"let filter of filters; index as i; trackBy: trackByFn\">\n                        <vdr-configurable-input\n                            (remove)=\"removeFilter(i)\"\n                            [position]=\"i\"\n                            [operation]=\"filter\"\n                            [operationDefinition]=\"getFilterDefinition(filter)\"\n                            [formControlName]=\"i\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                        ></vdr-configurable-input>\n                    </ng-container>\n                </div>\n                <div *vdrIfPermissions=\"updatePermission\">\n                    <vdr-dropdown>\n                        <button class=\"btn btn-outline\" vdrDropdownTrigger>\n                            <clr-icon shape=\"plus\"></clr-icon>\n                            <span>{{ 'marketing.add-condition' | translate }}</span>\n                            <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n                        </button>\n                        <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n                            <button\n                                *ngFor=\"let filter of allFilters\"\n                                type=\"button\"\n                                vdrDropdownItem\n                                (click)=\"addFilter(filter)\"\n                            >\n                                {{ filter.description }}\n                            </button>\n                        </vdr-dropdown-menu>\n                    </vdr-dropdown>\n                </div>\n            </vdr-card>\n\n            <vdr-card [title]=\"'common.contents' | translate\" [paddingX]=\"false\">\n                <vdr-collection-contents\n                    [collectionId]=\"id\"\n                    [parentId]=\"parentId$ | async\"\n                    [updatedFilters]=\"updatedFilters$ | async\"\n                    [inheritFilters]=\"inheritFilters$ | async\"\n                    [previewUpdatedFilters]=\"livePreview\"\n                    #collectionContents\n                >\n                    <ng-template let-count>\n                        <div class=\"ml-3\">\n                            <div class=\"contents-title\">\n                                {{ 'catalog.collection-contents' | translate }} ({{\n                                    'common.results-count' | translate : { count: count }\n                                }})\n                            </div>\n                            <clr-checkbox-wrapper [class.disabled]=\"detailForm.get('filters')?.pristine\">\n                                <input\n                                    type=\"checkbox\"\n                                    clrCheckbox\n                                    [ngModelOptions]=\"{ standalone: true }\"\n                                    [disabled]=\"detailForm.get('filters')?.pristine\"\n                                    [ngModel]=\"livePreview\"\n                                    (ngModelChange)=\"toggleLivePreview()\"\n                                />\n                                <label>{{ 'catalog.live-preview-contents' | translate }}</label>\n                            </clr-checkbox-wrapper>\n                        </div>\n                    </ng-template>\n                </vdr-collection-contents>\n            </vdr-card>\n        </vdr-page-block>\n    </vdr-page-detail-layout>\n</form>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\n\n/**\n * Removes the root collection and self breadcrumb from the collection breadcrumb list.\n */\n@Pipe({\n    name: 'collectionBreadcrumb',\n    standalone: false\n})\nexport class CollectionBreadcrumbPipe implements PipeTransform {\n    transform(value: ItemOf<GetCollectionListQuery, 'collections'>): unknown {\n        return value?.breadcrumbs.slice(1, -1);\n    }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { DataService, Dialog, GetCollectionListQuery, I18nService, ItemOf } from '@vendure/admin-ui/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-move-collections-dialog',\n    templateUrl: './move-collections-dialog.component.html',\n    styleUrls: ['./move-collections-dialog.component.scss', '../collection-list/collection-list-common.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class MoveCollectionsDialogComponent\n    implements OnInit, Dialog<ItemOf<GetCollectionListQuery, 'collections'>>\n{\n    resolveWith: (result?: ItemOf<GetCollectionListQuery, 'collections'>) => void;\n    searchTermControl = new FormControl('');\n    items$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\n    totalItems$: Observable<number>;\n    currentPage$ = new BehaviorSubject(1);\n    itemsPerPage$ = new BehaviorSubject(10);\n    expandedIds$ = new Subject<string[]>();\n    expandedIds: string[] = [];\n    subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\n\n    constructor(private dataService: DataService, private i18nService: I18nService) {}\n\n    ngOnInit() {\n        const getCollectionsResult = this.dataService.collection.getCollections();\n\n        const searchTerm$ = this.searchTermControl.valueChanges.pipe(\n            debounceTime(250),\n            distinctUntilChanged(),\n            startWith(''),\n        );\n        const currentPage$ = this.currentPage$.pipe(distinctUntilChanged());\n        const itemsPerPage$ = this.itemsPerPage$.pipe(distinctUntilChanged());\n        combineLatest(searchTerm$, currentPage$, itemsPerPage$).subscribe(\n            ([searchTerm, currentPage, itemsPerPage]) => {\n                const topLevelOnly = searchTerm === '';\n                getCollectionsResult.ref.refetch({\n                    options: {\n                        skip: (currentPage - 1) * itemsPerPage,\n                        take: itemsPerPage,\n                        filter: {\n                            name: { contains: searchTerm },\n                        },\n                        topLevelOnly,\n                    },\n                });\n            },\n        );\n\n        const rootCollectionId$ = this.dataService.collection\n            .getCollections({\n                take: 1,\n                topLevelOnly: true,\n            })\n            .mapSingle(data => data.collections.items[0].parentId);\n\n        this.items$ = combineLatest(\n            getCollectionsResult.mapStream(({ collections }) => collections),\n            rootCollectionId$,\n        ).pipe(\n            map(([collections, rootCollectionId]) => [\n                ...(rootCollectionId\n                    ? [\n                          {\n                              id: rootCollectionId,\n                              name: this.i18nService.translate('catalog.root-collection'),\n                              slug: '',\n                              parentId: '__',\n                              position: 0,\n                              featuredAsset: null,\n                              children: [],\n                              breadcrumbs: [],\n                              isPrivate: false,\n                              createdAt: '',\n                              updatedAt: '',\n                          } satisfies ItemOf<GetCollectionListQuery, 'collections'>,\n                      ]\n                    : []),\n                ...collections.items,\n            ]),\n        );\n        this.totalItems$ = getCollectionsResult.mapStream(data => data.collections.totalItems);\n\n        this.subCollections$ = this.expandedIds$.pipe(\n            tap(val => (this.expandedIds = val)),\n            switchMap(ids => {\n                if (ids.length) {\n                    return this.dataService.collection\n                        .getCollections({\n                            take: 999,\n                            filter: {\n                                parentId: { in: ids },\n                            },\n                        })\n                        .mapStream(data => data.collections.items);\n                } else {\n                    return of([]);\n                }\n            }),\n        );\n    }\n\n    toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\n        let expandedIds = this.expandedIds;\n        if (!expandedIds.includes(collection.id)) {\n            expandedIds.push(collection.id);\n        } else {\n            expandedIds = expandedIds.filter(id => id !== collection.id);\n        }\n        this.expandedIds$.next(expandedIds);\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.move-collections' | translate }}\n</ng-template>\n<vdr-collection-data-table\n    class=\"mt-2\"\n    id=\"move-collection-list\"\n    [items]=\"items$ | async\"\n    [subCollections]=\"subCollections$ | async\"\n    [itemsPerPage]=\"itemsPerPage$ | async\"\n    [totalItems]=\"totalItems$ | async\"\n    [currentPage]=\"currentPage$ | async\"\n    (pageChange)=\"currentPage$.next($event)\"\n    (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\n>\n    <vdr-dt2-search\n        [searchTermControl]=\"searchTermControl\"\n        [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\n    ></vdr-dt2-search>\n    <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n        <ng-template let-collection=\"item\">\n            {{ collection.id }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\n        <ng-template let-collection=\"item\" let-depth=\"depth\">\n            <div [ngClass]=\"'indent-' + depth\"></div>\n            <clr-icon\n                class=\"child-arrow\"\n                [class.transparent]=\"depth === 0\"\n                shape=\"child-arrow\"\n                *ngIf=\"!collection.children?.length && collection.parentId !== '__'\"\n            ></clr-icon>\n            <button\n                class=\"icon-button folder-button\"\n                *ngIf=\"collection.children?.length\"\n                (click)=\"toggleExpanded(collection)\"\n            >\n                <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\n                <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\n            </button>\n            <button class=\"icon-button folder-button\" *ngIf=\"collection.parentId === '__'\" disabled>\n                <clr-icon shape=\"folder\" class=\"is-solid\"></clr-icon>\n            </button>\n            <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\n                <span>{{ 'catalog.move-collection-to' | translate : {name: collection.name} }}</span>\n            </button>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\n        <ng-template let-collection=\"item\">\n            <div class=\"breadcrumb\">\n                <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\n                    <ng-container *ngIf=\"breadcrumbs.length\">\n                        <div *ngFor=\"let item of breadcrumbs\">\n                            <span class=\"separator\">/</span>{{ item.name }}\n                        </div>\n                    </ng-container>\n                    <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\n                </ng-container>\n            </div>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\">\n        <ng-template let-collection=\"item\">\n            {{ collection.slug }}\n        </ng-template>\n    </vdr-dt2-column>\n</vdr-collection-data-table>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    BulkAction,\n    createBulkAssignToChannelAction,\n    createBulkDeleteAction,\n    createBulkRemoveFromChannelAction,\n    DataService,\n    DuplicateEntityDialogComponent,\n    GetCollectionListQuery,\n    ItemOf,\n    ModalService,\n    MoveCollectionInput,\n    NotificationService,\n    Permission,\n} from '@vendure/admin-ui/core';\nimport { EMPTY } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CollectionPartial } from '../collection-tree/collection-tree.types';\nimport { MoveCollectionsDialogComponent } from '../move-collections-dialog/move-collections-dialog.component';\n\nimport { CollectionListComponent } from './collection-list.component';\n\nexport const deleteCollectionsBulkAction = createBulkDeleteAction<\n    ItemOf<GetCollectionListQuery, 'collections'>\n>({\n    location: 'collection-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteCollection) ||\n        userPermissions.includes(Permission.DeleteCatalog),\n    getItemName: item => item.name,\n    bulkDelete: (dataService, ids) =>\n        dataService.collection.deleteCollections(ids).pipe(map(res => res.deleteCollections)),\n});\n\nexport const moveCollectionsBulkAction: BulkAction<CollectionPartial, CollectionListComponent> = {\n    location: 'collection-list',\n    label: _('catalog.move-collections'),\n    icon: 'drag-handle',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateCollection),\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const dataService = injector.get(DataService);\n        const notificationService = injector.get(NotificationService);\n        modalService\n            .fromComponent(MoveCollectionsDialogComponent, {\n                size: 'xl',\n                closable: true,\n            })\n            .pipe(\n                switchMap(result => {\n                    if (result) {\n                        const inputs: MoveCollectionInput[] = selection.map(c => ({\n                            collectionId: c.id,\n                            parentId: result.id,\n                            index: 0,\n                        }));\n                        return dataService.collection.moveCollection(inputs);\n                    } else {\n                        return EMPTY;\n                    }\n                }),\n            )\n            .subscribe(result => {\n                notificationService.success(_('catalog.move-collections-success'), {\n                    count: selection.length,\n                });\n                clearSelection();\n                hostComponent.refresh();\n            });\n    },\n};\n\nexport const assignCollectionsToChannelBulkAction = createBulkAssignToChannelAction<\n    ItemOf<GetCollectionListQuery, 'collections'>\n>({\n    location: 'collection-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateCollection),\n    getItemName: item => item.name,\n    bulkAssignToChannel: (dataService, collectionIds, channelIds) =>\n        channelIds.map(channelId =>\n            dataService.collection\n                .assignCollectionsToChannel({\n                    collectionIds,\n                    channelId,\n                })\n                .pipe(map(res => res.assignCollectionsToChannel)),\n        ),\n});\n\nexport const removeCollectionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n    ItemOf<GetCollectionListQuery, 'collections'>\n>({\n    location: 'collection-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteCatalog) ||\n        userPermissions.includes(Permission.DeleteCollection),\n    getItemName: item => item.name,\n    bulkRemoveFromChannel: (dataService, collectionIds, channelId) =>\n        dataService.collection\n            .removeCollectionsFromChannel({\n                channelId: channelId,\n                collectionIds,\n            })\n            .pipe(map(res => res.removeCollectionsFromChannel)),\n});\n\nexport const duplicateCollectionsBulkAction: BulkAction<\n    ItemOf<GetCollectionListQuery, 'collections'>,\n    CollectionListComponent\n> = {\n    location: 'collection-list',\n    label: _('common.duplicate'),\n    icon: 'copy',\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        modalService\n            .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetCollectionListQuery, 'collections'>>, {\n                locals: {\n                    entities: selection,\n                    entityName: 'Collection',\n                    title: _('catalog.duplicate-collections'),\n                    getEntityName: entity => entity.name,\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    clearSelection();\n                    hostComponent.refresh();\n                }\n            });\n    },\n};\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    DataService,\n    GetCollectionListDocument,\n    GetCollectionListQuery,\n    ItemOf,\n    LanguageCode,\n    NotificationService,\n    TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, takeUntil } from 'rxjs/operators';\nimport { CollectionOrderEvent } from '../collection-data-table/collection-data-table.component';\n\n@Component({\n    selector: 'vdr-collection-list',\n    templateUrl: './collection-list.component.html',\n    styleUrls: ['./collection-list.component.scss', './collection-list-common.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CollectionListComponent\n    extends TypedBaseListComponent<typeof GetCollectionListDocument, 'collections'>\n    implements OnInit\n{\n    activeCollectionId$: Observable<string | null>;\n    activeCollectionIndex$: Observable<number>;\n    activeCollectionTitle$: Observable<string>;\n    subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\n    expandedIds: string[] = [];\n    dataTableListId = 'collection-list';\n    readonly customFields = this.getCustomFieldConfig('Collection');\n    readonly filters = this.createFilterCollection()\n        .addIdFilter()\n        .addDateFilters()\n        .addFilter({\n            name: 'slug',\n            label: _('common.slug'),\n            type: { kind: 'text' },\n            filterField: 'slug',\n        })\n        .addFilter({\n            name: 'visibility',\n            type: { kind: 'boolean' },\n            label: _('common.visibility'),\n            toFilterInput: value => ({\n                isPrivate: { eq: !value },\n            }),\n        })\n        .addCustomFieldFilters(this.customFields)\n        .connectToRoute(this.route);\n    readonly sorts = this.createSortCollection()\n        .defaultSort('position', 'ASC')\n        .addSort({ name: 'createdAt' })\n        .addSort({ name: 'updatedAt' })\n        .addSort({ name: 'name' })\n        .addSort({ name: 'slug' })\n        .addSort({ name: 'position' })\n        .addCustomFieldSorts(this.customFields)\n        .connectToRoute(this.route);\n\n    constructor(\n        protected dataService: DataService,\n        private notificationService: NotificationService,\n    ) {\n        super();\n        super.configure({\n            document: GetCollectionListDocument,\n            getItems: data => data.collections,\n            setVariables: (skip, _take) => {\n                const topLevelOnly =\n                    this.searchTermControl.value === '' && this.filters.activeFilters.length === 0\n                        ? true\n                        : undefined;\n                return {\n                    options: {\n                        skip,\n                        take: _take,\n                        filter: {\n                            name: { contains: this.searchTermControl.value },\n                            ...this.filters.createFilterInput(),\n                        },\n                        topLevelOnly,\n                        sort: this.sorts.createSortInput(),\n                    },\n                };\n            },\n            refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n        });\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.activeCollectionId$ = this.route.paramMap.pipe(\n            map(pm => pm.get('contents')),\n            distinctUntilChanged(),\n        );\n        const expandedIds$ = this.route.queryParamMap.pipe(\n            map(qpm => qpm.get('expanded')),\n            distinctUntilChanged(),\n            map(ids => (ids ? ids.split(',') : [])),\n        );\n        expandedIds$.pipe(takeUntil(this.destroy$)).subscribe(ids => {\n            this.expandedIds = ids;\n        });\n        this.subCollections$ = combineLatest(expandedIds$, this.refresh$).pipe(\n            switchMap(([ids]) => {\n                if (ids.length) {\n                    return this.dataService.collection\n                        .getCollections({\n                            take: 999,\n                            filter: {\n                                parentId: { in: ids },\n                            },\n                        })\n                        .mapStream(data => data.collections.items);\n                } else {\n                    return of([]);\n                }\n            }),\n        );\n\n        this.activeCollectionTitle$ = combineLatest(\n            this.activeCollectionId$,\n            this.items$,\n            this.subCollections$,\n        ).pipe(\n            map(([id, collections, subCollections]) => {\n                if (id) {\n                    const match = [...collections, ...subCollections].find(c => c.id === id);\n                    return match ? match.name : '';\n                }\n                return '';\n            }),\n        );\n        this.activeCollectionIndex$ = combineLatest(\n            this.activeCollectionId$,\n            this.items$,\n            this.subCollections$,\n        ).pipe(\n            map(([id, collections, subCollections]) => {\n                if (id) {\n                    const allCollections: typeof collections = [];\n                    for (const collection of collections) {\n                        allCollections.push(collection);\n                        const subCollectionMatches = subCollections.filter(\n                            c => c.parentId && c.parentId === collection.id,\n                        );\n                        allCollections.push(...subCollectionMatches);\n                    }\n                    return allCollections.findIndex(c => c.id === id);\n                }\n                return -1;\n            }),\n        );\n    }\n\n    onRearrange(event: CollectionOrderEvent) {\n        this.dataService.collection.moveCollection([event]).subscribe({\n            next: () => {\n                this.notificationService.success(_('common.notify-saved-changes'));\n                this.refresh();\n            },\n            error: err => {\n                this.notificationService.error(_('common.notify-save-changes-error'));\n            },\n        });\n    }\n\n    closeContents() {\n        const params = { ...this.route.snapshot.params };\n        delete params.contents;\n        this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\n    }\n\n    setLanguage(code: LanguageCode) {\n        this.dataService.client.setContentLanguage(code).subscribe();\n    }\n\n    toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\n        let expandedIds = this.expandedIds;\n        if (!expandedIds.includes(collection.id)) {\n            expandedIds.push(collection.id);\n        } else {\n            expandedIds = expandedIds.filter(id => id !== collection.id);\n        }\n        this.router.navigate(['./'], {\n            queryParams: {\n                expanded: expandedIds.filter(id => !!id).join(','),\n            },\n            queryParamsHandling: 'merge',\n            relativeTo: this.route,\n        });\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"contentLanguage$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"collection-list\" />\n            <a\n                class=\"btn btn-primary\"\n                *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\n                [routerLink]=\"['./create']\"\n            >\n                <clr-icon shape=\"plus\"></clr-icon>\n                {{ 'catalog.create-new-collection' | translate }}\n            </a>\n            <vdr-action-bar-dropdown-menu locationId=\"collection-list\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\n    <ng-template vdrSplitViewLeft>\n        <vdr-collection-data-table\n            class=\"mt-2\"\n            [id]=\"dataTableListId\"\n            [items]=\"items$ | async\"\n            [subCollections]=\"subCollections$ | async\"\n            [itemsPerPage]=\"itemsPerPage$ | async\"\n            [totalItems]=\"totalItems$ | async\"\n            [currentPage]=\"currentPage$ | async\"\n            [filters]=\"filters\"\n            [activeIndex]=\"activeCollectionIndex$ | async\"\n            (pageChange)=\"setPageNumber($event)\"\n            (itemsPerPageChange)=\"setItemsPerPage($event)\"\n            (changeOrder)=\"onRearrange($event)\"\n            (visibleColumnsChange)=\"setVisibleColumns($event)\"\n        >\n            <vdr-bulk-action-menu\n                locationId=\"collection-list\"\n                [hostComponent]=\"this\"\n                [selectionManager]=\"selectionManager\"\n            ></vdr-bulk-action-menu>\n            <vdr-dt2-search\n                [searchTermControl]=\"searchTermControl\"\n                [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\n            ></vdr-dt2-search>\n            <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n                <ng-template let-collection=\"item\">\n                    {{ collection.id }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column\n                [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n                [hiddenByDefault]=\"true\"\n                [sort]=\"sorts.get('createdAt')\"\n            >\n                <ng-template let-collection=\"item\">\n                    {{ collection.createdAt | localeDate : 'short' }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column\n                [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n                [hiddenByDefault]=\"true\"\n                [sort]=\"sorts.get('updatedAt')\"\n            >\n                <ng-template let-collection=\"item\">\n                    {{ collection.updatedAt | localeDate : 'short' }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column\n                [heading]=\"'common.position' | translate\" id=\"position\"\n                [hiddenByDefault]=\"true\"\n                [sort]=\"sorts.get('position')\"\n            >\n                <ng-template let-collection=\"item\">\n                    {{ collection.position }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column\n                [heading]=\"'common.name' | translate\" id=\"name\"\n                [optional]=\"false\"\n                [sort]=\"sorts.get('name')\"\n            >\n                <ng-template let-collection=\"item\" let-depth=\"depth\">\n                    <div [ngClass]=\"'indent-' + depth\"></div>\n                    <clr-icon\n                        class=\"child-arrow\"\n                        [class.transparent]=\"depth === 0\"\n                        shape=\"child-arrow\"\n                        *ngIf=\"!collection.children?.length\"\n                    ></clr-icon>\n                    <button\n                        class=\"icon-button folder-button\"\n                        *ngIf=\"collection.children?.length\"\n                        (click)=\"toggleExpanded(collection)\"\n                    >\n                        <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\n                        <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\n                    </button>\n                    <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\n                        ><span>{{ collection.name }}</span>\n                        <clr-icon shape=\"arrow right\"></clr-icon>\n                    </a>\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\n                <ng-template let-collection=\"item\">\n                    <div class=\"breadcrumb\">\n                        <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\n                            <ng-container *ngIf=\"breadcrumbs.length\">\n                                <div *ngFor=\"let item of breadcrumbs\">\n                                    <span class=\"separator\">/</span>{{ item.name }}\n                                </div>\n                            </ng-container>\n                            <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\n                        </ng-container>\n                    </div>\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\n                <ng-template let-collection=\"item\">\n                    {{ collection.slug }}\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\n                <ng-template let-collection=\"item\">\n                    <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\n                        'common.private' | translate\n                        }}</vdr-chip>\n                    <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\n                        'common.public' | translate\n                        }}</vdr-chip>\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\n                <ng-template let-collection=\"item\">\n                    <a\n                        class=\"button-small bg-weight-150\"\n                        [routerLink]=\"['./', { contents: collection.id }]\"\n                        [queryParams]=\"{ contentsPage: 1 }\"\n                        queryParamsHandling=\"merge\"\n                    >\n                        <span>{{ 'common.view-contents' | translate }}</span>\n                        <clr-icon shape=\"file-group\"></clr-icon>\n                    </a>\n                </ng-template>\n            </vdr-dt2-column>\n            <vdr-dt2-custom-field-column\n                *ngFor=\"let customField of customFields\"\n                [customField]=\"customField\"\n                [sorts]=\"sorts\"\n            />\n        </vdr-collection-data-table>\n    </ng-template>\n    <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\n        <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\n            <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\n        </ng-container>\n    </ng-template>\n</vdr-split-view>\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { RootNode, TreeNode } from './array-to-tree';\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\n\n/**\n * Facilitates communication between the CollectionTreeComponent and child CollectionTreeNodeComponents\n * without introducing a cyclic dependency.\n */\n@Injectable()\nexport class CollectionTreeService implements OnDestroy {\n    private allMoveListItems: Array<{ path: string; id: string; ancestorIdPath: Set<string> }> = [];\n    private collectionTree: RootNode<CollectionPartial>;\n    private _rearrange$ = new Subject<RearrangeEvent>();\n    private _delete$ = new Subject<string>();\n\n    public rearrange$: Observable<RearrangeEvent>;\n    public delete$: Observable<string>;\n\n    constructor() {\n        this.rearrange$ = this._rearrange$.asObservable();\n        this.delete$ = this._delete$.asObservable();\n    }\n\n    ngOnDestroy() {\n        this._rearrange$.complete();\n        this._delete$.complete();\n    }\n\n    setCollectionTree(tree: RootNode<CollectionPartial>) {\n        this.collectionTree = tree;\n    }\n\n    resetMoveList() {\n        this.allMoveListItems = [];\n    }\n\n    getMoveListItems(collection: CollectionPartial) {\n        if (this.allMoveListItems.length === 0) {\n            this.allMoveListItems = this.calculateAllMoveListItems();\n        }\n        return this.allMoveListItems.filter(\n            item =>\n                item.id !== collection.id &&\n                !item.ancestorIdPath.has(collection.id) &&\n                item.id !== collection.parent?.id,\n        );\n    }\n\n    onDrop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\n        const item = event.item.data as CollectionPartial;\n        const newParent = event.container.data;\n        const newParentId = newParent.id;\n        if (newParentId == null) {\n            throw new Error(`Could not determine the ID of the root Collection`);\n        }\n        this._rearrange$.next({\n            collectionId: item.id,\n            parentId: newParentId,\n            index: event.currentIndex,\n        });\n    }\n\n    onMove(event: RearrangeEvent) {\n        this._rearrange$.next(event);\n    }\n\n    onDelete(id: string) {\n        this._delete$.next(id);\n    }\n\n    private calculateAllMoveListItems() {\n        const visit = (\n            node: TreeNode<any>,\n            parentPath: string[],\n            ancestorIdPath: Set<string>,\n            output: Array<{ path: string; id: string; ancestorIdPath: Set<string> }>,\n        ) => {\n            const path = parentPath.concat(node.name);\n            output.push({ path: path.slice(1).join(' / ') || 'root', id: node.id, ancestorIdPath });\n            node.children.forEach(child =>\n                visit(child, path, new Set<string>([...ancestorIdPath, node.id]), output),\n            );\n            return output;\n        };\n        return visit(this.collectionTree, [], new Set<string>(), []);\n    }\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    SimpleChanges,\n    SkipSelf,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DataService, Permission, SelectionManager } from '@vendure/admin-ui/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\n\nimport { RootNode, TreeNode } from './array-to-tree';\nimport { CollectionTreeService } from './collection-tree.service';\nimport { CollectionPartial } from './collection-tree.types';\n\n@Component({\n    selector: 'vdr-collection-tree-node',\n    templateUrl: './collection-tree-node.component.html',\n    styleUrls: ['./collection-tree-node.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CollectionTreeNodeComponent implements OnInit, OnChanges, OnDestroy {\n    depth = 0;\n    parentName: string;\n    @Input() collectionTree: TreeNode<CollectionPartial>;\n    @Input() activeCollectionId: string;\n    @Input() expandAll = false;\n    @Input() selectionManager: SelectionManager<CollectionPartial>;\n    hasUpdatePermission$: Observable<boolean>;\n    hasDeletePermission$: Observable<boolean>;\n    moveListItems: Array<{ path: string; id: string }> = [];\n    private subscription: Subscription;\n\n    constructor(\n        @SkipSelf() @Optional() private parent: CollectionTreeNodeComponent,\n        private dataService: DataService,\n        private collectionTreeService: CollectionTreeService,\n        private router: Router,\n        private route: ActivatedRoute,\n        private changeDetectorRef: ChangeDetectorRef,\n    ) {\n        if (parent) {\n            this.depth = parent.depth + 1;\n        }\n    }\n\n    ngOnInit() {\n        this.parentName = this.collectionTree.name || '<root>';\n        const permissions$ = this.dataService.client\n            .userStatus()\n            .mapStream(data => data.userStatus.permissions)\n            .pipe(shareReplay(1));\n        this.hasUpdatePermission$ = permissions$.pipe(\n            map(\n                perms =>\n                    perms.includes(Permission.UpdateCatalog) || perms.includes(Permission.UpdateCollection),\n            ),\n        );\n        this.hasDeletePermission$ = permissions$.pipe(\n            map(\n                perms =>\n                    perms.includes(Permission.DeleteCatalog) || perms.includes(Permission.DeleteCollection),\n            ),\n        );\n        this.subscription = this.selectionManager?.selectionChanges$.subscribe(() =>\n            this.changeDetectorRef.markForCheck(),\n        );\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const expandAllChange = changes['expandAll'];\n        if (expandAllChange) {\n            if (expandAllChange.previousValue === true && expandAllChange.currentValue === false) {\n                this.collectionTree.children.forEach(c => (c.expanded = false));\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this.subscription?.unsubscribe();\n    }\n\n    trackByFn(index: number, item: CollectionPartial) {\n        return item.id;\n    }\n\n    toggleExpanded(collection: TreeNode<CollectionPartial>) {\n        collection.expanded = !collection.expanded;\n        let expandedIds = this.route.snapshot.queryParamMap.get('expanded')?.split(',') ?? [];\n        if (collection.expanded) {\n            expandedIds.push(collection.id);\n        } else {\n            expandedIds = expandedIds.filter(id => id !== collection.id);\n        }\n        this.router.navigate(['./'], {\n            queryParams: {\n                expanded: expandedIds.filter(id => !!id).join(','),\n            },\n            queryParamsHandling: 'merge',\n            relativeTo: this.route,\n        });\n    }\n\n    getMoveListItems(collection: CollectionPartial) {\n        this.moveListItems = this.collectionTreeService.getMoveListItems(collection);\n    }\n\n    move(collection: CollectionPartial, parentId: string) {\n        this.collectionTreeService.onMove({\n            index: 0,\n            parentId,\n            collectionId: collection.id,\n        });\n    }\n\n    moveUp(collection: CollectionPartial, currentIndex: number) {\n        if (!collection.parent) {\n            return;\n        }\n        this.collectionTreeService.onMove({\n            index: currentIndex - 1,\n            parentId: collection.parent.id,\n            collectionId: collection.id,\n        });\n    }\n\n    moveDown(collection: CollectionPartial, currentIndex: number) {\n        if (!collection.parent) {\n            return;\n        }\n        this.collectionTreeService.onMove({\n            index: currentIndex + 1,\n            parentId: collection.parent.id,\n            collectionId: collection.id,\n        });\n    }\n\n    drop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\n        moveItemInArray(this.collectionTree.children, event.previousIndex, event.currentIndex);\n        this.collectionTreeService.onDrop(event);\n    }\n\n    delete(id: string) {\n        this.collectionTreeService.onDelete(id);\n    }\n}\n","<div\n    cdkDropList\n    class=\"tree-node\"\n    #dropList\n    [cdkDropListData]=\"collectionTree\"\n    [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\n    (cdkDropListDropped)=\"drop($event)\"\n>\n    <div\n        class=\"collection\"\n        [class.private]=\"collection.isPrivate\"\n        *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\n        cdkDrag\n        [cdkDragData]=\"collection\"\n    >\n        <div\n            class=\"collection-detail\"\n            [ngClass]=\"'depth-' + depth\"\n            [class.active]=\"collection.id === activeCollectionId\"\n        >\n            <div>\n                <input\n                    type=\"checkbox\"\n                    clrCheckbox\n                    [checked]=\"selectionManager.isSelected(collection)\"\n                    (click)=\"selectionManager.toggleSelection(collection, $event)\"\n                />\n            </div>\n            <div class=\"name\">\n                <button\n                    class=\"icon-button folder-button\"\n                    [disabled]=\"expandAll\"\n                    *ngIf=\"collection.children?.length; else folderSpacer\"\n                    (click)=\"toggleExpanded(collection)\"\n                >\n                    <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\n                    <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\n                </button>\n                <ng-template #folderSpacer>\n                    <div class=\"folder-button-spacer\"></div>\n                </ng-template>\n                {{ collection.name }}\n            </div>\n            <div class=\"flex-spacer\"></div>\n            <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\n            <a\n                class=\"btn btn-link btn-sm\"\n                [routerLink]=\"['./', { contents: collection.id }]\"\n                queryParamsHandling=\"preserve\"\n            >\n                <clr-icon shape=\"view-list\"></clr-icon>\n                {{ 'catalog.view-contents' | translate }}\n            </a>\n            <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\n                <clr-icon shape=\"edit\"></clr-icon>\n                {{ 'common.edit' | translate }}\n            </a>\n            <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\n                <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\n            </div>\n            <vdr-dropdown>\n                <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\n                    <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n                </button>\n                <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n                    <a\n                        class=\"dropdown-item\"\n                        [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\n                        *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\n                    >\n                        <clr-icon shape=\"plus\"></clr-icon>\n                        {{ 'catalog.create-new-collection' | translate }}\n                    </a>\n                    <div class=\"dropdown-divider\"></div>\n                    <button\n                        type=\"button\"\n                        vdrDropdownItem\n                        [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\n                        (click)=\"moveUp(collection, i)\"\n                    >\n                        <clr-icon shape=\"caret up\"></clr-icon>\n                        {{ 'catalog.move-up' | translate }}\n                    </button>\n                    <button\n                        type=\"button\"\n                        vdrDropdownItem\n                        [disabled]=\"\n                            i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\n                        \"\n                        (click)=\"moveDown(collection, i)\"\n                    >\n                        <clr-icon shape=\"caret down\"></clr-icon>\n                        {{ 'catalog.move-down' | translate }}\n                    </button>\n                    <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\n                    <button\n                        type=\"button\"\n                        vdrDropdownItem\n                        *ngFor=\"let item of moveListItems\"\n                        (click)=\"move(collection, item.id)\"\n                        [disabled]=\"!(hasUpdatePermission$ | async)\"\n                    >\n                        <div class=\"move-to-item\">\n                            <div class=\"move-icon\">\n                                <clr-icon shape=\"child-arrow\"></clr-icon>\n                            </div>\n                            <div class=\"path\">\n                                {{ item.path }}\n                            </div>\n                        </div>\n                    </button>\n                    <div class=\"dropdown-divider\"></div>\n                    <button\n                        class=\"button\"\n                        vdrDropdownItem\n                        (click)=\"delete(collection.id)\"\n                        [disabled]=\"!(hasDeletePermission$ | async)\"\n                    >\n                        <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n                        {{ 'common.delete' | translate }}\n                    </button>\n                </vdr-dropdown-menu>\n            </vdr-dropdown>\n        </div>\n        <vdr-collection-tree-node\n            *ngIf=\"collection.expanded || expandAll\"\n            [expandAll]=\"expandAll\"\n            [collectionTree]=\"collection\"\n            [activeCollectionId]=\"activeCollectionId\"\n            [selectionManager]=\"selectionManager\"\n        ></vdr-collection-tree-node>\n    </div>\n</div>\n","export type HasParent = { id: string; parent?: { id: string } | null };\nexport type TreeNode<T extends HasParent> = T & { children: Array<TreeNode<T>>; expanded: boolean };\nexport type RootNode<T extends HasParent> = { id?: string; children: Array<TreeNode<T>> };\n\n/**\n * Builds a tree from an array of nodes which have a parent.\n * Based on https://stackoverflow.com/a/31247960/772859, modified to preserve ordering.\n */\nexport function arrayToTree<T extends HasParent>(\n    nodes: T[],\n    currentState?: RootNode<T>,\n    expandedIds: string[] = [],\n): RootNode<T> {\n    const topLevelNodes: Array<TreeNode<T>> = [];\n    const mappedArr: { [id: string]: TreeNode<T> } = {};\n    const currentStateMap = treeToMap(currentState);\n\n    // First map the nodes of the array to an object -> create a hash table.\n    for (const node of nodes) {\n        mappedArr[node.id] = { ...(node as any), children: [] };\n    }\n\n    for (const id of nodes.map(n => n.id)) {\n        if (mappedArr.hasOwnProperty(id)) {\n            const mappedElem = mappedArr[id];\n            mappedElem.expanded = currentStateMap.get(id)?.expanded ?? expandedIds.includes(id);\n            const parent = mappedElem.parent;\n            if (!parent) {\n                continue;\n            }\n            // If the element is not at the root level, add it to its parent array of children.\n            const parentIsRoot = !mappedArr[parent.id];\n            if (!parentIsRoot) {\n                if (mappedArr[parent.id]) {\n                    mappedArr[parent.id].children.push(mappedElem);\n                } else {\n                    mappedArr[parent.id] = { children: [mappedElem] } as any;\n                }\n            } else {\n                topLevelNodes.push(mappedElem);\n            }\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const rootId = topLevelNodes.length ? topLevelNodes[0].parent!.id : undefined;\n    return { id: rootId, children: topLevelNodes };\n}\n\n/**\n * Converts an existing tree (as generated by the arrayToTree function) into a flat\n * Map. This is used to persist certain states (e.g. `expanded`) when re-building the\n * tree.\n */\nfunction treeToMap<T extends HasParent>(tree?: RootNode<T>): Map<string, TreeNode<T>> {\n    const nodeMap = new Map<string, TreeNode<T>>();\n    function visit(node: TreeNode<T>) {\n        nodeMap.set(node.id, node);\n        node.children.forEach(visit);\n    }\n    if (tree) {\n        visit(tree as TreeNode<T>);\n    }\n    return nodeMap;\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n} from '@angular/core';\nimport { Collection, SelectionManager } from '@vendure/admin-ui/core';\n\nimport { arrayToTree, RootNode } from './array-to-tree';\nimport { CollectionTreeService } from './collection-tree.service';\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\n\n@Component({\n    selector: 'vdr-collection-tree',\n    templateUrl: 'collection-tree.component.html',\n    styleUrls: ['./collection-tree.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [CollectionTreeService],\n    standalone: false\n})\nexport class CollectionTreeComponent implements OnInit, OnChanges {\n    @Input() collections: CollectionPartial[];\n    @Input() activeCollectionId: string;\n    @Input() expandAll = false;\n    @Input() expandedIds: string[] = [];\n    @Input() selectionManager: SelectionManager<CollectionPartial>;\n    @Output() rearrange = new EventEmitter<RearrangeEvent>();\n    @Output() deleteCollection = new EventEmitter<string>();\n    collectionTree: RootNode<CollectionPartial>;\n\n    constructor(private collectionTreeService: CollectionTreeService) {}\n\n    ngOnChanges(changes: SimpleChanges) {\n        if ('collections' in changes && this.collections) {\n            this.collectionTree = arrayToTree(this.collections, this.collectionTree, this.expandedIds);\n            this.collectionTreeService.setCollectionTree(this.collectionTree);\n            this.collectionTreeService.resetMoveList();\n        }\n    }\n\n    ngOnInit() {\n        this.collectionTreeService.rearrange$.subscribe(event => this.rearrange.emit(event));\n        this.collectionTreeService.delete$.subscribe(id => this.deleteCollection.emit(id));\n    }\n}\n","<vdr-collection-tree-node\n    *ngIf=\"collectionTree\"\n    cdkDropListGroup\n    [expandAll]=\"expandAll\"\n    [collectionTree]=\"collectionTree\"\n    [selectionManager]=\"selectionManager\"\n    [activeCollectionId]=\"activeCollectionId\"\n></vdr-collection-tree-node>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { Dialog, GetProductVariantOptionsQuery } from '@vendure/admin-ui/core';\n\n@Component({\n    selector: 'vdr-confirm-variant-deletion-dialog',\n    templateUrl: './confirm-variant-deletion-dialog.component.html',\n    styleUrls: ['./confirm-variant-deletion-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ConfirmVariantDeletionDialogComponent implements Dialog<boolean> {\n    resolveWith: (result?: boolean) => void;\n    variants: NonNullable<GetProductVariantOptionsQuery['product']>['variants'] = [];\n\n    confirm() {\n        this.resolveWith(true);\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.confirm-deletion-of-unused-variants-title' | translate }}\n</ng-template>\n{{ 'catalog.confirm-deletion-of-unused-variants-body' | translate }}\n<ul>\n    <li *ngFor=\"let variant of variants\">{{ variant.name }} ({{ variant.sku }})</li>\n</ul>\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\">\n        {{ 'common.confirm' | translate }}\n    </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { CreateFacetValueInput, Dialog, LanguageCode } from '@vendure/admin-ui/core';\n\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\n\n@Component({\n    selector: 'vdr-create-facet-value-dialog',\n    templateUrl: './create-facet-value-dialog.component.html',\n    styleUrls: ['./create-facet-value-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CreateFacetValueDialogComponent implements Dialog<CreateFacetValueInput> {\n    resolveWith: (result?: CreateFacetValueInput) => void;\n    languageCode: LanguageCode;\n    form = this.formBuilder.group({\n        name: ['', Validators.required],\n        code: ['', Validators.required],\n    });\n    facetId: string;\n    constructor(private formBuilder: FormBuilder) {}\n\n    updateCode() {\n        const nameControl = this.form.get('name');\n        const codeControl = this.form.get('code');\n        if (nameControl && codeControl && codeControl.pristine) {\n            codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\n        }\n    }\n\n    confirm() {\n        const { name, code } = this.form.value;\n        if (!name || !code) {\n            return;\n        }\n        this.resolveWith({\n            facetId: this.facetId,\n            code,\n            translations: [{ languageCode: this.languageCode, name }],\n        });\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n}\n","<ng-template vdrDialogTitle>\n    {{ 'catalog.create-facet-value' | translate }}\n</ng-template>\n<div class=\"form-grid\" [formGroup]=\"form\">\n    <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n        <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\n    </vdr-form-field>\n    <vdr-form-field\n        [label]=\"'common.code' | translate\"\n        for=\"code\"\n    >\n        <input\n            id=\"code\"\n            type=\"text\"\n            formControlName=\"code\"\n        />\n    </vdr-form-field>\n</div>\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n        {{ 'common.confirm' | translate }}\n    </button>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport {\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    FormRecord,\n    UntypedFormControl,\n    UntypedFormGroup,\n    Validators,\n} from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    CreateFacetInput,\n    createUpdatedTranslatable,\n    DataService,\n    DeletionResult,\n    FACET_WITH_VALUE_LIST_FRAGMENT,\n    FacetWithValueListFragment,\n    findTranslation,\n    getCustomFieldsDefaults,\n    GetFacetDetailDocument,\n    GetFacetDetailQuery,\n    GetFacetDetailQueryVariables,\n    LanguageCode,\n    ModalService,\n    NotificationService,\n    Permission,\n    TypedBaseDetailComponent,\n    UpdateFacetInput,\n    UpdateFacetValueInput,\n} from '@vendure/admin-ui/core';\nimport { SortOrder } from '@vendure/common/lib/generated-types';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\nimport { gql } from 'apollo-angular';\nimport { BehaviorSubject, combineLatest, EMPTY, forkJoin, Observable } from 'rxjs';\nimport { debounceTime, map, mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { CreateFacetValueDialogComponent } from '../create-facet-value-dialog/create-facet-value-dialog.component';\n\nexport const FACET_DETAIL_QUERY = gql`\n    query GetFacetDetail($id: ID!, $facetValueListOptions: FacetValueListOptions) {\n        facet(id: $id) {\n            ...FacetWithValueList\n        }\n    }\n    ${FACET_WITH_VALUE_LIST_FRAGMENT}\n`;\n\ntype ValueItem =\n    | FacetWithValueListFragment['valueList']['items'][number]\n    | { id: string; name: string; code: string };\n\n@Component({\n    selector: 'vdr-facet-detail',\n    templateUrl: './facet-detail.component.html',\n    styleUrls: ['./facet-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class FacetDetailComponent\n    extends TypedBaseDetailComponent<typeof GetFacetDetailDocument, 'facet'>\n    implements OnInit, OnDestroy\n{\n    readonly customFields = this.getCustomFieldConfig('Facet');\n    readonly customValueFields = this.getCustomFieldConfig('FacetValue');\n    detailForm = this.formBuilder.group({\n        facet: this.formBuilder.group({\n            code: ['', Validators.required],\n            name: '',\n            visible: true,\n            customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n        }),\n        values: this.formBuilder.record<\n            FormGroup<{\n                id: FormControl<string>;\n                name: FormControl<string>;\n                code: FormControl<string>;\n                customFields: FormGroup;\n            }>\n        >({}),\n    });\n    currentPage = 1;\n    itemsPerPage = 10;\n    totalItems = 0;\n    filterControl = new FormControl('');\n    values$ = new BehaviorSubject<ValueItem[]>([]);\n    readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateFacet];\n\n    constructor(\n        private changeDetector: ChangeDetectorRef,\n        protected dataService: DataService,\n        private formBuilder: FormBuilder,\n        private notificationService: NotificationService,\n        private modalService: ModalService,\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        this.init();\n        this.filterControl.valueChanges\n            .pipe(debounceTime(200), takeUntil(this.destroy$))\n            .subscribe(filterTerm => {\n                this.currentPage = 1;\n                this.fetchFacetValues(this.currentPage, this.itemsPerPage, filterTerm);\n            });\n    }\n\n    ngOnDestroy() {\n        this.destroy();\n    }\n\n    updateCode(currentCode: string, nameValue: string) {\n        if (!currentCode) {\n            const codeControl = this.detailForm.get(['facet', 'code']);\n            if (codeControl && codeControl.pristine) {\n                codeControl.setValue(normalizeString(nameValue, '-'));\n            }\n        }\n    }\n\n    updateValueCode(currentCode: string, nameValue: string, valueId: string) {\n        if (!currentCode) {\n            const codeControl = this.detailForm.get(['values', valueId, 'code']);\n            if (codeControl && codeControl.pristine) {\n                codeControl.setValue(normalizeString(nameValue, '-'));\n            }\n        }\n    }\n\n    customValueFieldIsSet(index: number, name: string): boolean {\n        return !!this.detailForm.get(['values', index, 'customFields', name]);\n    }\n\n    addFacetValue() {\n        this.modalService\n            .fromComponent(CreateFacetValueDialogComponent, {\n                locals: {\n                    languageCode: this.languageCode,\n                    facetId: this.id,\n                },\n            })\n            .pipe(\n                switchMap(result => {\n                    if (!result) {\n                        return EMPTY;\n                    } else {\n                        return this.dataService.facet.createFacetValues([result]);\n                    }\n                }),\n            )\n            .subscribe(result => {\n                if (result.createFacetValues) {\n                    this.notificationService.success(_('common.notify-create-success'), {\n                        entity: 'FacetValue',\n                    });\n                    this.currentPage = 1;\n                    this.fetchFacetValues(this.currentPage, this.itemsPerPage);\n                }\n            });\n    }\n\n    create() {\n        const facetForm = this.detailForm.get('facet') as (typeof this.detailForm)['controls']['facet'];\n        if (!facetForm || !facetForm.dirty) {\n            return;\n        }\n        const newFacet = this.getUpdatedFacet(\n            {\n                id: '',\n                createdAt: '',\n                updatedAt: '',\n                isPrivate: false,\n                languageCode: this.languageCode,\n                name: '',\n                code: '',\n                translations: [],\n            },\n            facetForm,\n            this.languageCode,\n        ) as CreateFacetInput;\n        this.dataService.facet.createFacet(newFacet).subscribe(\n            data => {\n                this.notificationService.success(_('common.notify-create-success'), { entity: 'Facet' });\n                this.detailForm.markAsPristine();\n                this.changeDetector.markForCheck();\n                this.router.navigate(['../', data.createFacet.id], { relativeTo: this.route });\n            },\n            err => {\n                this.notificationService.error(_('common.notify-create-error'), {\n                    entity: 'Facet',\n                });\n            },\n        );\n    }\n\n    save() {\n        const valuesFormRecord = this.detailForm.get(\n            'values',\n        ) as (typeof this.detailForm)['controls']['values'];\n        combineLatest(this.entity$, this.languageCode$)\n            .pipe(\n                take(1),\n                mergeMap(([facet, languageCode]) => {\n                    const facetForm = this.detailForm.get(\n                        'facet',\n                    ) as (typeof this.detailForm)['controls']['facet'];\n                    const updateOperations: Array<Observable<any>> = [];\n\n                    if (facetForm && facetForm.dirty) {\n                        const updatedFacetInput = this.getUpdatedFacet(\n                            facet,\n                            facetForm,\n                            languageCode,\n                        ) as UpdateFacetInput;\n                        if (updatedFacetInput) {\n                            updateOperations.push(this.dataService.facet.updateFacet(updatedFacetInput));\n                        }\n                    }\n                    if (valuesFormRecord && valuesFormRecord.dirty) {\n                        const updatedValues = this.getUpdatedFacetValues(valuesFormRecord, languageCode);\n                        if (updatedValues.length) {\n                            updateOperations.push(this.dataService.facet.updateFacetValues(updatedValues));\n                        }\n                    }\n                    return forkJoin(updateOperations);\n                }),\n            )\n            .subscribe(\n                () => {\n                    this.detailForm.markAsPristine();\n                    this.changeDetector.markForCheck();\n                    this.notificationService.success(_('common.notify-update-success'), { entity: 'Facet' });\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'Facet',\n                    });\n                },\n            );\n    }\n\n    deleteFacetValue(facetValueId: string) {\n        this.showModalAndDelete(facetValueId)\n            .pipe(\n                switchMap(response => {\n                    if (response.result === DeletionResult.DELETED) {\n                        return [true];\n                    } else {\n                        return this.showModalAndDelete(facetValueId, response.message || '').pipe(\n                            map(r => r.result === DeletionResult.DELETED),\n                        );\n                    }\n                }),\n                switchMap(deleted =>\n                    deleted\n                        ? this.dataService.query(GetFacetDetailDocument, {\n                              id: this.id,\n                          }).single$\n                        : [],\n                ),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('common.notify-delete-success'), {\n                        entity: 'FacetValue',\n                    });\n                    this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-delete-error'), {\n                        entity: 'FacetValue',\n                    });\n                },\n            );\n    }\n\n    private showModalAndDelete(facetValueId: string, message?: string) {\n        return this.modalService\n            .dialog({\n                title: _('catalog.confirm-delete-facet-value'),\n                body: message,\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(result =>\n                    result ? this.dataService.facet.deleteFacetValues([facetValueId], !!message) : EMPTY,\n                ),\n                map(result => result.deleteFacetValues[0]),\n            );\n    }\n\n    protected setCurrentPage(newPage: number) {\n        this.currentPage = newPage;\n        this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\n    }\n\n    protected setItemsPerPage(itemsPerPage: number) {\n        this.itemsPerPage = itemsPerPage;\n        this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\n    }\n\n    private fetchFacetValues(currentPage: number, itemsPerPage: number, filterTerm?: string | null) {\n        this.dataService\n            .query<GetFacetDetailQuery, GetFacetDetailQueryVariables>(FACET_DETAIL_QUERY, {\n                id: this.id,\n                facetValueListOptions: {\n                    take: itemsPerPage,\n                    skip: (currentPage - 1) * itemsPerPage,\n                    sort: {\n                        createdAt: SortOrder.DESC,\n                    },\n                    ...(filterTerm ? { filter: { name: { contains: filterTerm } } } : {}),\n                },\n            })\n            .single$.subscribe(({ facet }) => {\n                if (facet) {\n                    this.values$.next([...facet.valueList.items]);\n                    this.totalItems = facet.valueList.totalItems;\n                    this.setFacetValueFormValues(facet, this.languageCode);\n                }\n            });\n    }\n\n    /**\n     * Sets the values of the form on changes to the facet or current language.\n     */\n    protected setFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\n        const currentTranslation = findTranslation(facet, languageCode);\n\n        this.detailForm.patchValue({\n            facet: {\n                code: facet.code,\n                visible: !facet.isPrivate,\n                name: currentTranslation?.name ?? '',\n            },\n        });\n\n        if (this.customFields.length) {\n            this.setCustomFieldFormValues(\n                this.customFields,\n                this.detailForm.get(['facet', 'customFields']),\n                facet,\n                currentTranslation,\n            );\n        }\n        this.values$.next([...facet.valueList.items]);\n        this.totalItems = facet.valueList.totalItems;\n        this.setFacetValueFormValues(facet, languageCode);\n    }\n\n    private setFacetValueFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\n        const currentValuesFormGroup = this.detailForm.get('values') as FormRecord;\n        facet.valueList.items.forEach(value => {\n            const valueTranslation = findTranslation(value, languageCode);\n            const group = {\n                id: value.id,\n                code: value.code,\n                name: valueTranslation ? valueTranslation.name : '',\n            };\n            let valueControl = currentValuesFormGroup.get(value.id) as FormGroup;\n            if (!valueControl) {\n                valueControl = this.formBuilder.group(group);\n                currentValuesFormGroup.addControl(value.id, valueControl);\n            } else {\n                valueControl.patchValue(group);\n            }\n            if (this.customValueFields.length) {\n                let customValueFieldsGroup = valueControl.get(['customFields']) as\n                    | UntypedFormGroup\n                    | undefined;\n                if (!customValueFieldsGroup) {\n                    customValueFieldsGroup = new UntypedFormGroup({});\n                    valueControl.addControl('customFields', customValueFieldsGroup);\n                }\n\n                if (customValueFieldsGroup) {\n                    for (const fieldDef of this.customValueFields) {\n                        const key = fieldDef.name;\n                        const fieldValue =\n                            fieldDef.type === 'localeString'\n                                ? (valueTranslation as any | undefined)?.customFields?.[key]\n                                : (value as any).customFields[key];\n                        const control = customValueFieldsGroup.get(key);\n                        if (control) {\n                            control.setValue(fieldValue);\n                        } else {\n                            customValueFieldsGroup.addControl(key, new UntypedFormControl(fieldValue));\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Given a facet and the value of the detailForm, this method creates an updated copy of the facet which\n     * can then be persisted to the API.\n     */\n    private getUpdatedFacet(\n        facet: Omit<FacetWithValueListFragment, 'valueList'>,\n        facetFormGroup: (typeof this.detailForm)['controls']['facet'],\n        languageCode: LanguageCode,\n    ): CreateFacetInput | UpdateFacetInput {\n        const input = createUpdatedTranslatable({\n            translatable: facet,\n            updatedFields: facetFormGroup.value,\n            customFieldConfig: this.customFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: facet.name || '',\n            },\n        });\n        input.isPrivate = !facetFormGroup.value.visible;\n        return input;\n    }\n\n    /**\n     * Given an array of facet values and the values from the detailForm, this method creates a new array\n     * which can be persisted to the API via an updateFacetValues mutation.\n     */\n    private getUpdatedFacetValues(\n        valuesFormGroup: FormGroup,\n        languageCode: LanguageCode,\n    ): UpdateFacetValueInput[] {\n        const dirtyValueValues = Object.values(valuesFormGroup.controls)\n            .filter(c => c.dirty)\n            .map(c => c.value);\n\n        return dirtyValueValues\n            .map((value, i) =>\n                createUpdatedTranslatable({\n                    translatable: value,\n                    updatedFields: value,\n                    customFieldConfig: this.customValueFields,\n                    languageCode,\n                    defaultTranslation: {\n                        languageCode,\n                        name: '',\n                    },\n                }),\n            )\n            .filter(notNullOrUndefined);\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector\n                [disabled]=\"isNew$ | async\"\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"languageCode$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"facet-detail\" />\n            <button\n                class=\"btn btn-primary\"\n                *ngIf=\"isNew$ | async; else updateButton\"\n                (click)=\"create()\"\n                [disabled]=\"detailForm.invalid || detailForm.pristine\"\n            >\n                {{ 'common.create' | translate }}\n            </button>\n            <ng-template #updateButton>\n                <button\n                    *vdrIfPermissions=\"updatePermission\"\n                    class=\"btn btn-primary\"\n                    (click)=\"save()\"\n                    [disabled]=\"detailForm.invalid || detailForm.pristine\"\n                >\n                    {{ 'common.update' | translate }}\n                </button>\n            </ng-template>\n            <vdr-action-bar-dropdown-menu locationId=\"facet-detail\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\">\n    <vdr-page-detail-layout>\n        <vdr-page-detail-sidebar formGroupName=\"facet\">\n            <vdr-card>\n                <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n                    <clr-toggle-wrapper>\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n                            formControlName=\"visible\"\n                            id=\"visibility\"\n                        />\n                        <label class=\"visible-toggle\">\n                            <ng-container *ngIf=\"detailForm.value.facet?.visible; else private\">{{\n                                'catalog.public' | translate\n                            }}</ng-container>\n                            <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\n                        </label>\n                    </clr-toggle-wrapper>\n                </vdr-form-field>\n            </vdr-card>\n            <vdr-card>\n                <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\n            </vdr-card>\n        </vdr-page-detail-sidebar>\n        <vdr-page-block>\n            <vdr-card formGroupName=\"facet\">\n                <div class=\"form-grid\">\n                    <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n                        <input\n                            id=\"name\"\n                            type=\"text\"\n                            formControlName=\"name\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            (input)=\"updateCode(entity?.code, $event.target.value)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\n                        <input\n                            id=\"code\"\n                            type=\"text\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            formControlName=\"code\"\n                        />\n                    </vdr-form-field>\n                </div>\n            </vdr-card>\n            <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\n                <vdr-tabbed-custom-fields\n                    entityName=\"Facet\"\n                    [customFields]=\"customFields\"\n                    [customFieldsFormGroup]=\"detailForm.get('facet.customFields')\"\n                    [readonly]=\"!(updatePermission | hasPermission)\"\n                />\n            </vdr-card>\n\n            <vdr-custom-detail-component-host\n                locationId=\"facet-detail\"\n                [entity$]=\"entity$\"\n                [detailForm]=\"detailForm\"\n            ></vdr-custom-detail-component-host>\n\n            <vdr-card\n                *ngIf=\"!(isNew$ | async)\"\n                [title]=\"'catalog.facet-values' | translate\"\n                [paddingX]=\"false\"\n            >\n                <ng-template vdrCardControls>\n                    <input\n                        type=\"text\"\n                        class=\"mr-3\"\n                        [formControl]=\"filterControl\"\n                        [placeholder]=\"'catalog.filter-by-name' | translate\"\n                    />\n                </ng-template>\n                <ng-container *ngIf=\"values$ | async as filteredValues\">\n                    <table class=\"facet-values-list table\" formArrayName=\"values\">\n                        <thead>\n                            <tr>\n                                <th></th>\n                                <th>{{ 'common.name' | translate }}</th>\n                                <th>{{ 'common.code' | translate }}</th>\n                                <ng-container *ngIf=\"customValueFields.length\">\n                                    <th>{{ 'common.custom-fields' | translate }}</th>\n                                </ng-container>\n                                <th></th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            <tr\n                                class=\"facet-value\"\n                                *ngFor=\"\n                                    let value of filteredValues\n                                        | paginate\n                                            : {\n                                                  currentPage: currentPage,\n                                                  itemsPerPage: itemsPerPage,\n                                                  totalItems: totalItems,\n                                              };\n                                    let i = index\n                                \"\n                                [formGroup]=\"detailForm.get(['values', value.id])\"\n                            >\n                                <td class=\"align-middle\">\n                                    <vdr-entity-info [entity]=\"value\"></vdr-entity-info>\n                                </td>\n                                <td class=\"align-middle\">\n                                    <input\n                                        type=\"text\"\n                                        formControlName=\"name\"\n                                        [readonly]=\"!(updatePermission | hasPermission)\"\n                                        (input)=\"updateValueCode(value.code, $event.target.value, value.id)\"\n                                    />\n                                </td>\n                                <td class=\"align-middle\">\n                                    <input type=\"text\" formControlName=\"code\" />\n                                </td>\n                                <td class=\"\" *ngIf=\"customValueFields.length\">\n                                    <vdr-tabbed-custom-fields\n                                        entityName=\"FacetValue\"\n                                        [customFields]=\"customValueFields\"\n                                        [compact]=\"true\"\n                                        [customFieldsFormGroup]=\"\n                                            detailForm.get(['values', value.id, 'customFields'])\n                                        \"\n                                        [readonly]=\"!(updatePermission | hasPermission)\"\n                                    ></vdr-tabbed-custom-fields>\n                                </td>\n                                <td class=\"align-middle\">\n                                    <vdr-dropdown>\n                                        <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\n                                            <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n                                        </button>\n                                        <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n                                            <button\n                                                type=\"button\"\n                                                class=\"delete-button\"\n                                                (click)=\"deleteFacetValue(value.id)\"\n                                                [disabled]=\"!(updatePermission | hasPermission)\"\n                                                vdrDropdownItem\n                                            >\n                                                <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n                                                {{ 'common.delete' | translate }}\n                                            </button>\n                                        </vdr-dropdown-menu>\n                                    </vdr-dropdown>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                    <div class=\"pagination-wrapper\">\n                        <vdr-items-per-page-controls\n                            [itemsPerPage]=\"itemsPerPage\"\n                            (itemsPerPageChange)=\"setItemsPerPage($event)\"\n                        ></vdr-items-per-page-controls>\n                        <vdr-pagination-controls\n                            [currentPage]=\"currentPage\"\n                            [itemsPerPage]=\"itemsPerPage\"\n                            [totalItems]=\"totalItems\"\n                            (pageChange)=\"setCurrentPage($event)\"\n                        ></vdr-pagination-controls>\n                    </div>\n                </ng-container>\n                <div>\n                    <button\n                        type=\"button\"\n                        class=\"button m-3\"\n                        *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\n                        (click)=\"addFacetValue()\"\n                    >\n                        <clr-icon shape=\"add\"></clr-icon>\n                        {{ 'catalog.add-facet-value' | translate }}\n                    </button>\n                </div>\n            </vdr-card>\n        </vdr-page-block>\n    </vdr-page-detail-layout>\n</form>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    BulkAction,\n    createBulkAssignToChannelAction,\n    createBulkDeleteAction,\n    createBulkRemoveFromChannelAction,\n    currentChannelIsNotDefault,\n    DataService,\n    DuplicateEntityDialogComponent,\n    getChannelCodeFromUserStatus,\n    GetFacetListQuery,\n    ItemOf,\n    ModalService,\n    NotificationService,\n    Permission,\n    RemoveFacetsFromChannelMutation,\n} from '@vendure/admin-ui/core';\nimport { unique } from '@vendure/common/lib/unique';\nimport { EMPTY, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { FacetListComponent } from './facet-list.component';\n\nexport const deleteFacetsBulkAction = createBulkDeleteAction<ItemOf<GetFacetListQuery, 'facets'>>({\n    location: 'facet-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteFacet) ||\n        userPermissions.includes(Permission.DeleteCatalog),\n    getItemName: item => item.name,\n    shouldRetryItem: (response, item) => !!response.message,\n    bulkDelete: (dataService, ids, retrying) =>\n        dataService.facet.deleteFacets(ids, retrying).pipe(map(res => res.deleteFacets)),\n});\n\nexport const assignFacetsToChannelBulkAction = createBulkAssignToChannelAction<\n    ItemOf<GetFacetListQuery, 'facets'>\n>({\n    location: 'facet-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateFacet),\n    getItemName: item => item.name,\n    bulkAssignToChannel: (dataService, facetIds, channelIds) =>\n        channelIds.map(channelId =>\n            dataService.facet\n                .assignFacetsToChannel({\n                    facetIds,\n                    channelId,\n                })\n                .pipe(map(res => res.assignFacetsToChannel)),\n        ),\n});\n\nexport const removeFacetsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n    ItemOf<GetFacetListQuery, 'facets'>,\n    RemoveFacetsFromChannelMutation['removeFacetsFromChannel'][number]\n>({\n    location: 'facet-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteCatalog) ||\n        userPermissions.includes(Permission.DeleteFacet),\n    getItemName: item => item.name,\n    bulkRemoveFromChannel: (dataService, facetIds, channelId, retrying) =>\n        dataService.facet\n            .removeFacetsFromChannel({\n                channelId: channelId,\n                facetIds,\n                force: retrying,\n            })\n            .pipe(map(res => res.removeFacetsFromChannel)),\n    isErrorResult: result => (result.__typename === 'FacetInUseError' ? result.message : undefined),\n});\n\nexport const removeFacetsFromChannelBulkAction2: BulkAction<\n    ItemOf<GetFacetListQuery, 'facets'>,\n    FacetListComponent\n> = {\n    location: 'facet-list',\n    label: _('catalog.remove-from-channel'),\n    getTranslationVars: ({ injector }) => getChannelCodeFromUserStatus(injector.get(DataService)),\n    icon: 'layers',\n    iconClass: 'is-warning',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateFacet) ||\n        userPermissions.includes(Permission.UpdateCatalog),\n    isVisible: ({ injector }) => currentChannelIsNotDefault(injector.get(DataService)),\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const dataService = injector.get(DataService);\n        const notificationService = injector.get(NotificationService);\n\n        const activeChannelId$ = dataService.client\n            .userStatus()\n            .mapSingle(({ userStatus }) => userStatus.activeChannelId);\n\n        function showModalAndDelete(facetIds: string[], message?: string) {\n            return modalService\n                .dialog({\n                    title: _('catalog.remove-from-channel'),\n                    translationVars: {\n                        count: selection.length,\n                    },\n                    size: message ? 'lg' : 'md',\n                    body: message,\n                    buttons: [\n                        { type: 'secondary', label: _('common.cancel') },\n                        {\n                            type: 'danger',\n                            label: message ? _('common.force-remove') : _('common.remove'),\n                            returnValue: true,\n                        },\n                    ],\n                })\n                .pipe(\n                    switchMap(res =>\n                        res\n                            ? activeChannelId$.pipe(\n                                  switchMap(activeChannelId =>\n                                      activeChannelId\n                                          ? dataService.facet.removeFacetsFromChannel({\n                                                channelId: activeChannelId,\n                                                facetIds,\n                                                force: !!message,\n                                            })\n                                          : EMPTY,\n                                  ),\n                                  map(res2 => res2.removeFacetsFromChannel),\n                              )\n                            : EMPTY,\n                    ),\n                );\n        }\n\n        showModalAndDelete(unique(selection.map(f => f.id)))\n            .pipe(\n                switchMap(result => {\n                    let removedCount = selection.length;\n                    const errors: string[] = [];\n                    const errorIds: string[] = [];\n                    let i = 0;\n                    for (const item of result) {\n                        if (item.__typename === 'FacetInUseError') {\n                            errors.push(item.message);\n                            errorIds.push(selection[i]?.id);\n                            removedCount--;\n                        }\n                        i++;\n                    }\n                    if (0 < errorIds.length) {\n                        return showModalAndDelete(errorIds, errors.join('\\n')).pipe(\n                            map(result2 => {\n                                const notRemovedCount = result2.filter(\n                                    r => r.__typename === 'FacetInUseError',\n                                ).length;\n                                return selection.length - notRemovedCount;\n                            }),\n                        );\n                    } else {\n                        return of(removedCount);\n                    }\n                }),\n                switchMap(removedCount =>\n                    removedCount\n                        ? getChannelCodeFromUserStatus(dataService).then(({ channelCode }) => ({\n                              channelCode,\n                              removedCount,\n                          }))\n                        : EMPTY,\n                ),\n            )\n            .subscribe(({ removedCount, channelCode }) => {\n                if (removedCount) {\n                    hostComponent.refresh();\n                    clearSelection();\n                    notificationService.success(_('catalog.notify-remove-facets-from-channel-success'), {\n                        count: removedCount,\n                        channelCode,\n                    });\n                }\n            });\n    },\n};\n\nexport const duplicateFacetsBulkAction: BulkAction<\n    ItemOf<GetFacetListQuery, 'facets'>,\n    FacetListComponent\n> = {\n    location: 'facet-list',\n    label: _('common.duplicate'),\n    icon: 'copy',\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        modalService\n            .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetFacetListQuery, 'facets'>>, {\n                locals: {\n                    entities: selection,\n                    entityName: 'Facet',\n                    title: _('catalog.duplicate-facets'),\n                    getEntityName: entity => entity.name,\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    clearSelection();\n                    hostComponent.refresh();\n                }\n            });\n    },\n};\n","import { Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    DataService,\n    FACET_WITH_VALUE_LIST_FRAGMENT,\n    GetFacetListDocument,\n    GetFacetListQuery,\n    ItemOf,\n    LanguageCode,\n    TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const FACET_LIST_QUERY = gql`\n    query GetFacetList($options: FacetListOptions, $facetValueListOptions: FacetValueListOptions) {\n        facets(options: $options) {\n            items {\n                ...FacetWithValueList\n            }\n            totalItems\n        }\n    }\n    ${FACET_WITH_VALUE_LIST_FRAGMENT}\n`;\n\n@Component({\n    selector: 'vdr-facet-list',\n    templateUrl: './facet-list.component.html',\n    styleUrls: ['./facet-list.component.scss'],\n    standalone: false\n})\nexport class FacetListComponent\n    extends TypedBaseListComponent<typeof GetFacetListDocument, 'facets'>\n    implements OnInit\n{\n    readonly initialLimit = 3;\n    displayLimit: { [id: string]: number } = {};\n\n    dataTableListId = 'facet-list';\n    readonly customFields = this.getCustomFieldConfig('Facet');\n    readonly filters = this.createFilterCollection()\n        .addIdFilter()\n        .addDateFilters()\n        .addFilter({\n            name: 'visibility',\n            type: { kind: 'boolean' },\n            label: _('common.visibility'),\n            toFilterInput: value => ({\n                isPrivate: { eq: !value },\n            }),\n        })\n        .addCustomFieldFilters(this.customFields)\n        .connectToRoute(this.route);\n\n    readonly sorts = this.createSortCollection()\n        .defaultSort('createdAt', 'DESC')\n        .addSort({ name: 'id' })\n        .addSort({ name: 'createdAt' })\n        .addSort({ name: 'updatedAt' })\n        .addSort({ name: 'name' })\n        .addSort({ name: 'code' })\n        .addCustomFieldSorts(this.customFields)\n        .connectToRoute(this.route);\n\n    constructor(protected dataService: DataService) {\n        super();\n        super.configure({\n            document: GetFacetListDocument,\n            getItems: data => data.facets,\n            setVariables: (skip, take) => ({\n                options: {\n                    skip,\n                    take,\n                    filter: {\n                        name: {\n                            contains: this.searchTermControl.value,\n                        },\n                        ...this.filters.createFilterInput(),\n                    },\n                    sort: this.sorts.createSortInput(),\n                },\n                facetValueListOptions: {\n                    take: 100,\n                },\n            }),\n            refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n        });\n    }\n\n    toggleDisplayLimit(facet: ItemOf<GetFacetListQuery, 'facets'>) {\n        if (this.displayLimit[facet.id] === facet.valueList.items.length) {\n            this.displayLimit[facet.id] = this.initialLimit;\n        } else {\n            this.displayLimit[facet.id] = facet.valueList.items.length;\n        }\n    }\n\n    setLanguage(code: LanguageCode) {\n        this.dataService.client.setContentLanguage(code).subscribe();\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"contentLanguage$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"facet-list\" />\n            <a\n                class=\"btn btn-primary\"\n                [routerLink]=\"['./create']\"\n                *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\n            >\n                <clr-icon shape=\"plus\"></clr-icon>\n                {{ 'catalog.create-new-facet' | translate }}\n            </a>\n            <vdr-action-bar-dropdown-menu locationId=\"facet-list\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n    class=\"mt-2\"\n    [id]=\"dataTableListId\"\n    [items]=\"items$ | async\"\n    [itemsPerPage]=\"itemsPerPage$ | async\"\n    [totalItems]=\"totalItems$ | async\"\n    [currentPage]=\"currentPage$ | async\"\n    [filters]=\"filters\"\n    (pageChange)=\"setPageNumber($event)\"\n    (itemsPerPageChange)=\"setItemsPerPage($event)\"\n    (visibleColumnsChange)=\"setVisibleColumns($event)\"\n>\n    <vdr-bulk-action-menu\n        locationId=\"facet-list\"\n        [hostComponent]=\"this\"\n        [selectionManager]=\"selectionManager\"\n    ></vdr-bulk-action-menu>\n    <vdr-dt2-search\n        [searchTermControl]=\"searchTermControl\"\n        [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\n    ></vdr-dt2-search>\n    <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\n        <ng-template let-facet=\"item\">\n            {{ facet.id }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('createdAt')\"\n    >\n        <ng-template let-facet=\"item\">\n            {{ facet.createdAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('updatedAt')\"\n    >\n        <ng-template let-facet=\"item\">\n            {{ facet.updatedAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n        <ng-template let-facet=\"item\">\n            <a class=\"button-ghost\" [routerLink]=\"['./', facet.id]\"\n                ><span>{{ facet.name }}</span>\n                <clr-icon shape=\"arrow right\"></clr-icon>\n            </a>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n        <ng-template let-facet=\"item\">\n            {{ facet.code }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\n        <ng-template let-facet=\"item\">\n            <vdr-chip *ngIf=\"facet.isPrivate\" colorType=\"warning\">{{\n                'common.private' | translate\n            }}</vdr-chip>\n            <vdr-chip *ngIf=\"!facet.isPrivate\" colorType=\"success\">{{\n                'common.public' | translate\n            }}</vdr-chip>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'catalog.values' | translate\" id=\"values\">\n        <ng-template let-facet=\"item\">\n            <div class=\"facet-values-list\">\n                <vdr-facet-value-chip\n                    *ngFor=\"let value of facet.valueList.items | slice : 0 : displayLimit[facet.id] || 3\"\n                    [facetValue]=\"value\"\n                    [removable]=\"false\"\n                    [displayFacetName]=\"false\"\n                ></vdr-facet-value-chip>\n                <vdr-chip *ngIf=\"displayLimit[facet.id] < facet.valueList.totalItems && (displayLimit[facet.id] || 0) === facet.valueList.items.length\">\n                    ... + {{ facet.valueList.totalItems - facet.valueList.items.length }}\n                </vdr-chip>\n                <button\n                    class=\"button-small\"\n                    *ngIf=\"facet.valueList.items.length > initialLimit\"\n                    (click)=\"toggleDisplayLimit(facet)\"\n                >\n                    <ng-container *ngIf=\"(displayLimit[facet.id] || 0) < facet.valueList.items.length; else collapse\">\n                        <clr-icon shape=\"plus\"></clr-icon>\n                        {{ facet.valueList.totalItems - initialLimit }}\n                    </ng-container>\n                    <ng-template #collapse>\n                        <clr-icon shape=\"minus\"></clr-icon>\n                    </ng-template>\n                </button>\n            </div>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { Component, ElementRef, EventEmitter, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport {\n    CurrencyCode,\n    DataService,\n    GetStockLocationListDocument,\n    GetStockLocationListQuery,\n    ItemOf,\n} from '@vendure/admin-ui/core';\nimport { generateAllCombinations } from '@vendure/common/lib/shared-utils';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { OptionValueInputComponent } from '../option-value-input/option-value-input.component';\n\nconst DEFAULT_VARIANT_CODE = '__DEFAULT_VARIANT__';\nexport type CreateVariantValues = {\n    optionValues: string[];\n    enabled: boolean;\n    sku: string;\n    price: number;\n    stock: number;\n};\nexport type CreateProductVariantsConfig = {\n    groups: Array<{ name: string; values: string[] }>;\n    variants: CreateVariantValues[];\n    stockLocationId: string;\n};\n\n@Component({\n    selector: 'vdr-generate-product-variants',\n    templateUrl: './generate-product-variants.component.html',\n    styleUrls: ['./generate-product-variants.component.scss'],\n    standalone: false\n})\nexport class GenerateProductVariantsComponent implements OnInit {\n    @Output() variantsChange = new EventEmitter<CreateProductVariantsConfig>();\n    @ViewChildren('optionGroupName', { read: ElementRef }) groupNameInputs: QueryList<ElementRef>;\n    optionGroups: Array<{ name: string; values: Array<{ name: string; locked: boolean }> }> = [];\n    currencyCode: CurrencyCode;\n    variants: Array<{ id: string; values: string[] }>;\n    variantFormValues: {\n        [id: string]: FormGroup<{\n            optionValues: FormControl<string[]>;\n            enabled: FormControl<boolean>;\n            price: FormControl<number>;\n            sku: FormControl<string>;\n            stock: FormControl<number>;\n        }>;\n    } = {};\n    stockLocations$: Observable<Array<ItemOf<GetStockLocationListQuery, 'stockLocations'>>>;\n    selectedStockLocationId: string | null = null;\n    constructor(\n        private dataService: DataService,\n        private formBuilder: FormBuilder,\n    ) {}\n\n    ngOnInit() {\n        this.dataService.settings.getActiveChannel().single$.subscribe(data => {\n            this.currencyCode = data.activeChannel.defaultCurrencyCode;\n        });\n        this.stockLocations$ = this.dataService\n            .query(GetStockLocationListDocument, {\n                options: {\n                    take: 999,\n                },\n            })\n            .refetchOnChannelChange()\n            .mapStream(({ stockLocations }) => stockLocations.items)\n            .pipe(\n                tap(items => {\n                    if (items.length) {\n                        this.selectedStockLocationId = items[0].id;\n                        this.onFormChange();\n                    }\n                }),\n            );\n\n        this.generateVariants();\n    }\n\n    addOption() {\n        this.optionGroups.push({ name: '', values: [] });\n        const index = this.optionGroups.length - 1;\n        setTimeout(() => {\n            const input = this.groupNameInputs.get(index)?.nativeElement;\n            input?.focus();\n        });\n    }\n\n    removeOption(name: string) {\n        this.optionGroups = this.optionGroups.filter(g => g.name !== name);\n        this.generateVariants();\n    }\n\n    generateVariants() {\n        const totalValuesCount = this.optionGroups.reduce((sum, group) => sum + group.values.length, 0);\n        const groups = totalValuesCount\n            ? this.optionGroups.map(g => g.values.map(v => v.name))\n            : [[DEFAULT_VARIANT_CODE]];\n        this.variants = generateAllCombinations(groups).map(values => ({ id: values.join('|'), values }));\n\n        this.variants.forEach((variant, index) => {\n            if (!this.variantFormValues[variant.id]) {\n                const formGroup = this.formBuilder.nonNullable.group({\n                    optionValues: [variant.values],\n                    enabled: true as boolean,\n                    price: this.copyFromDefault(variant.id, 'price', 0),\n                    sku: this.copyFromDefault(variant.id, 'sku', ''),\n                    stock: this.copyFromDefault(variant.id, 'stock', 0),\n                });\n                formGroup.valueChanges.subscribe(() => this.onFormChange());\n                if (index === 0) {\n                    formGroup.get('price')?.valueChanges.subscribe(value => {\n                        this.copyValuesToPristine('price', formGroup.get('price'));\n                    });\n                    formGroup.get('sku')?.valueChanges.subscribe(value => {\n                        this.copyValuesToPristine('sku', formGroup.get('sku'));\n                    });\n                    formGroup.get('stock')?.valueChanges.subscribe(value => {\n                        this.copyValuesToPristine('stock', formGroup.get('stock'));\n                    });\n                }\n                this.variantFormValues[variant.id] = formGroup;\n            }\n        });\n        this.onFormChange();\n    }\n\n    trackByFn(index: number, variant: { name: string; values: string[] }) {\n        return variant.values.join('|');\n    }\n\n    handleEnter(event: KeyboardEvent, optionValueInputComponent: OptionValueInputComponent) {\n        event.preventDefault();\n        event.stopPropagation();\n        optionValueInputComponent.focus();\n    }\n\n    copyValuesToPristine(field: 'price' | 'sku' | 'stock', formControl: AbstractControl | null) {\n        if (!formControl) {\n            return;\n        }\n        Object.values(this.variantFormValues).forEach(formGroup => {\n            const correspondingFormControl = formGroup.get(field) as FormControl;\n            if (correspondingFormControl && correspondingFormControl.pristine) {\n                correspondingFormControl.setValue(formControl.value, { emitEvent: false });\n            }\n        });\n    }\n\n    onFormChange() {\n        const variantsToCreate = this.variants\n            .map(v => this.variantFormValues[v.id].value as CreateVariantValues)\n            .filter(v => v.enabled);\n        this.variantsChange.emit({\n            groups: this.optionGroups.map(og => ({ name: og.name, values: og.values.map(v => v.name) })),\n            variants: variantsToCreate,\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            stockLocationId: this.selectedStockLocationId!,\n        });\n    }\n\n    private copyFromDefault<T extends keyof CreateVariantValues>(\n        variantId: string,\n        prop: T,\n        value: CreateVariantValues[T],\n    ): CreateVariantValues[T] {\n        return variantId !== DEFAULT_VARIANT_CODE\n            ? (this.variantFormValues[DEFAULT_VARIANT_CODE].get(prop)?.value as CreateVariantValues[T])\n            : value;\n    }\n}\n","<div *ngFor=\"let group of optionGroups\" class=\"option-groups\">\n    <div class=\"name\">\n        <label>{{ 'catalog.option' | translate }}</label>\n        <input\n            #optionGroupName\n            placeholder=\"e.g. Size\"\n            clrInput\n            [(ngModel)]=\"group.name\"\n            name=\"name\"\n            required\n            (keydown.enter)=\"handleEnter($event, optionValueInputComponent)\"\n        />\n    </div>\n    <div class=\"values\">\n        <label>{{ 'catalog.option-values' | translate }}</label>\n        <vdr-option-value-input\n            #optionValueInputComponent\n            [(ngModel)]=\"group.values\"\n            (ngModelChange)=\"generateVariants()\"\n            (edit)=\"generateVariants()\"\n            [groupName]=\"group.name\"\n            [disabled]=\"group.name === ''\"\n        ></vdr-option-value-input>\n    </div>\n    <div class=\"remove-group\">\n        <button\n            class=\"button-small mt-2\"\n            [title]=\"'catalog.remove-option' | translate\"\n            (click)=\"removeOption(group.name)\"\n        >\n            <clr-icon shape=\"trash\"></clr-icon>\n        </button>\n    </div>\n</div>\n<button class=\"button mb-2\" (click)=\"addOption()\">\n    <clr-icon shape=\"plus\"></clr-icon>\n    {{ 'catalog.add-option' | translate }}\n</button>\n\n<ng-container *ngIf=\"stockLocations$ | async as stockLocations\">\n    <clr-alert *ngIf=\"stockLocations.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\n        <clr-alert-item>\n            <span class=\"alert-text\">\n                {{ 'catalog.no-stock-locations-available-on-current-channel' | translate }}\n            </span>\n        </clr-alert-item>\n    </clr-alert>\n\n    <div class=\"form-grid mb-2\">\n        <vdr-form-field *ngIf=\"stockLocations.length\" [label]=\"'catalog.add-stock-to-location' | translate\">\n            <select [(ngModel)]=\"selectedStockLocationId\">\n                <option *ngFor=\"let location of stockLocations\" [value]=\"location.id\">\n                    {{ location.name }}\n                </option>\n            </select>\n        </vdr-form-field>\n    </div>\n\n    <div class=\"variants-preview\" *ngIf=\"0 < stockLocations.length\">\n        <table class=\"table\">\n            <thead>\n                <tr>\n                    <th *ngIf=\"1 < variants.length\">{{ 'common.create' | translate }}</th>\n                    <th *ngIf=\"1 < variants.length\">{{ 'catalog.variant' | translate }}</th>\n                    <th>{{ 'catalog.sku' | translate }}</th>\n                    <th>{{ 'catalog.price' | translate }}</th>\n                    <th>{{ 'catalog.stock-on-hand' | translate }}</th>\n                </tr>\n            </thead>\n            <tr\n                *ngFor=\"let variant of variants; trackBy: trackByFn\"\n                [class.disabled]=\"!variantFormValues[variant.id].value.enabled === false\"\n                [formGroup]=\"variantFormValues[variant.id]\"\n            >\n                <td *ngIf=\"1 < variants.length\">\n                    <input type=\"checkbox\" formControlName=\"enabled\" clrCheckbox />\n                </td>\n                <td *ngIf=\"1 < variants.length\">\n                    {{ variant.values.join(' ') }}\n                </td>\n                <td>\n                    <vdr-form-field>\n                        <input type=\"text\" formControlName=\"sku\" [placeholder]=\"'catalog.sku' | translate\" />\n                    </vdr-form-field>\n                </td>\n                <td>\n                    <vdr-form-field>\n                        <vdr-currency-input\n                            formControlName=\"price\"\n                            [currencyCode]=\"currencyCode\"\n                        ></vdr-currency-input>\n                    </vdr-form-field>\n                </td>\n                <td>\n                    <vdr-form-field>\n                        <input type=\"number\" formControlName=\"stock\" min=\"0\" step=\"1\" />\n                    </vdr-form-field>\n                </td>\n            </tr>\n        </table>\n    </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    DataTableLocationId,\n    ProductVariantFilterParameter,\n    ProductVariantListQueryDocument,\n    TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\n\n@Component({\n    selector: 'vdr-product-variant-list',\n    templateUrl: './product-variant-list.component.html',\n    styleUrls: ['./product-variant-list.component.scss'],\n    standalone: false,\n})\nexport class ProductVariantListComponent\n    extends TypedBaseListComponent<typeof ProductVariantListQueryDocument, 'productVariants'>\n    implements OnInit\n{\n    @Input() productId?: string;\n    @Input() hideLanguageSelect = false;\n    pageLocationId = 'product-variant-list' as const;\n    @Input() dataTableId: DataTableLocationId | undefined;\n    readonly customFields = this.getCustomFieldConfig('ProductVariant');\n    readonly filters = this.createFilterCollection()\n        .addIdFilter()\n        .addDateFilters()\n        .addFilters([\n            {\n                name: 'name',\n                type: { kind: 'text' },\n                label: _('common.name'),\n                filterField: 'name',\n            },\n            {\n                name: 'enabled',\n                type: { kind: 'boolean' },\n                label: _('common.enabled'),\n                filterField: 'enabled',\n            },\n            {\n                name: 'sku',\n                type: { kind: 'text' },\n                label: _('catalog.sku'),\n                filterField: 'sku',\n            },\n            {\n                name: 'price',\n                type: { kind: 'number', inputType: 'currency' },\n                label: _('common.price'),\n                filterField: 'price',\n            },\n            {\n                name: 'priceWithTax',\n                type: { kind: 'number', inputType: 'currency' },\n                label: _('common.price-with-tax'),\n                filterField: 'priceWithTax',\n            },\n        ])\n        .addCustomFieldFilters(this.customFields)\n        .connectToRoute(this.route);\n\n    readonly sorts = this.createSortCollection()\n        .addSorts([\n            { name: 'id' },\n            { name: 'createdAt' },\n            { name: 'updatedAt' },\n            { name: 'name' },\n            { name: 'sku' },\n            { name: 'price' },\n            { name: 'priceWithTax' },\n        ])\n        .addCustomFieldSorts(this.customFields)\n        .connectToRoute(this.route);\n\n    constructor() {\n        super();\n        this.configure({\n            document: ProductVariantListQueryDocument,\n            getItems: data => data.productVariants,\n            setVariables: (skip, take) => {\n                const searchTerm = this.searchTermControl.value;\n                const filterParam: ProductVariantFilterParameter = { _and: [] };\n                const filterInput = this.filters.createFilterInput();\n                if (Object.keys(filterInput).length) {\n                    filterParam._and?.push(filterInput);\n                }\n                if (searchTerm) {\n                    filterParam._and?.push({\n                        _or: [\n                            {\n                                name: { contains: searchTerm },\n                            },\n                            {\n                                sku: { contains: searchTerm },\n                            },\n                        ],\n                    });\n                }\n                if (this.productId) {\n                    filterParam._and?.push({\n                        productId: {\n                            eq: this.productId,\n                        },\n                    });\n                }\n                return {\n                    options: {\n                        skip,\n                        take,\n                        filter: filterParam,\n                        sort: this.sorts.createSortInput(),\n                    },\n                };\n            },\n            refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\n        });\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector *ngIf=\"!hideLanguageSelect\"\n                                   [availableLanguageCodes]=\"availableLanguages$ | async\"\n                                   [currentLanguageCode]=\"contentLanguage$ | async\"\n                                   (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n        <vdr-ab-right>\n            <vdr-action-bar-items [locationId]=\"pageLocationId\" />\n            <vdr-action-bar-dropdown-menu [locationId]=\"pageLocationId\" />\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n    class=\"mt-2\"\n    [id]=\"dataTableId || 'product-variant-list'\"\n    [items]=\"items$ | async\"\n    [itemsPerPage]=\"itemsPerPage$ | async\"\n    [totalItems]=\"totalItems$ | async\"\n    [currentPage]=\"currentPage$ | async\"\n    [filters]=\"filters\"\n    (pageChange)=\"setPageNumber($event)\"\n    (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n    <vdr-bulk-action-menu\n        locationId=\"product-variant-list\"\n        [hostComponent]=\"this\"\n        [selectionManager]=\"selectionManager\"\n    />\n    <vdr-dt2-search\n        [searchTermControl]=\"searchTermControl\"\n        [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\n    />\n    <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\n        <ng-template let-variant=\"item\">\n            {{ variant.id }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('createdAt')\"\n    >\n        <ng-template let-variant=\"item\">\n            {{ variant.createdAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('updatedAt')\"\n    >\n        <ng-template let-variant=\"item\">\n            {{ variant.updatedAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\n        <ng-template let-variant=\"item\">\n            <div class=\"image-placeholder\">\n                <img\n                    *ngIf=\"variant.featuredAsset as asset; else imagePlaceholder\"\n                    [src]=\"asset | assetPreview : 'tiny'\"\n                />\n                <ng-template #imagePlaceholder>\n                    <div class=\"placeholder\">\n                        <clr-icon shape=\"image\" size=\"48\"></clr-icon>\n                    </div>\n                </ng-template>\n            </div>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n        <ng-template let-variant=\"item\">\n            <a\n                class=\"button-ghost\"\n                [routerLink]=\"['/catalog/products', variant.productId, 'variants', variant.id]\"\n            ><span>{{ variant.name }}</span\n            >\n                <clr-icon shape=\"arrow right\"\n                />\n            </a>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [sort]=\"sorts.get('sku')\">\n        <ng-template let-variant=\"item\">\n            {{ variant.sku }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n        <ng-template let-variant=\"item\">\n            <vdr-chip *ngIf=\"variant.enabled\" colorType=\"success\">{{\n                    'common.enabled' | translate\n                }}\n            </vdr-chip>\n            <vdr-chip *ngIf=\"!variant.enabled\" colorType=\"warning\">{{\n                    'common.disabled' | translate\n                }}\n            </vdr-chip>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.price' | translate\" id=\"price\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('price')\"\n    >\n        <ng-template let-variant=\"item\">\n            {{ variant.price | localeCurrency : variant.currencyCode }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\"\n                    [sort]=\"sorts.get('priceWithTax')\">\n        <ng-template let-variant=\"item\">\n            {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\n        </ng-template>\n    </vdr-dt2-column>\n\n    <vdr-dt2-column [heading]=\"'catalog.stock-on-hand' | translate\" id=\"stock-on-hand\" [hiddenByDefault]=\"false\">\n        <ng-template let-variant=\"item\">\n            <vdr-chip *ngFor=\"let stockLevel of variant.stockLevels\" [title]=\"stockLevel.stockLocation?.name\">\n                <div class=\"flex center\">\n                    <div>\n                        {{\n                            stockLevel.stockOnHand\n                        }}<span class=\"ml-1\" *ngIf=\"stockLevel.stockAllocated\"\n                    >({{ stockLevel.stockAllocated }} allocated)</span\n                    >\n                    </div>\n                </div>\n            </vdr-chip>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-custom-field-column *ngFor=\"let field of customFields\" [customField]=\"field\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    Asset,\n    CreateProductInput,\n    createUpdatedTranslatable,\n    DataService,\n    findTranslation,\n    getChannelCodeFromUserStatus,\n    getCustomFieldsDefaults,\n    GetProductDetailDocument,\n    GetProductDetailQuery,\n    GetProductWithVariantsQuery,\n    LanguageCode,\n    ModalService,\n    NotificationService,\n    Permission,\n    PRODUCT_DETAIL_FRAGMENT,\n    ProductDetailFragment,\n    ProductVariantFragment,\n    TypedBaseDetailComponent,\n    unicodePatternValidator,\n    UpdateProductInput,\n    UpdateProductMutation,\n    UpdateProductVariantInput,\n    UpdateProductVariantsMutation,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\nimport { unique } from '@vendure/common/lib/unique';\nimport { gql } from 'apollo-angular';\nimport { combineLatest, concat, EMPTY, from, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, mergeMap, shareReplay, switchMap, take } from 'rxjs/operators';\n\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\nimport { CreateProductVariantsConfig } from '../generate-product-variants/generate-product-variants.component';\n\ninterface SelectedAssets {\n    assets?: Asset[];\n    featuredAsset?: Asset;\n}\n\nexport const GET_PRODUCT_DETAIL = gql`\n    query GetProductDetail($id: ID!) {\n        product(id: $id) {\n            ...ProductDetail\n        }\n    }\n    ${PRODUCT_DETAIL_FRAGMENT}\n`;\n\n@Component({\n    selector: 'vdr-product-detail2',\n    templateUrl: './product-detail.component.html',\n    styleUrls: ['./product-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class ProductDetailComponent\n    extends TypedBaseDetailComponent<typeof GetProductDetailDocument, 'product'>\n    implements OnInit, OnDestroy\n{\n    readonly customFields = this.getCustomFieldConfig('Product');\n    detailForm = this.formBuilder.group({\n        enabled: true,\n        name: ['', Validators.required],\n        autoUpdateVariantNames: true,\n        slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/u)],\n        description: '',\n        facetValueIds: [[] as string[]],\n        customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n    });\n    assetChanges: SelectedAssets = {};\n    productChannels$: Observable<ProductDetailFragment['channels']>;\n    facetValues$: Observable<ProductDetailFragment['facetValues']>;\n    createVariantsConfig: CreateProductVariantsConfig = { groups: [], variants: [], stockLocationId: '' };\n    public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\n\n    constructor(\n        private productDetailService: ProductDetailService,\n        private formBuilder: FormBuilder,\n        private modalService: ModalService,\n        private notificationService: NotificationService,\n        protected dataService: DataService,\n        private changeDetector: ChangeDetectorRef,\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        this.init();\n\n        const productFacetValues$ = this.isNew$.pipe(\n            switchMap(isNew => {\n                return isNew ? of([]) : this.entity$.pipe(map(product => product.facetValues));\n            }),\n        );\n        const productGroup = this.detailForm;\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const formFacetValueIdChanges$ = productGroup.get('facetValueIds')!.valueChanges.pipe(\n            distinctUntilChanged(),\n            switchMap(ids =>\n                this.dataService.facet\n                    .getFacetValues({ filter: { id: { in: ids } } })\n                    .mapSingle(({ facetValues }) => facetValues.items),\n            ),\n            shareReplay(1),\n        );\n        this.facetValues$ = concat(\n            productFacetValues$.pipe(take(1)),\n            productFacetValues$.pipe(switchMap(() => formFacetValueIdChanges$)),\n        );\n        this.productChannels$ = this.entity$.pipe(map(p => p.channels));\n    }\n\n    ngOnDestroy() {\n        this.destroy();\n    }\n\n    isDefaultChannel(channelCode: string): boolean {\n        return channelCode === DEFAULT_CHANNEL_CODE;\n    }\n\n    assignToChannel() {\n        this.productChannels$\n            .pipe(\n                take(1),\n                switchMap(channels =>\n                    this.modalService.fromComponent(AssignProductsToChannelDialogComponent, {\n                        size: 'lg',\n                        locals: {\n                            productIds: [this.id],\n                            currentChannelIds: channels.map(c => c.id),\n                        },\n                    }),\n                ),\n            )\n            .subscribe();\n    }\n\n    removeFromChannel(channelId: string) {\n        from(getChannelCodeFromUserStatus(this.dataService, channelId))\n            .pipe(\n                switchMap(({ channelCode }) =>\n                    this.modalService.dialog({\n                        title: _('catalog.remove-product-from-channel'),\n                        buttons: [\n                            { type: 'secondary', label: _('common.cancel') },\n                            {\n                                type: 'danger',\n                                label: _('catalog.remove-from-channel'),\n                                translationVars: { channelCode },\n                                returnValue: true,\n                            },\n                        ],\n                    }),\n                ),\n                switchMap(response =>\n                    response\n                        ? this.dataService.product.removeProductsFromChannel({\n                              channelId,\n                              productIds: [this.id],\n                          })\n                        : EMPTY,\n                ),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('catalog.notify-remove-product-from-channel-success'));\n                },\n                err => {\n                    this.notificationService.error(_('catalog.notify-remove-product-from-channel-error'));\n                },\n            );\n    }\n\n    assignVariantToChannel(variant: ProductVariantFragment) {\n        return this.modalService\n            .fromComponent(AssignProductsToChannelDialogComponent, {\n                size: 'lg',\n                locals: {\n                    productIds: [this.id],\n                    productVariantIds: [variant.id],\n                    currentChannelIds: variant.channels.map(c => c.id),\n                },\n            })\n            .subscribe();\n    }\n\n    removeVariantFromChannel({ channelId, variant }: { channelId: string; variant: ProductVariantFragment }) {\n        from(getChannelCodeFromUserStatus(this.dataService, channelId))\n            .pipe(\n                switchMap(({ channelCode }) =>\n                    this.modalService.dialog({\n                        title: _('catalog.remove-product-variant-from-channel'),\n                        buttons: [\n                            { type: 'secondary', label: _('common.cancel') },\n                            {\n                                type: 'danger',\n                                label: _('catalog.remove-from-channel'),\n                                translationVars: { channelCode },\n                                returnValue: true,\n                            },\n                        ],\n                    }),\n                ),\n                switchMap(response =>\n                    response\n                        ? this.dataService.product.removeVariantsFromChannel({\n                              channelId,\n                              productVariantIds: [variant.id],\n                          })\n                        : EMPTY,\n                ),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('catalog.notify-remove-variant-from-channel-success'));\n                },\n                err => {\n                    this.notificationService.error(_('catalog.notify-remove-variant-from-channel-error'));\n                },\n            );\n    }\n\n    assetsChanged(): boolean {\n        return !!Object.values(this.assetChanges).length;\n    }\n\n    /**\n     * If creating a new product, automatically generate the slug based on the product name.\n     */\n    updateSlug(nameValue: string) {\n        const slugControl = this.detailForm.get('slug');\n        const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\n        const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\n        if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\n            slugControl.setValue(normalizeString(`${nameValue}`, '-'));\n        }\n    }\n\n    selectProductFacetValue() {\n        this.displayFacetValueModal().subscribe(facetValueIds => {\n            if (facetValueIds) {\n                const facetValueIdsControl = this.detailForm.controls.facetValueIds;\n                const currentFacetValueIds = facetValueIdsControl.value ?? [];\n                facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\n                facetValueIdsControl.markAsDirty();\n            }\n        });\n    }\n\n    removeProductFacetValue(facetValueId: string) {\n        const facetValueIdsControl = this.detailForm.controls.facetValueIds;\n        const currentFacetValueIds = facetValueIdsControl.value ?? [];\n        facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\n        facetValueIdsControl.markAsDirty();\n    }\n\n    private displayFacetValueModal(): Observable<string[] | undefined> {\n        return this.modalService\n            .fromComponent(ApplyFacetDialogComponent, {\n                size: 'md',\n                closable: true,\n            })\n            .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\n    }\n\n    create() {\n        const productGroup = this.detailForm;\n        if (!productGroup.dirty) {\n            return;\n        }\n\n        const newProduct = this.getUpdatedProduct(\n            {\n                id: '',\n                createdAt: '',\n                updatedAt: '',\n                enabled: true,\n                languageCode: this.languageCode,\n                name: '',\n                slug: '',\n                featuredAsset: null,\n                assets: [],\n                description: '',\n                translations: [],\n                optionGroups: [],\n                facetValues: [],\n                channels: [],\n            },\n            productGroup as UntypedFormGroup,\n            this.languageCode,\n        ) as CreateProductInput;\n        this.productDetailService\n            .createProductWithVariants(newProduct, this.createVariantsConfig, this.languageCode)\n            .subscribe(\n                ({ createProductVariants, productId }) => {\n                    this.notificationService.success(_('common.notify-create-success'), {\n                        entity: 'Product',\n                    });\n                    this.assetChanges = {};\n                    this.detailForm.markAsPristine();\n                    this.router.navigate(['../', productId], { relativeTo: this.route });\n                },\n                err => {\n                    // eslint-disable-next-line no-console\n                    console.error(err);\n                    this.notificationService.error(_('common.notify-create-error'), {\n                        entity: 'Product',\n                    });\n                },\n            );\n    }\n\n    save() {\n        combineLatest(this.entity$, this.languageCode$)\n            .pipe(\n                take(1),\n                mergeMap(([product, languageCode]) => {\n                    const productGroup = this.detailForm;\n                    let productInput: UpdateProductInput | undefined;\n                    let variantsInput: UpdateProductVariantInput[] | undefined;\n\n                    if (productGroup.dirty || this.assetsChanged()) {\n                        productInput = this.getUpdatedProduct(\n                            product,\n                            productGroup as UntypedFormGroup,\n                            languageCode,\n                        ) as UpdateProductInput;\n                    }\n\n                    return this.productDetailService.updateProduct({\n                        product,\n                        languageCode,\n                        autoUpdate: this.detailForm.get(['autoUpdateVariantNames'])?.value ?? false,\n                        productInput,\n                        variantsInput,\n                    });\n                }),\n            )\n            .subscribe(\n                result => {\n                    this.updateSlugAfterSave(result);\n                    this.detailForm.markAsPristine();\n                    this.assetChanges = {};\n                    this.notificationService.success(_('common.notify-update-success'), {\n                        entity: 'Product',\n                    });\n                    this.changeDetector.markForCheck();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'Product',\n                    });\n                },\n            );\n    }\n\n    canDeactivate(): boolean {\n        return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\n    }\n\n    /**\n     * Sets the values of the form on changes to the product or current language.\n     */\n    protected setFormValues(\n        product: NonNullable<GetProductWithVariantsQuery['product']>,\n        languageCode: LanguageCode,\n    ) {\n        const currentTranslation = findTranslation(product, languageCode);\n        this.detailForm.patchValue({\n            enabled: product.enabled,\n            name: currentTranslation ? currentTranslation.name : '',\n            slug: currentTranslation ? currentTranslation.slug : '',\n            description: currentTranslation ? currentTranslation.description : '',\n            facetValueIds: product.facetValues.map(fv => fv.id),\n        });\n\n        if (this.customFields.length) {\n            this.setCustomFieldFormValues(\n                this.customFields,\n                this.detailForm.get(['customFields']),\n                product,\n                currentTranslation,\n            );\n        }\n    }\n\n    /**\n     * Given a product and the value of the detailForm, this method creates an updated copy of the product which\n     * can then be persisted to the API.\n     */\n    private getUpdatedProduct(\n        product: NonNullable<GetProductDetailQuery['product']>,\n        productFormGroup: UntypedFormGroup,\n        languageCode: LanguageCode,\n    ): UpdateProductInput | CreateProductInput {\n        const updatedProduct = createUpdatedTranslatable({\n            translatable: product,\n            updatedFields: productFormGroup.value,\n            customFieldConfig: this.customFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: product.name || '',\n                slug: product.slug || '',\n                description: product.description || '',\n            },\n        });\n        return {\n            ...updatedProduct,\n            assetIds: this.assetChanges.assets?.map(a => a.id),\n            featuredAssetId: this.assetChanges.featuredAsset?.id,\n            facetValueIds: productFormGroup.controls.facetValueIds.dirty\n                ? productFormGroup.value.facetValueIds\n                : undefined,\n        } as UpdateProductInput | CreateProductInput;\n    }\n\n    /**\n     * The server may alter the slug value in order to normalize and ensure uniqueness upon saving.\n     */\n    private updateSlugAfterSave(results: Array<UpdateProductMutation | UpdateProductVariantsMutation>) {\n        const firstResult = results[0];\n        const slugControl = this.detailForm.get(['product', 'slug']);\n\n        function isUpdateMutation(input: any): input is UpdateProductMutation {\n            return input.hasOwnProperty('updateProduct');\n        }\n\n        if (slugControl && isUpdateMutation(firstResult)) {\n            slugControl.setValue(firstResult.updateProduct.slug, { emitEvent: false });\n        }\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <div class=\"flex clr-flex-row\"></div>\n            <vdr-language-selector\n                [disabled]=\"isNew$ | async\"\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"languageCode$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\n            <button\n                class=\"btn btn-primary\"\n                *ngIf=\"isNew$ | async; else updateButton\"\n                (click)=\"create()\"\n                [disabled]=\"detailForm.invalid || detailForm.pristine || createVariantsConfig.variants.length === 0\"\n            >\n                {{ 'common.create' | translate }}\n            </button>\n            <ng-template #updateButton>\n                <button\n                    *vdrIfPermissions=\"updatePermissions\"\n                    class=\"btn btn-primary\"\n                    (click)=\"save()\"\n                    [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\n                >\n                    {{ 'common.update' | translate }}\n                </button>\n            </ng-template>\n            <vdr-action-bar-dropdown-menu locationId=\"product-detail\"></vdr-action-bar-dropdown-menu>\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n    <vdr-page-detail-layout>\n        <vdr-page-detail-sidebar>\n            <vdr-card>\n                <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n                    <clr-toggle-wrapper *vdrIfPermissions=\"updatePermissions\">\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            name=\"enabled\"\n                            [formControl]=\"detailForm.get(['enabled'])\"\n                        />\n                        <label>{{ 'common.enabled' | translate }}</label>\n                    </clr-toggle-wrapper>\n                </vdr-form-field>\n            </vdr-card>\n            <ng-container *ngIf=\"!(isNew$ | async)\">\n                <vdr-card *vdrIfMultichannel [title]=\"'common.channels' | translate\">\n                    <vdr-form-item *vdrIfDefaultChannelActive>\n                        <div class=\"flex channel-assignment\">\n                            <div class=\"mb-2\">\n                                <ng-container *ngFor=\"let channel of productChannels$ | async\">\n                                    <vdr-chip\n                                        *ngIf=\"!isDefaultChannel(channel.code)\"\n                                        icon=\"times-circle\"\n                                        (iconClick)=\"removeFromChannel(channel.id)\"\n                                    >\n                                        <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\n                                        {{ channel.code | channelCodeToLabel }}\n                                    </vdr-chip>\n                                </ng-container>\n                            </div>\n                            <button class=\"button-small\" (click)=\"assignToChannel()\">\n                                <clr-icon shape=\"layers\"></clr-icon>\n                                {{ 'common.assign-to-channel' | translate }}\n                            </button>\n                        </div>\n                    </vdr-form-item>\n                </vdr-card>\n            </ng-container>\n            <vdr-card *ngIf=\"entity?.optionGroups.length\" [title]=\"'catalog.product-options' | translate\">\n                <div class=\"options\">\n                    <vdr-chip\n                        *ngFor=\"let optionGroup of entity?.optionGroups | sort : 'id'\"\n                        [colorFrom]=\"optionGroup.code\"\n                        [invert]=\"true\"\n                    >\n                        {{ optionGroup.name }}\n                    </vdr-chip>\n                </div>\n                <div>\n                    <a [routerLink]=\"['options']\" class=\"button-small mt-2\" *vdrIfPermissions=\"updatePermissions\">\n                        <clr-icon shape=\"pencil\"></clr-icon>\n                        {{ 'catalog.edit-options' | translate }}\n                    </a>\n                </div>\n            </vdr-card>\n            <vdr-card [title]=\"'catalog.facets' | translate\">\n                <div class=\"facets\">\n                    <vdr-facet-value-chip\n                        *ngFor=\"let facetValue of facetValues$ | async\"\n                        [facetValue]=\"facetValue\"\n                        [removable]=\"updatePermissions | hasPermission\"\n                        (remove)=\"removeProductFacetValue(facetValue.id)\"\n                    ></vdr-facet-value-chip>\n                </div>\n                <div>\n                    <button\n                        class=\"button-small mt-2\"\n                        *vdrIfPermissions=\"updatePermissions\"\n                        (click)=\"selectProductFacetValue()\"\n                    >\n                        <clr-icon shape=\"plus\"></clr-icon>\n                        {{ 'catalog.add-facets' | translate }}\n                    </button>\n                </div>\n            </vdr-card>\n            <vdr-card *ngIf=\"entity$ | async as entity\">\n                <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\n            </vdr-card>\n        </vdr-page-detail-sidebar>\n\n        <vdr-page-block>\n            <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\n            <vdr-card>\n                <div class=\"form-grid\">\n                    <div>\n                        <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\n                            <input\n                                id=\"name\"\n                                type=\"text\"\n                                formControlName=\"name\"\n                                [readonly]=\"!(updatePermissions | hasPermission)\"\n                                (input)=\"updateSlug($event.target.value)\"\n                            />\n                        </vdr-form-field>\n                        <div *ngIf=\"(isNew$ | async) === false && detailForm.get(['name'])?.dirty\">\n                            <clr-checkbox-wrapper>\n                                <input\n                                    clrCheckbox\n                                    type=\"checkbox\"\n                                    id=\"auto-update\"\n                                    formControlName=\"autoUpdateVariantNames\"\n                                />\n                                <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\n                            </clr-checkbox-wrapper>\n                        </div>\n                    </div>\n                    <vdr-form-field\n                        [label]=\"'catalog.slug' | translate\"\n                        for=\"slug\"\n                        [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\n                    >\n                        <input\n                            id=\"slug\"\n                            type=\"text\"\n                            formControlName=\"slug\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-field\n                        class=\"form-grid-span\"\n                        [label]=\"'common.description' | translate\"\n                        for=\"slug\"\n                        [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\n                    >\n                        <vdr-rich-text-editor\n                            formControlName=\"description\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                        ></vdr-rich-text-editor>\n                    </vdr-form-field>\n                </div>\n            </vdr-card>\n            <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\n                <vdr-tabbed-custom-fields\n                    entityName=\"Product\"\n                    [customFields]=\"customFields\"\n                    [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n                    [readonly]=\"!(updatePermissions | hasPermission)\"\n                ></vdr-tabbed-custom-fields>\n            </vdr-card>\n            <vdr-custom-detail-component-host\n                locationId=\"product-detail\"\n                [entity$]=\"entity$\"\n                [detailForm]=\"detailForm\"\n            ></vdr-custom-detail-component-host>\n            <vdr-card [title]=\"'catalog.assets' | translate\">\n                <vdr-assets\n                    [assets]=\"assetChanges.assets || entity?.assets\"\n                    [featuredAsset]=\"assetChanges.featuredAsset || entity?.featuredAsset\"\n                    [updatePermissions]=\"updatePermissions\"\n                    (change)=\"assetChanges = $event\"\n                ></vdr-assets>\n            </vdr-card>\n\n            <vdr-card [title]=\"'catalog.product-variants' | translate\" [paddingX]=\"isNew$ | async\">\n                <div *ngIf=\"isNew$ | async; else variantList\">\n                    <vdr-generate-product-variants\n                        (variantsChange)=\"createVariantsConfig = $event\"\n                    ></vdr-generate-product-variants>\n                </div>\n                <ng-template #variantList>\n                    <vdr-product-variant-list\n                        [productId]=\"this.id\"\n                        dataTableId=\"product-detail-variants-list\"\n                        [hideLanguageSelect]=\"true\"\n                    ></vdr-product-variant-list>\n                </ng-template>\n                <div class=\"mx-3\" *ngIf=\"(isNew$ | async) === false\">\n                    <a class=\"button\" [routerLink]=\"['manage-variants']\">\n                        <clr-icon shape=\"add-text\"></clr-icon>\n                        {{ 'catalog.manage-variants' | translate }}</a\n                    >\n                </div>\n            </vdr-card>\n        </vdr-page-block>\n    </vdr-page-detail-layout>\n</form>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    BulkAction,\n    createBulkRemoveFromChannelAction,\n    DataService,\n    DeletionResult,\n    DuplicateEntityDialogComponent,\n    GetProductListQuery,\n    isMultiChannel,\n    ItemOf,\n    ModalService,\n    NotificationService,\n    Permission,\n} from '@vendure/admin-ui/core';\nimport { unique } from '@vendure/common/lib/unique';\nimport { EMPTY } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\n\nimport { ProductListComponent } from './product-list.component';\n\nexport const deleteProductsBulkAction: BulkAction<\n    ItemOf<GetProductListQuery, 'products'>,\n    ProductListComponent\n> = {\n    location: 'product-list',\n    label: _('common.delete'),\n    icon: 'trash',\n    iconClass: 'is-danger',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteProduct) ||\n        userPermissions.includes(Permission.DeleteCatalog),\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const dataService = injector.get(DataService);\n        const notificationService = injector.get(NotificationService);\n        modalService\n            .dialog({\n                title: _('catalog.confirm-bulk-delete-products'),\n                translationVars: {\n                    count: selection.length,\n                },\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(response =>\n                    response ? dataService.product.deleteProducts(unique(selection.map(p => p.id))) : EMPTY,\n                ),\n            )\n            .subscribe(result => {\n                let deleted = 0;\n                const errors: string[] = [];\n                for (const item of result.deleteProducts) {\n                    if (item.result === DeletionResult.DELETED) {\n                        deleted++;\n                    } else if (item.message) {\n                        errors.push(item.message);\n                    }\n                }\n                if (0 < deleted) {\n                    notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\n                        count: deleted,\n                    });\n                }\n                if (0 < errors.length) {\n                    notificationService.error(errors.join('\\n'));\n                }\n                hostComponent.refresh();\n                clearSelection();\n            });\n    },\n};\n\nexport const assignProductsToChannelBulkAction: BulkAction<\n    ItemOf<GetProductListQuery, 'products'>,\n    ProductListComponent\n> = {\n    location: 'product-list',\n    label: _('common.assign-to-channel'),\n    icon: 'layers',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\n    onClick: ({ injector, selection, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        modalService\n            .fromComponent(AssignProductsToChannelDialogComponent, {\n                size: 'lg',\n                locals: {\n                    productIds: unique(selection.map(p => p.id)),\n                    currentChannelIds: [],\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    clearSelection();\n                }\n            });\n    },\n};\n\nexport const removeProductsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n    ItemOf<GetProductListQuery, 'products'>\n>({\n    location: 'product-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    getItemName: item => item.name,\n    bulkRemoveFromChannel: (dataService, productIds, channelId) =>\n        dataService.product\n            .removeProductsFromChannel({\n                channelId: channelId,\n                productIds,\n            })\n            .pipe(map(res => res.removeProductsFromChannel)),\n});\n\nexport const assignFacetValuesToProductsBulkAction: BulkAction<\n    ItemOf<GetProductListQuery, 'products'>,\n    ProductListComponent\n> = {\n    location: 'product-list',\n    label: _('catalog.edit-facet-values'),\n    icon: 'tag',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const notificationService = injector.get(NotificationService);\n        const mode = 'product';\n        const ids = unique(selection.map(p => p.id));\n        return modalService\n            .fromComponent(BulkAddFacetValuesDialogComponent, {\n                size: 'xl',\n                locals: {\n                    mode,\n                    ids,\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    notificationService.success(_('common.notify-bulk-update-success'), {\n                        count: selection.length,\n                        entity: mode === 'product' ? 'Products' : 'ProductVariants',\n                    });\n                    clearSelection();\n                }\n            });\n    },\n};\n\nexport const duplicateProductsBulkAction: BulkAction<\n    ItemOf<GetProductListQuery, 'products'>,\n    ProductListComponent\n> = {\n    location: 'product-list',\n    label: _('common.duplicate'),\n    icon: 'copy',\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        modalService\n            .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetProductListQuery, 'products'>>, {\n                locals: {\n                    entities: selection,\n                    entityName: 'Product',\n                    title: _('catalog.duplicate-products'),\n                    getEntityName: entity => entity.name,\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    clearSelection();\n                    hostComponent.refresh();\n                }\n            });\n    },\n};\n","import { Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    DataService,\n    FacetValueFormInputComponent,\n    JobQueueService,\n    JobState,\n    LogicalOperator,\n    ModalService,\n    NotificationService,\n    ProductListQueryDocument,\n    TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\nimport { EMPTY, lastValueFrom } from 'rxjs';\nimport { delay, switchMap } from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-products-list',\n    templateUrl: './product-list.component.html',\n    styleUrls: ['./product-list.component.scss'],\n    standalone: false,\n})\nexport class ProductListComponent\n    extends TypedBaseListComponent<typeof ProductListQueryDocument, 'products'>\n    implements OnInit\n{\n    pendingSearchIndexUpdates = 0;\n    dataTableListId = 'product-list';\n    pageLocationId = 'product-list' as const;\n    readonly customFields = this.getCustomFieldConfig('Product');\n    readonly filters = this.createFilterCollection()\n        .addIdFilter()\n        .addDateFilters()\n        .addFilters([\n            {\n                name: 'enabled',\n                type: { kind: 'boolean' },\n                label: _('common.enabled'),\n                filterField: 'enabled',\n            },\n            {\n                name: 'slug',\n                type: { kind: 'text' },\n                label: _('common.slug'),\n                filterField: 'slug',\n            },\n        ])\n        .addFilter({\n            name: 'facetValues',\n            type: {\n                kind: 'custom',\n                component: FacetValueFormInputComponent,\n                serializeValue: value => value.map(v => v.id).join(','),\n                deserializeValue: value => value.split(',').map(id => ({ id })),\n                getLabel: value => {\n                    if (value.length === 0) {\n                        return '';\n                    }\n                    if (value[0].name) {\n                        return value.map(v => v.name).join(', ');\n                    } else {\n                        return lastValueFrom(\n                            this.dataService.facet\n                                .getFacetValues({ filter: { id: { in: value.map(v => v.id) } } })\n                                .mapSingle(({ facetValues }) =>\n                                    facetValues.items.map(fv => fv.name).join(', '),\n                                ),\n                        );\n                    }\n                },\n            },\n            label: _('catalog.facet-values'),\n            toFilterInput: (value: any[]) => ({\n                facetValueId: {\n                    in: value.map(v => v.id),\n                },\n            }),\n        })\n        .addCustomFieldFilters(this.customFields)\n        .connectToRoute(this.route);\n\n    readonly sorts = this.createSortCollection()\n        .defaultSort('createdAt', 'DESC')\n        .addSorts([\n            { name: 'id' },\n            { name: 'createdAt' },\n            { name: 'updatedAt' },\n            { name: 'name' },\n            { name: 'slug' },\n        ])\n        .addCustomFieldSorts(this.customFields)\n        .connectToRoute(this.route);\n\n    constructor(\n        protected dataService: DataService,\n        private modalService: ModalService,\n        private notificationService: NotificationService,\n        private jobQueueService: JobQueueService,\n    ) {\n        super();\n        this.configure({\n            document: ProductListQueryDocument,\n            getItems: data => data.products,\n            setVariables: (skip, take) => {\n                const searchTerm = this.searchTermControl.value;\n                let filterInput = this.filters.createFilterInput();\n                if (searchTerm) {\n                    filterInput = {\n                        name: {\n                            contains: searchTerm,\n                        },\n                        sku: {\n                            contains: searchTerm,\n                        },\n                    };\n                }\n                return {\n                    options: {\n                        skip,\n                        take,\n                        filter: {\n                            ...(filterInput ?? {}),\n                        },\n                        filterOperator: searchTerm ? LogicalOperator.OR : LogicalOperator.AND,\n                        sort: this.sorts.createSortInput(),\n                    },\n                };\n            },\n            refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\n        });\n    }\n\n    rebuildSearchIndex() {\n        this.dataService.product.reindex().subscribe(({ reindex }) => {\n            this.notificationService.info(_('catalog.reindexing'));\n            this.jobQueueService.addJob(reindex.id, job => {\n                if (job.state === JobState.COMPLETED) {\n                    const time = new Intl.NumberFormat().format(job.duration || 0);\n                    this.notificationService.success(_('catalog.reindex-successful'), {\n                        count: job.result.indexedItemCount,\n                        time,\n                    });\n                    this.refresh();\n                } else {\n                    this.notificationService.error(_('catalog.reindex-error'));\n                }\n            });\n        });\n    }\n\n    deleteProduct(productId: string) {\n        this.modalService\n            .dialog({\n                title: _('catalog.confirm-delete-product'),\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(response => (response ? this.dataService.product.deleteProduct(productId) : EMPTY)),\n                // Short delay to allow the product to be removed from the search index before\n                // refreshing.\n                delay(500),\n            )\n            .subscribe(\n                () => {\n                    this.notificationService.success(_('common.notify-delete-success'), {\n                        entity: 'Product',\n                    });\n                    this.refresh();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-delete-error'), {\n                        entity: 'Product',\n                    });\n                },\n            );\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left>\n            <vdr-language-selector\n                [availableLanguageCodes]=\"availableLanguages$ | async\"\n                [currentLanguageCode]=\"contentLanguage$ | async\"\n                (languageCodeChange)=\"setLanguage($event)\"\n            ></vdr-language-selector>\n        </vdr-ab-left>\n        <vdr-ab-right>\n            <vdr-action-bar-items [locationId]=\"pageLocationId\"></vdr-action-bar-items>\n            <a\n                class=\"btn btn-primary mr-1\"\n                [routerLink]=\"['./create']\"\n                *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\n            >\n                <clr-icon shape=\"plus\"></clr-icon>\n                {{ 'catalog.create-new-product' | translate }}\n            </a>\n            <vdr-action-bar-dropdown-menu [alwaysShow]=\"true\" [locationId]=\"pageLocationId\">\n                <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\n                    <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\n                    {{ 'catalog.rebuild-search-index' | translate }}\n                </button>\n            </vdr-action-bar-dropdown-menu>\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<vdr-data-table-2\n    class=\"mt-2\"\n    [id]=\"dataTableListId\"\n    [items]=\"items$ | async\"\n    [itemsPerPage]=\"itemsPerPage$ | async\"\n    [totalItems]=\"totalItems$ | async\"\n    [currentPage]=\"currentPage$ | async\"\n    [filters]=\"filters\"\n    (pageChange)=\"setPageNumber($event)\"\n    (itemsPerPageChange)=\"setItemsPerPage($event)\"\n    (visibleColumnsChange)=\"setVisibleColumns($event)\"\n>\n    <vdr-bulk-action-menu\n        [locationId]=\"dataTableListId\"\n        [hostComponent]=\"this\"\n        [selectionManager]=\"selectionManager\"\n    ></vdr-bulk-action-menu>\n    <vdr-dt2-search\n        [searchTermControl]=\"searchTermControl\"\n        [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\n    />\n    <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\n        <ng-template let-product=\"item\">\n            {{ product.id }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('createdAt')\"\n    >\n        <ng-template let-product=\"item\">\n            {{ product.createdAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column\n        [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n        [hiddenByDefault]=\"true\"\n        [sort]=\"sorts.get('updatedAt')\"\n    >\n        <ng-template let-product=\"item\">\n            {{ product.updatedAt | localeDate : 'short' }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\n        <ng-template let-product=\"item\">\n            <div class=\"image-placeholder\">\n                <img\n                    *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\n                    [src]=\"asset | assetPreview : 'tiny'\"\n                />\n                <ng-template #imagePlaceholder>\n                    <div class=\"placeholder\">\n                        <clr-icon shape=\"image\" size=\"48\"></clr-icon>\n                    </div>\n                </ng-template>\n            </div>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\n        <ng-template let-product=\"item\">\n            <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\n                ><span>{{ product.name }}</span\n                ><clr-icon shape=\"arrow right\"\n            /></a>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\n        <ng-template let-product=\"item\">\n            {{ product.slug }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n        <ng-template let-product=\"item\">\n            <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\n                'common.enabled' | translate\n            }}</vdr-chip>\n            <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\n                'common.disabled' | translate\n            }}</vdr-chip>\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\" id=\"number-of-variants\">\n        <ng-template let-product=\"item\">\n            {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\n        </ng-template>\n    </vdr-dt2-column>\n    <vdr-dt2-custom-field-column\n        *ngFor=\"let customField of customFields\"\n        [customField]=\"customField\"\n        [sorts]=\"sorts\"\n    />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DataService } from '@vendure/admin-ui/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\n@Component({\n    selector: 'vdr-variant-price-detail',\n    templateUrl: './variant-price-detail.component.html',\n    styleUrls: ['./variant-price-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class VariantPriceDetailComponent implements OnInit, OnChanges {\n    @Input() priceIncludesTax: boolean;\n    @Input() price: number;\n    @Input() currencyCode: string;\n    @Input() taxCategoryId: string;\n\n    grossPrice$: Observable<number>;\n    taxRate$: Observable<number>;\n\n    private priceChange$ = new BehaviorSubject<number>(0);\n    private taxCategoryIdChange$ = new BehaviorSubject<string>('');\n\n    constructor(private dataService: DataService) {}\n\n    ngOnInit() {\n        const taxRates$ = this.dataService.settings\n            .getTaxRatesSimple(999, 0, 'cache-first')\n            .mapStream(data => data.taxRates.items);\n        const activeChannel$ = this.dataService.settings\n            .getActiveChannel('cache-first')\n            .refetchOnChannelChange()\n            .mapStream(data => data.activeChannel);\n\n        this.taxRate$ = combineLatest(activeChannel$, taxRates$, this.taxCategoryIdChange$).pipe(\n            map(([channel, taxRates, taxCategoryId]) => {\n                const defaultTaxZone = channel.defaultTaxZone;\n                if (!defaultTaxZone) {\n                    return 0;\n                }\n                const applicableRate = taxRates.find(\n                    taxRate => taxRate.zone.id === defaultTaxZone.id && taxRate.category.id === taxCategoryId,\n                );\n\n                if (!applicableRate) {\n                    return 0;\n                }\n                return applicableRate.value;\n            }),\n        );\n\n        this.grossPrice$ = combineLatest(this.taxRate$, this.priceChange$).pipe(\n            map(([taxRate, price]) => Math.round(price * ((100 + taxRate) / 100))),\n        );\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('price' in changes) {\n            this.priceChange$.next(changes.price.currentValue);\n        }\n        if ('taxCategoryId' in changes) {\n            this.taxCategoryIdChange$.next(changes.taxCategoryId.currentValue);\n        }\n    }\n}\n","<label class=\"clr-control-label\">{{ 'catalog.taxes' | translate }}</label>\n<div *ngIf=\"priceIncludesTax\" class=\"value\">\n    {{ 'catalog.price-includes-tax-at' | translate: { rate: taxRate$ | async } }}\n</div>\n<div *ngIf=\"!priceIncludesTax\" class=\"value\">\n    {{\n        'catalog.price-with-tax-in-default-zone'\n            | translate: { price: grossPrice$ | async | localeCurrency: currencyCode, rate: taxRate$ | async }\n    }}\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {\n    CurrencyCode,\n    ProductVariantDetailQueryProductVariantFragmentFragment,\n} from '@vendure/admin-ui/core';\n\n@Component({\n    selector: 'vdr-variant-price-strategy-detail',\n    templateUrl: './variant-price-strategy-detail.component.html',\n    styleUrls: ['./variant-price-strategy-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class VariantPriceStrategyDetailComponent {\n    @Input() channelPriceIncludesTax: boolean;\n    @Input() variant: ProductVariantDetailQueryProductVariantFragmentFragment;\n    @Input() channelDefaultCurrencyCode: CurrencyCode;\n\n    calculatedPriceDiffersFromInputPrice(): boolean {\n        const defaultPrice =\n            this.variant.prices.find(p => p.currencyCode === this.channelDefaultCurrencyCode) ??\n            this.variant.prices[0];\n        if (!defaultPrice) {\n            return false;\n        }\n        if (this.channelPriceIncludesTax) {\n            return this.variant.priceWithTax !== defaultPrice.price;\n        } else {\n            return this.variant.price !== defaultPrice.price;\n        }\n    }\n}\n","<div *ngIf=\"calculatedPriceDiffersFromInputPrice()\" class=\"price-strategy-detail\">\n    <vdr-form-item\n        [label]=\"'catalog.calculated-price' | translate\"\n        [tooltip]=\"'catalog.calculated-price-tooltip' | translate\"\n        for=\"price\"\n    >\n    </vdr-form-item>\n    <div class=\"form-grid mt-2\">\n        <vdr-form-item [label]=\"'common.price' | translate\">\n            {{ variant.price | localeCurrency : variant.currencyCode }}\n        </vdr-form-item>\n        <vdr-form-item [label]=\"'common.price-with-tax' | translate\">\n            {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\n        </vdr-form-item>\n    </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n    DataService,\n    GetProductVariantsQuickJumpDocument,\n    GetProductVariantsQuickJumpQuery,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\n\nconst GET_PRODUCT_VARIANTS_QUICK_JUMP = gql`\n    query GetProductVariantsQuickJump($id: ID!) {\n        product(id: $id) {\n            id\n            variants {\n                id\n                name\n                sku\n            }\n        }\n    }\n`;\n\n@Component({\n    selector: 'vdr-product-variant-quick-jump',\n    templateUrl: './product-variant-quick-jump.component.html',\n    styleUrls: ['./product-variant-quick-jump.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ProductVariantQuickJumpComponent implements OnInit {\n    @Input() productId: string;\n    selectedVariantId: string | undefined;\n    variants$: Observable<NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants']>;\n    constructor(\n        private dataService: DataService,\n        private router: Router,\n    ) {}\n\n    ngOnInit() {\n        this.variants$ = this.dataService\n            .query(GetProductVariantsQuickJumpDocument, {\n                id: this.productId,\n            })\n            .mapStream(data => data.product?.variants ?? []);\n    }\n\n    searchFn = (\n        term: string,\n        item: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number],\n    ) =>\n        item.name.toLowerCase().includes(term.toLowerCase()) ||\n        item.sku.toLowerCase().includes(term.toLowerCase());\n\n    onSelect(item?: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number]) {\n        if (item) {\n            this.router\n                .navigate(['catalog', 'products', this.productId, 'variants', item.id])\n                .then(() => (this.selectedVariantId = undefined));\n        }\n    }\n}\n","<ng-select\n    *ngIf=\"(variants$ | async)?.length > 1\"\n    [items]=\"variants$ | async\"\n    appendTo=\"body\"\n    bindValue=\"id\"\n    [(ngModel)]=\"selectedVariantId\"\n    [searchFn]=\"searchFn\"\n    [clearable]=\"false\"\n    [placeholder]=\"'catalog.quick-jump-placeholder' | translate\"\n    (change)=\"onSelect($event)\"\n>\n    <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n        {{ item.name }} ({{ item.sku }})\n    </ng-template>\n</ng-select>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, UntypedFormGroup } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    Asset,\n    CreateProductVariantInput,\n    createUpdatedTranslatable,\n    CurrencyCode,\n    DataService,\n    findTranslation,\n    getCustomFieldsDefaults,\n    GetProductVariantDetailDocument,\n    GetProductVariantDetailQuery,\n    GlobalFlag,\n    ItemOf,\n    LanguageCode,\n    ModalService,\n    NotificationService,\n    Permission,\n    ProductOptionFragment,\n    ProductVariantUpdateMutationDocument,\n    TypedBaseDetailComponent,\n    UpdateProductVariantInput,\n} from '@vendure/admin-ui/core';\nimport { pick } from '@vendure/common/lib/pick';\nimport { unique } from '@vendure/common/lib/unique';\nimport { combineLatest, concat, Observable } from 'rxjs';\nimport {\n    distinctUntilChanged,\n    map,\n    mergeMap,\n    shareReplay,\n    skip,\n    switchMap,\n    switchMapTo,\n    take,\n    tap,\n} from 'rxjs/operators';\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\n\ninterface SelectedAssets {\n    assets?: Asset[];\n    featuredAsset?: Asset;\n}\n\ninterface VariantFormValue {\n    id: string;\n    enabled: boolean;\n    sku: string;\n    name: string;\n    taxCategoryId: string;\n    stockOnHand: number;\n    useGlobalOutOfStockThreshold: boolean;\n    outOfStockThreshold: number;\n    trackInventory: GlobalFlag;\n    facetValueIds: string[][];\n    customFields?: any;\n}\ntype T = NonNullable<GetProductVariantDetailQuery['productVariant']>;\ntype T1 = T['stockLevels'];\n@Component({\n    selector: 'vdr-product-variant-detail',\n    templateUrl: './product-variant-detail.component.html',\n    styleUrls: ['./product-variant-detail.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ProductVariantDetailComponent\n    extends TypedBaseDetailComponent<typeof GetProductVariantDetailDocument, 'productVariant'>\n    implements OnInit, OnDestroy\n{\n    public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\n    readonly customFields = this.getCustomFieldConfig('ProductVariant');\n    readonly customPriceFields = this.getCustomFieldConfig('ProductVariantPrice');\n    readonly customOptionFields = this.getCustomFieldConfig('ProductOption');\n    stockLevels$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['stockLevels']>;\n    detailForm = this.formBuilder.group<VariantFormValue>({\n        id: '',\n        enabled: false,\n        sku: '',\n        name: '',\n        taxCategoryId: '',\n        stockOnHand: 0,\n        useGlobalOutOfStockThreshold: true,\n        outOfStockThreshold: 0,\n        trackInventory: GlobalFlag.TRUE,\n        facetValueIds: [],\n        customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n    });\n    stockLevelsForm = this.formBuilder.array<\n        FormGroup<{\n            stockLocationId: FormControl<string | null>;\n            stockLocationName: FormControl<string | null>;\n            stockOnHand: FormControl<number | null>;\n            stockAllocated: FormControl<number | null>;\n        }>\n    >([]);\n    pricesForm = this.formBuilder.array<\n        FormGroup<{\n            price: FormControl<number | null>;\n            currencyCode: FormControl<CurrencyCode | null>;\n            delete: FormControl<boolean | null>;\n            customFields: FormGroup<any>; //TODO: Add type\n        }>\n    >([]);\n    assetChanges: SelectedAssets = {};\n    taxCategories$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'taxCategories'>>>;\n    unusedStockLocation$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'stockLocations'>>>;\n    unusedCurrencyCodes$: Observable<string[]>;\n    channelPriceIncludesTax$: Observable<boolean>;\n    readonly GlobalFlag = GlobalFlag;\n    globalTrackInventory: boolean;\n    globalOutOfStockThreshold: number;\n    facetValues$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['facetValues']>;\n    channelDefaultCurrencyCode: CurrencyCode;\n\n    constructor(\n        private productDetailService: ProductDetailService,\n        private formBuilder: FormBuilder,\n        private modalService: ModalService,\n        private notificationService: NotificationService,\n        protected dataService: DataService,\n        private changeDetector: ChangeDetectorRef,\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        this.init();\n        this.dataService.settings.getGlobalSettings('cache-first').single$.subscribe(({ globalSettings }) => {\n            this.globalTrackInventory = globalSettings.trackInventory;\n            this.globalOutOfStockThreshold = globalSettings.outOfStockThreshold;\n            this.changeDetector.markForCheck();\n        });\n        this.taxCategories$ = this.result$.pipe(map(data => data.taxCategories.items));\n        const availableCurrencyCodes$ = this.result$.pipe(\n            tap(data => (this.channelDefaultCurrencyCode = data.activeChannel.defaultCurrencyCode)),\n            map(data => data.activeChannel.availableCurrencyCodes),\n        );\n        this.unusedCurrencyCodes$ = combineLatest(this.pricesForm.valueChanges, availableCurrencyCodes$).pipe(\n            map(([prices, currencyCodes]) =>\n                currencyCodes.filter(code => !prices.map(p => p.currencyCode).includes(code)),\n            ),\n        );\n        const stockLocations$ = this.result$.pipe(map(data => data.stockLocations.items));\n        this.unusedStockLocation$ = combineLatest(this.entity$, stockLocations$).pipe(\n            map(([entity, stockLocations]) => {\n                const usedIds = entity.stockLevels.map(l => l.stockLocation.id);\n                return stockLocations.filter(l => !usedIds.includes(l.id));\n            }),\n        );\n        this.channelPriceIncludesTax$ = this.dataService.settings\n            .getActiveChannel('cache-first')\n            .refetchOnChannelChange()\n            .mapStream(data => data.activeChannel.pricesIncludeTax)\n            .pipe(shareReplay(1));\n        this.stockLevels$ = this.entity$.pipe(map(entity => entity?.stockLevels ?? []));\n        const facetValues$ = this.entity$.pipe(map(variant => variant.facetValues ?? []));\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const formFacetValueIdChanges$ = this.detailForm.get('facetValueIds')!.valueChanges.pipe(\n            skip(1),\n            distinctUntilChanged(),\n            switchMap(ids =>\n                this.dataService.facet\n                    .getFacetValues({ filter: { id: { in: ids } } })\n                    .mapSingle(({ facetValues }) => facetValues.items),\n            ),\n            shareReplay(1),\n        );\n        this.facetValues$ = concat(\n            facetValues$.pipe(take(1)),\n            facetValues$.pipe(switchMapTo(formFacetValueIdChanges$)),\n        );\n    }\n\n    ngOnDestroy() {\n        this.destroy();\n    }\n\n    addPriceInCurrency(currencyCode: CurrencyCode) {\n        this.pricesForm.push(\n            this.formBuilder.group({\n                currencyCode,\n                price: 0,\n                delete: false as boolean,\n                customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customPriceFields)),\n            }),\n        );\n    }\n\n    toggleDeletePrice(deleteFormControl: FormControl) {\n        deleteFormControl.setValue(!deleteFormControl.value);\n        deleteFormControl.markAsDirty();\n    }\n\n    addStockLocation(stockLocation: ItemOf<GetProductVariantDetailQuery, 'stockLocations'>) {\n        this.stockLevelsForm.push(\n            this.formBuilder.group({\n                stockLocationId: stockLocation.id,\n                stockLocationName: stockLocation.name,\n                stockOnHand: 0,\n                stockAllocated: 0,\n            }),\n        );\n    }\n\n    save() {\n        combineLatest(this.entity$, this.languageCode$)\n            .pipe(\n                take(1),\n                mergeMap(([variant, languageCode]) => {\n                    const input = pick(\n                        this.getUpdatedVariant(\n                            variant,\n                            this.detailForm,\n                            languageCode,\n                        ) as UpdateProductVariantInput,\n                        [\n                            'id',\n                            'enabled',\n                            'translations',\n                            'sku',\n                            'taxCategoryId',\n                            'facetValueIds',\n                            'featuredAssetId',\n                            'assetIds',\n                            'trackInventory',\n                            'outOfStockThreshold',\n                            'useGlobalOutOfStockThreshold',\n                            'customFields',\n                        ],\n                    ) as UpdateProductVariantInput;\n                    if (this.stockLevelsForm.dirty) {\n                        input.stockLevels = this.stockLevelsForm.controls\n                            .filter(control => control.dirty)\n                            .map(control => ({\n                                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                                stockLocationId: control.value.stockLocationId!,\n                                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                                stockOnHand: control.value.stockOnHand!,\n                            }));\n                    }\n                    if (this.pricesForm.dirty) {\n                        input.prices = this.pricesForm.controls\n                            .filter(control => control.dirty)\n                            .map(control => ({\n                                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                                price: control.value.price!,\n                                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                                currencyCode: control.value.currencyCode!,\n                                delete: control.value.delete === true,\n                                customFields: control.get('customFields')?.value,\n                            }));\n                    }\n                    return this.dataService.mutate(ProductVariantUpdateMutationDocument, {\n                        input: [input],\n                    });\n                }),\n            )\n            .subscribe(\n                result => {\n                    this.detailForm.markAsPristine();\n                    this.stockLevelsForm.markAsPristine();\n                    this.pricesForm.markAsPristine();\n                    this.assetChanges = {};\n                    this.notificationService.success(_('common.notify-update-success'), {\n                        entity: 'ProductVariant',\n                    });\n                    this.changeDetector.markForCheck();\n                },\n                err => {\n                    this.notificationService.error(_('common.notify-update-error'), {\n                        entity: 'ProductVariant',\n                    });\n                },\n            );\n    }\n\n    assetsChanged(): boolean {\n        return !!Object.values(this.assetChanges).length;\n    }\n\n    inventoryIsNotTracked(formGroup: UntypedFormGroup): boolean {\n        const trackInventory = formGroup.get('trackInventory')?.value;\n        return (\n            trackInventory === GlobalFlag.FALSE ||\n            (trackInventory === GlobalFlag.INHERIT && this.globalTrackInventory === false)\n        );\n    }\n\n    optionGroupCode(optionGroupId: string): string | undefined {\n        const group = this.entity?.product.optionGroups.find(g => g.id === optionGroupId);\n        return group?.code;\n    }\n\n    optionName(option: ProductOptionFragment) {\n        const translation =\n            option.translations.find(t => t.languageCode === this.languageCode) ?? option.translations[0];\n        return translation.name;\n    }\n\n    removeFacetValue(facetValueId: string) {\n        const facetValueIdsControl = this.detailForm.controls.facetValueIds;\n        const currentFacetValueIds = facetValueIdsControl.value ?? [];\n        facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\n        facetValueIdsControl.markAsDirty();\n    }\n\n    selectFacetValue() {\n        this.displayFacetValueModal().subscribe(facetValueIds => {\n            if (facetValueIds) {\n                const facetValueIdsControl = this.detailForm.controls.facetValueIds;\n                const currentFacetValueIds = facetValueIdsControl.value ?? [];\n                facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\n                facetValueIdsControl.markAsDirty();\n            }\n        });\n    }\n\n    private displayFacetValueModal(): Observable<string[] | undefined> {\n        return this.modalService\n            .fromComponent(ApplyFacetDialogComponent, {\n                size: 'md',\n                closable: true,\n            })\n            .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\n    }\n\n    protected setFormValues(\n        variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\n        languageCode: LanguageCode,\n    ): void {\n        const variantTranslation = findTranslation(variant, languageCode);\n        const facetValueIds = variant.facetValues.map(fv => fv.id);\n        this.detailForm.patchValue({\n            id: variant.id,\n            enabled: variant.enabled,\n            sku: variant.sku,\n            name: variantTranslation ? variantTranslation.name : '',\n            taxCategoryId: variant.taxCategory.id,\n            stockOnHand: variant.stockLevels[0]?.stockOnHand ?? 0,\n            useGlobalOutOfStockThreshold: variant.useGlobalOutOfStockThreshold,\n            outOfStockThreshold: variant.outOfStockThreshold,\n            trackInventory: variant.trackInventory,\n            facetValueIds,\n        });\n        this.stockLevelsForm.clear();\n        for (const stockLevel of variant.stockLevels) {\n            this.stockLevelsForm.push(\n                this.formBuilder.group({\n                    stockLocationId: stockLevel.stockLocation.id,\n                    stockLocationName: stockLevel.stockLocation.name,\n                    stockOnHand: stockLevel.stockOnHand,\n                    stockAllocated: stockLevel.stockAllocated,\n                }),\n            );\n        }\n        this.pricesForm.clear();\n        for (const price of variant.prices) {\n            const priceForm = this.formBuilder.group({\n                price: price.price,\n                currencyCode: price.currencyCode,\n                delete: false as boolean,\n                customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customPriceFields)),\n            });\n            if (this.customPriceFields.length) {\n                this.setCustomFieldFormValues(this.customPriceFields, priceForm.get(['customFields']), price);\n            }\n            this.pricesForm.push(priceForm);\n        }\n        if (this.customFields.length) {\n            this.setCustomFieldFormValues(\n                this.customFields,\n                this.detailForm.get('customFields'),\n                variant,\n                variantTranslation,\n            );\n        }\n    }\n\n    /**\n     * Given a product and the value of the detailForm, this method creates an updated copy of the product which\n     * can then be persisted to the API.\n     */\n    private getUpdatedVariant(\n        variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\n        variantFormGroup: typeof this.detailForm,\n        languageCode: LanguageCode,\n    ): UpdateProductVariantInput | CreateProductVariantInput {\n        const updatedProduct = createUpdatedTranslatable({\n            translatable: variant,\n            updatedFields: variantFormGroup.value,\n            customFieldConfig: this.customFields,\n            languageCode,\n            defaultTranslation: {\n                languageCode,\n                name: variant.name || '',\n            },\n        });\n        return {\n            ...updatedProduct,\n            assetIds: this.assetChanges.assets?.map(a => a.id),\n            featuredAssetId: this.assetChanges.featuredAsset?.id,\n            facetValueIds: variantFormGroup.controls.facetValueIds.dirty\n                ? variantFormGroup.value.facetValueIds\n                : undefined,\n            taxCategoryId: variantFormGroup.controls.taxCategoryId.dirty\n                ? variantFormGroup.value.taxCategoryId\n                : undefined,\n        } as UpdateProductVariantInput | CreateProductVariantInput;\n    }\n}\n","<vdr-page-block>\n    <vdr-action-bar>\n        <vdr-ab-left [grow]=\"true\">\n            <div class=\"flex center\">\n                <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\n                    <vdr-language-selector\n                        *ngIf=\"availableLanguages.length > 1\"\n                        class=\"mr-2\"\n                        [disabled]=\"isNew$ | async\"\n                        [availableLanguageCodes]=\"availableLanguages\"\n                        [currentLanguageCode]=\"languageCode$ | async\"\n                        (languageCodeChange)=\"setLanguage($event)\"\n                    ></vdr-language-selector>\n                </ng-container>\n                <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\n            </div>\n        </vdr-ab-left>\n\n        <vdr-ab-right>\n            <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\n            <button\n                *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\n                class=\"btn btn-primary\"\n                (click)=\"save()\"\n                [disabled]=\"\n                    (detailForm.invalid ||\n                        stockLevelsForm.invalid ||\n                        pricesForm.invalid ||\n                        (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\n                    !assetsChanged()\n                \"\n            >\n                {{ 'common.update' | translate }}\n            </button>\n            <vdr-action-bar-dropdown-menu locationId=\"product-variant-detail\"></vdr-action-bar-dropdown-menu>\n        </vdr-ab-right>\n    </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\n    <vdr-page-detail-layout>\n        <vdr-page-detail-sidebar\n            ><vdr-card>\n                <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n                    <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            name=\"enabled\"\n                            [formControl]=\"detailForm.get(['enabled'])\"\n                        />\n                        <label>{{ 'common.enabled' | translate }}</label>\n                    </clr-toggle-wrapper>\n                </vdr-form-field>\n            </vdr-card>\n            <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\n                <div class=\"options\">\n                    <vdr-chip\n                        *ngFor=\"let option of variant.options | sort : 'groupId'\"\n                        [colorFrom]=\"optionGroupCode(option.groupId)\"\n                        [invert]=\"true\"\n                    >\n                        <span>{{ optionGroupCode(option.groupId) }}:</span>\n                        {{ optionName(option) }}\n                    </vdr-chip>\n                </div>\n                <div>\n                    <a\n                        [routerLink]=\"['../../', 'options']\"\n                        class=\"button-small mt-2\"\n                        *vdrIfPermissions=\"updatePermissions\"\n                    >\n                        <clr-icon shape=\"pencil\"></clr-icon>\n                        {{ 'catalog.edit-options' | translate }}\n                    </a>\n                </div>\n            </vdr-card>\n            <vdr-card [title]=\"'catalog.facets' | translate\">\n                <div class=\"facets\">\n                    <vdr-facet-value-chip\n                        *ngFor=\"let facetValue of facetValues$ | async\"\n                        [facetValue]=\"facetValue\"\n                        [removable]=\"updatePermissions | hasPermission\"\n                        (remove)=\"removeFacetValue(facetValue.id)\"\n                    ></vdr-facet-value-chip>\n                </div>\n                <div>\n                    <button\n                        class=\"button-small mt-2\"\n                        *vdrIfPermissions=\"updatePermissions\"\n                        (click)=\"selectFacetValue()\"\n                    >\n                        <clr-icon shape=\"plus\"></clr-icon>\n                        {{ 'catalog.add-facets' | translate }}\n                    </button>\n                </div>\n            </vdr-card>\n\n            <vdr-card>\n                <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\n            </vdr-card>\n        </vdr-page-detail-sidebar>\n\n        <vdr-page-block>\n            <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\n            <vdr-card>\n                <div class=\"form-grid\">\n                    <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n                        <input\n                            id=\"name\"\n                            type=\"text\"\n                            formControlName=\"name\"\n                            [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\n                        <input\n                            id=\"sku\"\n                            type=\"text\"\n                            formControlName=\"sku\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                        />\n                    </vdr-form-field>\n                </div>\n            </vdr-card>\n            <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\n                <vdr-tabbed-custom-fields\n                    entityName=\"ProductVariant\"\n                    [customFields]=\"customFields\"\n                    [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n                    [readonly]=\"!(updatePermissions | hasPermission)\"\n                />\n            </vdr-card>\n            <vdr-custom-detail-component-host\n                locationId=\"product-variant-detail\"\n                [entity$]=\"entity$\"\n                [detailForm]=\"detailForm\"\n            />\n            <vdr-card [title]=\"'catalog.assets' | translate\">\n                <vdr-assets\n                    [assets]=\"assetChanges.assets || variant.assets\"\n                    [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\n                    [updatePermissions]=\"updatePermissions\"\n                    (change)=\"assetChanges = $event\"\n                />\n            </vdr-card>\n            <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\n                <div class=\"form-grid\">\n                    <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\n                        <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\n                            <option\n                                *ngFor=\"let taxCategory of taxCategories$ | async\"\n                                [value]=\"taxCategory.id\"\n                            >\n                                {{ taxCategory.name }}\n                            </option>\n                        </select>\n                    </vdr-form-field>\n                </div>\n                <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\n                    <vdr-form-field\n                        [label]=\"\n                            ('catalog.price' | translate) +\n                            (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\n                        \"\n                        [tooltip]=\"\n                            1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\n                                ? ('catalog.default-currency' | translate)\n                                : undefined\n                        \"\n                        for=\"price\"\n                    >\n                        <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\n                            <vdr-currency-input\n                                name=\"price\"\n                                [currencyCode]=\"price.value.currencyCode\"\n                                [readonly]=\"\n                                    !(updatePermissions | hasPermission) || price.value.delete === true\n                                \"\n                                formControlName=\"price\"\n                            />\n                            <div *ngIf=\"1 < pricesForm.controls.length\">\n                                <button\n                                    class=\"button-small delete-button\"\n                                    [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\n                                    (click)=\"toggleDeletePrice(price.get('delete'))\"\n                                >\n                                    <clr-icon shape=\"trash\"></clr-icon>\n                                </button>\n                            </div>\n                        </div>\n                    </vdr-form-field>\n                    <vdr-variant-price-detail\n                        [price]=\"price.value.price\"\n                        [currencyCode]=\"price.value.currencyCode\"\n                        [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n                        [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\n                    />\n\n                    <div class=\"form-grid-span\" *ngIf=\"customPriceFields.length\">\n                        <div class=\"title-row\">\n                            <span class=\"title\">{{ 'common.custom-fields' | translate }}</span>\n                        </div>\n                        <vdr-tabbed-custom-fields\n                            entityName=\"ProductVariantPrice\"\n                            [customFields]=\"customPriceFields\"\n                            [customFieldsFormGroup]=\"price.get(['customFields'])\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                        />\n                    </div>\n                </div>\n\n                <vdr-variant-price-strategy-detail\n                    [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n                    [channelDefaultCurrencyCode]=\"channelDefaultCurrencyCode\"\n                    [variant]=\"variant\"\n                />\n\n                <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\n                    <div *ngIf=\"unusedCurrencyCodes.length\">\n                        <vdr-dropdown>\n                            <button class=\"button mt-2\" vdrDropdownTrigger>\n                                <clr-icon shape=\"plus\"></clr-icon>\n                                {{ 'catalog.add-price-in-another-currency' | translate }}\n                                <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n                            </button>\n                            <vdr-dropdown-menu>\n                                <button\n                                    vdrDropdownItem\n                                    *ngFor=\"let currencyCode of unusedCurrencyCodes\"\n                                    (click)=\"addPriceInCurrency(currencyCode)\"\n                                >\n                                    {{ currencyCode | localeCurrencyName }}\n                                </button>\n                            </vdr-dropdown-menu>\n                        </vdr-dropdown>\n                    </div>\n                </ng-container>\n            </vdr-card>\n            <vdr-card [title]=\"'catalog.stock-levels' | translate\">\n                <div class=\"form-grid\">\n                    <vdr-form-field\n                        for=\"track-inventory\"\n                        [label]=\"'catalog.track-inventory' | translate\"\n                        [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\n                    >\n                        <select\n                            name=\"track-inventory\"\n                            formControlName=\"trackInventory\"\n                            [disabled]=\"!(updatePermissions | hasPermission)\"\n                        >\n                            <option [value]=\"GlobalFlag.TRUE\">\n                                {{ 'catalog.track-inventory-true' | translate }}\n                            </option>\n                            <option [value]=\"GlobalFlag.FALSE\">\n                                {{ 'catalog.track-inventory-false' | translate }}\n                            </option>\n                            <option [value]=\"GlobalFlag.INHERIT\">\n                                {{ 'catalog.track-inventory-inherit' | translate }}\n                            </option>\n                        </select>\n                    </vdr-form-field>\n\n                    <vdr-form-item\n                        [label]=\"'catalog.out-of-stock-threshold' | translate\"\n                        [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\n                    >\n                        <input\n                            type=\"number\"\n                            formControlName=\"outOfStockThreshold\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                            [vdrDisabled]=\"\n                                detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\n                                inventoryIsNotTracked(detailForm)\n                            \"\n                        />\n                        <clr-toggle-wrapper>\n                            <input\n                                type=\"checkbox\"\n                                clrToggle\n                                name=\"useGlobalOutOfStockThreshold\"\n                                formControlName=\"useGlobalOutOfStockThreshold\"\n                                [vdrDisabled]=\"\n                                    !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\n                                \"\n                            />\n                            <label\n                                >{{ 'catalog.use-global-value' | translate }} ({{\n                                    globalOutOfStockThreshold\n                                }})</label\n                            >\n                        </clr-toggle-wrapper>\n                    </vdr-form-item>\n                </div>\n                <div\n                    class=\"form-grid stock-levels\"\n                    *ngFor=\"let stockLevel of stockLevelsForm.controls\"\n                    [formGroup]=\"stockLevel\"\n                >\n                    <vdr-form-field\n                        [label]=\"\n                            stockLevel.get('stockLocationName')?.value +\n                            ': ' +\n                            ('catalog.stock-on-hand' | translate)\n                        \"\n                        [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n                    >\n                        <input\n                            [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n                            type=\"number\"\n                            formControlName=\"stockOnHand\"\n                            [readonly]=\"!(updatePermissions | hasPermission)\"\n                        />\n                    </vdr-form-field>\n                    <vdr-form-item\n                        [label]=\"\n                            stockLevel.get('stockLocationName')?.value +\n                            ': ' +\n                            ('catalog.stock-allocated' | translate)\n                        \"\n                    >\n                        {{ stockLevel.get('stockAllocated')?.value }}\n                    </vdr-form-item>\n                </div>\n                <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\n                    <div *ngIf=\"unusedStockLocations.length\">\n                        <vdr-dropdown>\n                            <button class=\"button mt-2\" vdrDropdownTrigger>\n                                <clr-icon shape=\"plus\"></clr-icon>\n                                {{ 'catalog.add-stock-location' | translate }}\n                                <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n                            </button>\n                            <vdr-dropdown-menu>\n                                <button\n                                    vdrDropdownItem\n                                    *ngFor=\"let stockLocation of unusedStockLocations\"\n                                    (click)=\"addStockLocation(stockLocation)\"\n                                >\n                                    <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\n                                </button>\n                            </vdr-dropdown-menu>\n                        </vdr-dropdown>\n                    </div>\n                </ng-container>\n            </vdr-card>\n        </vdr-page-block>\n    </vdr-page-detail-layout>\n</form>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    BulkAction,\n    createBulkRemoveFromChannelAction,\n    DataService,\n    DeletionResult,\n    GetProductVariantListQuery,\n    isMultiChannel,\n    ItemOf,\n    ModalService,\n    NotificationService,\n    Permission,\n    ProductVariant,\n} from '@vendure/admin-ui/core';\nimport { unique } from '@vendure/common/lib/unique';\nimport { EMPTY } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\nimport { ProductVariantListComponent } from './product-variant-list.component';\n\nexport const assignProductVariantsToChannelBulkAction: BulkAction<\n    ItemOf<GetProductVariantListQuery, 'productVariants'>,\n    ProductVariantListComponent\n> = {\n    location: 'product-variant-list',\n    label: _('common.assign-to-channel'),\n    icon: 'layers',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\n    onClick: ({ injector, selection, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        modalService\n            .fromComponent(AssignProductsToChannelDialogComponent, {\n                size: 'lg',\n                locals: {\n                    productVariantIds: unique(selection.map(p => p.id)),\n                    currentChannelIds: [],\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    clearSelection();\n                }\n            });\n    },\n};\n\nexport const removeProductVariantsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n    ItemOf<GetProductVariantListQuery, 'productVariants'>\n>({\n    location: 'product-variant-list',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    getItemName: item => item.name,\n    bulkRemoveFromChannel: (dataService, ids, channelId) =>\n        dataService.product\n            .removeVariantsFromChannel({\n                channelId: channelId,\n                productVariantIds: ids,\n            })\n            .pipe(map(res => res.removeProductVariantsFromChannel)),\n});\n\nexport const deleteProductVariantsBulkAction: BulkAction<ProductVariant, ProductVariantListComponent> = {\n    location: 'product-variant-list',\n    label: _('common.delete'),\n    icon: 'trash',\n    iconClass: 'is-danger',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.DeleteProduct) ||\n        userPermissions.includes(Permission.DeleteCatalog),\n    onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const dataService = injector.get(DataService);\n        const notificationService = injector.get(NotificationService);\n        modalService\n            .dialog({\n                title: _('common.confirm-bulk-delete'),\n                translationVars: {\n                    count: selection.length,\n                },\n                buttons: [\n                    { type: 'secondary', label: _('common.cancel') },\n                    { type: 'danger', label: _('common.delete'), returnValue: true },\n                ],\n            })\n            .pipe(\n                switchMap(response =>\n                    response\n                        ? dataService.product.deleteProductVariants(unique(selection.map(p => p.id)))\n                        : EMPTY,\n                ),\n            )\n            .subscribe(result => {\n                let deleted = 0;\n                const errors: string[] = [];\n                for (const item of result.deleteProductVariants) {\n                    if (item.result === DeletionResult.DELETED) {\n                        deleted++;\n                    } else if (item.message) {\n                        errors.push(item.message);\n                    }\n                }\n                if (0 < deleted) {\n                    notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\n                        count: deleted,\n                    });\n                }\n                if (0 < errors.length) {\n                    notificationService.error(errors.join('\\n'));\n                }\n                hostComponent.refresh();\n                clearSelection();\n            });\n    },\n};\n\nexport const assignFacetValuesToProductVariantsBulkAction: BulkAction<\n    ItemOf<GetProductVariantListQuery, 'productVariants'>,\n    ProductVariantListComponent\n> = {\n    location: 'product-variant-list',\n    label: _('catalog.edit-facet-values'),\n    icon: 'tag',\n    requiresPermission: userPermissions =>\n        userPermissions.includes(Permission.UpdateCatalog) ||\n        userPermissions.includes(Permission.UpdateProduct),\n    onClick: ({ injector, selection, clearSelection }) => {\n        const modalService = injector.get(ModalService);\n        const notificationService = injector.get(NotificationService);\n        const mode = 'variant';\n        const ids = unique(selection.map(p => p.id));\n        return modalService\n            .fromComponent(BulkAddFacetValuesDialogComponent, {\n                size: 'xl',\n                locals: {\n                    mode,\n                    ids,\n                },\n            })\n            .subscribe(result => {\n                if (result) {\n                    notificationService.success(_('common.notify-bulk-update-success'), {\n                        count: selection.length,\n                        entity: mode === 'variant' ? 'Products' : 'ProductVariants',\n                    });\n                    clearSelection();\n                }\n            });\n    },\n};\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnDestroy,\n    OnInit,\n} from '@angular/core';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { Asset, Permission, ProductDetailFragment, ProductVariantFragment } from '@vendure/admin-ui/core';\nimport { Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\ninterface SelectedAssets {\n    assets?: Asset[];\n    featuredAsset?: Asset;\n}\n\ninterface PaginationConfig {\n    totalItems: number;\n    currentPage: number;\n    itemsPerPage: number;\n}\n\n@Component({\n    selector: 'vdr-product-variants-table',\n    templateUrl: './product-variants-table.component.html',\n    styleUrls: ['./product-variants-table.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class ProductVariantsTableComponent implements OnInit, OnDestroy {\n    @Input('productVariantsFormArray') formArray: UntypedFormArray;\n    @Input() variants: ProductVariantFragment[];\n    @Input() paginationConfig: PaginationConfig;\n    @Input() channelPriceIncludesTax: boolean;\n    @Input() optionGroups: ProductDetailFragment['optionGroups'];\n    @Input() pendingAssetChanges: { [variantId: string]: SelectedAssets };\n    formGroupMap = new Map<string, UntypedFormGroup>();\n    readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\n    private subscription: Subscription;\n\n    constructor(private changeDetector: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        this.subscription = this.formArray.valueChanges\n            .pipe(\n                map(value => value.length),\n                debounceTime(1),\n                distinctUntilChanged(),\n            )\n            .subscribe(() => {\n                this.buildFormGroupMap();\n            });\n\n        this.buildFormGroupMap();\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n    trackByFn(index: number, item: any) {\n        if ((item as any).id != null) {\n            return (item as any).id;\n        } else {\n            return index;\n        }\n    }\n\n    getFeaturedAsset(variant: ProductVariantFragment) {\n        return this.pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset;\n    }\n\n    optionGroupName(optionGroupId: string): string | undefined {\n        const group = this.optionGroups.find(g => g.id === optionGroupId);\n        return group && group.name;\n    }\n\n    private buildFormGroupMap() {\n        this.formGroupMap.clear();\n        for (const controlGroup of this.formArray.controls) {\n            this.formGroupMap.set(controlGroup.value.id, controlGroup as UntypedFormGroup);\n        }\n        this.changeDetector.markForCheck();\n    }\n}\n","<table class=\"table\">\n    <thead>\n        <tr>\n            <th></th>\n            <th>{{ 'common.name' | translate }}</th>\n            <th>{{ 'catalog.sku' | translate }}</th>\n            <ng-container *ngFor=\"let optionGroup of optionGroups | sort: 'id'\">\n                <th>{{ optionGroup.name }}</th>\n            </ng-container>\n            <th>{{ 'catalog.price' | translate }}</th>\n            <th>{{ 'catalog.stock-on-hand' | translate }}</th>\n            <th>{{ 'common.enabled' | translate }}</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr *ngFor=\"let variant of variants | paginate: paginationConfig; index as i; trackBy: trackByFn\">\n            <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\n                <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <div class=\"card-img\">\n                        <div class=\"featured-asset\">\n                            <img\n                                *ngIf=\"getFeaturedAsset(variant) as featuredAsset; else placeholder\"\n                                [src]=\"featuredAsset | assetPreview: 'tiny'\"\n                            />\n                            <ng-template #placeholder>\n                                <div class=\"placeholder\">\n                                    <clr-icon shape=\"image\" size=\"48\"></clr-icon>\n                                </div>\n                            </ng-template>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <clr-input-container>\n                        <input\n                            clrInput\n                            type=\"text\"\n                            formControlName=\"name\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            [placeholder]=\"'common.name' | translate\"\n                        />\n                    </clr-input-container>\n                </td>\n                <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <clr-input-container>\n                        <input\n                            clrInput\n                            type=\"text\"\n                            formControlName=\"sku\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            [placeholder]=\"'catalog.sku' | translate\"\n                        />\n                    </clr-input-container>\n                </td>\n                <ng-container *ngFor=\"let option of variant.options | sort: 'groupId'\">\n                    <td\n                        class=\"left align-middle\"\n                        [class.disabled]=\"!formGroup.get('enabled')!.value\"\n                        [style.color]=\"optionGroupName(option.groupId) | stringToColor\"\n                    >\n                        {{ option.name }}\n                    </td>\n                </ng-container>\n                <td class=\"left align-middle price\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <clr-input-container>\n                        <vdr-currency-input\n                            *ngIf=\"!channelPriceIncludesTax\"\n                            clrInput\n                            [currencyCode]=\"variant.currencyCode\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            formControlName=\"price\"\n                        ></vdr-currency-input>\n                        <vdr-currency-input\n                            *ngIf=\"channelPriceIncludesTax\"\n                            clrInput\n                            [currencyCode]=\"variant.currencyCode\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                            formControlName=\"priceWithTax\"\n                        ></vdr-currency-input>\n                    </clr-input-container>\n                </td>\n                <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <clr-input-container>\n                        <input\n                            clrInput\n                            type=\"number\"\n                            min=\"0\"\n                            step=\"1\"\n                            formControlName=\"stockOnHand\"\n                            [readonly]=\"!(updatePermission | hasPermission)\"\n                        />\n                    </clr-input-container>\n                </td>\n                <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\n                    <clr-toggle-wrapper>\n                        <input\n                            type=\"checkbox\"\n                            clrToggle\n                            name=\"enabled\"\n                            formControlName=\"enabled\"\n                            [vdrDisabled]=\"!(updatePermission | hasPermission)\"\n                        />\n                    </clr-toggle-wrapper>\n                </td>\n            </ng-container>\n        </tr>\n    </tbody>\n</table>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport {\n    CustomFieldConfig,\n    LanguageCode,\n    ProductVariantFragment,\n    UpdateProductOptionInput,\n    createUpdatedTranslatable,\n    Dialog,\n} from '@vendure/admin-ui/core';\n\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\n\n@Component({\n    selector: 'vdr-update-product-option-dialog',\n    templateUrl: './update-product-option-dialog.component.html',\n    styleUrls: ['./update-product-option-dialog.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\n})\nexport class UpdateProductOptionDialogComponent\n    implements Dialog<UpdateProductOptionInput & { autoUpdate: boolean }>, OnInit\n{\n    resolveWith: (result?: UpdateProductOptionInput & { autoUpdate: boolean }) => void;\n    updateVariantName = true;\n    // Provided by caller\n    productOption: ProductVariantFragment['options'][number];\n    activeLanguage: LanguageCode;\n    name: string;\n    code: string;\n    customFields: CustomFieldConfig[];\n    codeInputTouched = false;\n    customFieldsForm: UntypedFormGroup;\n\n    ngOnInit(): void {\n        const currentTranslation = this.productOption.translations.find(\n            t => t.languageCode === this.activeLanguage,\n        );\n        this.name = currentTranslation?.name ?? '';\n        this.code = this.productOption.code;\n        this.customFieldsForm = new UntypedFormGroup({});\n        if (this.customFields) {\n            const cfCurrentTranslation =\n                (currentTranslation && (currentTranslation as any).customFields) || {};\n\n            for (const fieldDef of this.customFields) {\n                const key = fieldDef.name;\n                const value =\n                    fieldDef.type === 'localeString'\n                        ? cfCurrentTranslation[key]\n                        : (this.productOption as any).customFields[key];\n                this.customFieldsForm.addControl(fieldDef.name, new UntypedFormControl(value));\n            }\n        }\n    }\n\n    update() {\n        const result = createUpdatedTranslatable({\n            translatable: this.productOption,\n            languageCode: this.activeLanguage,\n            updatedFields: {\n                code: this.code,\n                name: this.name,\n                customFields: this.customFieldsForm.value,\n            },\n            customFieldConfig: this.customFields,\n            defaultTranslation: {\n                languageCode: this.activeLanguage,\n                name: '',\n            },\n        });\n        this.resolveWith({ ...result, autoUpdate: this.updateVariantName });\n    }\n\n    cancel() {\n        this.resolveWith();\n    }\n\n    updateCode(nameValue: string) {\n        if (!this.codeInputTouched && !this.productOption.code) {\n            this.code = normalizeString(nameValue, '-');\n        }\n    }\n}\n","<ng-template vdrDialogTitle>{{ 'catalog.update-product-option' | translate }}</ng-template>\n<vdr-form-field [label]=\"'catalog.option-name' | translate\" for=\"name\">\n    <input\n        id=\"name\"\n        type=\"text\"\n        #nameInput=\"ngModel\"\n        [(ngModel)]=\"name\"\n        required\n        (input)=\"updateCode($event.target.value)\"\n    />\n</vdr-form-field>\n<vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\n    <input id=\"code\" type=\"text\" #codeInput=\"ngModel\" required [(ngModel)]=\"code\" pattern=\"[a-z0-9_-]+\" />\n</vdr-form-field>\n<clr-checkbox-wrapper>\n    <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"updateVariantName\" />\n    <label>{{ 'catalog.auto-update-option-variant-name' | translate }}</label>\n</clr-checkbox-wrapper>\n<section *ngIf=\"customFields.length\">\n    <label>{{ 'common.custom-fields' | translate }}</label>\n    <vdr-tabbed-custom-fields\n        entityName=\"ProductOption\"\n        [customFields]=\"customFields\"\n        [customFieldsFormGroup]=\"customFieldsForm\"\n        [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\n    ></vdr-tabbed-custom-fields>\n</section>\n\n<ng-template vdrDialogButtons>\n    <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n    <button\n        type=\"submit\"\n        (click)=\"update()\"\n        [disabled]=\"\n            nameInput.invalid ||\n            codeInput.invalid ||\n            (nameInput.pristine && codeInput.pristine && customFieldsForm.pristine)\n        \"\n        class=\"btn btn-primary\"\n    >\n        {{ 'catalog.update-product-option' | translate }}\n    </button>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n    AssetDetailQueryDocument,\n    BulkActionRegistryService,\n    CollectionDetailQueryDocument,\n    detailComponentWithResolver,\n    GetFacetDetailDocument,\n    GetProductDetailDocument,\n    GetProductVariantDetailDocument,\n    PageService,\n    SharedModule,\n} from '@vendure/admin-ui/core';\nimport { SortOrder } from '@vendure/common/lib/generated-types';\n\nimport { createRoutes } from './catalog.routes';\nimport { ApplyFacetDialogComponent } from './components/apply-facet-dialog/apply-facet-dialog.component';\nimport { AssetDetailComponent } from './components/asset-detail/asset-detail.component';\nimport { AssetListComponent } from './components/asset-list/asset-list.component';\nimport { AssignProductsToChannelDialogComponent } from './components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\nimport { BulkAddFacetValuesDialogComponent } from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\nimport { CollectionContentsComponent } from './components/collection-contents/collection-contents.component';\nimport { CollectionDataTableComponent } from './components/collection-data-table/collection-data-table.component';\nimport { CollectionDetailComponent } from './components/collection-detail/collection-detail.component';\nimport { CollectionBreadcrumbPipe } from './components/collection-list/collection-breadcrumb.pipe';\nimport {\n    assignCollectionsToChannelBulkAction,\n    deleteCollectionsBulkAction,\n    duplicateCollectionsBulkAction,\n    moveCollectionsBulkAction,\n    removeCollectionsFromChannelBulkAction,\n} from './components/collection-list/collection-list-bulk-actions';\nimport { CollectionListComponent } from './components/collection-list/collection-list.component';\nimport { CollectionTreeNodeComponent } from './components/collection-tree/collection-tree-node.component';\nimport { CollectionTreeComponent } from './components/collection-tree/collection-tree.component';\nimport { ConfirmVariantDeletionDialogComponent } from './components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component';\nimport { CreateFacetValueDialogComponent } from './components/create-facet-value-dialog/create-facet-value-dialog.component';\nimport { CreateProductOptionGroupDialogComponent } from './components/create-product-option-group-dialog/create-product-option-group-dialog.component';\nimport { CreateProductVariantDialogComponent } from './components/create-product-variant-dialog/create-product-variant-dialog.component';\nimport { FacetDetailComponent } from './components/facet-detail/facet-detail.component';\nimport {\n    assignFacetsToChannelBulkAction,\n    deleteFacetsBulkAction,\n    duplicateFacetsBulkAction,\n    removeFacetsFromChannelBulkAction,\n} from './components/facet-list/facet-list-bulk-actions';\nimport { FacetListComponent } from './components/facet-list/facet-list.component';\nimport { GenerateProductVariantsComponent } from './components/generate-product-variants/generate-product-variants.component';\nimport { MoveCollectionsDialogComponent } from './components/move-collections-dialog/move-collections-dialog.component';\nimport { OptionValueInputComponent } from './components/option-value-input/option-value-input.component';\nimport { ProductDetailComponent } from './components/product-detail/product-detail.component';\nimport {\n    assignFacetValuesToProductsBulkAction,\n    assignProductsToChannelBulkAction,\n    deleteProductsBulkAction,\n    duplicateProductsBulkAction,\n    removeProductsFromChannelBulkAction,\n} from './components/product-list/product-list-bulk-actions';\nimport { ProductListComponent } from './components/product-list/product-list.component';\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\nimport { ProductVariantDetailComponent } from './components/product-variant-detail/product-variant-detail.component';\nimport {\n    assignFacetValuesToProductVariantsBulkAction,\n    assignProductVariantsToChannelBulkAction,\n    deleteProductVariantsBulkAction,\n    removeProductVariantsFromChannelBulkAction,\n} from './components/product-variant-list/product-variant-list-bulk-actions';\nimport { ProductVariantListComponent } from './components/product-variant-list/product-variant-list.component';\nimport { ProductVariantQuickJumpComponent } from './components/product-variant-quick-jump/product-variant-quick-jump.component';\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\nimport { ProductVariantsTableComponent } from './components/product-variants-table/product-variants-table.component';\nimport { UpdateProductOptionDialogComponent } from './components/update-product-option-dialog/update-product-option-dialog.component';\nimport { VariantPriceDetailComponent } from './components/variant-price-detail/variant-price-detail.component';\nimport { VariantPriceStrategyDetailComponent } from './components/variant-price-strategy-detail/variant-price-strategy-detail.component';\n\nconst CATALOG_COMPONENTS = [\n    ProductListComponent,\n    ProductDetailComponent,\n    FacetListComponent,\n    FacetDetailComponent,\n    GenerateProductVariantsComponent,\n    ApplyFacetDialogComponent,\n    AssetListComponent,\n    VariantPriceDetailComponent,\n    VariantPriceStrategyDetailComponent,\n    CollectionListComponent,\n    CollectionDetailComponent,\n    CollectionTreeComponent,\n    CollectionTreeNodeComponent,\n    CollectionContentsComponent,\n    ProductVariantsTableComponent,\n    OptionValueInputComponent,\n    UpdateProductOptionDialogComponent,\n    ProductVariantsEditorComponent,\n    AssignProductsToChannelDialogComponent,\n    AssetDetailComponent,\n    ConfirmVariantDeletionDialogComponent,\n    ProductOptionsEditorComponent,\n    BulkAddFacetValuesDialogComponent,\n    CollectionDataTableComponent,\n    CollectionBreadcrumbPipe,\n    MoveCollectionsDialogComponent,\n    ProductVariantListComponent,\n    ProductDetailComponent,\n    ProductVariantDetailComponent,\n    CreateProductVariantDialogComponent,\n    CreateProductOptionGroupDialogComponent,\n    ProductVariantQuickJumpComponent,\n    CreateFacetValueDialogComponent,\n];\n\n@NgModule({\n    imports: [SharedModule, RouterModule.forChild([])],\n    exports: [...CATALOG_COMPONENTS],\n    declarations: [...CATALOG_COMPONENTS],\n    providers: [\n        {\n            provide: ROUTES,\n            useFactory: (pageService: PageService) => createRoutes(pageService),\n            multi: true,\n            deps: [PageService],\n        },\n    ],\n})\nexport class CatalogModule {\n    private static hasRegisteredTabsAndBulkActions = false;\n\n    constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n        if (CatalogModule.hasRegisteredTabsAndBulkActions) {\n            return;\n        }\n        bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductsBulkAction);\n        bulkActionRegistryService.registerBulkAction(assignProductsToChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(duplicateProductsBulkAction);\n        bulkActionRegistryService.registerBulkAction(removeProductsFromChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(deleteProductsBulkAction);\n\n        bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductVariantsBulkAction);\n        bulkActionRegistryService.registerBulkAction(assignProductVariantsToChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(removeProductVariantsFromChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(deleteProductVariantsBulkAction);\n\n        bulkActionRegistryService.registerBulkAction(assignFacetsToChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(duplicateFacetsBulkAction);\n        bulkActionRegistryService.registerBulkAction(removeFacetsFromChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(deleteFacetsBulkAction);\n\n        bulkActionRegistryService.registerBulkAction(moveCollectionsBulkAction);\n        bulkActionRegistryService.registerBulkAction(assignCollectionsToChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(duplicateCollectionsBulkAction);\n        bulkActionRegistryService.registerBulkAction(removeCollectionsFromChannelBulkAction);\n        bulkActionRegistryService.registerBulkAction(deleteCollectionsBulkAction);\n\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'product-list',\n            tab: _('catalog.products'),\n            route: '',\n            component: ProductListComponent,\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'product-detail',\n            tab: _('catalog.product'),\n            route: '',\n            component: detailComponentWithResolver({\n                component: ProductDetailComponent,\n                query: GetProductDetailDocument,\n                entityKey: 'product',\n                getBreadcrumbs: entity => [\n                    {\n                        label: entity ? entity.name : _('catalog.create-new-product'),\n                        link: [entity?.id],\n                    },\n                ],\n            }),\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'product-list',\n            tab: _('catalog.product-variants'),\n            route: 'variants',\n            component: ProductVariantListComponent,\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'product-variant-detail',\n            tab: _('catalog.product-variants'),\n            route: '',\n            component: detailComponentWithResolver({\n                component: ProductVariantDetailComponent,\n                query: GetProductVariantDetailDocument,\n                entityKey: 'productVariant',\n                getBreadcrumbs: entity => [\n                    {\n                        label: `${entity?.product.name}`,\n                        link: ['/catalog', 'products', entity?.product.id],\n                    },\n                    {\n                        label: `${entity?.name} (${entity?.sku})`,\n                        link: ['variants', entity?.id],\n                    },\n                ],\n            }),\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'facet-list',\n            tab: _('catalog.facets'),\n            route: '',\n            component: FacetListComponent,\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'facet-detail',\n            tab: _('catalog.facet'),\n            route: '',\n            component: detailComponentWithResolver({\n                component: FacetDetailComponent,\n                query: GetFacetDetailDocument,\n                variables: {\n                    facetValueListOptions: {\n                        take: 10,\n                        skip: 0,\n                        sort: {\n                            createdAt: SortOrder.DESC,\n                        },\n                    },\n                },\n                entityKey: 'facet',\n                getBreadcrumbs: entity => [\n                    {\n                        label: entity ? entity.name : _('catalog.create-new-facet'),\n                        link: [entity?.id],\n                    },\n                ],\n            }),\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'collection-list',\n            tab: _('catalog.collections'),\n            route: '',\n            component: CollectionListComponent,\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'collection-detail',\n            tab: _('catalog.collection'),\n            route: '',\n            component: detailComponentWithResolver({\n                component: CollectionDetailComponent,\n                query: CollectionDetailQueryDocument,\n                entityKey: 'collection',\n                getBreadcrumbs: entity => [\n                    {\n                        label: entity ? entity.name : _('catalog.create-new-collection'),\n                        link: [entity?.id],\n                    },\n                ],\n            }),\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'asset-list',\n            tab: _('catalog.assets'),\n            route: '',\n            component: AssetListComponent,\n        });\n        pageService.registerPageTab({\n            priority: 0,\n            location: 'asset-detail',\n            tab: _('catalog.asset'),\n            route: '',\n            component: detailComponentWithResolver({\n                component: AssetDetailComponent,\n                query: AssetDetailQueryDocument,\n                entityKey: 'asset',\n                getBreadcrumbs: entity => [\n                    {\n                        label: `${entity?.name}`,\n                        link: [entity?.id],\n                    },\n                ],\n            }),\n        });\n        CatalogModule.hasRegisteredTabsAndBulkActions = true;\n    }\n}\n","import { gql } from 'apollo-angular';\n\nconst PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT = gql`\n    fragment ProductListQueryProductFragment on Product {\n        id\n        createdAt\n        updatedAt\n        enabled\n        languageCode\n        name\n        slug\n        featuredAsset {\n            id\n            createdAt\n            updatedAt\n            preview\n            focalPoint {\n                x\n                y\n            }\n        }\n        variantList {\n            totalItems\n        }\n    }\n`;\n\nexport const PRODUCT_LIST_QUERY = gql`\n    query ProductListQuery($options: ProductListOptions) {\n        products(options: $options) {\n            items {\n                ...ProductListQueryProductFragment\n            }\n            totalItems\n        }\n    }\n    ${PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT}\n`;\n","import {\n    ASSET_FRAGMENT,\n    PRODUCT_OPTION_FRAGMENT,\n    PRODUCT_VARIANT_PRICE_FRAGMENT,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\n    fragment ProductVariantDetailQueryProductVariantFragment on ProductVariant {\n        id\n        createdAt\n        updatedAt\n        enabled\n        languageCode\n        name\n        price\n        currencyCode\n        prices {\n            ...ProductVariantPrice\n        }\n        priceWithTax\n        stockOnHand\n        stockAllocated\n        trackInventory\n        outOfStockThreshold\n        useGlobalOutOfStockThreshold\n        taxRateApplied {\n            id\n            name\n            value\n        }\n        taxCategory {\n            id\n            name\n        }\n        sku\n        options {\n            ...ProductOption\n        }\n        stockLevels {\n            id\n            createdAt\n            updatedAt\n            stockOnHand\n            stockAllocated\n            stockLocationId\n            stockLocation {\n                id\n                createdAt\n                updatedAt\n                name\n            }\n        }\n        facetValues {\n            id\n            code\n            name\n            facet {\n                id\n                name\n            }\n        }\n        featuredAsset {\n            ...Asset\n        }\n        assets {\n            ...Asset\n        }\n        translations {\n            id\n            languageCode\n            name\n        }\n        channels {\n            id\n            code\n        }\n        product {\n            id\n            name\n            optionGroups {\n                id\n                name\n                code\n                translations {\n                    id\n                    languageCode\n                    name\n                }\n            }\n        }\n    }\n    ${PRODUCT_VARIANT_PRICE_FRAGMENT}\n`;\n\nexport const PRODUCT_VARIANT_DETAIL_QUERY = gql`\n    query GetProductVariantDetail($id: ID!) {\n        productVariant(id: $id) {\n            ...ProductVariantDetailQueryProductVariantFragment\n        }\n        stockLocations(options: { take: 100 }) {\n            items {\n                id\n                createdAt\n                updatedAt\n                name\n                description\n            }\n        }\n        taxCategories(options: { take: 100 }) {\n            items {\n                id\n                createdAt\n                updatedAt\n                name\n                isDefault\n            }\n            totalItems\n        }\n        activeChannel {\n            id\n            availableCurrencyCodes\n            defaultCurrencyCode\n        }\n    }\n    ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\n`;\n\nexport const PRODUCT_VARIANT_UPDATE_MUTATION = gql`\n    mutation ProductVariantUpdateMutation($input: [UpdateProductVariantInput!]!) {\n        updateProductVariants(input: $input) {\n            ...ProductVariantDetailQueryProductVariantFragment\n        }\n    }\n    ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\n`;\n","import { ASSET_FRAGMENT } from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nconst PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\n    fragment ProductVariantListQueryProductVariantFragment on ProductVariant {\n        id\n        createdAt\n        updatedAt\n        productId\n        enabled\n        languageCode\n        name\n        price\n        currencyCode\n        priceWithTax\n        trackInventory\n        outOfStockThreshold\n        stockLevels {\n            id\n            createdAt\n            updatedAt\n            stockLocationId\n            stockOnHand\n            stockAllocated\n            stockLocation {\n                id\n                createdAt\n                updatedAt\n                name\n            }\n        }\n        useGlobalOutOfStockThreshold\n        sku\n        featuredAsset {\n            ...Asset\n        }\n    }\n\n    ${ASSET_FRAGMENT}\n`;\n\nexport const PRODUCT_VARIANT_LIST_QUERY = gql`\n    query ProductVariantListQuery($options: ProductVariantListOptions!) {\n        productVariants(options: $options) {\n            items {\n                ...ProductVariantListQueryProductVariantFragment\n            }\n            totalItems\n        }\n    }\n    ${PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT}\n`;\n","// This file was generated by the build-public-api.ts script\nexport * from './catalog.module';\nexport * from './catalog.routes';\nexport * from './components/apply-facet-dialog/apply-facet-dialog.component';\nexport * from './components/asset-detail/asset-detail.component';\nexport * from './components/asset-list/asset-list.component';\nexport * from './components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\nexport * from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\nexport * from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql';\nexport * from './components/collection-contents/collection-contents.component';\nexport * from './components/collection-data-table/collection-data-table.component';\nexport * from './components/collection-detail/collection-detail.component';\nexport * from './components/collection-list/collection-breadcrumb.pipe';\nexport * from './components/collection-list/collection-list-bulk-actions';\nexport * from './components/collection-list/collection-list.component';\nexport * from './components/collection-tree/array-to-tree';\nexport * from './components/collection-tree/collection-tree-node.component';\nexport * from './components/collection-tree/collection-tree.component';\nexport * from './components/collection-tree/collection-tree.service';\nexport * from './components/collection-tree/collection-tree.types';\nexport * from './components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component';\nexport * from './components/create-facet-value-dialog/create-facet-value-dialog.component';\nexport * from './components/create-product-option-group-dialog/create-product-option-group-dialog.component';\nexport * from './components/create-product-variant-dialog/create-product-variant-dialog.component';\nexport * from './components/facet-detail/facet-detail.component';\nexport * from './components/facet-list/facet-list-bulk-actions';\nexport * from './components/facet-list/facet-list.component';\nexport * from './components/generate-product-variants/generate-product-variants.component';\nexport * from './components/move-collections-dialog/move-collections-dialog.component';\nexport * from './components/option-value-input/option-value-input.component';\nexport * from './components/product-detail/product-detail.component';\nexport * from './components/product-list/product-list-bulk-actions';\nexport * from './components/product-list/product-list.component';\nexport * from './components/product-list/product-list.graphql';\nexport * from './components/product-options-editor/product-options-editor.component';\nexport * from './components/product-variant-detail/product-variant-detail.component';\nexport * from './components/product-variant-detail/product-variant-detail.graphql';\nexport * from './components/product-variant-list/product-variant-list-bulk-actions';\nexport * from './components/product-variant-list/product-variant-list.component';\nexport * from './components/product-variant-list/product-variant-list.graphql';\nexport * from './components/product-variant-quick-jump/product-variant-quick-jump.component';\nexport * from './components/product-variants-editor/product-variants-editor.component';\nexport * from './components/product-variants-table/product-variants-table.component';\nexport * from './components/update-product-option-dialog/update-product-option-dialog.component';\nexport * from './components/variant-price-detail/variant-price-detail.component';\nexport * from './components/variant-price-strategy-detail/variant-price-strategy-detail.component';\nexport * from './providers/product-detail/product-detail.service';\nexport * from './providers/product-detail/replace-last';\nexport * from './providers/routing/product-variants-resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_","i1","i2","i3.ProductDetailService","i4","i5","i6","i7","i3","i8.OptionValueInputComponent","i9","i6.CollectionContentsComponent","i4.CollectionDataTableComponent","i6.CollectionBreadcrumbPipe","i5.CollectionContentsComponent","i6.CollectionDataTableComponent","i8.CollectionBreadcrumbPipe","i2.CollectionTreeService","i1.CollectionTreeService","i4.CollectionTreeNodeComponent","SortOrder","i5.OptionValueInputComponent","i1.ProductDetailService","i7.GenerateProductVariantsComponent","i8.ProductVariantListComponent","i7.VariantPriceDetailComponent","i8.VariantPriceStrategyDetailComponent","i9.ProductVariantQuickJumpComponent","i10"],"mappings":"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"}