@vendure/admin-ui 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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":["/**\r\n * @description\r\n * Like String.prototype.replace(), but replaces the last instance\r\n * rather than the first.\r\n */\r\nexport function replaceLast(target: string | undefined | null, search: string, replace: string): string {\r\n if (!target) {\r\n return '';\r\n }\r\n const lastIndex = target.lastIndexOf(search);\r\n if (lastIndex === -1) {\r\n return target;\r\n }\r\n const head = target.substr(0, lastIndex);\r\n const tail = target.substr(lastIndex).replace(search, replace);\r\n return head + tail;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n CreateProductInput,\r\n CreateProductVariantInput,\r\n DataService,\r\n DeletionResult,\r\n FacetWithValuesFragment,\r\n findTranslation,\r\n GetProductDetailQuery,\r\n GetProductWithVariantsQuery,\r\n LanguageCode,\r\n UpdateProductInput,\r\n UpdateProductMutation,\r\n UpdateProductOptionInput,\r\n UpdateProductVariantInput,\r\n UpdateProductVariantsMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\r\nimport { map, mergeMap, shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nimport { CreateProductVariantsConfig } from '../../components/generate-product-variants/generate-product-variants.component';\r\n\r\nimport { replaceLast } from './replace-last';\r\n\r\n/**\r\n * Handles the logic for making the API calls to perform CRUD operations on a Product and its related\r\n * entities. This logic was extracted out of the component because it became too large and hard to follow.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProductDetailService {\r\n constructor(private dataService: DataService) {}\r\n\r\n getTaxCategories() {\r\n return this.dataService.settings\r\n .getTaxCategories()\r\n .mapSingle(data => data.taxCategories.items)\r\n .pipe(shareReplay(1));\r\n }\r\n\r\n createProductWithVariants(\r\n input: CreateProductInput,\r\n createVariantsConfig: CreateProductVariantsConfig,\r\n languageCode: LanguageCode,\r\n ) {\r\n const createProduct$ = this.dataService.product.createProduct(input);\r\n const nonEmptyOptionGroups = createVariantsConfig.groups.filter(g => 0 < g.values.length);\r\n const createOptionGroups$ = this.createProductOptionGroups(nonEmptyOptionGroups, languageCode);\r\n\r\n return forkJoin(createProduct$, createOptionGroups$).pipe(\r\n mergeMap(([{ createProduct }, optionGroups]) => {\r\n const addOptionsToProduct$ = optionGroups.length\r\n ? forkJoin(\r\n optionGroups.map(optionGroup =>\r\n this.dataService.product.addOptionGroupToProduct({\r\n productId: createProduct.id,\r\n optionGroupId: optionGroup.id,\r\n }),\r\n ),\r\n )\r\n : of([]);\r\n return addOptionsToProduct$.pipe(map(() => ({ createProduct, optionGroups })));\r\n }),\r\n mergeMap(({ createProduct, optionGroups }) => {\r\n const variants = createVariantsConfig.variants.map(v => {\r\n const optionIds = optionGroups.length\r\n ? v.optionValues.map((optionName, index) => {\r\n const option = optionGroups[index].options.find(o => o.name === optionName);\r\n if (!option) {\r\n throw new Error(\r\n `Could not find a matching ProductOption \"${optionName}\" when creating variant`,\r\n );\r\n }\r\n return option.id;\r\n })\r\n : [];\r\n return {\r\n ...v,\r\n optionIds,\r\n };\r\n });\r\n const options = optionGroups.map(og => og.options).reduce((flat, o) => [...flat, ...o], []);\r\n return this.createProductVariants(\r\n createProduct,\r\n variants,\r\n options,\r\n languageCode,\r\n createVariantsConfig.stockLocationId,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n createProductOptionGroups(groups: Array<{ name: string; values: string[] }>, languageCode: LanguageCode) {\r\n return groups.length\r\n ? forkJoin(\r\n groups.map(c =>\r\n this.dataService.product\r\n .createProductOptionGroups({\r\n code: normalizeString(c.name, '-'),\r\n translations: [{ languageCode, name: c.name }],\r\n options: c.values.map(v => ({\r\n code: normalizeString(v, '-'),\r\n translations: [{ languageCode, name: v }],\r\n })),\r\n })\r\n .pipe(map(data => data.createProductOptionGroup)),\r\n ),\r\n )\r\n : of([]);\r\n }\r\n\r\n createProductVariants(\r\n product: { name: string; id: string },\r\n variantData: Array<{ price: number; sku: string; stock: number; optionIds: string[] }>,\r\n options: Array<{ id: string; name: string }>,\r\n languageCode: LanguageCode,\r\n stockLocationId: string,\r\n ) {\r\n const variants: CreateProductVariantInput[] = variantData.map(v => {\r\n const name = options.length\r\n ? `${product.name} ${v.optionIds\r\n .map(id => options.find(o => o.id === id))\r\n .filter(notNullOrUndefined)\r\n .map(o => o.name)\r\n .join(' ')}`\r\n : product.name;\r\n return {\r\n productId: product.id,\r\n price: v.price,\r\n sku: v.sku,\r\n translations: [\r\n {\r\n languageCode,\r\n name,\r\n },\r\n ],\r\n stockLevels: [\r\n {\r\n stockLocationId,\r\n stockOnHand: v.stock,\r\n },\r\n ],\r\n optionIds: v.optionIds,\r\n };\r\n });\r\n return this.dataService.product.createProductVariants(variants).pipe(\r\n map(({ createProductVariants }) => ({\r\n createProductVariants,\r\n productId: product.id,\r\n })),\r\n );\r\n }\r\n\r\n updateProduct(updateOptions: {\r\n product: NonNullable<GetProductDetailQuery['product']>;\r\n languageCode: LanguageCode;\r\n autoUpdate: boolean;\r\n productInput?: UpdateProductInput;\r\n variantsInput?: UpdateProductVariantInput[];\r\n }) {\r\n const { product, languageCode, autoUpdate, productInput, variantsInput } = updateOptions;\r\n const updateOperations: Array<Observable<UpdateProductMutation | UpdateProductVariantsMutation>> = [];\r\n const updateVariantsInput = variantsInput || [];\r\n\r\n const variants$ = autoUpdate\r\n ? this.dataService.product\r\n .getProductVariantsForProduct({}, product.id)\r\n .mapSingle(({ productVariants }) => productVariants.items)\r\n : of([]);\r\n\r\n return variants$.pipe(\r\n mergeMap(variants => {\r\n if (productInput) {\r\n updateOperations.push(this.dataService.product.updateProduct(productInput));\r\n const productOldName = findTranslation(product, languageCode)?.name ?? '';\r\n const productNewName = findTranslation(productInput, languageCode)?.name;\r\n if (productNewName && productOldName !== productNewName && autoUpdate) {\r\n for (const variant of variants) {\r\n const currentVariantName = findTranslation(variant, languageCode)?.name || '';\r\n let variantInput: UpdateProductVariantInput;\r\n const existingVariantInput = updateVariantsInput.find(i => i.id === variant.id);\r\n if (existingVariantInput) {\r\n variantInput = existingVariantInput;\r\n } else {\r\n variantInput = {\r\n id: variant.id,\r\n translations: [{ languageCode, name: currentVariantName }],\r\n };\r\n updateVariantsInput.push(variantInput);\r\n }\r\n const variantTranslation = findTranslation(variantInput, languageCode);\r\n if (variantTranslation) {\r\n if (variantTranslation.name) {\r\n variantTranslation.name = replaceLast(\r\n variantTranslation.name,\r\n productOldName,\r\n productNewName,\r\n );\r\n } else {\r\n // The variant translation was falsy, which occurs\r\n // when defining the product name for a new translation\r\n // language that had not yet been defined.\r\n variantTranslation.name = [\r\n productNewName,\r\n ...variant.options.map(o => o.name),\r\n ].join(' ');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (updateVariantsInput.length) {\r\n updateOperations.push(\r\n this.dataService.product.updateProductVariants(updateVariantsInput),\r\n );\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n );\r\n }\r\n\r\n updateProductOptions(\r\n inputs: UpdateProductOptionInput[],\r\n autoUpdateProductNames: boolean,\r\n product: NonNullable<GetProductDetailQuery['product']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n const variants$ = autoUpdateProductNames\r\n ? this.dataService.product\r\n .getProductVariantsForProduct({}, product.id)\r\n .mapSingle(({ productVariants }) => productVariants.items)\r\n : of([]);\r\n\r\n return variants$.pipe(\r\n mergeMap(variants => {\r\n let updateProductVariantNames$: Observable<any> = of([]);\r\n if (autoUpdateProductNames) {\r\n const replacementMap = new Map<string, string>();\r\n\r\n for (const input of inputs) {\r\n const newOptionName = findTranslation(input, languageCode)?.name;\r\n let oldOptionName: string | undefined;\r\n for (const variant of variants) {\r\n if (oldOptionName) {\r\n continue;\r\n }\r\n if (variant.options.map(o => o.id).includes(input.id)) {\r\n if (!oldOptionName) {\r\n oldOptionName = findTranslation(\r\n variant.options.find(o => o.id === input.id),\r\n languageCode,\r\n )?.name;\r\n }\r\n }\r\n }\r\n if (oldOptionName && newOptionName) {\r\n replacementMap.set(oldOptionName, newOptionName);\r\n }\r\n }\r\n\r\n const variantsToUpdate: UpdateProductVariantInput[] = [];\r\n if (replacementMap.size) {\r\n const oldOptionNames = Array.from(replacementMap.keys());\r\n for (const variant of variants) {\r\n const variantName = findTranslation(variant, languageCode)?.name;\r\n if (!variantName) {\r\n continue;\r\n }\r\n if (!oldOptionNames.some(oldOptionName => variantName.includes(oldOptionName))) {\r\n continue;\r\n }\r\n const updatedVariantName = oldOptionNames.reduce(\r\n (name, oldOptionName) =>\r\n replaceLast(name, oldOptionName, replacementMap.get(oldOptionName)!),\r\n variantName,\r\n );\r\n variantsToUpdate.push({\r\n id: variant.id,\r\n translations: [\r\n {\r\n languageCode,\r\n name: updatedVariantName,\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n if (variantsToUpdate.length) {\r\n updateProductVariantNames$ =\r\n this.dataService.product.updateProductVariants(variantsToUpdate);\r\n } else {\r\n updateProductVariantNames$ = of([]);\r\n }\r\n }\r\n return forkJoin(\r\n inputs.map(input => this.dataService.product.updateProductOption(input)),\r\n ).pipe(mergeMap(() => updateProductVariantNames$));\r\n }),\r\n );\r\n }\r\n\r\n deleteProductVariant(id: string, productId: string) {\r\n return this.dataService.product.deleteProductVariant(id).pipe(\r\n switchMap(result => {\r\n if (result.deleteProductVariant.result === DeletionResult.DELETED) {\r\n return this.dataService.product.getProduct(productId).single$;\r\n } else {\r\n return throwError(result.deleteProductVariant.message);\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionsService,\r\n ProductOptionFragment,\r\n ProductOptionGroupFragment,\r\n ServerConfigService,\r\n TranslationOf,\r\n UpdateProductOptionGroupInput,\r\n UpdateProductOptionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, forkJoin, Observable } from 'rxjs';\r\nimport { map, mergeMap, take, tap } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\n\r\ntype ProductWithOptions = NonNullable<GetProductVariantOptionsQuery['product']>;\r\n\r\n@Component({\r\n selector: 'vdr-product-options-editor',\r\n templateUrl: './product-options-editor.component.html',\r\n styleUrls: ['./product-options-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductOptionsEditorComponent extends BaseDetailComponent<ProductWithOptions> implements OnInit {\r\n detailForm: UntypedFormGroup;\r\n optionGroups$: Observable<ProductWithOptions['optionGroups']>;\r\n languageCode$: Observable<LanguageCode>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n optionGroupCustomFields: CustomFieldConfig[];\r\n optionCustomFields: CustomFieldConfig[];\r\n autoUpdateVariantNames = true;\r\n paginationSettings: { [groupId: string]: { currentPage: number; itemsPerPage: number } } = {};\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected serverConfigService: ServerConfigService,\r\n protected dataService: DataService,\r\n protected permissionsService: PermissionsService,\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: UntypedFormBuilder,\r\n private changeDetector: ChangeDetectorRef,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(route, router, serverConfigService, dataService, permissionsService);\r\n this.optionGroupCustomFields = this.getCustomFieldConfig('ProductOptionGroup');\r\n this.optionCustomFields = this.getCustomFieldConfig('ProductOption');\r\n }\r\n\r\n ngOnInit(): void {\r\n this.optionGroups$ = this.route.snapshot.data.entity.pipe(\r\n map((product: ProductWithOptions) => product.optionGroups),\r\n tap((optionGroups: ProductWithOptions['optionGroups']) => {\r\n for (const group of optionGroups) {\r\n this.paginationSettings[group.id] = {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n };\r\n }\r\n }),\r\n );\r\n this.detailForm = new UntypedFormGroup({\r\n optionGroups: new UntypedFormArray([]),\r\n });\r\n super.init();\r\n }\r\n\r\n getOptionGroups(): UntypedFormGroup[] {\r\n const optionGroups = this.detailForm.get('optionGroups');\r\n return (optionGroups as UntypedFormArray).controls as UntypedFormGroup[];\r\n }\r\n\r\n getOptions(optionGroup: UntypedFormGroup): UntypedFormGroup[] {\r\n const options = optionGroup.get('options');\r\n return (options as UntypedFormArray).controls as UntypedFormGroup[];\r\n }\r\n\r\n save() {\r\n if (this.detailForm.invalid || this.detailForm.pristine) {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const $product = this.dataService.product.getProduct(this.id).mapSingle(data => data.product!);\r\n combineLatest(this.entity$, this.languageCode$, $product)\r\n .pipe(\r\n take(1),\r\n mergeMap(([{ optionGroups }, languageCode, product]) => {\r\n const updateOperations: Array<Observable<any>> = [];\r\n const updatedProductOptionInputs: UpdateProductOptionInput[] = [];\r\n for (const optionGroupForm of this.getOptionGroups()) {\r\n if (optionGroupForm.dirty) {\r\n const optionGroupEntity = optionGroups.find(\r\n og => og.id === optionGroupForm.value.id,\r\n );\r\n if (optionGroupEntity) {\r\n const input = this.getUpdatedOptionGroup(\r\n optionGroupEntity,\r\n optionGroupForm,\r\n languageCode,\r\n );\r\n updateOperations.push(\r\n this.dataService.product.updateProductOptionGroup(input),\r\n );\r\n }\r\n }\r\n\r\n for (const optionForm of this.getOptions(optionGroupForm)) {\r\n if (optionForm.dirty) {\r\n const optionGroup = optionGroups\r\n .find(og => og.id === optionGroupForm.value.id)\r\n ?.options.find(o => o.id === optionForm.value.id);\r\n if (optionGroup) {\r\n const input = this.getUpdatedOption(\r\n optionGroup,\r\n optionForm,\r\n languageCode,\r\n );\r\n updatedProductOptionInputs.push(input);\r\n }\r\n }\r\n }\r\n }\r\n if (updatedProductOptionInputs.length) {\r\n updateOperations.push(\r\n this.productDetailService.updateProductOptions(\r\n updatedProductOptionInputs,\r\n this.autoUpdateVariantNames,\r\n product,\r\n languageCode,\r\n ),\r\n );\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private getUpdatedOptionGroup(\r\n optionGroup: ProductOptionGroupFragment,\r\n optionGroupFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductOptionGroupInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: optionGroup,\r\n updatedFields: optionGroupFormGroup.value,\r\n customFieldConfig: this.optionGroupCustomFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: optionGroup.name || '',\r\n },\r\n });\r\n return input;\r\n }\r\n\r\n private getUpdatedOption(\r\n option: ProductOptionFragment,\r\n optionFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductOptionInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: option,\r\n updatedFields: optionFormGroup.value,\r\n customFieldConfig: this.optionCustomFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: option.name || '',\r\n },\r\n });\r\n return input;\r\n }\r\n\r\n protected setFormValues(entity: ProductWithOptions, languageCode: LanguageCode): void {\r\n const groupsForm = this.detailForm.get('optionGroups') as UntypedFormArray;\r\n for (const optionGroup of entity.optionGroups) {\r\n const groupTranslation = findTranslation(optionGroup, languageCode);\r\n\r\n const groupForm = this.setOptionGroupForm(optionGroup, groupsForm, groupTranslation);\r\n this.setCustomFieldsForm(this.optionGroupCustomFields, groupForm, optionGroup, groupTranslation);\r\n\r\n let optionsForm = groupForm.get('options') as UntypedFormArray;\r\n if (!optionsForm) {\r\n optionsForm = this.formBuilder.array([]);\r\n groupForm.addControl('options', optionsForm);\r\n }\r\n for (const option of optionGroup.options) {\r\n const optionTranslation = findTranslation(option, languageCode);\r\n const optionForm = this.setOptionForm(option, optionsForm, optionTranslation);\r\n\r\n this.setCustomFieldsForm(this.optionCustomFields, optionForm, option, optionTranslation);\r\n }\r\n }\r\n }\r\n\r\n protected setCustomFieldsForm<\r\n T extends ProductWithOptions['optionGroups'][0] | ProductWithOptions['optionGroups'][0]['options'][0],\r\n >(\r\n customFields: CustomFieldConfig[],\r\n formGroup: UntypedFormGroup,\r\n entity: T,\r\n currentTranslation?: TranslationOf<T>,\r\n ) {\r\n if (customFields.length) {\r\n let customValueFieldsGroup = formGroup.get(['customFields']);\r\n if (!customValueFieldsGroup) {\r\n customValueFieldsGroup = this.formBuilder.group(\r\n customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n );\r\n formGroup.addControl('customFields', customValueFieldsGroup);\r\n }\r\n this.setCustomFieldFormValues(customFields, customValueFieldsGroup, entity, currentTranslation);\r\n }\r\n }\r\n\r\n protected setOptionGroupForm(\r\n entity: ProductWithOptions['optionGroups'][0],\r\n groupsForm: UntypedFormArray,\r\n currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]>,\r\n ) {\r\n const group = {\r\n id: entity.id,\r\n createdAt: entity.createdAt,\r\n updatedAt: entity.updatedAt,\r\n code: entity.code,\r\n name: currentTranslation?.name ?? '',\r\n };\r\n let groupForm = groupsForm.controls.find(control => control.value.id === entity.id) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (groupForm) {\r\n groupForm.get('id')?.setValue(group.id);\r\n groupForm.get('code')?.setValue(group.code);\r\n groupForm.get('name')?.setValue(group.name);\r\n groupForm.get('createdAt')?.setValue(group.createdAt);\r\n groupForm.get('updatedAt')?.setValue(group.updatedAt);\r\n } else {\r\n groupForm = this.formBuilder.group(group);\r\n groupsForm.push(groupForm);\r\n }\r\n return groupForm;\r\n }\r\n\r\n protected setOptionForm(\r\n entity: ProductWithOptions['optionGroups'][0]['options'][0],\r\n optionsForm: UntypedFormArray,\r\n currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]['options'][0]>,\r\n ) {\r\n const group = {\r\n id: entity.id,\r\n createdAt: entity.createdAt,\r\n updatedAt: entity.updatedAt,\r\n code: entity.code,\r\n name: currentTranslation?.name ?? '',\r\n };\r\n let optionForm = optionsForm.controls.find(control => control.value.id === entity.id) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (optionForm) {\r\n optionForm.get('id')?.setValue(group.id);\r\n optionForm.get('code')?.setValue(group.code);\r\n optionForm.get('name')?.setValue(group.name);\r\n optionForm.get('createdAt')?.setValue(group.createdAt);\r\n optionForm.get('updatedAt')?.setValue(group.updatedAt);\r\n } else {\r\n optionForm = this.formBuilder.group(group);\r\n optionsForm.push(optionForm);\r\n }\r\n return optionForm;\r\n }\r\n}\r\n","<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\" id=\"custom-fields\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport {\r\n CreateProductOptionGroupInput,\r\n Dialog,\r\n findTranslation,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-create-product-option-group-dialog',\r\n templateUrl: './create-product-option-group-dialog.component.html',\r\n styleUrls: ['./create-product-option-group-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateProductOptionGroupDialogComponent implements Dialog<CreateProductOptionGroupInput> {\r\n resolveWith: (result?: CreateProductOptionGroupInput) => void;\r\n languageCode: LanguageCode;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n code: ['', Validators.required],\r\n });\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n updateCode() {\r\n const nameControl = this.form.get('name');\r\n const codeControl = this.form.get('code');\r\n if (nameControl && codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\r\n }\r\n }\r\n\r\n confirm() {\r\n const { name, code } = this.form.value;\r\n if (!name || !code) {\r\n return;\r\n }\r\n this.resolveWith({\r\n code,\r\n options: [],\r\n translations: [{ languageCode: this.languageCode, name }],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-option-group' | translate }}\r\n</ng-template>\r\n<div class=\"form-grid\" [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormRecord, Validators } from '@angular/forms';\r\nimport {\r\n CreateProductVariantInput,\r\n CurrencyCode,\r\n Dialog,\r\n GetProductVariantOptionsQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\n\r\n@Component({\r\n selector: 'vdr-create-product-variant-dialog',\r\n templateUrl: './create-product-variant-dialog.component.html',\r\n styleUrls: ['./create-product-variant-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateProductVariantDialogComponent implements Dialog<CreateProductVariantInput>, OnInit {\r\n resolveWith: (result?: CreateProductVariantInput) => void;\r\n product: NonNullable<GetProductVariantOptionsQuery['product']>;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n sku: [''],\r\n price: [''],\r\n options: this.formBuilder.record<string>({}),\r\n });\r\n existingVariant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number] | undefined;\r\n currencyCode: CurrencyCode;\r\n\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n ngOnInit() {\r\n this.currencyCode = this.product.variants[0]?.currencyCode;\r\n for (const optionGroup of this.product.optionGroups) {\r\n (this.form.get('options') as FormRecord).addControl(\r\n optionGroup.code,\r\n new FormControl('', Validators.required),\r\n );\r\n }\r\n const optionsRecord = this.form.get('options') as FormRecord;\r\n optionsRecord.valueChanges.subscribe(value => {\r\n const nameControl = this.form.get('name');\r\n const allNull = Object.values(value).every(v => v == null);\r\n if (!allNull && value && nameControl && !nameControl.dirty) {\r\n const name = Object.entries(value)\r\n .map(\r\n ([groupCode, optionId]) =>\r\n this.product.optionGroups\r\n .find(og => og.code === groupCode)\r\n ?.options.find(o => o.id === optionId)?.name,\r\n )\r\n .join(' ');\r\n nameControl.setValue(`${this.product.name} ${name}`);\r\n }\r\n const allSelected = Object.values(value).every(v => v != null);\r\n if (allSelected) {\r\n this.existingVariant = this.product.variants.find(v =>\r\n Object.entries(value).every(\r\n ([groupCode, optionId]) =>\r\n v.options.find(o => o.groupId === this.getGroupIdFromCode(groupCode))?.id ===\r\n optionId,\r\n ),\r\n );\r\n }\r\n });\r\n }\r\n\r\n confirm() {\r\n const { name, sku, options, price } = this.form.value;\r\n if (!name || !options || price == null) {\r\n return;\r\n }\r\n\r\n const optionIds = Object.values(options).filter(notNullOrUndefined);\r\n this.resolveWith({\r\n productId: this.product.id,\r\n sku: sku || '',\r\n price: Number(price),\r\n optionIds,\r\n translations: [\r\n {\r\n languageCode: this.product.languageCode,\r\n name,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private getGroupCodeFromId(id: string): string {\r\n return this.product.optionGroups.find(og => og.id === id)?.code ?? '';\r\n }\r\n\r\n private getGroupIdFromCode(code: string): string {\r\n return this.product.optionGroups.find(og => og.code === code)?.id ?? '';\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\r\n bindValue=\"id\" appendTo=\"body\">\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.price' | translate\">\r\n <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n Provider,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { unique } from '@vendure/common/lib/unique';\r\n\r\nexport const OPTION_VALUE_INPUT_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OptionValueInputComponent),\r\n multi: true,\r\n};\r\n\r\ninterface Option {\r\n id?: string;\r\n name: string;\r\n locked: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-option-value-input',\r\n templateUrl: './option-value-input.component.html',\r\n styleUrls: ['./option-value-input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n providers: [OPTION_VALUE_INPUT_VALUE_ACCESSOR],\r\n})\r\nexport class OptionValueInputComponent implements ControlValueAccessor {\r\n @Input() groupName = '';\r\n @ViewChild('textArea', { static: true }) textArea: ElementRef<HTMLTextAreaElement>;\r\n @ViewChildren('editNameInput', { read: ElementRef }) nameInputs: QueryList<ElementRef>;\r\n @Input() options: Option[];\r\n @Output() add = new EventEmitter<Option>();\r\n @Output() remove = new EventEmitter<Option>();\r\n @Output() edit = new EventEmitter<{ index: number; option: Option }>();\r\n @Input() disabled = false;\r\n input = '';\r\n isFocussed = false;\r\n lastSelected = false;\r\n formValue: Option[];\r\n editingIndex = -1;\r\n onChangeFn: (value: any) => void;\r\n onTouchFn: (value: any) => void;\r\n\r\n get optionValues(): Option[] {\r\n return this.formValue ?? this.options ?? [];\r\n }\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeFn = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchFn = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.formValue = obj || [];\r\n }\r\n\r\n focus() {\r\n this.textArea.nativeElement.focus();\r\n }\r\n\r\n editName(index: number, event: MouseEvent) {\r\n const optionValue = this.optionValues[index];\r\n if (!optionValue.locked && !optionValue.id) {\r\n event.cancelBubble = true;\r\n this.editingIndex = index;\r\n const input = this.nameInputs.get(index)?.nativeElement;\r\n setTimeout(() => input?.focus());\r\n }\r\n }\r\n\r\n updateOption(index: number, event: InputEvent) {\r\n const optionValue = this.optionValues[index];\r\n const newName = (event.target as HTMLInputElement).value;\r\n if (optionValue) {\r\n if (newName) {\r\n optionValue.name = newName;\r\n this.edit.emit({ index, option: optionValue });\r\n }\r\n this.editingIndex = -1;\r\n }\r\n }\r\n\r\n removeOption(option: Option) {\r\n if (!option.locked) {\r\n if (this.formValue) {\r\n this.formValue = this.formValue?.filter(o => o.name !== option.name);\r\n this.onChangeFn(this.formValue);\r\n } else {\r\n this.remove.emit(option);\r\n }\r\n }\r\n }\r\n\r\n handleKey(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case ',':\r\n case 'Enter':\r\n this.addOptionValue();\r\n event.preventDefault();\r\n break;\r\n case 'Backspace':\r\n if (this.lastSelected) {\r\n this.removeLastOption();\r\n this.lastSelected = false;\r\n } else if (this.input === '') {\r\n this.lastSelected = true;\r\n }\r\n break;\r\n default:\r\n this.lastSelected = false;\r\n }\r\n }\r\n\r\n handleBlur() {\r\n this.isFocussed = false;\r\n this.addOptionValue();\r\n }\r\n\r\n private addOptionValue() {\r\n const options = this.parseInputIntoOptions(this.input).filter(option => {\r\n // do not add an option with the same name\r\n // as an existing option\r\n const existing = this.options ?? this.formValue;\r\n return !existing?.find(o => o?.name === option.name);\r\n });\r\n if (!this.formValue && this.options) {\r\n for (const option of options) {\r\n this.add.emit(option);\r\n }\r\n } else {\r\n this.formValue = unique([...this.formValue, ...options]);\r\n this.onChangeFn(this.formValue);\r\n }\r\n this.input = '';\r\n }\r\n\r\n private parseInputIntoOptions(input: string): Option[] {\r\n return input\r\n .split(/[,\\n]/)\r\n .map(s => s.trim())\r\n .filter(s => s !== '')\r\n .map(s => ({ name: s, locked: false }));\r\n }\r\n\r\n private removeLastOption() {\r\n if (this.optionValues.length) {\r\n const option = this.optionValues[this.optionValues.length - 1];\r\n this.removeOption(option);\r\n }\r\n }\r\n}\r\n","<div class=\"input-wrapper\" [class.focus]=\"isFocussed\" (click)=\"textArea.focus()\">\r\n <div class=\"chips\" *ngIf=\"0 < optionValues.length\">\r\n <vdr-chip\r\n *ngFor=\"let option of optionValues; last as isLast; index as i\"\r\n [icon]=\"option.locked ? 'lock' : 'times'\"\r\n [class.selected]=\"isLast && lastSelected\"\r\n [class.locked]=\"option.locked\"\r\n [colorFrom]=\"groupName\"\r\n (iconClick)=\"removeOption(option)\"\r\n >\r\n <span [hidden]=\"editingIndex !== i\">\r\n <input\r\n #editNameInput\r\n type=\"text\"\r\n [ngModel]=\"option.name\"\r\n (blur)=\"updateOption(i, $event)\"\r\n (click)=\"$event.cancelBubble = true\"\r\n />\r\n </span>\r\n <span\r\n class=\"option-name\"\r\n [class.editable]=\"!option.locked && !option.id\"\r\n (click)=\"editName(i, $event)\" [hidden]=\"editingIndex === i\">{{ option.name }}</span>\r\n </vdr-chip>\r\n </div>\r\n <textarea\r\n #textArea\r\n (keyup)=\"handleKey($event)\"\r\n (focus)=\"isFocussed = true\"\r\n (blur)=\"handleBlur()\"\r\n [(ngModel)]=\"input\"\r\n [disabled]=\"disabled\"\r\n ></textarea>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n DeactivateAware,\r\n DeletionResult,\r\n getDefaultUiLanguage,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n SelectionManager,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { map, startWith, switchMap } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { CreateProductOptionGroupDialogComponent } from '../create-product-option-group-dialog/create-product-option-group-dialog.component';\r\nimport { CreateProductVariantDialogComponent } from '../create-product-variant-dialog/create-product-variant-dialog.component';\r\n\r\nexport class GeneratedVariant {\r\n isDefault: boolean;\r\n options: Array<{ name: string; id?: string }>;\r\n productVariantId?: string;\r\n enabled: boolean;\r\n existing: boolean;\r\n sku: string;\r\n price: number;\r\n stock: number;\r\n\r\n constructor(config: Partial<GeneratedVariant>) {\r\n for (const key of Object.keys(config)) {\r\n this[key] = config[key];\r\n }\r\n }\r\n}\r\n\r\ninterface OptionGroupUiModel {\r\n id?: string;\r\n isNew: boolean;\r\n name: string;\r\n locked: boolean;\r\n values: Array<{\r\n id: string;\r\n name: string;\r\n locked: boolean;\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-product-variants-editor',\r\n templateUrl: './product-variants-editor.component.html',\r\n styleUrls: ['./product-variants-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n})\r\nexport class ProductVariantsEditorComponent implements OnInit, DeactivateAware {\r\n formValueChanged = false;\r\n optionsChanged = false;\r\n optionGroups: OptionGroupUiModel[];\r\n product: NonNullable<GetProductVariantOptionsQuery['product']>;\r\n variants$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['variants']>;\r\n optionGroups$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups']>;\r\n totalItems$: Observable<number>;\r\n currencyCode: CurrencyCode;\r\n itemsPerPage = 100;\r\n currentPage = 1;\r\n searchTermControl = new FormControl('');\r\n selectionManager = new SelectionManager<any>({\r\n multiSelect: true,\r\n itemsAreEqual: (a, b) => a.id === b.id,\r\n additiveMode: true,\r\n });\r\n optionsToAddToVariant: {\r\n [variantId: string]: { [groupId: string]: string };\r\n } = {};\r\n private refresh$ = new Subject<void>();\r\n private languageCode: LanguageCode;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private dataService: DataService,\r\n private productDetailService: ProductDetailService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.languageCode =\r\n (this.route.snapshot.paramMap.get('lang') as LanguageCode) || getDefaultUiLanguage();\r\n this.dataService.settings.getActiveChannel().single$.subscribe(data => {\r\n this.currencyCode = data.activeChannel.defaultCurrencyCode;\r\n });\r\n\r\n const product$ = this.refresh$.pipe(\r\n switchMap(() =>\r\n this.dataService.product\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n .getProductVariantsOptions(this.route.parent?.snapshot.paramMap.get('id')!)\r\n .mapSingle(data => data.product),\r\n ),\r\n startWith(this.route.snapshot.data.product),\r\n );\r\n\r\n this.variants$ = product$.pipe(\r\n switchMap(product =>\r\n this.searchTermControl.valueChanges.pipe(\r\n startWith(''),\r\n map(term =>\r\n term\r\n ? product.variants.filter(v => v.name.toLowerCase().includes(term.toLowerCase()))\r\n : product.variants,\r\n ),\r\n ),\r\n ),\r\n );\r\n this.optionGroups$ = product$.pipe(map(product => product.optionGroups));\r\n this.totalItems$ = this.variants$.pipe(map(variants => variants.length));\r\n\r\n product$.subscribe(p => {\r\n this.product = p;\r\n const allUsedOptionIds = p.variants.map(v => v.options.map(option => option.id)).flat();\r\n const allUsedOptionGroupIds = p.variants.map(v => v.options.map(option => option.groupId)).flat();\r\n this.optionGroups = p.optionGroups.map(og => ({\r\n id: og.id,\r\n isNew: false,\r\n name: og.name,\r\n locked: allUsedOptionGroupIds.includes(og.id),\r\n values: og.options.map(o => ({\r\n id: o.id,\r\n name: o.name,\r\n locked: allUsedOptionIds.includes(o.id),\r\n })),\r\n }));\r\n });\r\n }\r\n\r\n setItemsPerPage(itemsPerPage: number) {\r\n this.itemsPerPage = itemsPerPage;\r\n this.currentPage = 1;\r\n }\r\n\r\n setPageNumber(page: number) {\r\n this.currentPage = page;\r\n }\r\n\r\n onFormChanged(variantInfo: GeneratedVariant) {\r\n this.formValueChanged = true;\r\n variantInfo.enabled = true;\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return !this.formValueChanged;\r\n }\r\n\r\n addOptionGroup() {\r\n this.modalService\r\n .fromComponent(CreateProductOptionGroupDialogComponent, {\r\n locals: {\r\n languageCode: this.languageCode,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.product.createProductOptionGroups(result).pipe(\r\n switchMap(({ createProductOptionGroup }) =>\r\n this.dataService.product.addOptionGroupToProduct({\r\n optionGroupId: createProductOptionGroup.id,\r\n productId: this.product.id,\r\n }),\r\n ),\r\n );\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n this.refresh$.next();\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n removeOptionGroup(\r\n optionGroup: NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups'][number],\r\n ) {\r\n const id = optionGroup.id;\r\n const usedByVariantsCount = this.product.variants.filter(v =>\r\n v.options.map(o => o.groupId).includes(id),\r\n ).length;\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-option-group'),\r\n body: usedByVariantsCount ? _('catalog.confirm-delete-product-option-group-body') : '',\r\n translationVars: { name: optionGroup.name, count: usedByVariantsCount },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(val => {\r\n if (val) {\r\n return this.dataService.product.removeOptionGroupFromProduct({\r\n optionGroupId: id,\r\n productId: this.product.id,\r\n force: true,\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(({ removeOptionGroupFromProduct }) => {\r\n if (removeOptionGroupFromProduct.__typename === 'Product') {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n this.refresh$.next();\r\n } else if (removeOptionGroupFromProduct.__typename === 'ProductOptionInUseError') {\r\n this.notificationService.error(removeOptionGroupFromProduct.message ?? '');\r\n }\r\n });\r\n }\r\n\r\n addOption(index: number, optionName: string) {\r\n const group = this.optionGroups[index];\r\n if (group && group.id) {\r\n this.dataService.product\r\n .addOptionToGroup({\r\n productOptionGroupId: group.id,\r\n code: normalizeString(optionName, '-'),\r\n translations: [{ name: optionName, languageCode: this.languageCode }],\r\n })\r\n .subscribe(({ createProductOption }) => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductOption',\r\n });\r\n this.refresh$.next();\r\n });\r\n }\r\n }\r\n\r\n removeOption(index: number, { id, name }: { id: string; name: string }) {\r\n const optionGroup = this.optionGroups[index];\r\n if (optionGroup) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-option'),\r\n translationVars: { name },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(val => {\r\n if (val) {\r\n return this.dataService.product.deleteProductOption(id);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(({ deleteProductOption }) => {\r\n if (deleteProductOption.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductOption',\r\n });\r\n optionGroup.values = optionGroup.values.filter(v => v.id !== id);\r\n this.refresh$.next();\r\n } else {\r\n this.notificationService.error(deleteProductOption.message ?? '');\r\n }\r\n });\r\n }\r\n }\r\n\r\n setOptionToAddToVariant(variantId: string, optionGroupId: string, optionId?: string) {\r\n if (!this.optionsToAddToVariant[variantId]) {\r\n this.optionsToAddToVariant[variantId] = {};\r\n }\r\n if (optionId) {\r\n this.optionsToAddToVariant[variantId][optionGroupId] = optionId;\r\n } else {\r\n delete this.optionsToAddToVariant[variantId][optionGroupId];\r\n }\r\n }\r\n\r\n addOptionToVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\r\n const optionIds = [\r\n ...variant.options.map(o => o.id),\r\n ...Object.values(this.optionsToAddToVariant[variant.id]),\r\n ];\r\n this.dataService.product\r\n .updateProductVariants([\r\n {\r\n id: variant.id,\r\n optionIds: unique(optionIds),\r\n },\r\n ])\r\n .subscribe(({ updateProductVariants }) => {\r\n this.refresh$.next();\r\n });\r\n }\r\n\r\n deleteVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-variant'),\r\n translationVars: { name: variant.name },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response\r\n ? this.productDetailService.deleteProductVariant(variant.id, this.product.id)\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.refresh$.next();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'ProductVariant',\r\n });\r\n },\r\n );\r\n }\r\n\r\n createNewVariant() {\r\n this.modalService\r\n .fromComponent(CreateProductVariantDialogComponent, {\r\n locals: {\r\n product: this.product,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.product.createProductVariants([result]);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.refresh$.next();\r\n });\r\n }\r\n\r\n getOption(\r\n variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number],\r\n groupId: string,\r\n ) {\r\n return variant.options.find(o => o.groupId === groupId);\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-card>\r\n <div *ngFor=\"let group of optionGroups; index as i\" class=\"option-groups\">\r\n <vdr-form-field [label]=\"'catalog.option' | translate\">\r\n <input clrInput [(ngModel)]=\"group.name\" name=\"name\" [readonly]=\"!group.isNew\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.option-values' | translate\" class=\"flex-spacer\">\r\n <vdr-option-value-input\r\n #optionValueInputComponent\r\n [options]=\"group.values\"\r\n [groupName]=\"group.name\"\r\n [disabled]=\"group.name === ''\"\r\n (add)=\"addOption(i, $event.name)\"\r\n (remove)=\"removeOption(i, $event)\"\r\n ></vdr-option-value-input>\r\n </vdr-form-field>\r\n <div>\r\n <button class=\"button-small mt-4\" (click)=\"removeOptionGroup(group)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"button mt-1\" (click)=\"addOptionGroup()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-product-option-group' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [paddingX]=\"false\">\r\n <div class=\"mx-3\">\r\n <button class=\"button\" (click)=\"createNewVariant()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n </button>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"manage-product-variant-list\"\r\n [items]=\"variants$ | async\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column *ngFor=\"let optionGroup of optionGroups$ | async\" [heading]=\"optionGroup.name\" [id]=\"optionGroup.code\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip\r\n *ngIf=\"getOption(variant, optionGroup.id) as option; else selectOption\"\r\n [colorFrom]=\"optionGroup.code\"\r\n >{{ option.name }}</vdr-chip\r\n >\r\n <ng-template #selectOption>\r\n <div class=\"flex center\">\r\n <ng-select\r\n [items]=\"optionGroup.options\"\r\n bindLabel=\"name\"\r\n bindValue=\"id\"\r\n appendTo=\"body\"\r\n (change)=\"setOptionToAddToVariant(variant.id, optionGroup.id, $event?.id)\"\r\n ></ng-select>\r\n <button\r\n class=\"button-small ml-1\"\r\n [class.primary]=\"!!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\r\n (click)=\"addOptionToVariant(variant)\"\r\n [disabled]=\"!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\r\n >\r\n <clr-icon shape=\"floppy\"></clr-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price' | translate\" id=\"price\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.delete' | translate\" id=\"delete\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <button class=\"button-small\" (click)=\"deleteVariant(variant)\">\r\n <clr-icon shape=\"trash is-danger\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n</vdr-page-block>\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, GetProductVariantOptionsQuery, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProductVariantsResolver extends BaseEntityResolver<GetProductVariantOptionsQuery['product']> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Product' as const,\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n languageCode: '' as any,\r\n optionGroups: [],\r\n variants: [],\r\n },\r\n id => dataService.product.getProductVariantsOptions(id).mapStream(data => data.product),\r\n );\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CanDeactivateDetailGuard,\r\n createResolveData,\r\n DataService,\r\n PageComponent,\r\n PageService,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\r\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\r\nimport { ProductVariantsResolver } from './providers/routing/product-variants-resolver';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'products',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-list',\r\n breadcrumb: _('breadcrumb.products'),\r\n },\r\n children: pageService.getPageTabRoutes('product-list'),\r\n },\r\n {\r\n path: 'inventory',\r\n redirectTo: 'products',\r\n },\r\n {\r\n path: 'products/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-detail',\r\n breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\r\n },\r\n children: [\r\n {\r\n path: 'manage-variants',\r\n component: ProductVariantsEditorComponent,\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: ({ product }) => [\r\n {\r\n label: `${product.name}`,\r\n link: ['../'],\r\n },\r\n {\r\n label: _('breadcrumb.manage-variants'),\r\n link: ['manage-variants'],\r\n },\r\n ],\r\n },\r\n resolve: {\r\n product: (route: ActivatedRouteSnapshot) =>\r\n inject(DataService)\r\n .product.getProductVariantsOptions(route.parent?.params.id)\r\n .mapSingle(data => data.product),\r\n },\r\n },\r\n ...pageService.getPageTabRoutes('product-detail'),\r\n ],\r\n },\r\n {\r\n path: 'products/:productId/variants/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-variant-detail',\r\n breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\r\n },\r\n children: pageService.getPageTabRoutes('product-variant-detail'),\r\n },\r\n {\r\n path: 'products/:id/options',\r\n component: ProductOptionsEditorComponent,\r\n resolve: createResolveData(ProductVariantsResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: productOptionsEditorBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'facets',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'facet-list',\r\n breadcrumb: _('breadcrumb.facets'),\r\n },\r\n children: pageService.getPageTabRoutes('facet-list'),\r\n },\r\n {\r\n path: 'facets/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'facet-detail',\r\n breadcrumb: { label: _('breadcrumb.facets'), link: ['../', 'facets'] },\r\n },\r\n children: pageService.getPageTabRoutes('facet-detail'),\r\n },\r\n {\r\n path: 'collections',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'collection-list',\r\n breadcrumb: _('breadcrumb.collections'),\r\n },\r\n children: pageService.getPageTabRoutes('collection-list'),\r\n },\r\n {\r\n path: 'collections/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'collection-detail',\r\n breadcrumb: { label: _('breadcrumb.collections'), link: ['../', 'collections'] },\r\n },\r\n children: pageService.getPageTabRoutes('collection-detail'),\r\n },\r\n {\r\n path: 'assets',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'asset-list',\r\n breadcrumb: _('breadcrumb.assets'),\r\n },\r\n children: pageService.getPageTabRoutes('asset-list'),\r\n },\r\n {\r\n path: 'assets/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'asset-detail',\r\n breadcrumb: { label: _('breadcrumb.assets'), link: ['../', 'assets'] },\r\n },\r\n children: pageService.getPageTabRoutes('asset-detail'),\r\n },\r\n];\r\n\r\nexport function productOptionsEditorBreadcrumb(data: any, params: any) {\r\n return data.entity.pipe(\r\n map((entity: any) => [\r\n {\r\n label: _('breadcrumb.products'),\r\n link: ['../', 'products'],\r\n },\r\n {\r\n label: `${entity.name}`,\r\n link: ['../', 'products', params.id],\r\n },\r\n {\r\n label: _('breadcrumb.product-options'),\r\n link: ['options'],\r\n },\r\n ]),\r\n );\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n Dialog,\r\n FacetValue,\r\n FacetValueSelectorComponent,\r\n FacetWithValuesFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-apply-facet-dialog',\r\n templateUrl: './apply-facet-dialog.component.html',\r\n styleUrls: ['./apply-facet-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ApplyFacetDialogComponent implements Dialog<FacetValue[]>, AfterViewInit {\r\n @ViewChild(FacetValueSelectorComponent) private selector: FacetValueSelectorComponent;\r\n resolveWith: (result?: FacetValue[]) => void;\r\n selectedValues: FacetValue[] = [];\r\n // Provided by caller\r\n facets: FacetWithValuesFragment[];\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.selector.focus(), 0);\r\n }\r\n\r\n selectValues() {\r\n this.resolveWith(this.selectedValues);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'catalog.add-facets' | translate }}</ng-template>\r\n\r\n<vdr-facet-value-selector\r\n (selectedValuesChange)=\"selectedValues = $event\"\r\n></vdr-facet-value-selector>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"selectValues()\"\r\n [disabled]=\"selectedValues.length === 0\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, UntypedFormBuilder } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n ASSET_FRAGMENT,\r\n AssetDetailQueryDocument,\r\n AssetDetailQueryQuery,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n TAG_FRAGMENT,\r\n TypedBaseDetailComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const ASSET_DETAIL_QUERY = gql`\r\n query AssetDetailQuery($id: ID!) {\r\n asset(id: $id) {\r\n ...Asset\r\n tags {\r\n ...Tag\r\n }\r\n }\r\n }\r\n ${ASSET_FRAGMENT}\r\n ${TAG_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-asset-detail',\r\n templateUrl: './asset-detail.component.html',\r\n styleUrls: ['./asset-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssetDetailComponent\r\n extends TypedBaseDetailComponent<typeof AssetDetailQueryDocument, 'asset'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Asset');\r\n detailForm = new FormGroup({\r\n name: new FormControl(''),\r\n tags: new FormControl([] as string[]),\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private formBuilder: UntypedFormBuilder,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n onAssetChange(event: { id: string; name: string; tags: string[] }) {\r\n this.detailForm.get('name')?.setValue(event.name);\r\n this.detailForm.get('tags')?.setValue(event.tags);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n save() {\r\n this.dataService.product\r\n .updateAsset({\r\n id: this.id,\r\n name: this.detailForm.value.name,\r\n tags: this.detailForm.value.tags,\r\n customFields: this.detailForm.value.customFields,\r\n })\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Asset' });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Asset',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(\r\n entity: NonNullable<AssetDetailQueryQuery['asset']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n this.detailForm.get('name')?.setValue(entity.name);\r\n this.detailForm.get('tags')?.setValue(entity.tags.map(t => t.id));\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"asset-detail\" />\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateAsset']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n <vdr-action-bar-dropdown-menu locationId=\"asset-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-page-block>\r\n <vdr-asset-preview\r\n [asset]=\"entity$ | async\"\r\n [editable]=\"true\"\r\n [customFields]=\"customFields\"\r\n [customFieldsForm]=\"detailForm.get('customFields')\"\r\n (assetChange)=\"onAssetChange($event)\"\r\n />\r\n</vdr-page-block>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetAssetListQuery,\r\n GetAssetListQueryVariables,\r\n ItemOf,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n SortOrder,\r\n TagFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { PaginationInstance } from 'ngx-pagination';\r\nimport { BehaviorSubject, combineLatest, EMPTY, Observable } from 'rxjs';\r\nimport { debounceTime, finalize, map, switchMap, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-asset-list',\r\n templateUrl: './asset-list.component.html',\r\n styleUrls: ['./asset-list.component.scss'],\r\n})\r\nexport class AssetListComponent\r\n extends BaseListComponent<\r\n GetAssetListQuery,\r\n ItemOf<GetAssetListQuery, 'assets'>,\r\n GetAssetListQueryVariables\r\n >\r\n implements OnInit\r\n{\r\n searchTerm$ = new BehaviorSubject<string | undefined>(undefined);\r\n filterByTags$ = new BehaviorSubject<TagFragment[] | undefined>(undefined);\r\n uploading = false;\r\n allTags$: Observable<TagFragment[]>;\r\n paginationConfig$: Observable<PaginationInstance>;\r\n\r\n constructor(\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.product.getAssetList(...args).refetchOnChannelChange(),\r\n data => data.assets,\r\n (skip, take) => {\r\n const searchTerm = this.searchTerm$.value;\r\n const tags = this.filterByTags$.value?.map(t => t.value);\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n ...(searchTerm\r\n ? {\r\n filter: {\r\n name: { contains: searchTerm },\r\n },\r\n }\r\n : {}),\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n tags,\r\n tagsOperator: LogicalOperator.AND,\r\n },\r\n };\r\n },\r\n { take: 25, skip: 0 },\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.paginationConfig$ = combineLatest(this.itemsPerPage$, this.currentPage$, this.totalItems$).pipe(\r\n map(([itemsPerPage, currentPage, totalItems]) => ({ itemsPerPage, currentPage, totalItems })),\r\n );\r\n this.searchTerm$.pipe(debounceTime(250), takeUntil(this.destroy$)).subscribe(() => this.refresh());\r\n\r\n this.filterByTags$.pipe(takeUntil(this.destroy$)).subscribe(() => this.refresh());\r\n this.allTags$ = this.dataService.product.getTagList().mapStream(data => data.tags.items);\r\n }\r\n\r\n filesSelected(files: File[]) {\r\n if (files.length) {\r\n this.uploading = true;\r\n this.dataService.product\r\n .createAssets(files)\r\n .pipe(finalize(() => (this.uploading = false)))\r\n .subscribe(({ createAssets }) => {\r\n let successCount = 0;\r\n for (const result of createAssets) {\r\n switch (result.__typename) {\r\n case 'Asset':\r\n successCount++;\r\n break;\r\n case 'MimeTypeError':\r\n this.notificationService.error(result.message);\r\n break;\r\n }\r\n }\r\n if (0 < successCount) {\r\n super.refresh();\r\n this.notificationService.success(_('asset.notify-create-assets-success'), {\r\n count: successCount,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n deleteAssets(assets: Asset[]) {\r\n this.showModalAndDelete(assets.map(a => a.id))\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(\r\n assets.map(a => a.id),\r\n response.message || '',\r\n ).pipe(map(r => r.result === DeletionResult.DELETED));\r\n }\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Assets',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Assets',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(assetIds: string[], message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-assets'),\r\n translationVars: {\r\n count: assetIds.length,\r\n },\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(res => (res ? this.dataService.product.deleteAssets(assetIds, !!message) : EMPTY)),\r\n map(res => res.deleteAssets),\r\n );\r\n }\r\n}\r\n","<vdr-page-block>\r\n <div class=\"my-2\">\r\n <vdr-asset-search-input\r\n [tags]=\"allTags$ | async\"\r\n (searchTermChange)=\"searchTerm$.next($event)\"\r\n (tagsChange)=\"filterByTags$.next($event)\"\r\n >\r\n <vdr-asset-file-input\r\n (selectFiles)=\"filesSelected($event)\"\r\n [uploading]=\"uploading\"\r\n dropZoneTarget=\".content-area\"\r\n ></vdr-asset-file-input>\r\n </vdr-asset-search-input>\r\n </div>\r\n <vdr-asset-gallery\r\n [assets]=\"(items$ | async)! | paginate : (paginationConfig$ | async) || {}\"\r\n [multiSelect]=\"true\"\r\n [canDelete]=\"['DeleteCatalog', 'DeleteAsset'] | hasPermission\"\r\n (deleteAssets)=\"deleteAssets($event)\"\r\n ></vdr-asset-gallery>\r\n\r\n <div class=\"paging-controls\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n</vdr-page-block>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n Dialog,\r\n GetChannelsQuery,\r\n ItemOf,\r\n LogicalOperator,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, from, lastValueFrom, Observable } from 'rxjs';\r\nimport { map, startWith } from 'rxjs/operators';\r\n\r\ntype Channel = ItemOf<GetChannelsQuery, 'channels'>;\r\n\r\n@Component({\r\n selector: 'vdr-assign-products-to-channel-dialog',\r\n templateUrl: './assign-products-to-channel-dialog.component.html',\r\n styleUrls: ['./assign-products-to-channel-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssignProductsToChannelDialogComponent implements OnInit, Dialog<any> {\r\n selectedChannel: Channel | null | undefined;\r\n currentChannel: Channel;\r\n availableChannels: Channel[];\r\n resolveWith: (result?: any) => void;\r\n variantsPreview$: Observable<Array<{ id: string; name: string; price: number; pricePreview: number }>>;\r\n priceFactorControl = new UntypedFormControl(1);\r\n selectedChannelIdControl = new UntypedFormControl();\r\n\r\n // assigned by ModalService.fromComponent() call\r\n productIds: string[];\r\n productVariantIds: string[] | undefined;\r\n currentChannelIds: string[];\r\n\r\n get isProductVariantMode(): boolean {\r\n return this.productVariantIds != null;\r\n }\r\n\r\n constructor(private dataService: DataService, private notificationService: NotificationService) {}\r\n\r\n ngOnInit() {\r\n const activeChannelId$ = this.dataService.client\r\n .userStatus()\r\n .mapSingle(({ userStatus }) => userStatus.activeChannelId);\r\n const allChannels$ = this.dataService.settings.getChannels().mapSingle(data => data.channels);\r\n\r\n combineLatest(activeChannelId$, allChannels$).subscribe(([activeChannelId, channels]) => {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n this.currentChannel = channels.items.find(c => c.id === activeChannelId)!;\r\n this.availableChannels = channels.items;\r\n });\r\n\r\n this.selectedChannelIdControl.valueChanges.subscribe(ids => {\r\n this.selectChannel(ids);\r\n });\r\n\r\n this.variantsPreview$ = combineLatest(\r\n from(this.getTopVariants(10)),\r\n this.priceFactorControl.valueChanges.pipe(startWith(1)),\r\n ).pipe(\r\n map(([variants, factor]) =>\r\n variants.map(v => ({\r\n id: v.id,\r\n name: v.name,\r\n price: v.price,\r\n pricePreview: v.price * +factor,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n selectChannel(channelIds: string[]) {\r\n this.selectedChannel = this.availableChannels.find(c => c.id === channelIds[0]);\r\n }\r\n\r\n assign() {\r\n const selectedChannel = this.selectedChannel;\r\n if (selectedChannel) {\r\n if (!this.isProductVariantMode) {\r\n this.dataService.product\r\n .assignProductsToChannel({\r\n channelId: selectedChannel.id,\r\n productIds: this.productIds,\r\n priceFactor: +this.priceFactorControl.value,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('catalog.assign-product-to-channel-success'), {\r\n channel: selectedChannel.code,\r\n count: this.productIds.length,\r\n });\r\n this.resolveWith(true);\r\n });\r\n } else if (this.productVariantIds) {\r\n this.dataService.product\r\n .assignVariantsToChannel({\r\n channelId: selectedChannel.id,\r\n productVariantIds: this.productVariantIds,\r\n priceFactor: +this.priceFactorControl.value,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('catalog.assign-variant-to-channel-success'), {\r\n channel: selectedChannel.code,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n count: this.productVariantIds!.length,\r\n });\r\n this.resolveWith(true);\r\n });\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private async getTopVariants(take: number) {\r\n return (\r\n await lastValueFrom(\r\n this.dataService.product.getProductVariants({\r\n filterOperator: LogicalOperator.OR,\r\n filter: {\r\n productId: { in: this.productIds },\r\n id: { in: this.productVariantIds },\r\n },\r\n take,\r\n }).single$,\r\n )\r\n ).productVariants.items;\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <ng-container *ngIf=\"isProductVariantMode; else productModeTitle\">{{\r\n 'catalog.assign-variants-to-channel' | translate\r\n }}</ng-container>\r\n <ng-template #productModeTitle>{{ 'catalog.assign-products-to-channel' | translate }}</ng-template>\r\n</ng-template>\r\n\r\n<div class=\"flex\">\r\n <clr-input-container>\r\n <label>{{ 'common.channel' | translate }}</label>\r\n <vdr-channel-assignment-control\r\n clrInput\r\n [multiple]=\"false\"\r\n [includeDefaultChannel]=\"false\"\r\n [disableChannelIds]=\"currentChannelIds\"\r\n [formControl]=\"selectedChannelIdControl\"\r\n ></vdr-channel-assignment-control>\r\n </clr-input-container>\r\n <div class=\"flex-spacer\"></div>\r\n <clr-input-container>\r\n <label>{{ 'catalog.price-conversion-factor' | translate }}</label>\r\n <input clrInput type=\"number\" min=\"0\" max=\"99999\" [formControl]=\"priceFactorControl\" />\r\n </clr-input-container>\r\n</div>\r\n\r\n<div class=\"channel-price-preview\">\r\n <label class=\"clr-control-label\">{{ 'catalog.channel-price-preview' | translate }}</label>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>\r\n {{\r\n 'catalog.price-in-channel'\r\n | translate: { channel: currentChannel?.code | channelCodeToLabel | translate }\r\n }}\r\n </th>\r\n <th>\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\r\n {{ 'catalog.price-in-channel' | translate: { channel: selectedChannel?.code } }}\r\n </ng-template>\r\n <ng-template #noSelection>\r\n {{ 'catalog.no-channel-selected' | translate }}\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of variantsPreview$ | async\">\r\n <td>{{ row.name }}</td>\r\n <td>{{ row.price | localeCurrency: currentChannel?.defaultCurrencyCode }}</td>\r\n <td>\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noChannelSelected\">\r\n {{ row.pricePreview | localeCurrency: selectedChannel?.defaultCurrencyCode }}\r\n </ng-template>\r\n <ng-template #noChannelSelected> - </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"assign()\" [disabled]=\"!selectedChannel\" class=\"btn btn-primary\">\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\r\n {{ 'catalog.assign-to-named-channel' | translate: { channelCode: selectedChannel?.code } }}\r\n </ng-template>\r\n <ng-template #noSelection>\r\n {{ 'catalog.no-channel-selected' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n","import { gql } from 'apollo-angular';\r\n\r\nexport const GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS = gql`\r\n query GetProductsWithFacetValuesByIds($ids: [String!]!) {\r\n products(options: { filter: { id: { in: $ids } } }) {\r\n items {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n facet {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const GET_VARIANTS_WITH_FACET_VALUES_BY_IDS = gql`\r\n query GetVariantsWithFacetValuesByIds($ids: [String!]!) {\r\n productVariants(options: { filter: { id: { in: $ids } } }) {\r\n items {\r\n id\r\n name\r\n sku\r\n facetValues {\r\n id\r\n name\r\n code\r\n facet {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_PRODUCTS_BULK = gql`\r\n mutation UpdateProductsBulk($input: [UpdateProductInput!]!) {\r\n updateProducts(input: $input) {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_VARIANTS_BULK = gql`\r\n mutation UpdateVariantsBulk($input: [UpdateProductVariantInput!]!) {\r\n updateProductVariants(input: $input) {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n`;\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n Dialog,\r\n FacetWithValuesFragment,\r\n GetProductsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables,\r\n GetVariantsWithFacetValuesByIdsQuery,\r\n UpdateProductsBulkMutation,\r\n UpdateProductsBulkMutationVariables,\r\n UpdateVariantsBulkMutation,\r\n UpdateVariantsBulkMutationVariables,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nimport {\r\n GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS,\r\n GET_VARIANTS_WITH_FACET_VALUES_BY_IDS,\r\n UPDATE_PRODUCTS_BULK,\r\n UPDATE_VARIANTS_BULK,\r\n} from './bulk-add-facet-values-dialog.graphql';\r\n\r\ninterface ProductOrVariant {\r\n id: string;\r\n name: string;\r\n sku?: string;\r\n facetValues: Array<{\r\n id: string;\r\n name: string;\r\n code: string;\r\n facet: Array<{\r\n id: string;\r\n name: string;\r\n code: string;\r\n }>;\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-bulk-add-facet-values-dialog',\r\n templateUrl: './bulk-add-facet-values-dialog.component.html',\r\n styleUrls: ['./bulk-add-facet-values-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BulkAddFacetValuesDialogComponent\r\n implements OnInit, OnDestroy, Dialog<FacetWithValuesFragment[]>\r\n{\r\n resolveWith: (result?: FacetWithValuesFragment[]) => void;\r\n /* provided by call to ModalService */\r\n mode: 'product' | 'variant' = 'product';\r\n ids?: string[];\r\n state: 'loading' | 'ready' | 'saving' = 'loading';\r\n\r\n selectedValues: FacetWithValuesFragment[] = [];\r\n items: ProductOrVariant[] = [];\r\n facetValuesRemoved = false;\r\n private subscription: Subscription;\r\n constructor(private dataService: DataService, private changeDetectorRef: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n const fetchData$: Observable<any> =\r\n this.mode === 'product'\r\n ? this.dataService\r\n .query<\r\n GetProductsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables\r\n >(GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS, {\r\n ids: this.ids ?? [],\r\n })\r\n .mapSingle(({ products }) =>\r\n products.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\r\n )\r\n : this.dataService\r\n .query<\r\n GetVariantsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables\r\n >(GET_VARIANTS_WITH_FACET_VALUES_BY_IDS, {\r\n ids: this.ids ?? [],\r\n })\r\n .mapSingle(({ productVariants }) =>\r\n productVariants.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\r\n );\r\n this.subscription = fetchData$.subscribe({\r\n next: items => {\r\n this.items = items;\r\n this.state = 'ready';\r\n this.changeDetectorRef.markForCheck();\r\n },\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n removeFacetValue(item: ProductOrVariant, facetValueId: string) {\r\n item.facetValues = item.facetValues.filter(fv => fv.id !== facetValueId);\r\n this.facetValuesRemoved = true;\r\n }\r\n\r\n addFacetValues() {\r\n const selectedFacetValueIds = this.selectedValues.map(sv => sv.id);\r\n this.state = 'saving';\r\n const save$: Observable<any> =\r\n this.mode === 'product'\r\n ? this.dataService.mutate<UpdateProductsBulkMutation, UpdateProductsBulkMutationVariables>(\r\n UPDATE_PRODUCTS_BULK,\r\n {\r\n input: this.items?.map(product => ({\r\n id: product.id,\r\n facetValueIds: unique([\r\n ...product.facetValues.map(fv => fv.id),\r\n ...selectedFacetValueIds,\r\n ]),\r\n })),\r\n },\r\n )\r\n : this.dataService.mutate<UpdateVariantsBulkMutation, UpdateVariantsBulkMutationVariables>(\r\n UPDATE_VARIANTS_BULK,\r\n {\r\n input: this.items?.map(product => ({\r\n id: product.id,\r\n facetValueIds: unique([\r\n ...product.facetValues.map(fv => fv.id),\r\n ...selectedFacetValueIds,\r\n ]),\r\n })),\r\n },\r\n );\r\n return save$.subscribe(result => {\r\n this.resolveWith(this.selectedValues);\r\n });\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.edit-facet-values' | translate }}\r\n</ng-template>\r\n\r\n<div class=\"flex\">\r\n <div class=\"flex center\">\r\n <div class=\"mr2\">\r\n {{ 'catalog.add-facet-value' | translate }}\r\n </div>\r\n <vdr-facet-value-selector\r\n (selectedValuesChange)=\"selectedValues = $event\"\r\n ></vdr-facet-value-selector>\r\n </div>\r\n</div>\r\n\r\n<table class=\"table\" *ngIf=\"state !== 'loading'; else placeholder\">\r\n <tbody>\r\n <tr *ngFor=\"let item of items\">\r\n <td class=\"left align-middle\">\r\n <div>{{ item.name }}</div>\r\n <div *ngIf=\"item.sku\" class=\"sku\">{{ item.sku }}</div>\r\n </td>\r\n <td class=\"left\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of item.facetValues\"\r\n [facetValue]=\"facetValue\"\r\n (remove)=\"removeFacetValue(item, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<ng-template #placeholder>\r\n <div class=\"loading\">\r\n <clr-spinner></clr-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"addFacetValues()\"\r\n [disabled]=\"selectedValues.length === 0 && facetValuesRemoved === false\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n CollectionFilterParameter,\r\n ConfigurableOperationInput,\r\n DataService,\r\n GetCollectionContentsQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\r\nimport {\r\n catchError,\r\n debounceTime,\r\n distinctUntilChanged,\r\n filter,\r\n finalize,\r\n map,\r\n startWith,\r\n switchMap,\r\n takeUntil,\r\n tap,\r\n} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-collection-contents',\r\n templateUrl: './collection-contents.component.html',\r\n styleUrls: ['./collection-contents.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionContentsComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() collectionId: string;\r\n @Input() parentId: string;\r\n @Input() inheritFilters: boolean;\r\n @Input() updatedFilters: ConfigurableOperationInput[] | undefined;\r\n @Input() previewUpdatedFilters = false;\r\n @ContentChild(TemplateRef, { static: true }) headerTemplate: TemplateRef<any>;\r\n\r\n contents$: Observable<NonNullable<GetCollectionContentsQuery['collection']>['productVariants']['items']>;\r\n contentsTotalItems$: Observable<number>;\r\n contentsItemsPerPage$: Observable<number>;\r\n contentsCurrentPage$: Observable<number>;\r\n filterTermControl = new UntypedFormControl('');\r\n isLoading = false;\r\n private collectionIdChange$ = new BehaviorSubject<string>('');\r\n private parentIdChange$ = new BehaviorSubject<string>('');\r\n private filterChanges$ = new BehaviorSubject<ConfigurableOperationInput[]>([]);\r\n private inheritFiltersChanges$ = new BehaviorSubject<boolean>(true);\r\n private refresh$ = new BehaviorSubject<boolean>(true);\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(private route: ActivatedRoute, private router: Router, private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.contentsCurrentPage$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('contentsPage')),\r\n map(page => (!page ? 1 : +page)),\r\n startWith(1),\r\n distinctUntilChanged(),\r\n );\r\n\r\n this.contentsItemsPerPage$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('contentsPerPage')),\r\n map(perPage => (!perPage ? 10 : +perPage)),\r\n startWith(10),\r\n distinctUntilChanged(),\r\n );\r\n\r\n const filterTerm$ = this.filterTermControl.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith(''),\r\n );\r\n\r\n const filterChanges$ = this.filterChanges$.asObservable().pipe(\r\n filter(() => this.previewUpdatedFilters),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith([]),\r\n );\r\n\r\n const inheritFiltersChanges$ = this.inheritFiltersChanges$.asObservable().pipe(\r\n filter(() => this.inheritFilters != null),\r\n distinctUntilChanged(),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith(true),\r\n );\r\n\r\n const fetchUpdate$ = combineLatest(\r\n this.collectionIdChange$,\r\n this.parentIdChange$,\r\n this.contentsCurrentPage$,\r\n this.contentsItemsPerPage$,\r\n filterTerm$,\r\n filterChanges$,\r\n inheritFiltersChanges$,\r\n this.refresh$,\r\n );\r\n\r\n const collection$ = fetchUpdate$.pipe(\r\n takeUntil(this.destroy$),\r\n tap(() => (this.isLoading = true)),\r\n debounceTime(50),\r\n switchMap(([id, parentId, currentPage, itemsPerPage, filterTerm, filters, inheritFilters]) => {\r\n const take = itemsPerPage;\r\n const skip = (currentPage - 1) * itemsPerPage;\r\n if (filters.length && this.previewUpdatedFilters) {\r\n const filterClause = filterTerm\r\n ? ({ name: { contains: filterTerm } } as CollectionFilterParameter)\r\n : undefined;\r\n return this.dataService.collection\r\n .previewCollectionVariants(\r\n {\r\n parentId,\r\n filters,\r\n inheritFilters,\r\n },\r\n {\r\n take,\r\n skip,\r\n filter: filterClause,\r\n },\r\n )\r\n .mapSingle(data => data.previewCollectionVariants)\r\n .pipe(catchError(() => of({ items: [], totalItems: 0 })));\r\n } else if (id) {\r\n return this.dataService.collection\r\n .getCollectionContents(id, take, skip, filterTerm)\r\n .mapSingle(data => data.collection?.productVariants);\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n tap(() => (this.isLoading = false)),\r\n finalize(() => (this.isLoading = false)),\r\n );\r\n\r\n this.contents$ = collection$.pipe(map(result => (result ? result.items : [])));\r\n this.contentsTotalItems$ = collection$.pipe(map(result => (result ? result.totalItems : 0)));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('collectionId' in changes) {\r\n this.collectionIdChange$.next(changes.collectionId.currentValue);\r\n }\r\n if ('parentId' in changes) {\r\n this.parentIdChange$.next(changes.parentId.currentValue);\r\n }\r\n if ('inheritFilters' in changes) {\r\n this.inheritFiltersChanges$.next(changes.inheritFilters.currentValue);\r\n }\r\n if ('updatedFilters' in changes) {\r\n if (this.updatedFilters) {\r\n this.filterChanges$.next(this.updatedFilters);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n setContentsPageNumber(page: number) {\r\n this.setParam('contentsPage', page);\r\n }\r\n\r\n setContentsItemsPerPage(perPage: number) {\r\n this.setParam('contentsPerPage', perPage);\r\n }\r\n\r\n refresh() {\r\n this.refresh$.next(true);\r\n }\r\n\r\n private setParam(key: string, value: any) {\r\n this.router.navigate(['./'], {\r\n relativeTo: this.route,\r\n queryParams: {\r\n [key]: value,\r\n },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n}\r\n","<div class=\"table-wrapper\">\r\n <div class=\"progress loop\" [class.visible]=\"isLoading\"></div>\r\n <div class=\"header-title-row\">\r\n <ng-container\r\n *ngTemplateOutlet=\"headerTemplate; context: { $implicit: contentsTotalItems$ | async }\"\r\n ></ng-container>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"collection-contents\"\r\n [class.loading]=\"isLoading\"\r\n [items]=\"contents$ | async\"\r\n [itemsPerPage]=\"contentsItemsPerPage$ | async\"\r\n [totalItems]=\"contentsTotalItems$ | async\"\r\n [currentPage]=\"contentsCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/catalog/products', variant.productId]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n</div>\r\n","import { CdkDrag, CdkDragDrop, CdkDropList, DragRef } from '@angular/cdk/drag-drop';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { DataService, DataTable2Component, GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\r\n\r\nexport type CollectionTableItem = ItemOf<GetCollectionListQuery, 'collections'>;\r\nexport type CollectionOrderEvent = {\r\n collectionId: string;\r\n parentId: string;\r\n index: number;\r\n};\r\n@Component({\r\n selector: 'vdr-collection-data-table',\r\n templateUrl: './collection-data-table.component.html',\r\n styleUrls: [\r\n '../../../../core/src/shared/components/data-table-2/data-table2.component.scss',\r\n './collection-data-table.component.scss',\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionDataTableComponent\r\n extends DataTable2Component<CollectionTableItem>\r\n implements OnChanges, AfterViewInit\r\n{\r\n @Input() subCollections: CollectionTableItem[];\r\n @Output() changeOrder = new EventEmitter<CollectionOrderEvent>();\r\n @ViewChild(CdkDropList, { static: true }) dropList: CdkDropList<{\r\n depth: number;\r\n collection: CollectionTableItem;\r\n }>;\r\n @ViewChildren('collectionRow', { read: CdkDrag }) collectionRowList: QueryList<CdkDrag>;\r\n dragRefs: DragRef[] = [];\r\n absoluteIndex: { [id: string]: number } = {};\r\n constructor(\r\n protected changeDetectorRef: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n ) {\r\n super(changeDetectorRef, dataService);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n if (changes.subCollections || changes.items) {\r\n const allCollections: CollectionTableItem[] = [];\r\n for (const collection of this.items ?? []) {\r\n allCollections.push(collection);\r\n const subCollectionMatches = this.getSubcollections(collection);\r\n allCollections.push(...subCollectionMatches.flat());\r\n }\r\n allCollections.forEach((collection, index) => (this.absoluteIndex[collection.id] = index));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.collectionRowList.changes.subscribe((val: QueryList<CdkDrag>) => {\r\n this.dropList.getSortedItems().forEach(item => this.dropList.removeItem(item));\r\n for (const ref of val.toArray()) {\r\n ref.dropContainer = this.dropList;\r\n ref._dragRef._withDropContainer(this.dropList._dropListRef);\r\n this.dropList.addItem(ref);\r\n }\r\n });\r\n }\r\n\r\n getSubcollections(item: CollectionTableItem) {\r\n return this.subCollections?.filter(c => c.parentId === item.id) ?? [];\r\n }\r\n\r\n sortPredicate = (index: number, item: CdkDrag<{ depth: number; collection: CollectionTableItem }>) => {\r\n const itemAtIndex = this.dropList.getSortedItems()[index];\r\n return itemAtIndex?.data.collection.parentId === item.data.collection.parentId;\r\n };\r\n\r\n onDrop(\r\n event: CdkDragDrop<{\r\n depth: number;\r\n collection: CollectionTableItem;\r\n }>,\r\n ) {\r\n const isTopLevel = event.item.data.collection.breadcrumbs.length === 2;\r\n const pageIndexOffset = isTopLevel ? (this.currentPage - 1) * this.itemsPerPage : 0;\r\n const parentId = event.item.data.collection.parentId;\r\n const parentIndex = this.items.findIndex(i => i.id === parentId);\r\n const adjustedIndex = pageIndexOffset + event.currentIndex - parentIndex - 1;\r\n this.changeOrder.emit({\r\n collectionId: event.item.data.collection.id,\r\n index: adjustedIndex,\r\n parentId: event.item.data.collection.parentId,\r\n });\r\n\r\n if (isTopLevel) {\r\n this.items = [...this.items];\r\n this.items.splice(event.previousIndex, 1);\r\n this.items.splice(event.currentIndex, 0, event.item.data.collection);\r\n } else {\r\n const parent = this.items.find(i => i.id === parentId);\r\n if (parent) {\r\n const subCollections = this.getSubcollections(parent);\r\n const adjustedPreviousIndex = pageIndexOffset + event.previousIndex - parentIndex - 1;\r\n subCollections.splice(adjustedPreviousIndex, 1);\r\n subCollections.splice(event.currentIndex, 0, event.item.data.collection);\r\n }\r\n }\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n}\r\n","<vdr-data-table-filter-presets\r\n *ngIf=\"filters\"\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n></vdr-data-table-filter-presets>\r\n<div class=\"table-wrapper\">\r\n <div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n </div>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <vdr-ui-extension-point\r\n [locationId]=\"id\"\r\n [metadata]=\"column.id\"\r\n api=\"dataTable\"\r\n [topPx]=\"-6\"\r\n [leftPx]=\"-24\"\r\n display=\"block\"\r\n >\r\n <span>{{ column.heading }}</span>\r\n </vdr-ui-extension-point>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngIf=\"customComponents.get(column.id) as componentConfig; else defaultComponent\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentConfig.config.component;\r\n inputs: { rowItem: item };\r\n injector: componentConfig.injector\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-template #defaultComponent>\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormBuilder, UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n COLLECTION_FRAGMENT,\r\n CollectionDetailQueryDocument,\r\n CollectionFragment,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n ConfigurableOperationInput,\r\n CreateCollectionInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n encodeConfigArgValue,\r\n findTranslation,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n LocalStorageService,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n unicodePatternValidator,\r\n UpdateCollectionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { CollectionContentsComponent } from '../collection-contents/collection-contents.component';\r\n\r\nexport const COLLECTION_DETAIL_QUERY = gql`\r\n query CollectionDetailQuery($id: ID!) {\r\n collection(id: $id) {\r\n ...Collection\r\n }\r\n }\r\n ${COLLECTION_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-collection-detail',\r\n templateUrl: './collection-detail.component.html',\r\n styleUrls: ['./collection-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionDetailComponent\r\n extends TypedBaseDetailComponent<typeof CollectionDetailQueryDocument, 'collection'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Collection');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/)],\r\n description: '',\r\n visible: false,\r\n inheritFilters: true,\r\n filters: this.formBuilder.array([]),\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n assetChanges: { assets?: Asset[]; featuredAsset?: Asset } = {};\r\n filters: ConfigurableOperation[] = [];\r\n allFilters: ConfigurableOperationDefinition[] = [];\r\n updatedFilters$: Observable<ConfigurableOperationInput[]>;\r\n inheritFilters$: Observable<boolean>;\r\n livePreview = false;\r\n parentId$: Observable<string | undefined>;\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateCollection];\r\n private filterRemoved$ = new Subject<void>();\r\n @ViewChild('collectionContents') contentsComponent: CollectionContentsComponent;\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private localStorageService: LocalStorageService,\r\n ) {\r\n super();\r\n this.livePreview = this.localStorageService.get('livePreviewCollectionContents') ?? false;\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.collection.getCollectionFilters().single$.subscribe(res => {\r\n this.allFilters = res.collectionFilters;\r\n });\r\n const filtersFormArray = this.detailForm.get('filters') as UntypedFormArray;\r\n const inheritFiltersControl = this.detailForm.get('inheritFilters') as UntypedFormControl;\r\n this.inheritFilters$ = inheritFiltersControl.valueChanges.pipe(distinctUntilChanged());\r\n this.updatedFilters$ = merge(filtersFormArray.statusChanges, this.filterRemoved$).pipe(\r\n debounceTime(200),\r\n filter(() => filtersFormArray.touched),\r\n map(() =>\r\n this.mapOperationsToInputs(this.filters, filtersFormArray.value).filter(_filter => {\r\n // ensure all the arguments have valid values. E.g. a newly-added\r\n // filter will not yet have valid values\r\n for (const arg of _filter.arguments) {\r\n if (arg.value === '') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }),\r\n ),\r\n );\r\n this.parentId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('parentId') || undefined),\r\n switchMap(parentId => {\r\n if (parentId) {\r\n return of(parentId);\r\n } else {\r\n return this.entity$.pipe(map(collection => collection.parent?.id));\r\n }\r\n }),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n getFilterDefinition(_filter: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allFilters.find(f => f.code === _filter.code);\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n /**\r\n * If creating a new Collection, automatically generate the slug based on the collection name.\r\n */\r\n updateSlug(nameValue: string) {\r\n const slugControl = this.detailForm.get(['slug']);\r\n const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\r\n const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\r\n if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\r\n slugControl.setValue(normalizeString(`${nameValue}`, '-'));\r\n }\r\n }\r\n\r\n addFilter(collectionFilter: ConfigurableOperation) {\r\n const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\r\n const argsHash = collectionFilter.args.reduce(\r\n (output, arg) => ({\r\n ...output,\r\n [arg.name]: getConfigArgValue(arg.value),\r\n }),\r\n {},\r\n );\r\n filtersArray.push(\r\n this.formBuilder.control({\r\n code: collectionFilter.code,\r\n args: argsHash,\r\n }),\r\n );\r\n this.filters.push({\r\n code: collectionFilter.code,\r\n args: collectionFilter.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\r\n });\r\n }\r\n\r\n removeFilter(index: number) {\r\n const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\r\n if (index !== -1) {\r\n filtersArray.removeAt(index);\r\n filtersArray.markAsDirty();\r\n filtersArray.markAsTouched();\r\n this.filters.splice(index, 1);\r\n this.filterRemoved$.next();\r\n }\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const input = this.getUpdatedCollection(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n languageCode: this.languageCode,\r\n name: '',\r\n slug: '',\r\n isPrivate: false,\r\n breadcrumbs: [],\r\n description: '',\r\n featuredAsset: null,\r\n assets: [],\r\n translations: [],\r\n inheritFilters: true,\r\n filters: [],\r\n parent: {} as any,\r\n children: null,\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n ) as CreateCollectionInput;\r\n const parentId = this.route.snapshot.paramMap.get('parentId');\r\n if (parentId) {\r\n input.parentId = parentId;\r\n }\r\n this.dataService.collection.createCollection(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Collection',\r\n });\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCollection.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Collection',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([category, languageCode]) => {\r\n const input = this.getUpdatedCollection(\r\n category,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateCollectionInput;\r\n return this.dataService.collection.updateCollection(input);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Collection',\r\n });\r\n this.contentsComponent.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Collection',\r\n });\r\n },\r\n );\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\r\n }\r\n\r\n toggleLivePreview() {\r\n this.livePreview = !this.livePreview;\r\n this.localStorageService.set('livePreviewCollectionContents', this.livePreview);\r\n }\r\n\r\n trackByFn(index: number, item: ConfigurableOperation) {\r\n return JSON.stringify(item);\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the category or current language.\r\n */\r\n protected setFormValues(entity: CollectionFragment, languageCode: LanguageCode) {\r\n const currentTranslation = findTranslation(entity, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n name: currentTranslation ? currentTranslation.name : '',\r\n slug: currentTranslation ? currentTranslation.slug : '',\r\n description: currentTranslation ? currentTranslation.description : '',\r\n visible: !entity.isPrivate,\r\n inheritFilters: entity.inheritFilters,\r\n });\r\n\r\n const formArray = this.detailForm.get('filters') as UntypedFormArray;\r\n if (formArray.length !== entity.filters.length) {\r\n formArray.clear();\r\n this.filters = [];\r\n entity.filters.forEach(f => this.addFilter(f));\r\n }\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n entity,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a category and the value of the form, this method creates an updated copy of the category which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedCollection(\r\n category: CollectionFragment,\r\n form: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): CreateCollectionInput | UpdateCollectionInput {\r\n const updatedCategory = createUpdatedTranslatable({\r\n translatable: category,\r\n updatedFields: form.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: category.name || '',\r\n slug: category.slug || '',\r\n description: category.description || '',\r\n },\r\n });\r\n return {\r\n ...updatedCategory,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n isPrivate: !form.value.visible,\r\n filters: this.mapOperationsToInputs(this.filters, this.detailForm.value.filters),\r\n };\r\n }\r\n\r\n /**\r\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\r\n */\r\n private mapOperationsToInputs(\r\n operations: ConfigurableOperation[],\r\n formValueOperations: any,\r\n ): ConfigurableOperationInput[] {\r\n return operations.map((o, i) => ({\r\n code: o.code,\r\n arguments: Object.entries(formValueOperations[i].args).map(([name, value], j) => ({\r\n name,\r\n value: encodeConfigArgValue(value),\r\n })),\r\n }));\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-detail\" />\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"collection-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.visible; else private\">{{\r\n 'catalog.public' | translate\r\n }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block *ngIf=\"entity$ | async as entity\"\r\n ><nav role=\"navigation\">\r\n <ul class=\"collection-breadcrumbs\">\r\n <li *ngFor=\"let breadcrumb of entity.breadcrumbs; let isFirst = first; let isLast = last\">\r\n <a [routerLink]=\"['/catalog/collections']\" *ngIf=\"isFirst\">{{\r\n 'catalog.root-collection' | translate\r\n }}</a>\r\n <a\r\n [routerLink]=\"['/catalog/collections', breadcrumb.id]\"\r\n *ngIf=\"!isFirst && !isLast\"\r\n >{{ breadcrumb.name | translate }}</a\r\n >\r\n <ng-container *ngIf=\"isLast\">{{ breadcrumb.name | translate }}</ng-container>\r\n </li>\r\n </ul>\r\n </nav>\r\n </vdr-page-block>\r\n\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: ('catalog.slug-pattern-error' | translate) }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Collection\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"collection-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"entity?.assets\"\r\n [featuredAsset]=\"entity?.featuredAsset\"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.filters' | translate\">\r\n <vdr-form-field [label]=\"'catalog.filter-inheritance' | translate\" for=\"inheritFilters\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"inheritFilters\"\r\n id=\"inheritFilters\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.inheritFilters; else noInherit\">{{\r\n 'catalog.inherit-filters-from-parent' | translate\r\n }}</ng-container>\r\n <ng-template #noInherit>{{\r\n 'catalog.do-not-inherit-filters' | translate\r\n }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <div formArrayName=\"filters\">\r\n <ng-container *ngFor=\"let filter of filters; index as i; trackBy: trackByFn\">\r\n <vdr-configurable-input\r\n (remove)=\"removeFilter(i)\"\r\n [position]=\"i\"\r\n [operation]=\"filter\"\r\n [operationDefinition]=\"getFilterDefinition(filter)\"\r\n [formControlName]=\"i\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-configurable-input>\r\n </ng-container>\r\n </div>\r\n <div *vdrIfPermissions=\"updatePermission\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span>{{ 'marketing.add-condition' | translate }}</span>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let filter of allFilters\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"addFilter(filter)\"\r\n >\r\n {{ filter.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card [title]=\"'common.contents' | translate\" [paddingX]=\"false\">\r\n <vdr-collection-contents\r\n [collectionId]=\"id\"\r\n [parentId]=\"parentId$ | async\"\r\n [updatedFilters]=\"updatedFilters$ | async\"\r\n [inheritFilters]=\"inheritFilters$ | async\"\r\n [previewUpdatedFilters]=\"livePreview\"\r\n #collectionContents\r\n >\r\n <ng-template let-count>\r\n <div class=\"ml-3\">\r\n <div class=\"contents-title\">\r\n {{ 'catalog.collection-contents' | translate }} ({{\r\n 'common.results-count' | translate : { count: count }\r\n }})\r\n </div>\r\n <clr-checkbox-wrapper [class.disabled]=\"detailForm.get('filters')?.pristine\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [disabled]=\"detailForm.get('filters')?.pristine\"\r\n [ngModel]=\"livePreview\"\r\n (ngModelChange)=\"toggleLivePreview()\"\r\n />\r\n <label>{{ 'catalog.live-preview-contents' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Removes the root collection and self breadcrumb from the collection breadcrumb list.\r\n */\r\n@Pipe({\r\n name: 'collectionBreadcrumb',\r\n})\r\nexport class CollectionBreadcrumbPipe implements PipeTransform {\r\n transform(value: ItemOf<GetCollectionListQuery, 'collections'>): unknown {\r\n return value?.breadcrumbs.slice(1, -1);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DataService, Dialog, GetCollectionListQuery, I18nService, ItemOf } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-move-collections-dialog',\r\n templateUrl: './move-collections-dialog.component.html',\r\n styleUrls: ['./move-collections-dialog.component.scss', '../collection-list/collection-list-common.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MoveCollectionsDialogComponent\r\n implements OnInit, Dialog<ItemOf<GetCollectionListQuery, 'collections'>>\r\n{\r\n resolveWith: (result?: ItemOf<GetCollectionListQuery, 'collections'>) => void;\r\n searchTermControl = new FormControl('');\r\n items$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n totalItems$: Observable<number>;\r\n currentPage$ = new BehaviorSubject(1);\r\n itemsPerPage$ = new BehaviorSubject(10);\r\n expandedIds$ = new Subject<string[]>();\r\n expandedIds: string[] = [];\r\n subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n\r\n constructor(private dataService: DataService, private i18nService: I18nService) {}\r\n\r\n ngOnInit() {\r\n const getCollectionsResult = this.dataService.collection.getCollections();\r\n\r\n const searchTerm$ = this.searchTermControl.valueChanges.pipe(\r\n debounceTime(250),\r\n distinctUntilChanged(),\r\n startWith(''),\r\n );\r\n const currentPage$ = this.currentPage$.pipe(distinctUntilChanged());\r\n const itemsPerPage$ = this.itemsPerPage$.pipe(distinctUntilChanged());\r\n combineLatest(searchTerm$, currentPage$, itemsPerPage$).subscribe(\r\n ([searchTerm, currentPage, itemsPerPage]) => {\r\n const topLevelOnly = searchTerm === '';\r\n getCollectionsResult.ref.refetch({\r\n options: {\r\n skip: (currentPage - 1) * itemsPerPage,\r\n take: itemsPerPage,\r\n filter: {\r\n name: { contains: searchTerm },\r\n },\r\n topLevelOnly,\r\n },\r\n });\r\n },\r\n );\r\n\r\n const rootCollectionId$ = this.dataService.collection\r\n .getCollections({\r\n take: 1,\r\n topLevelOnly: true,\r\n })\r\n .mapSingle(data => data.collections.items[0].parentId);\r\n\r\n this.items$ = combineLatest(\r\n getCollectionsResult.mapStream(({ collections }) => collections),\r\n rootCollectionId$,\r\n ).pipe(\r\n map(([collections, rootCollectionId]) => [\r\n ...(rootCollectionId\r\n ? [\r\n {\r\n id: rootCollectionId,\r\n name: this.i18nService.translate('catalog.root-collection'),\r\n slug: '',\r\n parentId: '__',\r\n position: 0,\r\n featuredAsset: null,\r\n children: [],\r\n breadcrumbs: [],\r\n isPrivate: false,\r\n createdAt: '',\r\n updatedAt: '',\r\n } satisfies ItemOf<GetCollectionListQuery, 'collections'>,\r\n ]\r\n : []),\r\n ...collections.items,\r\n ]),\r\n );\r\n this.totalItems$ = getCollectionsResult.mapStream(data => data.collections.totalItems);\r\n\r\n this.subCollections$ = this.expandedIds$.pipe(\r\n tap(val => (this.expandedIds = val)),\r\n switchMap(ids => {\r\n if (ids.length) {\r\n return this.dataService.collection\r\n .getCollections({\r\n take: 999,\r\n filter: {\r\n parentId: { in: ids },\r\n },\r\n })\r\n .mapStream(data => data.collections.items);\r\n } else {\r\n return of([]);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\r\n let expandedIds = this.expandedIds;\r\n if (!expandedIds.includes(collection.id)) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.expandedIds$.next(expandedIds);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length && collection.parentId !== '__'\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"icon-button folder-button\" *ngIf=\"collection.parentId === '__'\" disabled>\r\n <clr-icon shape=\"folder\" class=\"is-solid\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {name: collection.name} }}</span>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-collection-data-table>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DuplicateEntityDialogComponent,\r\n GetCollectionListQuery,\r\n ItemOf,\r\n ModalService,\r\n MoveCollectionInput,\r\n NotificationService,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { CollectionPartial } from '../collection-tree/collection-tree.types';\r\nimport { MoveCollectionsDialogComponent } from '../move-collections-dialog/move-collections-dialog.component';\r\n\r\nimport { CollectionListComponent } from './collection-list.component';\r\n\r\nexport const deleteCollectionsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCollection) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.collection.deleteCollections(ids).pipe(map(res => res.deleteCollections)),\r\n});\r\n\r\nexport const moveCollectionsBulkAction: BulkAction<CollectionPartial, CollectionListComponent> = {\r\n location: 'collection-list',\r\n label: _('catalog.move-collections'),\r\n icon: 'drag-handle',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateCollection),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .fromComponent(MoveCollectionsDialogComponent, {\r\n size: 'xl',\r\n closable: true,\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n const inputs: MoveCollectionInput[] = selection.map(c => ({\r\n collectionId: c.id,\r\n parentId: result.id,\r\n index: 0,\r\n }));\r\n return dataService.collection.moveCollection(inputs);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n notificationService.success(_('catalog.move-collections-success'), {\r\n count: selection.length,\r\n });\r\n clearSelection();\r\n hostComponent.refresh();\r\n });\r\n },\r\n};\r\n\r\nexport const assignCollectionsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateCollection),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, collectionIds, channelIds) =>\r\n channelIds.map(channelId =>\r\n dataService.collection\r\n .assignCollectionsToChannel({\r\n collectionIds,\r\n channelId,\r\n })\r\n .pipe(map(res => res.assignCollectionsToChannel)),\r\n ),\r\n});\r\n\r\nexport const removeCollectionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteCollection),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, collectionIds, channelId) =>\r\n dataService.collection\r\n .removeCollectionsFromChannel({\r\n channelId: channelId,\r\n collectionIds,\r\n })\r\n .pipe(map(res => res.removeCollectionsFromChannel)),\r\n});\r\n\r\nexport const duplicateCollectionsBulkAction: BulkAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>,\r\n CollectionListComponent\r\n> = {\r\n location: 'collection-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetCollectionListQuery, 'collections'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Collection',\r\n title: _('catalog.duplicate-collections'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetCollectionListDocument,\r\n GetCollectionListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n NotificationService,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { CollectionOrderEvent } from '../collection-data-table/collection-data-table.component';\r\n\r\n@Component({\r\n selector: 'vdr-collection-list',\r\n templateUrl: './collection-list.component.html',\r\n styleUrls: ['./collection-list.component.scss', './collection-list-common.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionListComponent\r\n extends TypedBaseListComponent<typeof GetCollectionListDocument, 'collections'>\r\n implements OnInit\r\n{\r\n activeCollectionId$: Observable<string | null>;\r\n activeCollectionIndex$: Observable<number>;\r\n activeCollectionTitle$: Observable<string>;\r\n subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n expandedIds: string[] = [];\r\n dataTableListId = 'collection-list';\r\n readonly customFields = this.getCustomFieldConfig('Collection');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'slug',\r\n label: _('common.slug'),\r\n type: { kind: 'text' },\r\n filterField: 'slug',\r\n })\r\n .addFilter({\r\n name: 'visibility',\r\n type: { kind: 'boolean' },\r\n label: _('common.visibility'),\r\n toFilterInput: value => ({\r\n isPrivate: { eq: !value },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('position', 'ASC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'slug' })\r\n .addSort({ name: 'position' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n super.configure({\r\n document: GetCollectionListDocument,\r\n getItems: data => data.collections,\r\n setVariables: (skip, _take) => {\r\n const topLevelOnly =\r\n this.searchTermControl.value === '' && this.filters.activeFilters.length === 0\r\n ? true\r\n : undefined;\r\n return {\r\n options: {\r\n skip,\r\n take: _take,\r\n filter: {\r\n name: { contains: this.searchTermControl.value },\r\n ...this.filters.createFilterInput(),\r\n },\r\n topLevelOnly,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.activeCollectionId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n );\r\n const expandedIds$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('expanded')),\r\n distinctUntilChanged(),\r\n map(ids => (ids ? ids.split(',') : [])),\r\n );\r\n expandedIds$.pipe(takeUntil(this.destroy$)).subscribe(ids => {\r\n this.expandedIds = ids;\r\n });\r\n this.subCollections$ = combineLatest(expandedIds$, this.refresh$).pipe(\r\n switchMap(([ids]) => {\r\n if (ids.length) {\r\n return this.dataService.collection\r\n .getCollections({\r\n take: 999,\r\n filter: {\r\n parentId: { in: ids },\r\n },\r\n })\r\n .mapStream(data => data.collections.items);\r\n } else {\r\n return of([]);\r\n }\r\n }),\r\n );\r\n\r\n this.activeCollectionTitle$ = combineLatest(\r\n this.activeCollectionId$,\r\n this.items$,\r\n this.subCollections$,\r\n ).pipe(\r\n map(([id, collections, subCollections]) => {\r\n if (id) {\r\n const match = [...collections, ...subCollections].find(c => c.id === id);\r\n return match ? match.name : '';\r\n }\r\n return '';\r\n }),\r\n );\r\n this.activeCollectionIndex$ = combineLatest(\r\n this.activeCollectionId$,\r\n this.items$,\r\n this.subCollections$,\r\n ).pipe(\r\n map(([id, collections, subCollections]) => {\r\n if (id) {\r\n const allCollections: typeof collections = [];\r\n for (const collection of collections) {\r\n allCollections.push(collection);\r\n const subCollectionMatches = subCollections.filter(\r\n c => c.parentId && c.parentId === collection.id,\r\n );\r\n allCollections.push(...subCollectionMatches);\r\n }\r\n return allCollections.findIndex(c => c.id === id);\r\n }\r\n return -1;\r\n }),\r\n );\r\n }\r\n\r\n onRearrange(event: CollectionOrderEvent) {\r\n this.dataService.collection.moveCollection([event]).subscribe({\r\n next: () => {\r\n this.notificationService.success(_('common.notify-saved-changes'));\r\n this.refresh();\r\n },\r\n error: err => {\r\n this.notificationService.error(_('common.notify-save-changes-error'));\r\n },\r\n });\r\n }\r\n\r\n closeContents() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\r\n let expandedIds = this.expandedIds;\r\n if (!expandedIds.includes(collection.id)) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.router.navigate(['./'], {\r\n queryParams: {\r\n expanded: expandedIds.filter(id => !!id).join(','),\r\n },\r\n queryParamsHandling: 'merge',\r\n relativeTo: this.route,\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"collection-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n [queryParams]=\"{ contentsPage: 1 }\"\r\n queryParamsHandling=\"merge\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { RootNode, TreeNode } from './array-to-tree';\r\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\r\n\r\n/**\r\n * Facilitates communication between the CollectionTreeComponent and child CollectionTreeNodeComponents\r\n * without introducing a cyclic dependency.\r\n */\r\n@Injectable()\r\nexport class CollectionTreeService implements OnDestroy {\r\n private allMoveListItems: Array<{ path: string; id: string; ancestorIdPath: Set<string> }> = [];\r\n private collectionTree: RootNode<CollectionPartial>;\r\n private _rearrange$ = new Subject<RearrangeEvent>();\r\n private _delete$ = new Subject<string>();\r\n\r\n public rearrange$: Observable<RearrangeEvent>;\r\n public delete$: Observable<string>;\r\n\r\n constructor() {\r\n this.rearrange$ = this._rearrange$.asObservable();\r\n this.delete$ = this._delete$.asObservable();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._rearrange$.complete();\r\n this._delete$.complete();\r\n }\r\n\r\n setCollectionTree(tree: RootNode<CollectionPartial>) {\r\n this.collectionTree = tree;\r\n }\r\n\r\n resetMoveList() {\r\n this.allMoveListItems = [];\r\n }\r\n\r\n getMoveListItems(collection: CollectionPartial) {\r\n if (this.allMoveListItems.length === 0) {\r\n this.allMoveListItems = this.calculateAllMoveListItems();\r\n }\r\n return this.allMoveListItems.filter(\r\n item =>\r\n item.id !== collection.id &&\r\n !item.ancestorIdPath.has(collection.id) &&\r\n item.id !== collection.parent?.id,\r\n );\r\n }\r\n\r\n onDrop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\r\n const item = event.item.data as CollectionPartial;\r\n const newParent = event.container.data;\r\n const newParentId = newParent.id;\r\n if (newParentId == null) {\r\n throw new Error(`Could not determine the ID of the root Collection`);\r\n }\r\n this._rearrange$.next({\r\n collectionId: item.id,\r\n parentId: newParentId,\r\n index: event.currentIndex,\r\n });\r\n }\r\n\r\n onMove(event: RearrangeEvent) {\r\n this._rearrange$.next(event);\r\n }\r\n\r\n onDelete(id: string) {\r\n this._delete$.next(id);\r\n }\r\n\r\n private calculateAllMoveListItems() {\r\n const visit = (\r\n node: TreeNode<any>,\r\n parentPath: string[],\r\n ancestorIdPath: Set<string>,\r\n output: Array<{ path: string; id: string; ancestorIdPath: Set<string> }>,\r\n ) => {\r\n const path = parentPath.concat(node.name);\r\n output.push({ path: path.slice(1).join(' / ') || 'root', id: node.id, ancestorIdPath });\r\n node.children.forEach(child =>\r\n visit(child, path, new Set<string>([...ancestorIdPath, node.id]), output),\r\n );\r\n return output;\r\n };\r\n return visit(this.collectionTree, [], new Set<string>(), []);\r\n }\r\n}\r\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n SimpleChanges,\r\n SkipSelf,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { DataService, Permission, SelectionManager } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { map, shareReplay } from 'rxjs/operators';\r\n\r\nimport { RootNode, TreeNode } from './array-to-tree';\r\nimport { CollectionTreeService } from './collection-tree.service';\r\nimport { CollectionPartial } from './collection-tree.types';\r\n\r\n@Component({\r\n selector: 'vdr-collection-tree-node',\r\n templateUrl: './collection-tree-node.component.html',\r\n styleUrls: ['./collection-tree-node.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionTreeNodeComponent implements OnInit, OnChanges, OnDestroy {\r\n depth = 0;\r\n parentName: string;\r\n @Input() collectionTree: TreeNode<CollectionPartial>;\r\n @Input() activeCollectionId: string;\r\n @Input() expandAll = false;\r\n @Input() selectionManager: SelectionManager<CollectionPartial>;\r\n hasUpdatePermission$: Observable<boolean>;\r\n hasDeletePermission$: Observable<boolean>;\r\n moveListItems: Array<{ path: string; id: string }> = [];\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n @SkipSelf() @Optional() private parent: CollectionTreeNodeComponent,\r\n private dataService: DataService,\r\n private collectionTreeService: CollectionTreeService,\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n ) {\r\n if (parent) {\r\n this.depth = parent.depth + 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.parentName = this.collectionTree.name || '<root>';\r\n const permissions$ = this.dataService.client\r\n .userStatus()\r\n .mapStream(data => data.userStatus.permissions)\r\n .pipe(shareReplay(1));\r\n this.hasUpdatePermission$ = permissions$.pipe(\r\n map(\r\n perms =>\r\n perms.includes(Permission.UpdateCatalog) || perms.includes(Permission.UpdateCollection),\r\n ),\r\n );\r\n this.hasDeletePermission$ = permissions$.pipe(\r\n map(\r\n perms =>\r\n perms.includes(Permission.DeleteCatalog) || perms.includes(Permission.DeleteCollection),\r\n ),\r\n );\r\n this.subscription = this.selectionManager?.selectionChanges$.subscribe(() =>\r\n this.changeDetectorRef.markForCheck(),\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const expandAllChange = changes['expandAll'];\r\n if (expandAllChange) {\r\n if (expandAllChange.previousValue === true && expandAllChange.currentValue === false) {\r\n this.collectionTree.children.forEach(c => (c.expanded = false));\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n trackByFn(index: number, item: CollectionPartial) {\r\n return item.id;\r\n }\r\n\r\n toggleExpanded(collection: TreeNode<CollectionPartial>) {\r\n collection.expanded = !collection.expanded;\r\n let expandedIds = this.route.snapshot.queryParamMap.get('expanded')?.split(',') ?? [];\r\n if (collection.expanded) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.router.navigate(['./'], {\r\n queryParams: {\r\n expanded: expandedIds.filter(id => !!id).join(','),\r\n },\r\n queryParamsHandling: 'merge',\r\n relativeTo: this.route,\r\n });\r\n }\r\n\r\n getMoveListItems(collection: CollectionPartial) {\r\n this.moveListItems = this.collectionTreeService.getMoveListItems(collection);\r\n }\r\n\r\n move(collection: CollectionPartial, parentId: string) {\r\n this.collectionTreeService.onMove({\r\n index: 0,\r\n parentId,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n moveUp(collection: CollectionPartial, currentIndex: number) {\r\n if (!collection.parent) {\r\n return;\r\n }\r\n this.collectionTreeService.onMove({\r\n index: currentIndex - 1,\r\n parentId: collection.parent.id,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n moveDown(collection: CollectionPartial, currentIndex: number) {\r\n if (!collection.parent) {\r\n return;\r\n }\r\n this.collectionTreeService.onMove({\r\n index: currentIndex + 1,\r\n parentId: collection.parent.id,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\r\n moveItemInArray(this.collectionTree.children, event.previousIndex, event.currentIndex);\r\n this.collectionTreeService.onDrop(event);\r\n }\r\n\r\n delete(id: string) {\r\n this.collectionTreeService.onDelete(id);\r\n }\r\n}\r\n","<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager.isSelected(collection)\"\r\n (click)=\"selectionManager.toggleSelection(collection, $event)\"\r\n />\r\n </div>\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n","export type HasParent = { id: string; parent?: { id: string } | null };\r\nexport type TreeNode<T extends HasParent> = T & { children: Array<TreeNode<T>>; expanded: boolean };\r\nexport type RootNode<T extends HasParent> = { id?: string; children: Array<TreeNode<T>> };\r\n\r\n/**\r\n * Builds a tree from an array of nodes which have a parent.\r\n * Based on https://stackoverflow.com/a/31247960/772859, modified to preserve ordering.\r\n */\r\nexport function arrayToTree<T extends HasParent>(\r\n nodes: T[],\r\n currentState?: RootNode<T>,\r\n expandedIds: string[] = [],\r\n): RootNode<T> {\r\n const topLevelNodes: Array<TreeNode<T>> = [];\r\n const mappedArr: { [id: string]: TreeNode<T> } = {};\r\n const currentStateMap = treeToMap(currentState);\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (const node of nodes) {\r\n mappedArr[node.id] = { ...(node as any), children: [] };\r\n }\r\n\r\n for (const id of nodes.map(n => n.id)) {\r\n if (mappedArr.hasOwnProperty(id)) {\r\n const mappedElem = mappedArr[id];\r\n mappedElem.expanded = currentStateMap.get(id)?.expanded ?? expandedIds.includes(id);\r\n const parent = mappedElem.parent;\r\n if (!parent) {\r\n continue;\r\n }\r\n // If the element is not at the root level, add it to its parent array of children.\r\n const parentIsRoot = !mappedArr[parent.id];\r\n if (!parentIsRoot) {\r\n if (mappedArr[parent.id]) {\r\n mappedArr[parent.id].children.push(mappedElem);\r\n } else {\r\n mappedArr[parent.id] = { children: [mappedElem] } as any;\r\n }\r\n } else {\r\n topLevelNodes.push(mappedElem);\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const rootId = topLevelNodes.length ? topLevelNodes[0].parent!.id : undefined;\r\n return { id: rootId, children: topLevelNodes };\r\n}\r\n\r\n/**\r\n * Converts an existing tree (as generated by the arrayToTree function) into a flat\r\n * Map. This is used to persist certain states (e.g. `expanded`) when re-building the\r\n * tree.\r\n */\r\nfunction treeToMap<T extends HasParent>(tree?: RootNode<T>): Map<string, TreeNode<T>> {\r\n const nodeMap = new Map<string, TreeNode<T>>();\r\n function visit(node: TreeNode<T>) {\r\n nodeMap.set(node.id, node);\r\n node.children.forEach(visit);\r\n }\r\n if (tree) {\r\n visit(tree as TreeNode<T>);\r\n }\r\n return nodeMap;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { Collection, SelectionManager } from '@vendure/admin-ui/core';\r\n\r\nimport { arrayToTree, RootNode } from './array-to-tree';\r\nimport { CollectionTreeService } from './collection-tree.service';\r\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\r\n\r\n@Component({\r\n selector: 'vdr-collection-tree',\r\n templateUrl: 'collection-tree.component.html',\r\n styleUrls: ['./collection-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [CollectionTreeService],\r\n})\r\nexport class CollectionTreeComponent implements OnInit, OnChanges {\r\n @Input() collections: CollectionPartial[];\r\n @Input() activeCollectionId: string;\r\n @Input() expandAll = false;\r\n @Input() expandedIds: string[] = [];\r\n @Input() selectionManager: SelectionManager<CollectionPartial>;\r\n @Output() rearrange = new EventEmitter<RearrangeEvent>();\r\n @Output() deleteCollection = new EventEmitter<string>();\r\n collectionTree: RootNode<CollectionPartial>;\r\n\r\n constructor(private collectionTreeService: CollectionTreeService) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if ('collections' in changes && this.collections) {\r\n this.collectionTree = arrayToTree(this.collections, this.collectionTree, this.expandedIds);\r\n this.collectionTreeService.setCollectionTree(this.collectionTree);\r\n this.collectionTreeService.resetMoveList();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.collectionTreeService.rearrange$.subscribe(event => this.rearrange.emit(event));\r\n this.collectionTreeService.delete$.subscribe(id => this.deleteCollection.emit(id));\r\n }\r\n}\r\n","<vdr-collection-tree-node\r\n *ngIf=\"collectionTree\"\r\n cdkDropListGroup\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collectionTree\"\r\n [selectionManager]=\"selectionManager\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n></vdr-collection-tree-node>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { Dialog, GetProductVariantOptionsQuery } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-confirm-variant-deletion-dialog',\r\n templateUrl: './confirm-variant-deletion-dialog.component.html',\r\n styleUrls: ['./confirm-variant-deletion-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ConfirmVariantDeletionDialogComponent implements Dialog<boolean> {\r\n resolveWith: (result?: boolean) => void;\r\n variants: NonNullable<GetProductVariantOptionsQuery['product']>['variants'] = [];\r\n\r\n confirm() {\r\n this.resolveWith(true);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.confirm-deletion-of-unused-variants-title' | translate }}\r\n</ng-template>\r\n{{ 'catalog.confirm-deletion-of-unused-variants-body' | translate }}\r\n<ul>\r\n <li *ngFor=\"let variant of variants\">{{ variant.name }} ({{ variant.sku }})</li>\r\n</ul>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { CreateFacetValueInput, Dialog, LanguageCode } from '@vendure/admin-ui/core';\r\n\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-create-facet-value-dialog',\r\n templateUrl: './create-facet-value-dialog.component.html',\r\n styleUrls: ['./create-facet-value-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateFacetValueDialogComponent implements Dialog<CreateFacetValueInput> {\r\n resolveWith: (result?: CreateFacetValueInput) => void;\r\n languageCode: LanguageCode;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n code: ['', Validators.required],\r\n });\r\n facetId: string;\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n updateCode() {\r\n const nameControl = this.form.get('name');\r\n const codeControl = this.form.get('code');\r\n if (nameControl && codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\r\n }\r\n }\r\n\r\n confirm() {\r\n const { name, code } = this.form.value;\r\n if (!name || !code) {\r\n return;\r\n }\r\n this.resolveWith({\r\n facetId: this.facetId,\r\n code,\r\n translations: [{ languageCode: this.languageCode, name }],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-facet-value' | translate }}\r\n</ng-template>\r\n<div class=\"form-grid\" [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormRecord,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateFacetInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n DeletionResult,\r\n FACET_WITH_VALUE_LIST_FRAGMENT,\r\n FacetWithValueListFragment,\r\n findTranslation,\r\n getCustomFieldsDefaults,\r\n GetFacetDetailDocument,\r\n GetFacetDetailQuery,\r\n GetFacetDetailQueryVariables,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateFacetInput,\r\n UpdateFacetValueInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { SortOrder } from '@vendure/common/lib/generated-types';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { gql } from 'apollo-angular';\r\nimport { BehaviorSubject, combineLatest, EMPTY, forkJoin, Observable } from 'rxjs';\r\nimport { debounceTime, map, mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\nimport { CreateFacetValueDialogComponent } from '../create-facet-value-dialog/create-facet-value-dialog.component';\r\n\r\nexport const FACET_DETAIL_QUERY = gql`\r\n query GetFacetDetail($id: ID!, $facetValueListOptions: FacetValueListOptions) {\r\n facet(id: $id) {\r\n ...FacetWithValueList\r\n }\r\n }\r\n ${FACET_WITH_VALUE_LIST_FRAGMENT}\r\n`;\r\n\r\ntype ValueItem =\r\n | FacetWithValueListFragment['valueList']['items'][number]\r\n | { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-facet-detail',\r\n templateUrl: './facet-detail.component.html',\r\n styleUrls: ['./facet-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FacetDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetFacetDetailDocument, 'facet'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Facet');\r\n readonly customValueFields = this.getCustomFieldConfig('FacetValue');\r\n detailForm = this.formBuilder.group({\r\n facet: this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: '',\r\n visible: true,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n }),\r\n values: this.formBuilder.record<\r\n FormGroup<{\r\n id: FormControl<string>;\r\n name: FormControl<string>;\r\n code: FormControl<string>;\r\n customFields: FormGroup;\r\n }>\r\n >({}),\r\n });\r\n currentPage = 1;\r\n itemsPerPage = 10;\r\n totalItems = 0;\r\n filterControl = new FormControl('');\r\n values$ = new BehaviorSubject<ValueItem[]>([]);\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateFacet];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.filterControl.valueChanges\r\n .pipe(debounceTime(200), takeUntil(this.destroy$))\r\n .subscribe(filterTerm => {\r\n this.currentPage = 1;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, filterTerm);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['facet', 'code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n updateValueCode(currentCode: string, nameValue: string, valueId: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['values', valueId, 'code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n customValueFieldIsSet(index: number, name: string): boolean {\r\n return !!this.detailForm.get(['values', index, 'customFields', name]);\r\n }\r\n\r\n addFacetValue() {\r\n this.modalService\r\n .fromComponent(CreateFacetValueDialogComponent, {\r\n locals: {\r\n languageCode: this.languageCode,\r\n facetId: this.id,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (!result) {\r\n return EMPTY;\r\n } else {\r\n return this.dataService.facet.createFacetValues([result]);\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result.createFacetValues) {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'FacetValue',\r\n });\r\n this.currentPage = 1;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage);\r\n }\r\n });\r\n }\r\n\r\n create() {\r\n const facetForm = this.detailForm.get('facet') as (typeof this.detailForm)['controls']['facet'];\r\n if (!facetForm || !facetForm.dirty) {\r\n return;\r\n }\r\n const newFacet = this.getUpdatedFacet(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n isPrivate: false,\r\n languageCode: this.languageCode,\r\n name: '',\r\n code: '',\r\n translations: [],\r\n },\r\n facetForm,\r\n this.languageCode,\r\n ) as CreateFacetInput;\r\n this.dataService.facet.createFacet(newFacet).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Facet' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createFacet.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Facet',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const valuesFormRecord = this.detailForm.get(\r\n 'values',\r\n ) as (typeof this.detailForm)['controls']['values'];\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([facet, languageCode]) => {\r\n const facetForm = this.detailForm.get(\r\n 'facet',\r\n ) as (typeof this.detailForm)['controls']['facet'];\r\n const updateOperations: Array<Observable<any>> = [];\r\n\r\n if (facetForm && facetForm.dirty) {\r\n const updatedFacetInput = this.getUpdatedFacet(\r\n facet,\r\n facetForm,\r\n languageCode,\r\n ) as UpdateFacetInput;\r\n if (updatedFacetInput) {\r\n updateOperations.push(this.dataService.facet.updateFacet(updatedFacetInput));\r\n }\r\n }\r\n if (valuesFormRecord && valuesFormRecord.dirty) {\r\n const updatedValues = this.getUpdatedFacetValues(valuesFormRecord, languageCode);\r\n if (updatedValues.length) {\r\n updateOperations.push(this.dataService.facet.updateFacetValues(updatedValues));\r\n }\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Facet' });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Facet',\r\n });\r\n },\r\n );\r\n }\r\n\r\n deleteFacetValue(facetValueId: string) {\r\n this.showModalAndDelete(facetValueId)\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(facetValueId, response.message || '').pipe(\r\n map(r => r.result === DeletionResult.DELETED),\r\n );\r\n }\r\n }),\r\n switchMap(deleted =>\r\n deleted\r\n ? this.dataService.query(GetFacetDetailDocument, {\r\n id: this.id,\r\n }).single$\r\n : [],\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'FacetValue',\r\n });\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'FacetValue',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(facetValueId: string, message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-facet-value'),\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.facet.deleteFacetValues([facetValueId], !!message) : EMPTY,\r\n ),\r\n map(result => result.deleteFacetValues[0]),\r\n );\r\n }\r\n\r\n protected setCurrentPage(newPage: number) {\r\n this.currentPage = newPage;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n }\r\n\r\n protected setItemsPerPage(itemsPerPage: number) {\r\n this.itemsPerPage = itemsPerPage;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n }\r\n\r\n private fetchFacetValues(currentPage: number, itemsPerPage: number, filterTerm?: string | null) {\r\n this.dataService\r\n .query<GetFacetDetailQuery, GetFacetDetailQueryVariables>(FACET_DETAIL_QUERY, {\r\n id: this.id,\r\n facetValueListOptions: {\r\n take: itemsPerPage,\r\n skip: (currentPage - 1) * itemsPerPage,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n ...(filterTerm ? { filter: { name: { contains: filterTerm } } } : {}),\r\n },\r\n })\r\n .single$.subscribe(({ facet }) => {\r\n if (facet) {\r\n this.values$.next([...facet.valueList.items]);\r\n this.totalItems = facet.valueList.totalItems;\r\n this.setFacetValueFormValues(facet, this.languageCode);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the facet or current language.\r\n */\r\n protected setFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\r\n const currentTranslation = findTranslation(facet, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n facet: {\r\n code: facet.code,\r\n visible: !facet.isPrivate,\r\n name: currentTranslation?.name ?? '',\r\n },\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['facet', 'customFields']),\r\n facet,\r\n currentTranslation,\r\n );\r\n }\r\n this.values$.next([...facet.valueList.items]);\r\n this.totalItems = facet.valueList.totalItems;\r\n this.setFacetValueFormValues(facet, languageCode);\r\n }\r\n\r\n private setFacetValueFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\r\n const currentValuesFormGroup = this.detailForm.get('values') as FormRecord;\r\n facet.valueList.items.forEach(value => {\r\n const valueTranslation = findTranslation(value, languageCode);\r\n const group = {\r\n id: value.id,\r\n code: value.code,\r\n name: valueTranslation ? valueTranslation.name : '',\r\n };\r\n let valueControl = currentValuesFormGroup.get(value.id) as FormGroup;\r\n if (!valueControl) {\r\n valueControl = this.formBuilder.group(group);\r\n currentValuesFormGroup.addControl(value.id, valueControl);\r\n } else {\r\n valueControl.patchValue(group);\r\n }\r\n if (this.customValueFields.length) {\r\n let customValueFieldsGroup = valueControl.get(['customFields']) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (!customValueFieldsGroup) {\r\n customValueFieldsGroup = new UntypedFormGroup({});\r\n valueControl.addControl('customFields', customValueFieldsGroup);\r\n }\r\n\r\n if (customValueFieldsGroup) {\r\n for (const fieldDef of this.customValueFields) {\r\n const key = fieldDef.name;\r\n const fieldValue =\r\n fieldDef.type === 'localeString'\r\n ? (valueTranslation as any | undefined)?.customFields?.[key]\r\n : (value as any).customFields[key];\r\n const control = customValueFieldsGroup.get(key);\r\n if (control) {\r\n control.setValue(fieldValue);\r\n } else {\r\n customValueFieldsGroup.addControl(key, new UntypedFormControl(fieldValue));\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a facet and the value of the detailForm, this method creates an updated copy of the facet which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedFacet(\r\n facet: Omit<FacetWithValueListFragment, 'valueList'>,\r\n facetFormGroup: (typeof this.detailForm)['controls']['facet'],\r\n languageCode: LanguageCode,\r\n ): CreateFacetInput | UpdateFacetInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: facet,\r\n updatedFields: facetFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: facet.name || '',\r\n },\r\n });\r\n input.isPrivate = !facetFormGroup.value.visible;\r\n return input;\r\n }\r\n\r\n /**\r\n * Given an array of facet values and the values from the detailForm, this method creates a new array\r\n * which can be persisted to the API via an updateFacetValues mutation.\r\n */\r\n private getUpdatedFacetValues(\r\n valuesFormGroup: FormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateFacetValueInput[] {\r\n const dirtyValueValues = Object.values(valuesFormGroup.controls)\r\n .filter(c => c.dirty)\r\n .map(c => c.value);\r\n\r\n return dirtyValueValues\r\n .map((value, i) =>\r\n createUpdatedTranslatable({\r\n translatable: value,\r\n updatedFields: value,\r\n customFieldConfig: this.customValueFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: '',\r\n },\r\n }),\r\n )\r\n .filter(notNullOrUndefined);\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-detail\" />\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar formGroupName=\"facet\">\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.facet?.visible; else private\">{{\r\n 'catalog.public' | translate\r\n }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card formGroupName=\"facet\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Facet\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('facet.customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"facet-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card\r\n *ngIf=\"!(isNew$ | async)\"\r\n [title]=\"'catalog.facet-values' | translate\"\r\n [paddingX]=\"false\"\r\n >\r\n <ng-template vdrCardControls>\r\n <input\r\n type=\"text\"\r\n class=\"mr-3\"\r\n [formControl]=\"filterControl\"\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n </ng-template>\r\n <ng-container *ngIf=\"values$ | async as filteredValues\">\r\n <table class=\"facet-values-list table\" formArrayName=\"values\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>{{ 'common.code' | translate }}</th>\r\n <ng-container *ngIf=\"customValueFields.length\">\r\n <th>{{ 'common.custom-fields' | translate }}</th>\r\n </ng-container>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n class=\"facet-value\"\r\n *ngFor=\"\r\n let value of filteredValues\r\n | paginate\r\n : {\r\n currentPage: currentPage,\r\n itemsPerPage: itemsPerPage,\r\n totalItems: totalItems,\r\n };\r\n let i = index\r\n \"\r\n [formGroup]=\"detailForm.get(['values', value.id])\"\r\n >\r\n <td class=\"align-middle\">\r\n <vdr-entity-info [entity]=\"value\"></vdr-entity-info>\r\n </td>\r\n <td class=\"align-middle\">\r\n <input\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateValueCode(value.code, $event.target.value, value.id)\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <input type=\"text\" formControlName=\"code\" />\r\n </td>\r\n <td class=\"\" *ngIf=\"customValueFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"FacetValue\"\r\n [customFields]=\"customValueFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"\r\n detailForm.get(['values', value.id, 'customFields'])\r\n \"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteFacetValue(value.id)\"\r\n [disabled]=\"!(updatePermission | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"pagination-wrapper\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n <vdr-pagination-controls\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"setCurrentPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n </ng-container>\r\n <div>\r\n <button\r\n type=\"button\"\r\n class=\"button m-3\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n (click)=\"addFacetValue()\"\r\n >\r\n <clr-icon shape=\"add\"></clr-icon>\r\n {{ 'catalog.add-facet-value' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n currentChannelIsNotDefault,\r\n DataService,\r\n DuplicateEntityDialogComponent,\r\n getChannelCodeFromUserStatus,\r\n GetFacetListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n RemoveFacetsFromChannelMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY, of } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\nimport { FacetListComponent } from './facet-list.component';\r\n\r\nexport const deleteFacetsBulkAction = createBulkDeleteAction<ItemOf<GetFacetListQuery, 'facets'>>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteFacet) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n shouldRetryItem: (response, item) => !!response.message,\r\n bulkDelete: (dataService, ids, retrying) =>\r\n dataService.facet.deleteFacets(ids, retrying).pipe(map(res => res.deleteFacets)),\r\n});\r\n\r\nexport const assignFacetsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetFacetListQuery, 'facets'>\r\n>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateFacet),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, facetIds, channelIds) =>\r\n channelIds.map(channelId =>\r\n dataService.facet\r\n .assignFacetsToChannel({\r\n facetIds,\r\n channelId,\r\n })\r\n .pipe(map(res => res.assignFacetsToChannel)),\r\n ),\r\n});\r\n\r\nexport const removeFacetsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n RemoveFacetsFromChannelMutation['removeFacetsFromChannel'][number]\r\n>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteFacet),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, facetIds, channelId, retrying) =>\r\n dataService.facet\r\n .removeFacetsFromChannel({\r\n channelId: channelId,\r\n facetIds,\r\n force: retrying,\r\n })\r\n .pipe(map(res => res.removeFacetsFromChannel)),\r\n isErrorResult: result => (result.__typename === 'FacetInUseError' ? result.message : undefined),\r\n});\r\n\r\nexport const removeFacetsFromChannelBulkAction2: BulkAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n FacetListComponent\r\n> = {\r\n location: 'facet-list',\r\n label: _('catalog.remove-from-channel'),\r\n getTranslationVars: ({ injector }) => getChannelCodeFromUserStatus(injector.get(DataService)),\r\n icon: 'layers',\r\n iconClass: 'is-warning',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateFacet) ||\r\n userPermissions.includes(Permission.UpdateCatalog),\r\n isVisible: ({ injector }) => currentChannelIsNotDefault(injector.get(DataService)),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n\r\n const activeChannelId$ = dataService.client\r\n .userStatus()\r\n .mapSingle(({ userStatus }) => userStatus.activeChannelId);\r\n\r\n function showModalAndDelete(facetIds: string[], message?: string) {\r\n return modalService\r\n .dialog({\r\n title: _('catalog.remove-from-channel'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n size: message ? 'lg' : 'md',\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: message ? _('common.force-remove') : _('common.remove'),\r\n returnValue: true,\r\n },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(res =>\r\n res\r\n ? activeChannelId$.pipe(\r\n switchMap(activeChannelId =>\r\n activeChannelId\r\n ? dataService.facet.removeFacetsFromChannel({\r\n channelId: activeChannelId,\r\n facetIds,\r\n force: !!message,\r\n })\r\n : EMPTY,\r\n ),\r\n map(res2 => res2.removeFacetsFromChannel),\r\n )\r\n : EMPTY,\r\n ),\r\n );\r\n }\r\n\r\n showModalAndDelete(unique(selection.map(f => f.id)))\r\n .pipe(\r\n switchMap(result => {\r\n let removedCount = selection.length;\r\n const errors: string[] = [];\r\n const errorIds: string[] = [];\r\n let i = 0;\r\n for (const item of result) {\r\n if (item.__typename === 'FacetInUseError') {\r\n errors.push(item.message);\r\n errorIds.push(selection[i]?.id);\r\n removedCount--;\r\n }\r\n i++;\r\n }\r\n if (0 < errorIds.length) {\r\n return showModalAndDelete(errorIds, errors.join('\\n')).pipe(\r\n map(result2 => {\r\n const notRemovedCount = result2.filter(\r\n r => r.__typename === 'FacetInUseError',\r\n ).length;\r\n return selection.length - notRemovedCount;\r\n }),\r\n );\r\n } else {\r\n return of(removedCount);\r\n }\r\n }),\r\n switchMap(removedCount =>\r\n removedCount\r\n ? getChannelCodeFromUserStatus(dataService).then(({ channelCode }) => ({\r\n channelCode,\r\n removedCount,\r\n }))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(({ removedCount, channelCode }) => {\r\n if (removedCount) {\r\n hostComponent.refresh();\r\n clearSelection();\r\n notificationService.success(_('catalog.notify-remove-facets-from-channel-success'), {\r\n count: removedCount,\r\n channelCode,\r\n });\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const duplicateFacetsBulkAction: BulkAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n FacetListComponent\r\n> = {\r\n location: 'facet-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetFacetListQuery, 'facets'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Facet',\r\n title: _('catalog.duplicate-facets'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n FACET_WITH_VALUE_LIST_FRAGMENT,\r\n GetFacetListDocument,\r\n GetFacetListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const FACET_LIST_QUERY = gql`\r\n query GetFacetList($options: FacetListOptions, $facetValueListOptions: FacetValueListOptions) {\r\n facets(options: $options) {\r\n items {\r\n ...FacetWithValueList\r\n }\r\n totalItems\r\n }\r\n }\r\n ${FACET_WITH_VALUE_LIST_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-facet-list',\r\n templateUrl: './facet-list.component.html',\r\n styleUrls: ['./facet-list.component.scss'],\r\n})\r\nexport class FacetListComponent\r\n extends TypedBaseListComponent<typeof GetFacetListDocument, 'facets'>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n\r\n dataTableListId = 'facet-list';\r\n readonly customFields = this.getCustomFieldConfig('Facet');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'visibility',\r\n type: { kind: 'boolean' },\r\n label: _('common.visibility'),\r\n toFilterInput: value => ({\r\n isPrivate: { eq: !value },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'id' })\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(protected dataService: DataService) {\r\n super();\r\n super.configure({\r\n document: GetFacetListDocument,\r\n getItems: data => data.facets,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n facetValueListOptions: {\r\n take: 100,\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n toggleDisplayLimit(facet: ItemOf<GetFacetListQuery, 'facets'>) {\r\n if (this.displayLimit[facet.id] === facet.valueList.items.length) {\r\n this.displayLimit[facet.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[facet.id] = facet.valueList.items.length;\r\n }\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-facet' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"facet-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-facet=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', facet.id]\"\r\n ><span>{{ facet.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-facet=\"item\">\r\n <vdr-chip *ngIf=\"facet.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!facet.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.values' | translate\" id=\"values\">\r\n <ng-template let-facet=\"item\">\r\n <div class=\"facet-values-list\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let value of facet.valueList.items | slice : 0 : displayLimit[facet.id] || 3\"\r\n [facetValue]=\"value\"\r\n [removable]=\"false\"\r\n [displayFacetName]=\"false\"\r\n ></vdr-facet-value-chip>\r\n <vdr-chip *ngIf=\"displayLimit[facet.id] < facet.valueList.totalItems && (displayLimit[facet.id] || 0) === facet.valueList.items.length\">\r\n ... + {{ facet.valueList.totalItems - facet.valueList.items.length }}\r\n </vdr-chip>\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"facet.valueList.items.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(facet)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[facet.id] || 0) < facet.valueList.items.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ facet.valueList.totalItems - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { Component, ElementRef, EventEmitter, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n GetStockLocationListDocument,\r\n GetStockLocationListQuery,\r\n ItemOf,\r\n} from '@vendure/admin-ui/core';\r\nimport { generateAllCombinations } from '@vendure/common/lib/shared-utils';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport { OptionValueInputComponent } from '../option-value-input/option-value-input.component';\r\n\r\nconst DEFAULT_VARIANT_CODE = '__DEFAULT_VARIANT__';\r\nexport type CreateVariantValues = {\r\n optionValues: string[];\r\n enabled: boolean;\r\n sku: string;\r\n price: number;\r\n stock: number;\r\n};\r\nexport type CreateProductVariantsConfig = {\r\n groups: Array<{ name: string; values: string[] }>;\r\n variants: CreateVariantValues[];\r\n stockLocationId: string;\r\n};\r\n\r\n@Component({\r\n selector: 'vdr-generate-product-variants',\r\n templateUrl: './generate-product-variants.component.html',\r\n styleUrls: ['./generate-product-variants.component.scss'],\r\n})\r\nexport class GenerateProductVariantsComponent implements OnInit {\r\n @Output() variantsChange = new EventEmitter<CreateProductVariantsConfig>();\r\n @ViewChildren('optionGroupName', { read: ElementRef }) groupNameInputs: QueryList<ElementRef>;\r\n optionGroups: Array<{ name: string; values: Array<{ name: string; locked: boolean }> }> = [];\r\n currencyCode: CurrencyCode;\r\n variants: Array<{ id: string; values: string[] }>;\r\n variantFormValues: {\r\n [id: string]: FormGroup<{\r\n optionValues: FormControl<string[]>;\r\n enabled: FormControl<boolean>;\r\n price: FormControl<number>;\r\n sku: FormControl<string>;\r\n stock: FormControl<number>;\r\n }>;\r\n } = {};\r\n stockLocations$: Observable<Array<ItemOf<GetStockLocationListQuery, 'stockLocations'>>>;\r\n selectedStockLocationId: string | null = null;\r\n constructor(\r\n private dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.dataService.settings.getActiveChannel().single$.subscribe(data => {\r\n this.currencyCode = data.activeChannel.defaultCurrencyCode;\r\n });\r\n this.stockLocations$ = this.dataService\r\n .query(GetStockLocationListDocument, {\r\n options: {\r\n take: 999,\r\n },\r\n })\r\n .refetchOnChannelChange()\r\n .mapStream(({ stockLocations }) => stockLocations.items)\r\n .pipe(\r\n tap(items => {\r\n if (items.length) {\r\n this.selectedStockLocationId = items[0].id;\r\n this.onFormChange();\r\n }\r\n }),\r\n );\r\n\r\n this.generateVariants();\r\n }\r\n\r\n addOption() {\r\n this.optionGroups.push({ name: '', values: [] });\r\n const index = this.optionGroups.length - 1;\r\n setTimeout(() => {\r\n const input = this.groupNameInputs.get(index)?.nativeElement;\r\n input?.focus();\r\n });\r\n }\r\n\r\n removeOption(name: string) {\r\n this.optionGroups = this.optionGroups.filter(g => g.name !== name);\r\n this.generateVariants();\r\n }\r\n\r\n generateVariants() {\r\n const totalValuesCount = this.optionGroups.reduce((sum, group) => sum + group.values.length, 0);\r\n const groups = totalValuesCount\r\n ? this.optionGroups.map(g => g.values.map(v => v.name))\r\n : [[DEFAULT_VARIANT_CODE]];\r\n this.variants = generateAllCombinations(groups).map(values => ({ id: values.join('|'), values }));\r\n\r\n this.variants.forEach((variant, index) => {\r\n if (!this.variantFormValues[variant.id]) {\r\n const formGroup = this.formBuilder.nonNullable.group({\r\n optionValues: [variant.values],\r\n enabled: true as boolean,\r\n price: this.copyFromDefault(variant.id, 'price', 0),\r\n sku: this.copyFromDefault(variant.id, 'sku', ''),\r\n stock: this.copyFromDefault(variant.id, 'stock', 0),\r\n });\r\n formGroup.valueChanges.subscribe(() => this.onFormChange());\r\n if (index === 0) {\r\n formGroup.get('price')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('price', formGroup.get('price'));\r\n });\r\n formGroup.get('sku')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('sku', formGroup.get('sku'));\r\n });\r\n formGroup.get('stock')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('stock', formGroup.get('stock'));\r\n });\r\n }\r\n this.variantFormValues[variant.id] = formGroup;\r\n }\r\n });\r\n this.onFormChange();\r\n }\r\n\r\n trackByFn(index: number, variant: { name: string; values: string[] }) {\r\n return variant.values.join('|');\r\n }\r\n\r\n handleEnter(event: KeyboardEvent, optionValueInputComponent: OptionValueInputComponent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n optionValueInputComponent.focus();\r\n }\r\n\r\n copyValuesToPristine(field: 'price' | 'sku' | 'stock', formControl: AbstractControl | null) {\r\n if (!formControl) {\r\n return;\r\n }\r\n Object.values(this.variantFormValues).forEach(formGroup => {\r\n const correspondingFormControl = formGroup.get(field) as FormControl;\r\n if (correspondingFormControl && correspondingFormControl.pristine) {\r\n correspondingFormControl.setValue(formControl.value, { emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n onFormChange() {\r\n const variantsToCreate = this.variants\r\n .map(v => this.variantFormValues[v.id].value as CreateVariantValues)\r\n .filter(v => v.enabled);\r\n this.variantsChange.emit({\r\n groups: this.optionGroups.map(og => ({ name: og.name, values: og.values.map(v => v.name) })),\r\n variants: variantsToCreate,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockLocationId: this.selectedStockLocationId!,\r\n });\r\n }\r\n\r\n private copyFromDefault<T extends keyof CreateVariantValues>(\r\n variantId: string,\r\n prop: T,\r\n value: CreateVariantValues[T],\r\n ): CreateVariantValues[T] {\r\n return variantId !== DEFAULT_VARIANT_CODE\r\n ? (this.variantFormValues[DEFAULT_VARIANT_CODE].get(prop)?.value as CreateVariantValues[T])\r\n : value;\r\n }\r\n}\r\n","<div *ngFor=\"let group of optionGroups\" class=\"option-groups\">\r\n <div class=\"name\">\r\n <label>{{ 'catalog.option' | translate }}</label>\r\n <input\r\n #optionGroupName\r\n placeholder=\"e.g. Size\"\r\n clrInput\r\n [(ngModel)]=\"group.name\"\r\n name=\"name\"\r\n required\r\n (keydown.enter)=\"handleEnter($event, optionValueInputComponent)\"\r\n />\r\n </div>\r\n <div class=\"values\">\r\n <label>{{ 'catalog.option-values' | translate }}</label>\r\n <vdr-option-value-input\r\n #optionValueInputComponent\r\n [(ngModel)]=\"group.values\"\r\n (ngModelChange)=\"generateVariants()\"\r\n (edit)=\"generateVariants()\"\r\n [groupName]=\"group.name\"\r\n [disabled]=\"group.name === ''\"\r\n ></vdr-option-value-input>\r\n </div>\r\n <div class=\"remove-group\">\r\n <button\r\n class=\"button-small mt-2\"\r\n [title]=\"'catalog.remove-option' | translate\"\r\n (click)=\"removeOption(group.name)\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n</div>\r\n<button class=\"button mb-2\" (click)=\"addOption()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-option' | translate }}\r\n</button>\r\n\r\n<ng-container *ngIf=\"stockLocations$ | async as stockLocations\">\r\n <clr-alert *ngIf=\"stockLocations.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.no-stock-locations-available-on-current-channel' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <div class=\"form-grid mb-2\">\r\n <vdr-form-field *ngIf=\"stockLocations.length\" [label]=\"'catalog.add-stock-to-location' | translate\">\r\n <select [(ngModel)]=\"selectedStockLocationId\">\r\n <option *ngFor=\"let location of stockLocations\" [value]=\"location.id\">\r\n {{ location.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n\r\n <div class=\"variants-preview\" *ngIf=\"0 < stockLocations.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"1 < variants.length\">{{ 'common.create' | translate }}</th>\r\n <th *ngIf=\"1 < variants.length\">{{ 'catalog.variant' | translate }}</th>\r\n <th>{{ 'catalog.sku' | translate }}</th>\r\n <th>{{ 'catalog.price' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let variant of variants; trackBy: trackByFn\"\r\n [class.disabled]=\"!variantFormValues[variant.id].value.enabled === false\"\r\n [formGroup]=\"variantFormValues[variant.id]\"\r\n >\r\n <td *ngIf=\"1 < variants.length\">\r\n <input type=\"checkbox\" formControlName=\"enabled\" clrCheckbox />\r\n </td>\r\n <td *ngIf=\"1 < variants.length\">\r\n {{ variant.values.join(' ') }}\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <input type=\"text\" formControlName=\"sku\" [placeholder]=\"'catalog.sku' | translate\" />\r\n </vdr-form-field>\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <vdr-currency-input\r\n formControlName=\"price\"\r\n [currencyCode]=\"currencyCode\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <input type=\"number\" formControlName=\"stock\" min=\"0\" step=\"1\" />\r\n </vdr-form-field>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n</ng-container>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataTableLocationId,\r\n LogicalOperator,\r\n ProductVariantFilterParameter,\r\n ProductVariantListQueryDocument,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-product-variant-list',\r\n templateUrl: './product-variant-list.component.html',\r\n styleUrls: ['./product-variant-list.component.scss'],\r\n})\r\nexport class ProductVariantListComponent\r\n extends TypedBaseListComponent<typeof ProductVariantListQueryDocument, 'productVariants'>\r\n implements OnInit\r\n{\r\n @Input() productId?: string;\r\n @Input() hideLanguageSelect = false;\r\n @Input() dataTableId: DataTableLocationId | undefined;\r\n readonly customFields = this.getCustomFieldConfig('ProductVariant');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n },\r\n {\r\n name: 'sku',\r\n type: { kind: 'text' },\r\n label: _('catalog.sku'),\r\n filterField: 'sku',\r\n },\r\n {\r\n name: 'price',\r\n type: { kind: 'number', inputType: 'currency' },\r\n label: _('common.price'),\r\n filterField: 'price',\r\n },\r\n {\r\n name: 'priceWithTax',\r\n type: { kind: 'number', inputType: 'currency' },\r\n label: _('common.price-with-tax'),\r\n filterField: 'priceWithTax',\r\n },\r\n ])\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'sku' },\r\n { name: 'price' },\r\n { name: 'priceWithTax' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n this.configure({\r\n document: ProductVariantListQueryDocument,\r\n getItems: data => data.productVariants,\r\n setVariables: (skip, take) => {\r\n const searchTerm = this.searchTermControl.value;\r\n const filterParam: ProductVariantFilterParameter = { _and: [] };\r\n const filterInput = this.filters.createFilterInput();\r\n if (Object.keys(filterInput).length) {\r\n filterParam._and?.push(filterInput);\r\n }\r\n if (searchTerm) {\r\n filterParam._and?.push({\r\n _or: [\r\n {\r\n name: { contains: searchTerm },\r\n },\r\n {\r\n sku: { contains: searchTerm },\r\n },\r\n ],\r\n });\r\n }\r\n if (this.productId) {\r\n filterParam._and?.push({\r\n productId: {\r\n eq: this.productId,\r\n },\r\n });\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: filterParam,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block *ngIf=\"!hideLanguageSelect\">\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableId || 'product-variant-list'\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"product-variant-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-variant=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"variant.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-variant=\"item\">\r\n <a\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/catalog/products', variant.productId, 'variants', variant.id]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [sort]=\"sorts.get('sku')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip *ngIf=\"variant.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!variant.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.price' | translate\" id=\"price\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('price')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\" [sort]=\"sorts.get('priceWithTax')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n\r\n <vdr-dt2-column [heading]=\"'catalog.stock-on-hand' | translate\" id=\"stock-on-hand\" [hiddenByDefault]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip *ngFor=\"let stockLevel of variant.stockLevels\" [title]=\"stockLevel.stockLocation?.name\">\r\n <div class=\"flex center\">\r\n <div>\r\n {{ stockLevel.stockOnHand\r\n }}<span class=\"ml-1\" *ngIf=\"stockLevel.stockAllocated\"\r\n >({{ stockLevel.stockAllocated }} allocated)</span\r\n >\r\n </div>\r\n </div>\r\n </vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let field of customFields\" [customField]=\"field\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n CreateProductInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n getChannelCodeFromUserStatus,\r\n getCustomFieldsDefaults,\r\n GetProductDetailDocument,\r\n GetProductDetailQuery,\r\n GetProductWithVariantsQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n PRODUCT_DETAIL_FRAGMENT,\r\n ProductDetailFragment,\r\n ProductVariantFragment,\r\n TypedBaseDetailComponent,\r\n unicodePatternValidator,\r\n UpdateProductInput,\r\n UpdateProductMutation,\r\n UpdateProductVariantInput,\r\n UpdateProductVariantsMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, concat, EMPTY, from, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, mergeMap, shareReplay, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { CreateProductVariantsConfig } from '../generate-product-variants/generate-product-variants.component';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\nexport const GET_PRODUCT_DETAIL = gql`\r\n query GetProductDetail($id: ID!) {\r\n product(id: $id) {\r\n ...ProductDetail\r\n }\r\n }\r\n ${PRODUCT_DETAIL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-product-detail2',\r\n templateUrl: './product-detail.component.html',\r\n styleUrls: ['./product-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetProductDetailDocument, 'product'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Product');\r\n detailForm = this.formBuilder.group({\r\n enabled: true,\r\n name: ['', Validators.required],\r\n autoUpdateVariantNames: true,\r\n slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/)],\r\n description: '',\r\n facetValueIds: [[] as string[]],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n assetChanges: SelectedAssets = {};\r\n productChannels$: Observable<ProductDetailFragment['channels']>;\r\n facetValues$: Observable<ProductDetailFragment['facetValues']>;\r\n createVariantsConfig: CreateProductVariantsConfig = { groups: [], variants: [], stockLocationId: '' };\r\n public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n\r\n constructor(\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: FormBuilder,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n\r\n const productFacetValues$ = this.isNew$.pipe(\r\n switchMap(isNew => {\r\n return isNew ? of([]) : this.entity$.pipe(map(product => product.facetValues));\r\n }),\r\n );\r\n const productGroup = this.detailForm;\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const formFacetValueIdChanges$ = productGroup.get('facetValueIds')!.valueChanges.pipe(\r\n distinctUntilChanged(),\r\n switchMap(ids =>\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: ids } } })\r\n .mapSingle(({ facetValues }) => facetValues.items),\r\n ),\r\n shareReplay(1),\r\n );\r\n this.facetValues$ = concat(\r\n productFacetValues$.pipe(take(1)),\r\n productFacetValues$.pipe(switchMap(() => formFacetValueIdChanges$)),\r\n );\r\n this.productChannels$ = this.entity$.pipe(map(p => p.channels));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n\r\n assignToChannel() {\r\n this.productChannels$\r\n .pipe(\r\n take(1),\r\n switchMap(channels =>\r\n this.modalService.fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: [this.id],\r\n currentChannelIds: channels.map(c => c.id),\r\n },\r\n }),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n\r\n removeFromChannel(channelId: string) {\r\n from(getChannelCodeFromUserStatus(this.dataService, channelId))\r\n .pipe(\r\n switchMap(({ channelCode }) =>\r\n this.modalService.dialog({\r\n title: _('catalog.remove-product-from-channel'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: _('catalog.remove-from-channel'),\r\n translationVars: { channelCode },\r\n returnValue: true,\r\n },\r\n ],\r\n }),\r\n ),\r\n switchMap(response =>\r\n response\r\n ? this.dataService.product.removeProductsFromChannel({\r\n channelId,\r\n productIds: [this.id],\r\n })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('catalog.notify-remove-product-from-channel-success'));\r\n },\r\n err => {\r\n this.notificationService.error(_('catalog.notify-remove-product-from-channel-error'));\r\n },\r\n );\r\n }\r\n\r\n assignVariantToChannel(variant: ProductVariantFragment) {\r\n return this.modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: [this.id],\r\n productVariantIds: [variant.id],\r\n currentChannelIds: variant.channels.map(c => c.id),\r\n },\r\n })\r\n .subscribe();\r\n }\r\n\r\n removeVariantFromChannel({ channelId, variant }: { channelId: string; variant: ProductVariantFragment }) {\r\n from(getChannelCodeFromUserStatus(this.dataService, channelId))\r\n .pipe(\r\n switchMap(({ channelCode }) =>\r\n this.modalService.dialog({\r\n title: _('catalog.remove-product-variant-from-channel'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: _('catalog.remove-from-channel'),\r\n translationVars: { channelCode },\r\n returnValue: true,\r\n },\r\n ],\r\n }),\r\n ),\r\n switchMap(response =>\r\n response\r\n ? this.dataService.product.removeVariantsFromChannel({\r\n channelId,\r\n productVariantIds: [variant.id],\r\n })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('catalog.notify-remove-variant-from-channel-success'));\r\n },\r\n err => {\r\n this.notificationService.error(_('catalog.notify-remove-variant-from-channel-error'));\r\n },\r\n );\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n /**\r\n * If creating a new product, automatically generate the slug based on the product name.\r\n */\r\n updateSlug(nameValue: string) {\r\n const slugControl = this.detailForm.get('slug');\r\n const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\r\n const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\r\n if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\r\n slugControl.setValue(normalizeString(`${nameValue}`, '-'));\r\n }\r\n }\r\n\r\n selectProductFacetValue() {\r\n this.displayFacetValueModal().subscribe(facetValueIds => {\r\n if (facetValueIds) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n removeProductFacetValue(facetValueId: string) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n\r\n private displayFacetValueModal(): Observable<string[] | undefined> {\r\n return this.modalService\r\n .fromComponent(ApplyFacetDialogComponent, {\r\n size: 'md',\r\n closable: true,\r\n })\r\n .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\r\n }\r\n\r\n create() {\r\n const productGroup = this.detailForm;\r\n if (!productGroup.dirty) {\r\n return;\r\n }\r\n\r\n const newProduct = this.getUpdatedProduct(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n enabled: true,\r\n languageCode: this.languageCode,\r\n name: '',\r\n slug: '',\r\n featuredAsset: null,\r\n assets: [],\r\n description: '',\r\n translations: [],\r\n optionGroups: [],\r\n facetValues: [],\r\n channels: [],\r\n },\r\n productGroup as UntypedFormGroup,\r\n this.languageCode,\r\n ) as CreateProductInput;\r\n this.productDetailService\r\n .createProductWithVariants(newProduct, this.createVariantsConfig, this.languageCode)\r\n .subscribe(\r\n ({ createProductVariants, productId }) => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Product',\r\n });\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.router.navigate(['../', productId], { relativeTo: this.route });\r\n },\r\n err => {\r\n // eslint-disable-next-line no-console\r\n console.error(err);\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([product, languageCode]) => {\r\n const productGroup = this.detailForm;\r\n let productInput: UpdateProductInput | undefined;\r\n let variantsInput: UpdateProductVariantInput[] | undefined;\r\n\r\n if (productGroup.dirty || this.assetsChanged()) {\r\n productInput = this.getUpdatedProduct(\r\n product,\r\n productGroup as UntypedFormGroup,\r\n languageCode,\r\n ) as UpdateProductInput;\r\n }\r\n\r\n return this.productDetailService.updateProduct({\r\n product,\r\n languageCode,\r\n autoUpdate: this.detailForm.get(['autoUpdateVariantNames'])?.value ?? false,\r\n productInput,\r\n variantsInput,\r\n });\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n this.updateSlugAfterSave(result);\r\n this.detailForm.markAsPristine();\r\n this.assetChanges = {};\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Product',\r\n });\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the product or current language.\r\n */\r\n protected setFormValues(\r\n product: NonNullable<GetProductWithVariantsQuery['product']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n const currentTranslation = findTranslation(product, languageCode);\r\n this.detailForm.patchValue({\r\n enabled: product.enabled,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n slug: currentTranslation ? currentTranslation.slug : '',\r\n description: currentTranslation ? currentTranslation.description : '',\r\n facetValueIds: product.facetValues.map(fv => fv.id),\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n product,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a product and the value of the detailForm, this method creates an updated copy of the product which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedProduct(\r\n product: NonNullable<GetProductDetailQuery['product']>,\r\n productFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductInput | CreateProductInput {\r\n const updatedProduct = createUpdatedTranslatable({\r\n translatable: product,\r\n updatedFields: productFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: product.name || '',\r\n slug: product.slug || '',\r\n description: product.description || '',\r\n },\r\n });\r\n return {\r\n ...updatedProduct,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n facetValueIds: productFormGroup.controls.facetValueIds.dirty\r\n ? productFormGroup.value.facetValueIds\r\n : undefined,\r\n } as UpdateProductInput | CreateProductInput;\r\n }\r\n\r\n /**\r\n * The server may alter the slug value in order to normalize and ensure uniqueness upon saving.\r\n */\r\n private updateSlugAfterSave(results: Array<UpdateProductMutation | UpdateProductVariantsMutation>) {\r\n const firstResult = results[0];\r\n const slugControl = this.detailForm.get(['product', 'slug']);\r\n\r\n function isUpdateMutation(input: any): input is UpdateProductMutation {\r\n return input.hasOwnProperty('updateProduct');\r\n }\r\n\r\n if (slugControl && isUpdateMutation(firstResult)) {\r\n slugControl.setValue(firstResult.updateProduct.slug, { emitEvent: false });\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-flex-row\"></div>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine || createVariantsConfig.variants.length === 0\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermissions\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"product-detail\"></vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermissions\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <vdr-card *vdrIfMultichannel [title]=\"'common.channels' | translate\">\r\n <vdr-form-item *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <div class=\"mb-2\">\r\n <ng-container *ngFor=\"let channel of productChannels$ | async\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n (iconClick)=\"removeFromChannel(channel.id)\"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n </div>\r\n <button class=\"button-small\" (click)=\"assignToChannel()\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'common.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </vdr-form-item>\r\n </vdr-card>\r\n </ng-container>\r\n <vdr-card *ngIf=\"entity?.optionGroups.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let optionGroup of entity?.optionGroups | sort : 'id'\"\r\n [colorFrom]=\"optionGroup.code\"\r\n [invert]=\"true\"\r\n >\r\n {{ optionGroup.name }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a [routerLink]=\"['options']\" class=\"button-small mt-2\" *vdrIfPermissions=\"updatePermissions\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeProductFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectProductFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <div>\r\n <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <div *ngIf=\"(isNew$ | async) === false && detailForm.get(['name'])?.dirty\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n formControlName=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Product\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || entity?.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || entity?.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </vdr-card>\r\n\r\n <vdr-card [title]=\"'catalog.product-variants' | translate\" [paddingX]=\"isNew$ | async\">\r\n <div *ngIf=\"isNew$ | async; else variantList\">\r\n <vdr-generate-product-variants\r\n (variantsChange)=\"createVariantsConfig = $event\"\r\n ></vdr-generate-product-variants>\r\n </div>\r\n <ng-template #variantList>\r\n <vdr-product-variant-list\r\n [productId]=\"this.id\"\r\n dataTableId=\"product-detail-variants-list\"\r\n [hideLanguageSelect]=\"true\"\r\n ></vdr-product-variant-list>\r\n </ng-template>\r\n <div class=\"mx-3\" *ngIf=\"(isNew$ | async) === false\">\r\n <a class=\"button\" [routerLink]=\"['manage-variants']\">\r\n <clr-icon shape=\"add-text\"></clr-icon>\r\n {{ 'catalog.manage-variants' | translate }}</a\r\n >\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DeletionResult,\r\n DuplicateEntityDialogComponent,\r\n GetProductListQuery,\r\n isMultiChannel,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\n\r\nimport { ProductListComponent } from './product-list.component';\r\n\r\nexport const deleteProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.delete'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteProduct) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .dialog({\r\n title: _('catalog.confirm-bulk-delete-products'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response ? dataService.product.deleteProducts(unique(selection.map(p => p.id))) : EMPTY,\r\n ),\r\n )\r\n .subscribe(result => {\r\n let deleted = 0;\r\n const errors: string[] = [];\r\n for (const item of result.deleteProducts) {\r\n if (item.result === DeletionResult.DELETED) {\r\n deleted++;\r\n } else if (item.message) {\r\n errors.push(item.message);\r\n }\r\n }\r\n if (0 < deleted) {\r\n notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\r\n count: deleted,\r\n });\r\n }\r\n if (0 < errors.length) {\r\n notificationService.error(errors.join('\\n'));\r\n }\r\n hostComponent.refresh();\r\n clearSelection();\r\n });\r\n },\r\n};\r\n\r\nexport const assignProductsToChannelBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.assign-to-channel'),\r\n icon: 'layers',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: unique(selection.map(p => p.id)),\r\n currentChannelIds: [],\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const removeProductsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetProductListQuery, 'products'>\r\n>({\r\n location: 'product-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, productIds, channelId) =>\r\n dataService.product\r\n .removeProductsFromChannel({\r\n channelId: channelId,\r\n productIds,\r\n })\r\n .pipe(map(res => res.removeProductsFromChannel)),\r\n});\r\n\r\nexport const assignFacetValuesToProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('catalog.edit-facet-values'),\r\n icon: 'tag',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const notificationService = injector.get(NotificationService);\r\n const mode = 'product';\r\n const ids = unique(selection.map(p => p.id));\r\n return modalService\r\n .fromComponent(BulkAddFacetValuesDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n mode,\r\n ids,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n notificationService.success(_('common.notify-bulk-update-success'), {\r\n count: selection.length,\r\n entity: mode === 'product' ? 'Products' : 'ProductVariants',\r\n });\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const duplicateProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetProductListQuery, 'products'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Product',\r\n title: _('catalog.duplicate-products'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n FacetValueFormInputComponent,\r\n JobQueueService,\r\n JobState,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n ProductListQueryDocument,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, lastValueFrom } from 'rxjs';\r\nimport { delay, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-products-list',\r\n templateUrl: './product-list.component.html',\r\n styleUrls: ['./product-list.component.scss'],\r\n})\r\nexport class ProductListComponent\r\n extends TypedBaseListComponent<typeof ProductListQueryDocument, 'products'>\r\n implements OnInit\r\n{\r\n pendingSearchIndexUpdates = 0;\r\n dataTableListId = 'product-list';\r\n pageLocationId = 'product-list';\r\n readonly customFields = this.getCustomFieldConfig('Product');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n },\r\n {\r\n name: 'slug',\r\n type: { kind: 'text' },\r\n label: _('common.slug'),\r\n filterField: 'slug',\r\n },\r\n ])\r\n .addFilter({\r\n name: 'facetValues',\r\n type: {\r\n kind: 'custom',\r\n component: FacetValueFormInputComponent,\r\n serializeValue: value => value.map(v => v.id).join(','),\r\n deserializeValue: value => value.split(',').map(id => ({ id })),\r\n getLabel: value => {\r\n if (value.length === 0) {\r\n return '';\r\n }\r\n if (value[0].name) {\r\n return value.map(v => v.name).join(', ');\r\n } else {\r\n return lastValueFrom(\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: value.map(v => v.id) } } })\r\n .mapSingle(({ facetValues }) =>\r\n facetValues.items.map(fv => fv.name).join(', '),\r\n ),\r\n );\r\n }\r\n },\r\n },\r\n label: _('catalog.facet-values'),\r\n toFilterInput: (value: any[]) => ({\r\n facetValueId: {\r\n in: value.map(v => v.id),\r\n },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'slug' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private jobQueueService: JobQueueService,\r\n ) {\r\n super();\r\n this.configure({\r\n document: ProductListQueryDocument,\r\n getItems: data => data.products,\r\n setVariables: (skip, take) => {\r\n const searchTerm = this.searchTermControl.value;\r\n let filterInput = this.filters.createFilterInput();\r\n if (searchTerm) {\r\n filterInput = {\r\n name: {\r\n contains: searchTerm,\r\n },\r\n sku: {\r\n contains: searchTerm,\r\n },\r\n };\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(filterInput ?? {}),\r\n },\r\n filterOperator: searchTerm ? LogicalOperator.OR : LogicalOperator.AND,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n\r\n rebuildSearchIndex() {\r\n this.dataService.product.reindex().subscribe(({ reindex }) => {\r\n this.notificationService.info(_('catalog.reindexing'));\r\n this.jobQueueService.addJob(reindex.id, job => {\r\n if (job.state === JobState.COMPLETED) {\r\n const time = new Intl.NumberFormat().format(job.duration || 0);\r\n this.notificationService.success(_('catalog.reindex-successful'), {\r\n count: job.result.indexedItemCount,\r\n time,\r\n });\r\n this.refresh();\r\n } else {\r\n this.notificationService.error(_('catalog.reindex-error'));\r\n }\r\n });\r\n });\r\n }\r\n\r\n deleteProduct(productId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response => (response ? this.dataService.product.deleteProduct(productId) : EMPTY)),\r\n // Short delay to allow the product to be removed from the search index before\r\n // refreshing.\r\n delay(500),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Product',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items [locationId]=\"pageLocationId\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary mr-1\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-product' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu [alwaysShow]=\"true\" [locationId]=\"pageLocationId\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\r\n <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"dataTableListId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-product=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-product=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\r\n ><span>{{ product.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-product=\"item\">\r\n <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\" id=\"number-of-variants\">\r\n <ng-template let-product=\"item\">\r\n {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-variant-price-detail',\r\n templateUrl: './variant-price-detail.component.html',\r\n styleUrls: ['./variant-price-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariantPriceDetailComponent implements OnInit, OnChanges {\r\n @Input() priceIncludesTax: boolean;\r\n @Input() price: number;\r\n @Input() currencyCode: string;\r\n @Input() taxCategoryId: string;\r\n\r\n grossPrice$: Observable<number>;\r\n taxRate$: Observable<number>;\r\n\r\n private priceChange$ = new BehaviorSubject<number>(0);\r\n private taxCategoryIdChange$ = new BehaviorSubject<string>('');\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n const taxRates$ = this.dataService.settings\r\n .getTaxRatesSimple(999, 0, 'cache-first')\r\n .mapStream(data => data.taxRates.items);\r\n const activeChannel$ = this.dataService.settings\r\n .getActiveChannel('cache-first')\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.taxRate$ = combineLatest(activeChannel$, taxRates$, this.taxCategoryIdChange$).pipe(\r\n map(([channel, taxRates, taxCategoryId]) => {\r\n const defaultTaxZone = channel.defaultTaxZone;\r\n if (!defaultTaxZone) {\r\n return 0;\r\n }\r\n const applicableRate = taxRates.find(\r\n taxRate => taxRate.zone.id === defaultTaxZone.id && taxRate.category.id === taxCategoryId,\r\n );\r\n\r\n if (!applicableRate) {\r\n return 0;\r\n }\r\n return applicableRate.value;\r\n }),\r\n );\r\n\r\n this.grossPrice$ = combineLatest(this.taxRate$, this.priceChange$).pipe(\r\n map(([taxRate, price]) => Math.round(price * ((100 + taxRate) / 100))),\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('price' in changes) {\r\n this.priceChange$.next(changes.price.currentValue);\r\n }\r\n if ('taxCategoryId' in changes) {\r\n this.taxCategoryIdChange$.next(changes.taxCategoryId.currentValue);\r\n }\r\n }\r\n}\r\n","<label class=\"clr-control-label\">{{ 'catalog.taxes' | translate }}</label>\r\n<div *ngIf=\"priceIncludesTax\" class=\"value\">\r\n {{ 'catalog.price-includes-tax-at' | translate: { rate: taxRate$ | async } }}\r\n</div>\r\n<div *ngIf=\"!priceIncludesTax\" class=\"value\">\r\n {{\r\n 'catalog.price-with-tax-in-default-zone'\r\n | translate: { price: grossPrice$ | async | localeCurrency: currencyCode, rate: taxRate$ | async }\r\n }}\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n ProductVariantDetailQueryProductVariantFragmentFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-variant-price-strategy-detail',\r\n templateUrl: './variant-price-strategy-detail.component.html',\r\n styleUrls: ['./variant-price-strategy-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariantPriceStrategyDetailComponent {\r\n @Input() channelPriceIncludesTax: boolean;\r\n @Input() variant: ProductVariantDetailQueryProductVariantFragmentFragment;\r\n @Input() channelDefaultCurrencyCode: CurrencyCode;\r\n\r\n calculatedPriceDiffersFromInputPrice(): boolean {\r\n const defaultPrice =\r\n this.variant.prices.find(p => p.currencyCode === this.channelDefaultCurrencyCode) ??\r\n this.variant.prices[0];\r\n if (!defaultPrice) {\r\n return false;\r\n }\r\n if (this.channelPriceIncludesTax) {\r\n return this.variant.priceWithTax !== defaultPrice.price;\r\n } else {\r\n return this.variant.price !== defaultPrice.price;\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"calculatedPriceDiffersFromInputPrice()\" class=\"price-strategy-detail\">\r\n <vdr-form-item\r\n [label]=\"'catalog.calculated-price' | translate\"\r\n [tooltip]=\"'catalog.calculated-price-tooltip' | translate\"\r\n for=\"price\"\r\n >\r\n </vdr-form-item>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-item [label]=\"'common.price' | translate\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </vdr-form-item>\r\n <vdr-form-item [label]=\"'common.price-with-tax' | translate\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </vdr-form-item>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n DataService,\r\n GetProductVariantsQuickJumpDocument,\r\n GetProductVariantsQuickJumpQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\n\r\nconst GET_PRODUCT_VARIANTS_QUICK_JUMP = gql`\r\n query GetProductVariantsQuickJump($id: ID!) {\r\n product(id: $id) {\r\n id\r\n variants {\r\n id\r\n name\r\n sku\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-product-variant-quick-jump',\r\n templateUrl: './product-variant-quick-jump.component.html',\r\n styleUrls: ['./product-variant-quick-jump.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantQuickJumpComponent implements OnInit {\r\n @Input() productId: string;\r\n selectedVariantId: string | undefined;\r\n variants$: Observable<NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants']>;\r\n constructor(\r\n private dataService: DataService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.variants$ = this.dataService\r\n .query(GetProductVariantsQuickJumpDocument, {\r\n id: this.productId,\r\n })\r\n .mapStream(data => data.product?.variants ?? []);\r\n }\r\n\r\n searchFn = (\r\n term: string,\r\n item: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number],\r\n ) =>\r\n item.name.toLowerCase().includes(term.toLowerCase()) ||\r\n item.sku.toLowerCase().includes(term.toLowerCase());\r\n\r\n onSelect(item?: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number]) {\r\n if (item) {\r\n this.router\r\n .navigate(['catalog', 'products', this.productId, 'variants', item.id])\r\n .then(() => (this.selectedVariantId = undefined));\r\n }\r\n }\r\n}\r\n","<ng-select\r\n *ngIf=\"(variants$ | async)?.length > 1\"\r\n [items]=\"variants$ | async\"\r\n appendTo=\"body\"\r\n bindValue=\"id\"\r\n [(ngModel)]=\"selectedVariantId\"\r\n [searchFn]=\"searchFn\"\r\n [clearable]=\"false\"\r\n [placeholder]=\"'catalog.quick-jump-placeholder' | translate\"\r\n (change)=\"onSelect($event)\"\r\n>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n {{ item.name }} ({{ item.sku }})\r\n </ng-template>\r\n</ng-select>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, UntypedFormGroup } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n CreateProductVariantInput,\r\n createUpdatedTranslatable,\r\n CurrencyCode,\r\n DataService,\r\n findTranslation,\r\n getCustomFieldsDefaults,\r\n GetProductVariantDetailDocument,\r\n GetProductVariantDetailQuery,\r\n GlobalFlag,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n ProductOptionFragment,\r\n ProductVariantUpdateMutationDocument,\r\n TypedBaseDetailComponent,\r\n UpdateProductVariantInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { pick } from '@vendure/common/lib/pick';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { combineLatest, concat, Observable } from 'rxjs';\r\nimport {\r\n distinctUntilChanged,\r\n map,\r\n mergeMap,\r\n shareReplay,\r\n skip,\r\n switchMap,\r\n switchMapTo,\r\n take,\r\n tap,\r\n} from 'rxjs/operators';\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\ninterface VariantFormValue {\r\n id: string;\r\n enabled: boolean;\r\n sku: string;\r\n name: string;\r\n taxCategoryId: string;\r\n stockOnHand: number;\r\n useGlobalOutOfStockThreshold: boolean;\r\n outOfStockThreshold: number;\r\n trackInventory: GlobalFlag;\r\n facetValueIds: string[][];\r\n customFields?: any;\r\n}\r\ntype T = NonNullable<GetProductVariantDetailQuery['productVariant']>;\r\ntype T1 = T['stockLevels'];\r\n@Component({\r\n selector: 'vdr-product-variant-detail',\r\n templateUrl: './product-variant-detail.component.html',\r\n styleUrls: ['./product-variant-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetProductVariantDetailDocument, 'productVariant'>\r\n implements OnInit, OnDestroy\r\n{\r\n public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n readonly customFields = this.getCustomFieldConfig('ProductVariant');\r\n readonly customOptionFields = this.getCustomFieldConfig('ProductOption');\r\n stockLevels$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['stockLevels']>;\r\n detailForm = this.formBuilder.group<VariantFormValue>({\r\n id: '',\r\n enabled: false,\r\n sku: '',\r\n name: '',\r\n taxCategoryId: '',\r\n stockOnHand: 0,\r\n useGlobalOutOfStockThreshold: true,\r\n outOfStockThreshold: 0,\r\n trackInventory: GlobalFlag.TRUE,\r\n facetValueIds: [],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n stockLevelsForm = this.formBuilder.array<\r\n FormGroup<{\r\n stockLocationId: FormControl<string | null>;\r\n stockLocationName: FormControl<string | null>;\r\n stockOnHand: FormControl<number | null>;\r\n stockAllocated: FormControl<number | null>;\r\n }>\r\n >([]);\r\n pricesForm = this.formBuilder.array<\r\n FormGroup<{\r\n price: FormControl<number | null>;\r\n currencyCode: FormControl<CurrencyCode | null>;\r\n delete: FormControl<boolean | null>;\r\n }>\r\n >([]);\r\n assetChanges: SelectedAssets = {};\r\n taxCategories$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'taxCategories'>>>;\r\n unusedStockLocation$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'stockLocations'>>>;\r\n unusedCurrencyCodes$: Observable<string[]>;\r\n channelPriceIncludesTax$: Observable<boolean>;\r\n readonly GlobalFlag = GlobalFlag;\r\n globalTrackInventory: boolean;\r\n globalOutOfStockThreshold: number;\r\n facetValues$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['facetValues']>;\r\n channelDefaultCurrencyCode: CurrencyCode;\r\n\r\n constructor(\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: FormBuilder,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.settings.getGlobalSettings('cache-first').single$.subscribe(({ globalSettings }) => {\r\n this.globalTrackInventory = globalSettings.trackInventory;\r\n this.globalOutOfStockThreshold = globalSettings.outOfStockThreshold;\r\n this.changeDetector.markForCheck();\r\n });\r\n this.taxCategories$ = this.result$.pipe(map(data => data.taxCategories.items));\r\n const availableCurrencyCodes$ = this.result$.pipe(\r\n tap(data => (this.channelDefaultCurrencyCode = data.activeChannel.defaultCurrencyCode)),\r\n map(data => data.activeChannel.availableCurrencyCodes),\r\n );\r\n this.unusedCurrencyCodes$ = combineLatest(this.pricesForm.valueChanges, availableCurrencyCodes$).pipe(\r\n map(([prices, currencyCodes]) =>\r\n currencyCodes.filter(code => !prices.map(p => p.currencyCode).includes(code)),\r\n ),\r\n );\r\n const stockLocations$ = this.result$.pipe(map(data => data.stockLocations.items));\r\n this.unusedStockLocation$ = combineLatest(this.entity$, stockLocations$).pipe(\r\n map(([entity, stockLocations]) => {\r\n const usedIds = entity.stockLevels.map(l => l.stockLocation.id);\r\n return stockLocations.filter(l => !usedIds.includes(l.id));\r\n }),\r\n );\r\n this.channelPriceIncludesTax$ = this.dataService.settings\r\n .getActiveChannel('cache-first')\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel.pricesIncludeTax)\r\n .pipe(shareReplay(1));\r\n this.stockLevels$ = this.entity$.pipe(map(entity => entity?.stockLevels ?? []));\r\n const facetValues$ = this.entity$.pipe(map(variant => variant.facetValues ?? []));\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const formFacetValueIdChanges$ = this.detailForm.get('facetValueIds')!.valueChanges.pipe(\r\n skip(1),\r\n distinctUntilChanged(),\r\n switchMap(ids =>\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: ids } } })\r\n .mapSingle(({ facetValues }) => facetValues.items),\r\n ),\r\n shareReplay(1),\r\n );\r\n this.facetValues$ = concat(\r\n facetValues$.pipe(take(1)),\r\n facetValues$.pipe(switchMapTo(formFacetValueIdChanges$)),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n addPriceInCurrency(currencyCode: CurrencyCode) {\r\n this.pricesForm.push(\r\n this.formBuilder.group({\r\n currencyCode,\r\n price: 0,\r\n delete: false as boolean,\r\n }),\r\n );\r\n }\r\n\r\n toggleDeletePrice(deleteFormControl: FormControl) {\r\n deleteFormControl.setValue(!deleteFormControl.value);\r\n deleteFormControl.markAsDirty();\r\n }\r\n\r\n addStockLocation(stockLocation: ItemOf<GetProductVariantDetailQuery, 'stockLocations'>) {\r\n this.stockLevelsForm.push(\r\n this.formBuilder.group({\r\n stockLocationId: stockLocation.id,\r\n stockLocationName: stockLocation.name,\r\n stockOnHand: 0,\r\n stockAllocated: 0,\r\n }),\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([variant, languageCode]) => {\r\n const input = pick(\r\n this.getUpdatedVariant(\r\n variant,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateProductVariantInput,\r\n [\r\n 'id',\r\n 'enabled',\r\n 'translations',\r\n 'sku',\r\n 'taxCategoryId',\r\n 'facetValueIds',\r\n 'featuredAssetId',\r\n 'assetIds',\r\n 'trackInventory',\r\n 'outOfStockThreshold',\r\n 'useGlobalOutOfStockThreshold',\r\n 'customFields',\r\n ],\r\n ) as UpdateProductVariantInput;\r\n if (this.stockLevelsForm.dirty) {\r\n input.stockLevels = this.stockLevelsForm.controls\r\n .filter(control => control.dirty)\r\n .map(control => ({\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockLocationId: control.value.stockLocationId!,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockOnHand: control.value.stockOnHand!,\r\n }));\r\n }\r\n if (this.pricesForm.dirty) {\r\n input.prices = this.pricesForm.controls\r\n .filter(control => control.dirty)\r\n .map(control => ({\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n price: control.value.price!,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n currencyCode: control.value.currencyCode!,\r\n delete: control.value.delete === true,\r\n }));\r\n }\r\n return this.dataService.mutate(ProductVariantUpdateMutationDocument, {\r\n input: [input],\r\n });\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n this.detailForm.markAsPristine();\r\n this.stockLevelsForm.markAsPristine();\r\n this.pricesForm.markAsPristine();\r\n this.assetChanges = {};\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ProductVariant',\r\n });\r\n },\r\n );\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n inventoryIsNotTracked(formGroup: UntypedFormGroup): boolean {\r\n const trackInventory = formGroup.get('trackInventory')?.value;\r\n return (\r\n trackInventory === GlobalFlag.FALSE ||\r\n (trackInventory === GlobalFlag.INHERIT && this.globalTrackInventory === false)\r\n );\r\n }\r\n\r\n optionGroupCode(optionGroupId: string): string | undefined {\r\n const group = this.entity?.product.optionGroups.find(g => g.id === optionGroupId);\r\n return group?.code;\r\n }\r\n\r\n optionName(option: ProductOptionFragment) {\r\n const translation =\r\n option.translations.find(t => t.languageCode === this.languageCode) ?? option.translations[0];\r\n return translation.name;\r\n }\r\n\r\n removeFacetValue(facetValueId: string) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n\r\n selectFacetValue() {\r\n this.displayFacetValueModal().subscribe(facetValueIds => {\r\n if (facetValueIds) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n private displayFacetValueModal(): Observable<string[] | undefined> {\r\n return this.modalService\r\n .fromComponent(ApplyFacetDialogComponent, {\r\n size: 'md',\r\n closable: true,\r\n })\r\n .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\r\n }\r\n\r\n protected setFormValues(\r\n variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n const variantTranslation = findTranslation(variant, languageCode);\r\n const facetValueIds = variant.facetValues.map(fv => fv.id);\r\n this.detailForm.patchValue({\r\n id: variant.id,\r\n enabled: variant.enabled,\r\n sku: variant.sku,\r\n name: variantTranslation ? variantTranslation.name : '',\r\n taxCategoryId: variant.taxCategory.id,\r\n stockOnHand: variant.stockLevels[0]?.stockOnHand ?? 0,\r\n useGlobalOutOfStockThreshold: variant.useGlobalOutOfStockThreshold,\r\n outOfStockThreshold: variant.outOfStockThreshold,\r\n trackInventory: variant.trackInventory,\r\n facetValueIds,\r\n });\r\n this.stockLevelsForm.clear();\r\n for (const stockLevel of variant.stockLevels) {\r\n this.stockLevelsForm.push(\r\n this.formBuilder.group({\r\n stockLocationId: stockLevel.stockLocation.id,\r\n stockLocationName: stockLevel.stockLocation.name,\r\n stockOnHand: stockLevel.stockOnHand,\r\n stockAllocated: stockLevel.stockAllocated,\r\n }),\r\n );\r\n }\r\n this.pricesForm.clear();\r\n for (const price of variant.prices) {\r\n this.pricesForm.push(\r\n this.formBuilder.group({\r\n price: price.price,\r\n currencyCode: price.currencyCode,\r\n delete: false as boolean,\r\n }),\r\n );\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n variant,\r\n variantTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a product and the value of the detailForm, this method creates an updated copy of the product which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedVariant(\r\n variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\r\n variantFormGroup: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): UpdateProductVariantInput | CreateProductVariantInput {\r\n const updatedProduct = createUpdatedTranslatable({\r\n translatable: variant,\r\n updatedFields: variantFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: variant.name || '',\r\n },\r\n });\r\n return {\r\n ...updatedProduct,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n facetValueIds: variantFormGroup.controls.facetValueIds.dirty\r\n ? variantFormGroup.value.facetValueIds\r\n : undefined,\r\n taxCategoryId: variantFormGroup.controls.taxCategoryId.dirty\r\n ? variantFormGroup.value.taxCategoryId\r\n : undefined,\r\n } as UpdateProductVariantInput | CreateProductVariantInput;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"flex center\">\r\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\r\n <vdr-language-selector\r\n *ngIf=\"availableLanguages.length > 1\"\r\n class=\"mr-2\"\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </ng-container>\r\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid ||\r\n stockLevelsForm.invalid ||\r\n pricesForm.invalid ||\r\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\r\n !assetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n <vdr-action-bar-dropdown-menu locationId=\"product-variant-detail\"></vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar\r\n ><vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\r\n [colorFrom]=\"optionGroupCode(option.groupId)\"\r\n [invert]=\"true\"\r\n >\r\n <span>{{ optionGroupCode(option.groupId) }}:</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a\r\n [routerLink]=\"['../../', 'options']\"\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n >\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\r\n <input\r\n id=\"sku\"\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-variant-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n />\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || variant.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n />\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\r\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\r\n <vdr-form-field\r\n [label]=\"\r\n ('catalog.price' | translate) +\r\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\r\n \"\r\n [tooltip]=\"\r\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\r\n ? ('catalog.default-currency' | translate)\r\n : undefined\r\n \"\r\n for=\"price\"\r\n >\r\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\r\n <vdr-currency-input\r\n name=\"price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [readonly]=\"\r\n !(updatePermissions | hasPermission) || price.value.delete === true\r\n \"\r\n formControlName=\"price\"\r\n />\r\n <div *ngIf=\"1 < pricesForm.controls.length\">\r\n <button\r\n class=\"button-small delete-button\"\r\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\r\n (click)=\"toggleDeletePrice(price.get('delete'))\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </vdr-form-field>\r\n <vdr-variant-price-detail\r\n [price]=\"price.value.price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\r\n />\r\n </div>\r\n <vdr-variant-price-strategy-detail\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [channelDefaultCurrencyCode]=\"channelDefaultCurrencyCode\"\r\n [variant]=\"variant\"\r\n />\r\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\r\n <div *ngIf=\"unusedCurrencyCodes.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-price-in-another-currency' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\r\n (click)=\"addPriceInCurrency(currencyCode)\"\r\n >\r\n {{ currencyCode | localeCurrencyName }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n for=\"track-inventory\"\r\n [label]=\"'catalog.track-inventory' | translate\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <select\r\n name=\"track-inventory\"\r\n formControlName=\"trackInventory\"\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n >\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <vdr-form-item\r\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\r\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n [vdrDisabled]=\"\r\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\r\n inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </vdr-form-item>\r\n </div>\r\n <div\r\n class=\"form-grid stock-levels\"\r\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\r\n [formGroup]=\"stockLevel\"\r\n >\r\n <vdr-form-field\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-on-hand' | translate)\r\n \"\r\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n >\r\n <input\r\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n type=\"number\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-allocated' | translate)\r\n \"\r\n >\r\n {{ stockLevel.get('stockAllocated')?.value }}\r\n </vdr-form-item>\r\n </div>\r\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\r\n <div *ngIf=\"unusedStockLocations.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-stock-location' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let stockLocation of unusedStockLocations\"\r\n (click)=\"addStockLocation(stockLocation)\"\r\n >\r\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DeletionResult,\r\n GetProductVariantListQuery,\r\n isMultiChannel,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n ProductVariant,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\nimport { ProductVariantListComponent } from './product-variant-list.component';\r\n\r\nexport const assignProductVariantsToChannelBulkAction: BulkAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>,\r\n ProductVariantListComponent\r\n> = {\r\n location: 'product-variant-list',\r\n label: _('common.assign-to-channel'),\r\n icon: 'layers',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productVariantIds: unique(selection.map(p => p.id)),\r\n currentChannelIds: [],\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const removeProductVariantsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>\r\n>({\r\n location: 'product-variant-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, ids, channelId) =>\r\n dataService.product\r\n .removeVariantsFromChannel({\r\n channelId: channelId,\r\n productVariantIds: ids,\r\n })\r\n .pipe(map(res => res.removeProductVariantsFromChannel)),\r\n});\r\n\r\nexport const deleteProductVariantsBulkAction: BulkAction<ProductVariant, ProductVariantListComponent> = {\r\n location: 'product-variant-list',\r\n label: _('common.delete'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteProduct) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .dialog({\r\n title: _('common.confirm-bulk-delete'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response\r\n ? dataService.product.deleteProductVariants(unique(selection.map(p => p.id)))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(result => {\r\n let deleted = 0;\r\n const errors: string[] = [];\r\n for (const item of result.deleteProductVariants) {\r\n if (item.result === DeletionResult.DELETED) {\r\n deleted++;\r\n } else if (item.message) {\r\n errors.push(item.message);\r\n }\r\n }\r\n if (0 < deleted) {\r\n notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\r\n count: deleted,\r\n });\r\n }\r\n if (0 < errors.length) {\r\n notificationService.error(errors.join('\\n'));\r\n }\r\n hostComponent.refresh();\r\n clearSelection();\r\n });\r\n },\r\n};\r\n\r\nexport const assignFacetValuesToProductVariantsBulkAction: BulkAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>,\r\n ProductVariantListComponent\r\n> = {\r\n location: 'product-variant-list',\r\n label: _('catalog.edit-facet-values'),\r\n icon: 'tag',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const notificationService = injector.get(NotificationService);\r\n const mode = 'variant';\r\n const ids = unique(selection.map(p => p.id));\r\n return modalService\r\n .fromComponent(BulkAddFacetValuesDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n mode,\r\n ids,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n notificationService.success(_('common.notify-bulk-update-success'), {\r\n count: selection.length,\r\n entity: mode === 'variant' ? 'Products' : 'ProductVariants',\r\n });\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\r\nimport { Asset, Permission, ProductDetailFragment, ProductVariantFragment } from '@vendure/admin-ui/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\ninterface PaginationConfig {\r\n totalItems: number;\r\n currentPage: number;\r\n itemsPerPage: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-product-variants-table',\r\n templateUrl: './product-variants-table.component.html',\r\n styleUrls: ['./product-variants-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantsTableComponent implements OnInit, OnDestroy {\r\n @Input('productVariantsFormArray') formArray: UntypedFormArray;\r\n @Input() variants: ProductVariantFragment[];\r\n @Input() paginationConfig: PaginationConfig;\r\n @Input() channelPriceIncludesTax: boolean;\r\n @Input() optionGroups: ProductDetailFragment['optionGroups'];\r\n @Input() pendingAssetChanges: { [variantId: string]: SelectedAssets };\r\n formGroupMap = new Map<string, UntypedFormGroup>();\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n private subscription: Subscription;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.subscription = this.formArray.valueChanges\r\n .pipe(\r\n map(value => value.length),\r\n debounceTime(1),\r\n distinctUntilChanged(),\r\n )\r\n .subscribe(() => {\r\n this.buildFormGroupMap();\r\n });\r\n\r\n this.buildFormGroupMap();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: any) {\r\n if ((item as any).id != null) {\r\n return (item as any).id;\r\n } else {\r\n return index;\r\n }\r\n }\r\n\r\n getFeaturedAsset(variant: ProductVariantFragment) {\r\n return this.pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset;\r\n }\r\n\r\n optionGroupName(optionGroupId: string): string | undefined {\r\n const group = this.optionGroups.find(g => g.id === optionGroupId);\r\n return group && group.name;\r\n }\r\n\r\n private buildFormGroupMap() {\r\n this.formGroupMap.clear();\r\n for (const controlGroup of this.formArray.controls) {\r\n this.formGroupMap.set(controlGroup.value.id, controlGroup as UntypedFormGroup);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>{{ 'catalog.sku' | translate }}</th>\r\n <ng-container *ngFor=\"let optionGroup of optionGroups | sort: 'id'\">\r\n <th>{{ optionGroup.name }}</th>\r\n </ng-container>\r\n <th>{{ 'catalog.price' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n <th>{{ 'common.enabled' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let variant of variants | paginate: paginationConfig; index as i; trackBy: trackByFn\">\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <div class=\"card-img\">\r\n <div class=\"featured-asset\">\r\n <img\r\n *ngIf=\"getFeaturedAsset(variant) as featuredAsset; else placeholder\"\r\n [src]=\"featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n <ng-template #placeholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <ng-container *ngFor=\"let option of variant.options | sort: 'groupId'\">\r\n <td\r\n class=\"left align-middle\"\r\n [class.disabled]=\"!formGroup.get('enabled')!.value\"\r\n [style.color]=\"optionGroupName(option.groupId) | stringToColor\"\r\n >\r\n {{ option.name }}\r\n </td>\r\n </ng-container>\r\n <td class=\"left align-middle price\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n min=\"0\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\r\nimport {\r\n CustomFieldConfig,\r\n LanguageCode,\r\n ProductVariantFragment,\r\n UpdateProductOptionInput,\r\n createUpdatedTranslatable,\r\n Dialog,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-update-product-option-dialog',\r\n templateUrl: './update-product-option-dialog.component.html',\r\n styleUrls: ['./update-product-option-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UpdateProductOptionDialogComponent\r\n implements Dialog<UpdateProductOptionInput & { autoUpdate: boolean }>, OnInit\r\n{\r\n resolveWith: (result?: UpdateProductOptionInput & { autoUpdate: boolean }) => void;\r\n updateVariantName = true;\r\n // Provided by caller\r\n productOption: ProductVariantFragment['options'][number];\r\n activeLanguage: LanguageCode;\r\n name: string;\r\n code: string;\r\n customFields: CustomFieldConfig[];\r\n codeInputTouched = false;\r\n customFieldsForm: UntypedFormGroup;\r\n\r\n ngOnInit(): void {\r\n const currentTranslation = this.productOption.translations.find(\r\n t => t.languageCode === this.activeLanguage,\r\n );\r\n this.name = currentTranslation?.name ?? '';\r\n this.code = this.productOption.code;\r\n this.customFieldsForm = new UntypedFormGroup({});\r\n if (this.customFields) {\r\n const cfCurrentTranslation =\r\n (currentTranslation && (currentTranslation as any).customFields) || {};\r\n\r\n for (const fieldDef of this.customFields) {\r\n const key = fieldDef.name;\r\n const value =\r\n fieldDef.type === 'localeString'\r\n ? cfCurrentTranslation[key]\r\n : (this.productOption as any).customFields[key];\r\n this.customFieldsForm.addControl(fieldDef.name, new UntypedFormControl(value));\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n const result = createUpdatedTranslatable({\r\n translatable: this.productOption,\r\n languageCode: this.activeLanguage,\r\n updatedFields: {\r\n code: this.code,\r\n name: this.name,\r\n customFields: this.customFieldsForm.value,\r\n },\r\n customFieldConfig: this.customFields,\r\n defaultTranslation: {\r\n languageCode: this.activeLanguage,\r\n name: '',\r\n },\r\n });\r\n this.resolveWith({ ...result, autoUpdate: this.updateVariantName });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n updateCode(nameValue: string) {\r\n if (!this.codeInputTouched && !this.productOption.code) {\r\n this.code = normalizeString(nameValue, '-');\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'catalog.update-product-option' | translate }}</ng-template>\r\n<vdr-form-field [label]=\"'catalog.option-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n #nameInput=\"ngModel\"\r\n [(ngModel)]=\"name\"\r\n required\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n</vdr-form-field>\r\n<vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input id=\"code\" type=\"text\" #codeInput=\"ngModel\" required [(ngModel)]=\"code\" pattern=\"[a-z0-9_-]+\" />\r\n</vdr-form-field>\r\n<clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"updateVariantName\" />\r\n <label>{{ 'catalog.auto-update-option-variant-name' | translate }}</label>\r\n</clr-checkbox-wrapper>\r\n<section *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"customFieldsForm\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n</section>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"update()\"\r\n [disabled]=\"\r\n nameInput.invalid ||\r\n codeInput.invalid ||\r\n (nameInput.pristine && codeInput.pristine && customFieldsForm.pristine)\r\n \"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'catalog.update-product-option' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, ROUTES } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n AssetDetailQueryDocument,\r\n BulkActionRegistryService,\r\n CollectionDetailQueryDocument,\r\n detailComponentWithResolver,\r\n GetFacetDetailDocument,\r\n GetProductDetailDocument,\r\n GetProductVariantDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\nimport { SortOrder } from '@vendure/common/lib/generated-types';\r\n\r\nimport { createRoutes } from './catalog.routes';\r\nimport { ApplyFacetDialogComponent } from './components/apply-facet-dialog/apply-facet-dialog.component';\r\nimport { AssetDetailComponent } from './components/asset-detail/asset-detail.component';\r\nimport { AssetListComponent } from './components/asset-list/asset-list.component';\r\nimport { AssignProductsToChannelDialogComponent } from './components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\nimport { CollectionContentsComponent } from './components/collection-contents/collection-contents.component';\r\nimport { CollectionDataTableComponent } from './components/collection-data-table/collection-data-table.component';\r\nimport { CollectionDetailComponent } from './components/collection-detail/collection-detail.component';\r\nimport { CollectionBreadcrumbPipe } from './components/collection-list/collection-breadcrumb.pipe';\r\nimport {\r\n assignCollectionsToChannelBulkAction,\r\n deleteCollectionsBulkAction,\r\n duplicateCollectionsBulkAction,\r\n moveCollectionsBulkAction,\r\n removeCollectionsFromChannelBulkAction,\r\n} from './components/collection-list/collection-list-bulk-actions';\r\nimport { CollectionListComponent } from './components/collection-list/collection-list.component';\r\nimport { CollectionTreeNodeComponent } from './components/collection-tree/collection-tree-node.component';\r\nimport { CollectionTreeComponent } from './components/collection-tree/collection-tree.component';\r\nimport { ConfirmVariantDeletionDialogComponent } from './components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component';\r\nimport { CreateFacetValueDialogComponent } from './components/create-facet-value-dialog/create-facet-value-dialog.component';\r\nimport { CreateProductOptionGroupDialogComponent } from './components/create-product-option-group-dialog/create-product-option-group-dialog.component';\r\nimport { CreateProductVariantDialogComponent } from './components/create-product-variant-dialog/create-product-variant-dialog.component';\r\nimport { FacetDetailComponent } from './components/facet-detail/facet-detail.component';\r\nimport {\r\n assignFacetsToChannelBulkAction,\r\n deleteFacetsBulkAction,\r\n duplicateFacetsBulkAction,\r\n removeFacetsFromChannelBulkAction,\r\n} from './components/facet-list/facet-list-bulk-actions';\r\nimport { FacetListComponent } from './components/facet-list/facet-list.component';\r\nimport { GenerateProductVariantsComponent } from './components/generate-product-variants/generate-product-variants.component';\r\nimport { MoveCollectionsDialogComponent } from './components/move-collections-dialog/move-collections-dialog.component';\r\nimport { OptionValueInputComponent } from './components/option-value-input/option-value-input.component';\r\nimport { ProductDetailComponent } from './components/product-detail/product-detail.component';\r\nimport {\r\n assignFacetValuesToProductsBulkAction,\r\n assignProductsToChannelBulkAction,\r\n deleteProductsBulkAction,\r\n duplicateProductsBulkAction,\r\n removeProductsFromChannelBulkAction,\r\n} from './components/product-list/product-list-bulk-actions';\r\nimport { ProductListComponent } from './components/product-list/product-list.component';\r\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\r\nimport { ProductVariantDetailComponent } from './components/product-variant-detail/product-variant-detail.component';\r\nimport {\r\n assignFacetValuesToProductVariantsBulkAction,\r\n assignProductVariantsToChannelBulkAction,\r\n deleteProductVariantsBulkAction,\r\n removeProductVariantsFromChannelBulkAction,\r\n} from './components/product-variant-list/product-variant-list-bulk-actions';\r\nimport { ProductVariantListComponent } from './components/product-variant-list/product-variant-list.component';\r\nimport { ProductVariantQuickJumpComponent } from './components/product-variant-quick-jump/product-variant-quick-jump.component';\r\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\r\nimport { ProductVariantsTableComponent } from './components/product-variants-table/product-variants-table.component';\r\nimport { UpdateProductOptionDialogComponent } from './components/update-product-option-dialog/update-product-option-dialog.component';\r\nimport { VariantPriceDetailComponent } from './components/variant-price-detail/variant-price-detail.component';\r\nimport { VariantPriceStrategyDetailComponent } from './components/variant-price-strategy-detail/variant-price-strategy-detail.component';\r\n\r\nconst CATALOG_COMPONENTS = [\r\n ProductListComponent,\r\n ProductDetailComponent,\r\n FacetListComponent,\r\n FacetDetailComponent,\r\n GenerateProductVariantsComponent,\r\n ApplyFacetDialogComponent,\r\n AssetListComponent,\r\n VariantPriceDetailComponent,\r\n VariantPriceStrategyDetailComponent,\r\n CollectionListComponent,\r\n CollectionDetailComponent,\r\n CollectionTreeComponent,\r\n CollectionTreeNodeComponent,\r\n CollectionContentsComponent,\r\n ProductVariantsTableComponent,\r\n OptionValueInputComponent,\r\n UpdateProductOptionDialogComponent,\r\n ProductVariantsEditorComponent,\r\n AssignProductsToChannelDialogComponent,\r\n AssetDetailComponent,\r\n ConfirmVariantDeletionDialogComponent,\r\n ProductOptionsEditorComponent,\r\n BulkAddFacetValuesDialogComponent,\r\n CollectionDataTableComponent,\r\n CollectionBreadcrumbPipe,\r\n MoveCollectionsDialogComponent,\r\n ProductVariantListComponent,\r\n ProductDetailComponent,\r\n ProductVariantDetailComponent,\r\n CreateProductVariantDialogComponent,\r\n CreateProductOptionGroupDialogComponent,\r\n ProductVariantQuickJumpComponent,\r\n CreateFacetValueDialogComponent,\r\n];\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([])],\r\n exports: [...CATALOG_COMPONENTS],\r\n declarations: [...CATALOG_COMPONENTS],\r\n providers: [\r\n {\r\n provide: ROUTES,\r\n useFactory: (pageService: PageService) => createRoutes(pageService),\r\n multi: true,\r\n deps: [PageService],\r\n },\r\n ],\r\n})\r\nexport class CatalogModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (CatalogModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignProductsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateProductsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeProductsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteProductsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductVariantsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignProductVariantsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeProductVariantsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteProductVariantsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignFacetsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateFacetsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeFacetsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteFacetsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(moveCollectionsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignCollectionsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateCollectionsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeCollectionsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteCollectionsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-list',\r\n tab: _('catalog.products'),\r\n route: '',\r\n component: ProductListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-detail',\r\n tab: _('catalog.product'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ProductDetailComponent,\r\n query: GetProductDetailDocument,\r\n entityKey: 'product',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-product'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-list',\r\n tab: _('catalog.product-variants'),\r\n route: 'variants',\r\n component: ProductVariantListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-variant-detail',\r\n tab: _('catalog.product-variants'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ProductVariantDetailComponent,\r\n query: GetProductVariantDetailDocument,\r\n entityKey: 'productVariant',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: `${entity?.product.name}`,\r\n link: ['/catalog', 'products', entity?.product.id],\r\n },\r\n {\r\n label: `${entity?.name} (${entity?.sku})`,\r\n link: ['variants', entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'facet-list',\r\n tab: _('catalog.facets'),\r\n route: '',\r\n component: FacetListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'facet-detail',\r\n tab: _('catalog.facet'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: FacetDetailComponent,\r\n query: GetFacetDetailDocument,\r\n variables: {\r\n facetValueListOptions: {\r\n take: 10,\r\n skip: 0,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n },\r\n },\r\n entityKey: 'facet',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-facet'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'collection-list',\r\n tab: _('catalog.collections'),\r\n route: '',\r\n component: CollectionListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'collection-detail',\r\n tab: _('catalog.collection'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: CollectionDetailComponent,\r\n query: CollectionDetailQueryDocument,\r\n entityKey: 'collection',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-collection'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'asset-list',\r\n tab: _('catalog.assets'),\r\n route: '',\r\n component: AssetListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'asset-detail',\r\n tab: _('catalog.asset'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: AssetDetailComponent,\r\n query: AssetDetailQueryDocument,\r\n entityKey: 'asset',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: `${entity?.name}`,\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n CatalogModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n","import { gql } from 'apollo-angular';\r\n\r\nconst PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT = gql`\r\n fragment ProductListQueryProductFragment on Product {\r\n id\r\n createdAt\r\n updatedAt\r\n enabled\r\n languageCode\r\n name\r\n slug\r\n featuredAsset {\r\n id\r\n createdAt\r\n updatedAt\r\n preview\r\n focalPoint {\r\n x\r\n y\r\n }\r\n }\r\n variantList {\r\n totalItems\r\n }\r\n }\r\n`;\r\n\r\nexport const PRODUCT_LIST_QUERY = gql`\r\n query ProductListQuery($options: ProductListOptions) {\r\n products(options: $options) {\r\n items {\r\n ...ProductListQueryProductFragment\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT}\r\n`;\r\n","import { ASSET_FRAGMENT, PRODUCT_OPTION_FRAGMENT } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\r\n fragment ProductVariantDetailQueryProductVariantFragment on ProductVariant {\r\n id\r\n createdAt\r\n updatedAt\r\n enabled\r\n languageCode\r\n name\r\n price\r\n currencyCode\r\n prices {\r\n price\r\n currencyCode\r\n }\r\n priceWithTax\r\n stockOnHand\r\n stockAllocated\r\n trackInventory\r\n outOfStockThreshold\r\n useGlobalOutOfStockThreshold\r\n taxRateApplied {\r\n id\r\n name\r\n value\r\n }\r\n taxCategory {\r\n id\r\n name\r\n }\r\n sku\r\n options {\r\n ...ProductOption\r\n }\r\n stockLevels {\r\n id\r\n createdAt\r\n updatedAt\r\n stockOnHand\r\n stockAllocated\r\n stockLocationId\r\n stockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n }\r\n facetValues {\r\n id\r\n code\r\n name\r\n facet {\r\n id\r\n name\r\n }\r\n }\r\n featuredAsset {\r\n ...Asset\r\n }\r\n assets {\r\n ...Asset\r\n }\r\n translations {\r\n id\r\n languageCode\r\n name\r\n }\r\n channels {\r\n id\r\n code\r\n }\r\n product {\r\n id\r\n name\r\n optionGroups {\r\n id\r\n name\r\n code\r\n translations {\r\n id\r\n languageCode\r\n name\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_DETAIL_QUERY = gql`\r\n query GetProductVariantDetail($id: ID!) {\r\n productVariant(id: $id) {\r\n ...ProductVariantDetailQueryProductVariantFragment\r\n }\r\n stockLocations(options: { take: 100 }) {\r\n items {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n }\r\n taxCategories(options: { take: 100 }) {\r\n items {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n isDefault\r\n }\r\n totalItems\r\n }\r\n activeChannel {\r\n id\r\n availableCurrencyCodes\r\n defaultCurrencyCode\r\n }\r\n }\r\n ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_UPDATE_MUTATION = gql`\r\n mutation ProductVariantUpdateMutation($input: [UpdateProductVariantInput!]!) {\r\n updateProductVariants(input: $input) {\r\n ...ProductVariantDetailQueryProductVariantFragment\r\n }\r\n }\r\n ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\n","import { ASSET_FRAGMENT } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nconst PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\r\n fragment ProductVariantListQueryProductVariantFragment on ProductVariant {\r\n id\r\n createdAt\r\n updatedAt\r\n productId\r\n enabled\r\n languageCode\r\n name\r\n price\r\n currencyCode\r\n priceWithTax\r\n trackInventory\r\n outOfStockThreshold\r\n stockLevels {\r\n id\r\n createdAt\r\n updatedAt\r\n stockLocationId\r\n stockOnHand\r\n stockAllocated\r\n stockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n }\r\n useGlobalOutOfStockThreshold\r\n sku\r\n featuredAsset {\r\n ...Asset\r\n }\r\n }\r\n\r\n ${ASSET_FRAGMENT}\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_LIST_QUERY = gql`\r\n query ProductVariantListQuery($options: ProductVariantListOptions!) {\r\n productVariants(options: $options) {\r\n items {\r\n ...ProductVariantListQueryProductVariantFragment\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\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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"}
1
+ {"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":["/**\r\n * @description\r\n * Like String.prototype.replace(), but replaces the last instance\r\n * rather than the first.\r\n */\r\nexport function replaceLast(target: string | undefined | null, search: string, replace: string): string {\r\n if (!target) {\r\n return '';\r\n }\r\n const lastIndex = target.lastIndexOf(search);\r\n if (lastIndex === -1) {\r\n return target;\r\n }\r\n const head = target.substr(0, lastIndex);\r\n const tail = target.substr(lastIndex).replace(search, replace);\r\n return head + tail;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n CreateProductInput,\r\n CreateProductVariantInput,\r\n DataService,\r\n DeletionResult,\r\n FacetWithValuesFragment,\r\n findTranslation,\r\n GetProductDetailQuery,\r\n GetProductWithVariantsQuery,\r\n LanguageCode,\r\n UpdateProductInput,\r\n UpdateProductMutation,\r\n UpdateProductOptionInput,\r\n UpdateProductVariantInput,\r\n UpdateProductVariantsMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\r\nimport { map, mergeMap, shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nimport { CreateProductVariantsConfig } from '../../components/generate-product-variants/generate-product-variants.component';\r\n\r\nimport { replaceLast } from './replace-last';\r\n\r\n/**\r\n * Handles the logic for making the API calls to perform CRUD operations on a Product and its related\r\n * entities. This logic was extracted out of the component because it became too large and hard to follow.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProductDetailService {\r\n constructor(private dataService: DataService) {}\r\n\r\n getTaxCategories() {\r\n return this.dataService.settings\r\n .getTaxCategories()\r\n .mapSingle(data => data.taxCategories.items)\r\n .pipe(shareReplay(1));\r\n }\r\n\r\n createProductWithVariants(\r\n input: CreateProductInput,\r\n createVariantsConfig: CreateProductVariantsConfig,\r\n languageCode: LanguageCode,\r\n ) {\r\n const createProduct$ = this.dataService.product.createProduct(input);\r\n const nonEmptyOptionGroups = createVariantsConfig.groups.filter(g => 0 < g.values.length);\r\n const createOptionGroups$ = this.createProductOptionGroups(nonEmptyOptionGroups, languageCode);\r\n\r\n return forkJoin(createProduct$, createOptionGroups$).pipe(\r\n mergeMap(([{ createProduct }, optionGroups]) => {\r\n const addOptionsToProduct$ = optionGroups.length\r\n ? forkJoin(\r\n optionGroups.map(optionGroup =>\r\n this.dataService.product.addOptionGroupToProduct({\r\n productId: createProduct.id,\r\n optionGroupId: optionGroup.id,\r\n }),\r\n ),\r\n )\r\n : of([]);\r\n return addOptionsToProduct$.pipe(map(() => ({ createProduct, optionGroups })));\r\n }),\r\n mergeMap(({ createProduct, optionGroups }) => {\r\n const variants = createVariantsConfig.variants.map(v => {\r\n const optionIds = optionGroups.length\r\n ? v.optionValues.map((optionName, index) => {\r\n const option = optionGroups[index].options.find(o => o.name === optionName);\r\n if (!option) {\r\n throw new Error(\r\n `Could not find a matching ProductOption \"${optionName}\" when creating variant`,\r\n );\r\n }\r\n return option.id;\r\n })\r\n : [];\r\n return {\r\n ...v,\r\n optionIds,\r\n };\r\n });\r\n const options = optionGroups.map(og => og.options).reduce((flat, o) => [...flat, ...o], []);\r\n return this.createProductVariants(\r\n createProduct,\r\n variants,\r\n options,\r\n languageCode,\r\n createVariantsConfig.stockLocationId,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n createProductOptionGroups(groups: Array<{ name: string; values: string[] }>, languageCode: LanguageCode) {\r\n return groups.length\r\n ? forkJoin(\r\n groups.map(c =>\r\n this.dataService.product\r\n .createProductOptionGroups({\r\n code: normalizeString(c.name, '-'),\r\n translations: [{ languageCode, name: c.name }],\r\n options: c.values.map(v => ({\r\n code: normalizeString(v, '-'),\r\n translations: [{ languageCode, name: v }],\r\n })),\r\n })\r\n .pipe(map(data => data.createProductOptionGroup)),\r\n ),\r\n )\r\n : of([]);\r\n }\r\n\r\n createProductVariants(\r\n product: { name: string; id: string },\r\n variantData: Array<{ price: number; sku: string; stock: number; optionIds: string[] }>,\r\n options: Array<{ id: string; name: string }>,\r\n languageCode: LanguageCode,\r\n stockLocationId: string,\r\n ) {\r\n const variants: CreateProductVariantInput[] = variantData.map(v => {\r\n const name = options.length\r\n ? `${product.name} ${v.optionIds\r\n .map(id => options.find(o => o.id === id))\r\n .filter(notNullOrUndefined)\r\n .map(o => o.name)\r\n .join(' ')}`\r\n : product.name;\r\n return {\r\n productId: product.id,\r\n price: v.price,\r\n sku: v.sku,\r\n translations: [\r\n {\r\n languageCode,\r\n name,\r\n },\r\n ],\r\n stockLevels: [\r\n {\r\n stockLocationId,\r\n stockOnHand: v.stock,\r\n },\r\n ],\r\n optionIds: v.optionIds,\r\n };\r\n });\r\n return this.dataService.product.createProductVariants(variants).pipe(\r\n map(({ createProductVariants }) => ({\r\n createProductVariants,\r\n productId: product.id,\r\n })),\r\n );\r\n }\r\n\r\n updateProduct(updateOptions: {\r\n product: NonNullable<GetProductDetailQuery['product']>;\r\n languageCode: LanguageCode;\r\n autoUpdate: boolean;\r\n productInput?: UpdateProductInput;\r\n variantsInput?: UpdateProductVariantInput[];\r\n }) {\r\n const { product, languageCode, autoUpdate, productInput, variantsInput } = updateOptions;\r\n const updateOperations: Array<Observable<UpdateProductMutation | UpdateProductVariantsMutation>> = [];\r\n const updateVariantsInput = variantsInput || [];\r\n\r\n const variants$ = autoUpdate\r\n ? this.dataService.product\r\n .getProductVariantsForProduct({}, product.id)\r\n .mapSingle(({ productVariants }) => productVariants.items)\r\n : of([]);\r\n\r\n return variants$.pipe(\r\n mergeMap(variants => {\r\n if (productInput) {\r\n updateOperations.push(this.dataService.product.updateProduct(productInput));\r\n const productOldName = findTranslation(product, languageCode)?.name ?? '';\r\n const productNewName = findTranslation(productInput, languageCode)?.name;\r\n if (productNewName && productOldName !== productNewName && autoUpdate) {\r\n for (const variant of variants) {\r\n const currentVariantName = findTranslation(variant, languageCode)?.name || '';\r\n let variantInput: UpdateProductVariantInput;\r\n const existingVariantInput = updateVariantsInput.find(i => i.id === variant.id);\r\n if (existingVariantInput) {\r\n variantInput = existingVariantInput;\r\n } else {\r\n variantInput = {\r\n id: variant.id,\r\n translations: [{ languageCode, name: currentVariantName }],\r\n };\r\n updateVariantsInput.push(variantInput);\r\n }\r\n const variantTranslation = findTranslation(variantInput, languageCode);\r\n if (variantTranslation) {\r\n if (variantTranslation.name) {\r\n variantTranslation.name = replaceLast(\r\n variantTranslation.name,\r\n productOldName,\r\n productNewName,\r\n );\r\n } else {\r\n // The variant translation was falsy, which occurs\r\n // when defining the product name for a new translation\r\n // language that had not yet been defined.\r\n variantTranslation.name = [\r\n productNewName,\r\n ...variant.options.map(o => o.name),\r\n ].join(' ');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (updateVariantsInput.length) {\r\n updateOperations.push(\r\n this.dataService.product.updateProductVariants(updateVariantsInput),\r\n );\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n );\r\n }\r\n\r\n updateProductOptions(\r\n inputs: UpdateProductOptionInput[],\r\n autoUpdateProductNames: boolean,\r\n product: NonNullable<GetProductDetailQuery['product']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n const variants$ = autoUpdateProductNames\r\n ? this.dataService.product\r\n .getProductVariantsForProduct({}, product.id)\r\n .mapSingle(({ productVariants }) => productVariants.items)\r\n : of([]);\r\n\r\n return variants$.pipe(\r\n mergeMap(variants => {\r\n let updateProductVariantNames$: Observable<any> = of([]);\r\n if (autoUpdateProductNames) {\r\n const replacementMap = new Map<string, string>();\r\n\r\n for (const input of inputs) {\r\n const newOptionName = findTranslation(input, languageCode)?.name;\r\n let oldOptionName: string | undefined;\r\n for (const variant of variants) {\r\n if (oldOptionName) {\r\n continue;\r\n }\r\n if (variant.options.map(o => o.id).includes(input.id)) {\r\n if (!oldOptionName) {\r\n oldOptionName = findTranslation(\r\n variant.options.find(o => o.id === input.id),\r\n languageCode,\r\n )?.name;\r\n }\r\n }\r\n }\r\n if (oldOptionName && newOptionName) {\r\n replacementMap.set(oldOptionName, newOptionName);\r\n }\r\n }\r\n\r\n const variantsToUpdate: UpdateProductVariantInput[] = [];\r\n if (replacementMap.size) {\r\n const oldOptionNames = Array.from(replacementMap.keys());\r\n for (const variant of variants) {\r\n const variantName = findTranslation(variant, languageCode)?.name;\r\n if (!variantName) {\r\n continue;\r\n }\r\n if (!oldOptionNames.some(oldOptionName => variantName.includes(oldOptionName))) {\r\n continue;\r\n }\r\n const updatedVariantName = oldOptionNames.reduce(\r\n (name, oldOptionName) =>\r\n replaceLast(name, oldOptionName, replacementMap.get(oldOptionName)!),\r\n variantName,\r\n );\r\n variantsToUpdate.push({\r\n id: variant.id,\r\n translations: [\r\n {\r\n languageCode,\r\n name: updatedVariantName,\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n if (variantsToUpdate.length) {\r\n updateProductVariantNames$ =\r\n this.dataService.product.updateProductVariants(variantsToUpdate);\r\n } else {\r\n updateProductVariantNames$ = of([]);\r\n }\r\n }\r\n return forkJoin(\r\n inputs.map(input => this.dataService.product.updateProductOption(input)),\r\n ).pipe(mergeMap(() => updateProductVariantNames$));\r\n }),\r\n );\r\n }\r\n\r\n deleteProductVariant(id: string, productId: string) {\r\n return this.dataService.product.deleteProductVariant(id).pipe(\r\n switchMap(result => {\r\n if (result.deleteProductVariant.result === DeletionResult.DELETED) {\r\n return this.dataService.product.getProduct(productId).single$;\r\n } else {\r\n return throwError(result.deleteProductVariant.message);\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionsService,\r\n ProductOptionFragment,\r\n ProductOptionGroupFragment,\r\n ServerConfigService,\r\n TranslationOf,\r\n UpdateProductOptionGroupInput,\r\n UpdateProductOptionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, forkJoin, Observable } from 'rxjs';\r\nimport { map, mergeMap, take, tap } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\n\r\ntype ProductWithOptions = NonNullable<GetProductVariantOptionsQuery['product']>;\r\n\r\n@Component({\r\n selector: 'vdr-product-options-editor',\r\n templateUrl: './product-options-editor.component.html',\r\n styleUrls: ['./product-options-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductOptionsEditorComponent extends BaseDetailComponent<ProductWithOptions> implements OnInit {\r\n detailForm: UntypedFormGroup;\r\n optionGroups$: Observable<ProductWithOptions['optionGroups']>;\r\n languageCode$: Observable<LanguageCode>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n optionGroupCustomFields: CustomFieldConfig[];\r\n optionCustomFields: CustomFieldConfig[];\r\n autoUpdateVariantNames = true;\r\n paginationSettings: { [groupId: string]: { currentPage: number; itemsPerPage: number } } = {};\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected serverConfigService: ServerConfigService,\r\n protected dataService: DataService,\r\n protected permissionsService: PermissionsService,\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: UntypedFormBuilder,\r\n private changeDetector: ChangeDetectorRef,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(route, router, serverConfigService, dataService, permissionsService);\r\n this.optionGroupCustomFields = this.getCustomFieldConfig('ProductOptionGroup');\r\n this.optionCustomFields = this.getCustomFieldConfig('ProductOption');\r\n }\r\n\r\n ngOnInit(): void {\r\n this.optionGroups$ = this.route.snapshot.data.entity.pipe(\r\n map((product: ProductWithOptions) => product.optionGroups),\r\n tap((optionGroups: ProductWithOptions['optionGroups']) => {\r\n for (const group of optionGroups) {\r\n this.paginationSettings[group.id] = {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n };\r\n }\r\n }),\r\n );\r\n this.detailForm = new UntypedFormGroup({\r\n optionGroups: new UntypedFormArray([]),\r\n });\r\n super.init();\r\n }\r\n\r\n getOptionGroups(): UntypedFormGroup[] {\r\n const optionGroups = this.detailForm.get('optionGroups');\r\n return (optionGroups as UntypedFormArray).controls as UntypedFormGroup[];\r\n }\r\n\r\n getOptions(optionGroup: UntypedFormGroup): UntypedFormGroup[] {\r\n const options = optionGroup.get('options');\r\n return (options as UntypedFormArray).controls as UntypedFormGroup[];\r\n }\r\n\r\n save() {\r\n if (this.detailForm.invalid || this.detailForm.pristine) {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const $product = this.dataService.product.getProduct(this.id).mapSingle(data => data.product!);\r\n combineLatest(this.entity$, this.languageCode$, $product)\r\n .pipe(\r\n take(1),\r\n mergeMap(([{ optionGroups }, languageCode, product]) => {\r\n const updateOperations: Array<Observable<any>> = [];\r\n const updatedProductOptionInputs: UpdateProductOptionInput[] = [];\r\n for (const optionGroupForm of this.getOptionGroups()) {\r\n if (optionGroupForm.dirty) {\r\n const optionGroupEntity = optionGroups.find(\r\n og => og.id === optionGroupForm.value.id,\r\n );\r\n if (optionGroupEntity) {\r\n const input = this.getUpdatedOptionGroup(\r\n optionGroupEntity,\r\n optionGroupForm,\r\n languageCode,\r\n );\r\n updateOperations.push(\r\n this.dataService.product.updateProductOptionGroup(input),\r\n );\r\n }\r\n }\r\n\r\n for (const optionForm of this.getOptions(optionGroupForm)) {\r\n if (optionForm.dirty) {\r\n const optionGroup = optionGroups\r\n .find(og => og.id === optionGroupForm.value.id)\r\n ?.options.find(o => o.id === optionForm.value.id);\r\n if (optionGroup) {\r\n const input = this.getUpdatedOption(\r\n optionGroup,\r\n optionForm,\r\n languageCode,\r\n );\r\n updatedProductOptionInputs.push(input);\r\n }\r\n }\r\n }\r\n }\r\n if (updatedProductOptionInputs.length) {\r\n updateOperations.push(\r\n this.productDetailService.updateProductOptions(\r\n updatedProductOptionInputs,\r\n this.autoUpdateVariantNames,\r\n product,\r\n languageCode,\r\n ),\r\n );\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private getUpdatedOptionGroup(\r\n optionGroup: ProductOptionGroupFragment,\r\n optionGroupFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductOptionGroupInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: optionGroup,\r\n updatedFields: optionGroupFormGroup.value,\r\n customFieldConfig: this.optionGroupCustomFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: optionGroup.name || '',\r\n },\r\n });\r\n return input;\r\n }\r\n\r\n private getUpdatedOption(\r\n option: ProductOptionFragment,\r\n optionFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductOptionInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: option,\r\n updatedFields: optionFormGroup.value,\r\n customFieldConfig: this.optionCustomFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: option.name || '',\r\n },\r\n });\r\n return input;\r\n }\r\n\r\n protected setFormValues(entity: ProductWithOptions, languageCode: LanguageCode): void {\r\n const groupsForm = this.detailForm.get('optionGroups') as UntypedFormArray;\r\n for (const optionGroup of entity.optionGroups) {\r\n const groupTranslation = findTranslation(optionGroup, languageCode);\r\n\r\n const groupForm = this.setOptionGroupForm(optionGroup, groupsForm, groupTranslation);\r\n this.setCustomFieldsForm(this.optionGroupCustomFields, groupForm, optionGroup, groupTranslation);\r\n\r\n let optionsForm = groupForm.get('options') as UntypedFormArray;\r\n if (!optionsForm) {\r\n optionsForm = this.formBuilder.array([]);\r\n groupForm.addControl('options', optionsForm);\r\n }\r\n for (const option of optionGroup.options) {\r\n const optionTranslation = findTranslation(option, languageCode);\r\n const optionForm = this.setOptionForm(option, optionsForm, optionTranslation);\r\n\r\n this.setCustomFieldsForm(this.optionCustomFields, optionForm, option, optionTranslation);\r\n }\r\n }\r\n }\r\n\r\n protected setCustomFieldsForm<\r\n T extends ProductWithOptions['optionGroups'][0] | ProductWithOptions['optionGroups'][0]['options'][0],\r\n >(\r\n customFields: CustomFieldConfig[],\r\n formGroup: UntypedFormGroup,\r\n entity: T,\r\n currentTranslation?: TranslationOf<T>,\r\n ) {\r\n if (customFields.length) {\r\n let customValueFieldsGroup = formGroup.get(['customFields']);\r\n if (!customValueFieldsGroup) {\r\n customValueFieldsGroup = this.formBuilder.group(\r\n customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n );\r\n formGroup.addControl('customFields', customValueFieldsGroup);\r\n }\r\n this.setCustomFieldFormValues(customFields, customValueFieldsGroup, entity, currentTranslation);\r\n }\r\n }\r\n\r\n protected setOptionGroupForm(\r\n entity: ProductWithOptions['optionGroups'][0],\r\n groupsForm: UntypedFormArray,\r\n currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]>,\r\n ) {\r\n const group = {\r\n id: entity.id,\r\n createdAt: entity.createdAt,\r\n updatedAt: entity.updatedAt,\r\n code: entity.code,\r\n name: currentTranslation?.name ?? '',\r\n };\r\n let groupForm = groupsForm.controls.find(control => control.value.id === entity.id) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (groupForm) {\r\n groupForm.get('id')?.setValue(group.id);\r\n groupForm.get('code')?.setValue(group.code);\r\n groupForm.get('name')?.setValue(group.name);\r\n groupForm.get('createdAt')?.setValue(group.createdAt);\r\n groupForm.get('updatedAt')?.setValue(group.updatedAt);\r\n } else {\r\n groupForm = this.formBuilder.group(group);\r\n groupsForm.push(groupForm);\r\n }\r\n return groupForm;\r\n }\r\n\r\n protected setOptionForm(\r\n entity: ProductWithOptions['optionGroups'][0]['options'][0],\r\n optionsForm: UntypedFormArray,\r\n currentTranslation?: TranslationOf<ProductWithOptions['optionGroups'][0]['options'][0]>,\r\n ) {\r\n const group = {\r\n id: entity.id,\r\n createdAt: entity.createdAt,\r\n updatedAt: entity.updatedAt,\r\n code: entity.code,\r\n name: currentTranslation?.name ?? '',\r\n };\r\n let optionForm = optionsForm.controls.find(control => control.value.id === entity.id) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (optionForm) {\r\n optionForm.get('id')?.setValue(group.id);\r\n optionForm.get('code')?.setValue(group.code);\r\n optionForm.get('name')?.setValue(group.name);\r\n optionForm.get('createdAt')?.setValue(group.createdAt);\r\n optionForm.get('updatedAt')?.setValue(group.updatedAt);\r\n } else {\r\n optionForm = this.formBuilder.group(group);\r\n optionsForm.push(optionForm);\r\n }\r\n return optionForm;\r\n }\r\n}\r\n","<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\" id=\"custom-fields\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport {\r\n CreateProductOptionGroupInput,\r\n Dialog,\r\n findTranslation,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-create-product-option-group-dialog',\r\n templateUrl: './create-product-option-group-dialog.component.html',\r\n styleUrls: ['./create-product-option-group-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateProductOptionGroupDialogComponent implements Dialog<CreateProductOptionGroupInput> {\r\n resolveWith: (result?: CreateProductOptionGroupInput) => void;\r\n languageCode: LanguageCode;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n code: ['', Validators.required],\r\n });\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n updateCode() {\r\n const nameControl = this.form.get('name');\r\n const codeControl = this.form.get('code');\r\n if (nameControl && codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\r\n }\r\n }\r\n\r\n confirm() {\r\n const { name, code } = this.form.value;\r\n if (!name || !code) {\r\n return;\r\n }\r\n this.resolveWith({\r\n code,\r\n options: [],\r\n translations: [{ languageCode: this.languageCode, name }],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-option-group' | translate }}\r\n</ng-template>\r\n<div class=\"form-grid\" [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormRecord, Validators } from '@angular/forms';\r\nimport {\r\n CreateProductVariantInput,\r\n CurrencyCode,\r\n Dialog,\r\n GetProductVariantOptionsQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\n\r\n@Component({\r\n selector: 'vdr-create-product-variant-dialog',\r\n templateUrl: './create-product-variant-dialog.component.html',\r\n styleUrls: ['./create-product-variant-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateProductVariantDialogComponent implements Dialog<CreateProductVariantInput>, OnInit {\r\n resolveWith: (result?: CreateProductVariantInput) => void;\r\n product: NonNullable<GetProductVariantOptionsQuery['product']>;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n sku: [''],\r\n price: [''],\r\n options: this.formBuilder.record<string>({}),\r\n });\r\n existingVariant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number] | undefined;\r\n currencyCode: CurrencyCode;\r\n\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n ngOnInit() {\r\n this.currencyCode = this.product.variants[0]?.currencyCode;\r\n for (const optionGroup of this.product.optionGroups) {\r\n (this.form.get('options') as FormRecord).addControl(\r\n optionGroup.code,\r\n new FormControl('', Validators.required),\r\n );\r\n }\r\n const optionsRecord = this.form.get('options') as FormRecord;\r\n optionsRecord.valueChanges.subscribe(value => {\r\n const nameControl = this.form.get('name');\r\n const allNull = Object.values(value).every(v => v == null);\r\n if (!allNull && value && nameControl && !nameControl.dirty) {\r\n const name = Object.entries(value)\r\n .map(\r\n ([groupCode, optionId]) =>\r\n this.product.optionGroups\r\n .find(og => og.code === groupCode)\r\n ?.options.find(o => o.id === optionId)?.name,\r\n )\r\n .join(' ');\r\n nameControl.setValue(`${this.product.name} ${name}`);\r\n }\r\n const allSelected = Object.values(value).every(v => v != null);\r\n if (allSelected) {\r\n this.existingVariant = this.product.variants.find(v =>\r\n Object.entries(value).every(\r\n ([groupCode, optionId]) =>\r\n v.options.find(o => o.groupId === this.getGroupIdFromCode(groupCode))?.id ===\r\n optionId,\r\n ),\r\n );\r\n }\r\n });\r\n }\r\n\r\n confirm() {\r\n const { name, sku, options, price } = this.form.value;\r\n if (!name || !options || price == null) {\r\n return;\r\n }\r\n\r\n const optionIds = Object.values(options).filter(notNullOrUndefined);\r\n this.resolveWith({\r\n productId: this.product.id,\r\n sku: sku || '',\r\n price: Number(price),\r\n optionIds,\r\n translations: [\r\n {\r\n languageCode: this.product.languageCode,\r\n name,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private getGroupCodeFromId(id: string): string {\r\n return this.product.optionGroups.find(og => og.id === id)?.code ?? '';\r\n }\r\n\r\n private getGroupIdFromCode(code: string): string {\r\n return this.product.optionGroups.find(og => og.code === code)?.id ?? '';\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\r\n bindValue=\"id\" appendTo=\"body\">\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.price' | translate\">\r\n <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n Provider,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { unique } from '@vendure/common/lib/unique';\r\n\r\nexport const OPTION_VALUE_INPUT_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OptionValueInputComponent),\r\n multi: true,\r\n};\r\n\r\ninterface Option {\r\n id?: string;\r\n name: string;\r\n locked: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-option-value-input',\r\n templateUrl: './option-value-input.component.html',\r\n styleUrls: ['./option-value-input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n providers: [OPTION_VALUE_INPUT_VALUE_ACCESSOR],\r\n})\r\nexport class OptionValueInputComponent implements ControlValueAccessor {\r\n @Input() groupName = '';\r\n @ViewChild('textArea', { static: true }) textArea: ElementRef<HTMLTextAreaElement>;\r\n @ViewChildren('editNameInput', { read: ElementRef }) nameInputs: QueryList<ElementRef>;\r\n @Input() options: Option[];\r\n @Output() add = new EventEmitter<Option>();\r\n @Output() remove = new EventEmitter<Option>();\r\n @Output() edit = new EventEmitter<{ index: number; option: Option }>();\r\n @Input() disabled = false;\r\n input = '';\r\n isFocussed = false;\r\n lastSelected = false;\r\n formValue: Option[];\r\n editingIndex = -1;\r\n onChangeFn: (value: any) => void;\r\n onTouchFn: (value: any) => void;\r\n\r\n get optionValues(): Option[] {\r\n return this.formValue ?? this.options ?? [];\r\n }\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeFn = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchFn = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.formValue = obj || [];\r\n }\r\n\r\n focus() {\r\n this.textArea.nativeElement.focus();\r\n }\r\n\r\n editName(index: number, event: MouseEvent) {\r\n const optionValue = this.optionValues[index];\r\n if (!optionValue.locked && !optionValue.id) {\r\n event.cancelBubble = true;\r\n this.editingIndex = index;\r\n const input = this.nameInputs.get(index)?.nativeElement;\r\n setTimeout(() => input?.focus());\r\n }\r\n }\r\n\r\n updateOption(index: number, event: InputEvent) {\r\n const optionValue = this.optionValues[index];\r\n const newName = (event.target as HTMLInputElement).value;\r\n if (optionValue) {\r\n if (newName) {\r\n optionValue.name = newName;\r\n this.edit.emit({ index, option: optionValue });\r\n }\r\n this.editingIndex = -1;\r\n }\r\n }\r\n\r\n removeOption(option: Option) {\r\n if (!option.locked) {\r\n if (this.formValue) {\r\n this.formValue = this.formValue?.filter(o => o.name !== option.name);\r\n this.onChangeFn(this.formValue);\r\n } else {\r\n this.remove.emit(option);\r\n }\r\n }\r\n }\r\n\r\n handleKey(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case ',':\r\n case 'Enter':\r\n this.addOptionValue();\r\n event.preventDefault();\r\n break;\r\n case 'Backspace':\r\n if (this.lastSelected) {\r\n this.removeLastOption();\r\n this.lastSelected = false;\r\n } else if (this.input === '') {\r\n this.lastSelected = true;\r\n }\r\n break;\r\n default:\r\n this.lastSelected = false;\r\n }\r\n }\r\n\r\n handleBlur() {\r\n this.isFocussed = false;\r\n this.addOptionValue();\r\n }\r\n\r\n private addOptionValue() {\r\n const options = this.parseInputIntoOptions(this.input).filter(option => {\r\n // do not add an option with the same name\r\n // as an existing option\r\n const existing = this.options ?? this.formValue;\r\n return !existing?.find(o => o?.name === option.name);\r\n });\r\n if (!this.formValue && this.options) {\r\n for (const option of options) {\r\n this.add.emit(option);\r\n }\r\n } else {\r\n this.formValue = unique([...this.formValue, ...options]);\r\n this.onChangeFn(this.formValue);\r\n }\r\n this.input = '';\r\n }\r\n\r\n private parseInputIntoOptions(input: string): Option[] {\r\n return input\r\n .split(/[,\\n]/)\r\n .map(s => s.trim())\r\n .filter(s => s !== '')\r\n .map(s => ({ name: s, locked: false }));\r\n }\r\n\r\n private removeLastOption() {\r\n if (this.optionValues.length) {\r\n const option = this.optionValues[this.optionValues.length - 1];\r\n this.removeOption(option);\r\n }\r\n }\r\n}\r\n","<div class=\"input-wrapper\" [class.focus]=\"isFocussed\" (click)=\"textArea.focus()\">\r\n <div class=\"chips\" *ngIf=\"0 < optionValues.length\">\r\n <vdr-chip\r\n *ngFor=\"let option of optionValues; last as isLast; index as i\"\r\n [icon]=\"option.locked ? 'lock' : 'times'\"\r\n [class.selected]=\"isLast && lastSelected\"\r\n [class.locked]=\"option.locked\"\r\n [colorFrom]=\"groupName\"\r\n (iconClick)=\"removeOption(option)\"\r\n >\r\n <span [hidden]=\"editingIndex !== i\">\r\n <input\r\n #editNameInput\r\n type=\"text\"\r\n [ngModel]=\"option.name\"\r\n (blur)=\"updateOption(i, $event)\"\r\n (click)=\"$event.cancelBubble = true\"\r\n />\r\n </span>\r\n <span\r\n class=\"option-name\"\r\n [class.editable]=\"!option.locked && !option.id\"\r\n (click)=\"editName(i, $event)\" [hidden]=\"editingIndex === i\">{{ option.name }}</span>\r\n </vdr-chip>\r\n </div>\r\n <textarea\r\n #textArea\r\n (keyup)=\"handleKey($event)\"\r\n (focus)=\"isFocussed = true\"\r\n (blur)=\"handleBlur()\"\r\n [(ngModel)]=\"input\"\r\n [disabled]=\"disabled\"\r\n ></textarea>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n DeactivateAware,\r\n DeletionResult,\r\n getDefaultUiLanguage,\r\n GetProductVariantOptionsQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n SelectionManager,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { map, startWith, switchMap } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { CreateProductOptionGroupDialogComponent } from '../create-product-option-group-dialog/create-product-option-group-dialog.component';\r\nimport { CreateProductVariantDialogComponent } from '../create-product-variant-dialog/create-product-variant-dialog.component';\r\n\r\nexport class GeneratedVariant {\r\n isDefault: boolean;\r\n options: Array<{ name: string; id?: string }>;\r\n productVariantId?: string;\r\n enabled: boolean;\r\n existing: boolean;\r\n sku: string;\r\n price: number;\r\n stock: number;\r\n\r\n constructor(config: Partial<GeneratedVariant>) {\r\n for (const key of Object.keys(config)) {\r\n this[key] = config[key];\r\n }\r\n }\r\n}\r\n\r\ninterface OptionGroupUiModel {\r\n id?: string;\r\n isNew: boolean;\r\n name: string;\r\n locked: boolean;\r\n values: Array<{\r\n id: string;\r\n name: string;\r\n locked: boolean;\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-product-variants-editor',\r\n templateUrl: './product-variants-editor.component.html',\r\n styleUrls: ['./product-variants-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n})\r\nexport class ProductVariantsEditorComponent implements OnInit, DeactivateAware {\r\n formValueChanged = false;\r\n optionsChanged = false;\r\n optionGroups: OptionGroupUiModel[];\r\n product: NonNullable<GetProductVariantOptionsQuery['product']>;\r\n variants$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['variants']>;\r\n optionGroups$: Observable<NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups']>;\r\n totalItems$: Observable<number>;\r\n currencyCode: CurrencyCode;\r\n itemsPerPage = 100;\r\n currentPage = 1;\r\n searchTermControl = new FormControl('');\r\n selectionManager = new SelectionManager<any>({\r\n multiSelect: true,\r\n itemsAreEqual: (a, b) => a.id === b.id,\r\n additiveMode: true,\r\n });\r\n optionsToAddToVariant: {\r\n [variantId: string]: { [groupId: string]: string };\r\n } = {};\r\n private refresh$ = new Subject<void>();\r\n private languageCode: LanguageCode;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private dataService: DataService,\r\n private productDetailService: ProductDetailService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.languageCode =\r\n (this.route.snapshot.paramMap.get('lang') as LanguageCode) || getDefaultUiLanguage();\r\n this.dataService.settings.getActiveChannel().single$.subscribe(data => {\r\n this.currencyCode = data.activeChannel.defaultCurrencyCode;\r\n });\r\n\r\n const product$ = this.refresh$.pipe(\r\n switchMap(() =>\r\n this.dataService.product\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n .getProductVariantsOptions(this.route.parent?.snapshot.paramMap.get('id')!)\r\n .mapSingle(data => data.product),\r\n ),\r\n startWith(this.route.snapshot.data.product),\r\n );\r\n\r\n this.variants$ = product$.pipe(\r\n switchMap(product =>\r\n this.searchTermControl.valueChanges.pipe(\r\n startWith(''),\r\n map(term =>\r\n term\r\n ? product.variants.filter(v => v.name.toLowerCase().includes(term.toLowerCase()))\r\n : product.variants,\r\n ),\r\n ),\r\n ),\r\n );\r\n this.optionGroups$ = product$.pipe(map(product => product.optionGroups));\r\n this.totalItems$ = this.variants$.pipe(map(variants => variants.length));\r\n\r\n product$.subscribe(p => {\r\n this.product = p;\r\n const allUsedOptionIds = p.variants.map(v => v.options.map(option => option.id)).flat();\r\n const allUsedOptionGroupIds = p.variants.map(v => v.options.map(option => option.groupId)).flat();\r\n this.optionGroups = p.optionGroups.map(og => ({\r\n id: og.id,\r\n isNew: false,\r\n name: og.name,\r\n locked: allUsedOptionGroupIds.includes(og.id),\r\n values: og.options.map(o => ({\r\n id: o.id,\r\n name: o.name,\r\n locked: allUsedOptionIds.includes(o.id),\r\n })),\r\n }));\r\n });\r\n }\r\n\r\n setItemsPerPage(itemsPerPage: number) {\r\n this.itemsPerPage = itemsPerPage;\r\n this.currentPage = 1;\r\n }\r\n\r\n setPageNumber(page: number) {\r\n this.currentPage = page;\r\n }\r\n\r\n onFormChanged(variantInfo: GeneratedVariant) {\r\n this.formValueChanged = true;\r\n variantInfo.enabled = true;\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return !this.formValueChanged;\r\n }\r\n\r\n addOptionGroup() {\r\n this.modalService\r\n .fromComponent(CreateProductOptionGroupDialogComponent, {\r\n locals: {\r\n languageCode: this.languageCode,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.product.createProductOptionGroups(result).pipe(\r\n switchMap(({ createProductOptionGroup }) =>\r\n this.dataService.product.addOptionGroupToProduct({\r\n optionGroupId: createProductOptionGroup.id,\r\n productId: this.product.id,\r\n }),\r\n ),\r\n );\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n this.refresh$.next();\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n removeOptionGroup(\r\n optionGroup: NonNullable<GetProductVariantOptionsQuery['product']>['optionGroups'][number],\r\n ) {\r\n const id = optionGroup.id;\r\n const usedByVariantsCount = this.product.variants.filter(v =>\r\n v.options.map(o => o.groupId).includes(id),\r\n ).length;\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-option-group'),\r\n body: usedByVariantsCount ? _('catalog.confirm-delete-product-option-group-body') : '',\r\n translationVars: { name: optionGroup.name, count: usedByVariantsCount },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(val => {\r\n if (val) {\r\n return this.dataService.product.removeOptionGroupFromProduct({\r\n optionGroupId: id,\r\n productId: this.product.id,\r\n force: true,\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(({ removeOptionGroupFromProduct }) => {\r\n if (removeOptionGroupFromProduct.__typename === 'Product') {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductOptionGroup',\r\n });\r\n this.refresh$.next();\r\n } else if (removeOptionGroupFromProduct.__typename === 'ProductOptionInUseError') {\r\n this.notificationService.error(removeOptionGroupFromProduct.message ?? '');\r\n }\r\n });\r\n }\r\n\r\n addOption(index: number, optionName: string) {\r\n const group = this.optionGroups[index];\r\n if (group && group.id) {\r\n this.dataService.product\r\n .addOptionToGroup({\r\n productOptionGroupId: group.id,\r\n code: normalizeString(optionName, '-'),\r\n translations: [{ name: optionName, languageCode: this.languageCode }],\r\n })\r\n .subscribe(({ createProductOption }) => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductOption',\r\n });\r\n this.refresh$.next();\r\n });\r\n }\r\n }\r\n\r\n removeOption(index: number, { id, name }: { id: string; name: string }) {\r\n const optionGroup = this.optionGroups[index];\r\n if (optionGroup) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-option'),\r\n translationVars: { name },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(val => {\r\n if (val) {\r\n return this.dataService.product.deleteProductOption(id);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(({ deleteProductOption }) => {\r\n if (deleteProductOption.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductOption',\r\n });\r\n optionGroup.values = optionGroup.values.filter(v => v.id !== id);\r\n this.refresh$.next();\r\n } else {\r\n this.notificationService.error(deleteProductOption.message ?? '');\r\n }\r\n });\r\n }\r\n }\r\n\r\n setOptionToAddToVariant(variantId: string, optionGroupId: string, optionId?: string) {\r\n if (!this.optionsToAddToVariant[variantId]) {\r\n this.optionsToAddToVariant[variantId] = {};\r\n }\r\n if (optionId) {\r\n this.optionsToAddToVariant[variantId][optionGroupId] = optionId;\r\n } else {\r\n delete this.optionsToAddToVariant[variantId][optionGroupId];\r\n }\r\n }\r\n\r\n addOptionToVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\r\n const optionIds = [\r\n ...variant.options.map(o => o.id),\r\n ...Object.values(this.optionsToAddToVariant[variant.id]),\r\n ];\r\n this.dataService.product\r\n .updateProductVariants([\r\n {\r\n id: variant.id,\r\n optionIds: unique(optionIds),\r\n },\r\n ])\r\n .subscribe(({ updateProductVariants }) => {\r\n this.refresh$.next();\r\n });\r\n }\r\n\r\n deleteVariant(variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number]) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product-variant'),\r\n translationVars: { name: variant.name },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response\r\n ? this.productDetailService.deleteProductVariant(variant.id, this.product.id)\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.refresh$.next();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'ProductVariant',\r\n });\r\n },\r\n );\r\n }\r\n\r\n createNewVariant() {\r\n this.modalService\r\n .fromComponent(CreateProductVariantDialogComponent, {\r\n locals: {\r\n product: this.product,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.product.createProductVariants([result]);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.refresh$.next();\r\n });\r\n }\r\n\r\n getOption(\r\n variant: NonNullable<GetProductVariantOptionsQuery['product']>['variants'][number],\r\n groupId: string,\r\n ) {\r\n return variant.options.find(o => o.groupId === groupId);\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-card>\r\n <div *ngFor=\"let group of optionGroups; index as i\" class=\"option-groups\">\r\n <vdr-form-field [label]=\"'catalog.option' | translate\">\r\n <input clrInput [(ngModel)]=\"group.name\" name=\"name\" [readonly]=\"!group.isNew\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.option-values' | translate\" class=\"flex-spacer\">\r\n <vdr-option-value-input\r\n #optionValueInputComponent\r\n [options]=\"group.values\"\r\n [groupName]=\"group.name\"\r\n [disabled]=\"group.name === ''\"\r\n (add)=\"addOption(i, $event.name)\"\r\n (remove)=\"removeOption(i, $event)\"\r\n ></vdr-option-value-input>\r\n </vdr-form-field>\r\n <div>\r\n <button class=\"button-small mt-4\" (click)=\"removeOptionGroup(group)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"button mt-1\" (click)=\"addOptionGroup()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-product-option-group' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [paddingX]=\"false\">\r\n <div class=\"mx-3\">\r\n <button class=\"button\" (click)=\"createNewVariant()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n </button>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"manage-product-variant-list\"\r\n [items]=\"variants$ | async\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column *ngFor=\"let optionGroup of optionGroups$ | async\" [heading]=\"optionGroup.name\" [id]=\"optionGroup.code\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip\r\n *ngIf=\"getOption(variant, optionGroup.id) as option; else selectOption\"\r\n [colorFrom]=\"optionGroup.code\"\r\n >{{ option.name }}</vdr-chip\r\n >\r\n <ng-template #selectOption>\r\n <div class=\"flex center\">\r\n <ng-select\r\n [items]=\"optionGroup.options\"\r\n bindLabel=\"name\"\r\n bindValue=\"id\"\r\n appendTo=\"body\"\r\n (change)=\"setOptionToAddToVariant(variant.id, optionGroup.id, $event?.id)\"\r\n ></ng-select>\r\n <button\r\n class=\"button-small ml-1\"\r\n [class.primary]=\"!!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\r\n (click)=\"addOptionToVariant(variant)\"\r\n [disabled]=\"!optionsToAddToVariant[variant.id]?.[optionGroup.id]\"\r\n >\r\n <clr-icon shape=\"floppy\"></clr-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price' | translate\" id=\"price\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.delete' | translate\" id=\"delete\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <button class=\"button-small\" (click)=\"deleteVariant(variant)\">\r\n <clr-icon shape=\"trash is-danger\"></clr-icon>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n</vdr-page-block>\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, GetProductVariantOptionsQuery, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProductVariantsResolver extends BaseEntityResolver<GetProductVariantOptionsQuery['product']> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Product' as const,\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n languageCode: '' as any,\r\n optionGroups: [],\r\n variants: [],\r\n },\r\n id => dataService.product.getProductVariantsOptions(id).mapStream(data => data.product),\r\n );\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CanDeactivateDetailGuard,\r\n createResolveData,\r\n DataService,\r\n PageComponent,\r\n PageService,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\r\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\r\nimport { ProductVariantsResolver } from './providers/routing/product-variants-resolver';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'products',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-list',\r\n breadcrumb: _('breadcrumb.products'),\r\n },\r\n children: pageService.getPageTabRoutes('product-list'),\r\n },\r\n {\r\n path: 'inventory',\r\n redirectTo: 'products',\r\n },\r\n {\r\n path: 'products/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-detail',\r\n breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\r\n },\r\n children: [\r\n {\r\n path: 'manage-variants',\r\n component: ProductVariantsEditorComponent,\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: ({ product }) => [\r\n {\r\n label: `${product.name}`,\r\n link: ['../'],\r\n },\r\n {\r\n label: _('breadcrumb.manage-variants'),\r\n link: ['manage-variants'],\r\n },\r\n ],\r\n },\r\n resolve: {\r\n product: (route: ActivatedRouteSnapshot) =>\r\n inject(DataService)\r\n .product.getProductVariantsOptions(route.parent?.params.id)\r\n .mapSingle(data => data.product),\r\n },\r\n },\r\n ...pageService.getPageTabRoutes('product-detail'),\r\n ],\r\n },\r\n {\r\n path: 'products/:productId/variants/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'product-variant-detail',\r\n breadcrumb: { label: _('breadcrumb.products'), link: ['../', 'products'] },\r\n },\r\n children: pageService.getPageTabRoutes('product-variant-detail'),\r\n },\r\n {\r\n path: 'products/:id/options',\r\n component: ProductOptionsEditorComponent,\r\n resolve: createResolveData(ProductVariantsResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: productOptionsEditorBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'facets',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'facet-list',\r\n breadcrumb: _('breadcrumb.facets'),\r\n },\r\n children: pageService.getPageTabRoutes('facet-list'),\r\n },\r\n {\r\n path: 'facets/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'facet-detail',\r\n breadcrumb: { label: _('breadcrumb.facets'), link: ['../', 'facets'] },\r\n },\r\n children: pageService.getPageTabRoutes('facet-detail'),\r\n },\r\n {\r\n path: 'collections',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'collection-list',\r\n breadcrumb: _('breadcrumb.collections'),\r\n },\r\n children: pageService.getPageTabRoutes('collection-list'),\r\n },\r\n {\r\n path: 'collections/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'collection-detail',\r\n breadcrumb: { label: _('breadcrumb.collections'), link: ['../', 'collections'] },\r\n },\r\n children: pageService.getPageTabRoutes('collection-detail'),\r\n },\r\n {\r\n path: 'assets',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'asset-list',\r\n breadcrumb: _('breadcrumb.assets'),\r\n },\r\n children: pageService.getPageTabRoutes('asset-list'),\r\n },\r\n {\r\n path: 'assets/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'asset-detail',\r\n breadcrumb: { label: _('breadcrumb.assets'), link: ['../', 'assets'] },\r\n },\r\n children: pageService.getPageTabRoutes('asset-detail'),\r\n },\r\n];\r\n\r\nexport function productOptionsEditorBreadcrumb(data: any, params: any) {\r\n return data.entity.pipe(\r\n map((entity: any) => [\r\n {\r\n label: _('breadcrumb.products'),\r\n link: ['../', 'products'],\r\n },\r\n {\r\n label: `${entity.name}`,\r\n link: ['../', 'products', params.id],\r\n },\r\n {\r\n label: _('breadcrumb.product-options'),\r\n link: ['options'],\r\n },\r\n ]),\r\n );\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n Dialog,\r\n FacetValue,\r\n FacetValueSelectorComponent,\r\n FacetWithValuesFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-apply-facet-dialog',\r\n templateUrl: './apply-facet-dialog.component.html',\r\n styleUrls: ['./apply-facet-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ApplyFacetDialogComponent implements Dialog<FacetValue[]>, AfterViewInit {\r\n @ViewChild(FacetValueSelectorComponent) private selector: FacetValueSelectorComponent;\r\n resolveWith: (result?: FacetValue[]) => void;\r\n selectedValues: FacetValue[] = [];\r\n // Provided by caller\r\n facets: FacetWithValuesFragment[];\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.selector.focus(), 0);\r\n }\r\n\r\n selectValues() {\r\n this.resolveWith(this.selectedValues);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'catalog.add-facets' | translate }}</ng-template>\r\n\r\n<vdr-facet-value-selector\r\n (selectedValuesChange)=\"selectedValues = $event\"\r\n></vdr-facet-value-selector>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"selectValues()\"\r\n [disabled]=\"selectedValues.length === 0\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, UntypedFormBuilder } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n ASSET_FRAGMENT,\r\n AssetDetailQueryDocument,\r\n AssetDetailQueryQuery,\r\n DataService,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n NotificationService,\r\n TAG_FRAGMENT,\r\n TypedBaseDetailComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const ASSET_DETAIL_QUERY = gql`\r\n query AssetDetailQuery($id: ID!) {\r\n asset(id: $id) {\r\n ...Asset\r\n tags {\r\n ...Tag\r\n }\r\n }\r\n }\r\n ${ASSET_FRAGMENT}\r\n ${TAG_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-asset-detail',\r\n templateUrl: './asset-detail.component.html',\r\n styleUrls: ['./asset-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssetDetailComponent\r\n extends TypedBaseDetailComponent<typeof AssetDetailQueryDocument, 'asset'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Asset');\r\n detailForm = new FormGroup({\r\n name: new FormControl(''),\r\n tags: new FormControl([] as string[]),\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n\r\n constructor(\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private formBuilder: UntypedFormBuilder,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n onAssetChange(event: { id: string; name: string; tags: string[] }) {\r\n this.detailForm.get('name')?.setValue(event.name);\r\n this.detailForm.get('tags')?.setValue(event.tags);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n save() {\r\n this.dataService.product\r\n .updateAsset({\r\n id: this.id,\r\n name: this.detailForm.value.name,\r\n tags: this.detailForm.value.tags,\r\n customFields: this.detailForm.value.customFields,\r\n })\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Asset' });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Asset',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(\r\n entity: NonNullable<AssetDetailQueryQuery['asset']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n this.detailForm.get('name')?.setValue(entity.name);\r\n this.detailForm.get('tags')?.setValue(entity.tags.map(t => t.id));\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left></vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"asset-detail\" />\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateAsset']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n <vdr-action-bar-dropdown-menu locationId=\"asset-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-page-block>\r\n <vdr-asset-preview\r\n [asset]=\"entity$ | async\"\r\n [editable]=\"true\"\r\n [customFields]=\"customFields\"\r\n [customFieldsForm]=\"detailForm.get('customFields')\"\r\n (assetChange)=\"onAssetChange($event)\"\r\n />\r\n</vdr-page-block>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetAssetListQuery,\r\n GetAssetListQueryVariables,\r\n ItemOf,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n SortOrder,\r\n TagFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { PaginationInstance } from 'ngx-pagination';\r\nimport { BehaviorSubject, combineLatest, EMPTY, Observable } from 'rxjs';\r\nimport { debounceTime, finalize, map, switchMap, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-asset-list',\r\n templateUrl: './asset-list.component.html',\r\n styleUrls: ['./asset-list.component.scss'],\r\n})\r\nexport class AssetListComponent\r\n extends BaseListComponent<\r\n GetAssetListQuery,\r\n ItemOf<GetAssetListQuery, 'assets'>,\r\n GetAssetListQueryVariables\r\n >\r\n implements OnInit\r\n{\r\n searchTerm$ = new BehaviorSubject<string | undefined>(undefined);\r\n filterByTags$ = new BehaviorSubject<TagFragment[] | undefined>(undefined);\r\n uploading = false;\r\n allTags$: Observable<TagFragment[]>;\r\n paginationConfig$: Observable<PaginationInstance>;\r\n\r\n constructor(\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.product.getAssetList(...args).refetchOnChannelChange(),\r\n data => data.assets,\r\n (skip, take) => {\r\n const searchTerm = this.searchTerm$.value;\r\n const tags = this.filterByTags$.value?.map(t => t.value);\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n ...(searchTerm\r\n ? {\r\n filter: {\r\n name: { contains: searchTerm },\r\n },\r\n }\r\n : {}),\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n tags,\r\n tagsOperator: LogicalOperator.AND,\r\n },\r\n };\r\n },\r\n { take: 25, skip: 0 },\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.paginationConfig$ = combineLatest(this.itemsPerPage$, this.currentPage$, this.totalItems$).pipe(\r\n map(([itemsPerPage, currentPage, totalItems]) => ({ itemsPerPage, currentPage, totalItems })),\r\n );\r\n this.searchTerm$.pipe(debounceTime(250), takeUntil(this.destroy$)).subscribe(() => this.refresh());\r\n\r\n this.filterByTags$.pipe(takeUntil(this.destroy$)).subscribe(() => this.refresh());\r\n this.allTags$ = this.dataService.product.getTagList().mapStream(data => data.tags.items);\r\n }\r\n\r\n filesSelected(files: File[]) {\r\n if (files.length) {\r\n this.uploading = true;\r\n this.dataService.product\r\n .createAssets(files)\r\n .pipe(finalize(() => (this.uploading = false)))\r\n .subscribe(({ createAssets }) => {\r\n let successCount = 0;\r\n for (const result of createAssets) {\r\n switch (result.__typename) {\r\n case 'Asset':\r\n successCount++;\r\n break;\r\n case 'MimeTypeError':\r\n this.notificationService.error(result.message);\r\n break;\r\n }\r\n }\r\n if (0 < successCount) {\r\n super.refresh();\r\n this.notificationService.success(_('asset.notify-create-assets-success'), {\r\n count: successCount,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n deleteAssets(assets: Asset[]) {\r\n this.showModalAndDelete(assets.map(a => a.id))\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(\r\n assets.map(a => a.id),\r\n response.message || '',\r\n ).pipe(map(r => r.result === DeletionResult.DELETED));\r\n }\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Assets',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Assets',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(assetIds: string[], message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-assets'),\r\n translationVars: {\r\n count: assetIds.length,\r\n },\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(res => (res ? this.dataService.product.deleteAssets(assetIds, !!message) : EMPTY)),\r\n map(res => res.deleteAssets),\r\n );\r\n }\r\n}\r\n","<vdr-page-block>\r\n <div class=\"my-2\">\r\n <vdr-asset-search-input\r\n [tags]=\"allTags$ | async\"\r\n (searchTermChange)=\"searchTerm$.next($event)\"\r\n (tagsChange)=\"filterByTags$.next($event)\"\r\n >\r\n <vdr-asset-file-input\r\n (selectFiles)=\"filesSelected($event)\"\r\n [uploading]=\"uploading\"\r\n dropZoneTarget=\".content-area\"\r\n ></vdr-asset-file-input>\r\n </vdr-asset-search-input>\r\n </div>\r\n <vdr-asset-gallery\r\n [assets]=\"(items$ | async)! | paginate : (paginationConfig$ | async) || {}\"\r\n [multiSelect]=\"true\"\r\n [canDelete]=\"['DeleteCatalog', 'DeleteAsset'] | hasPermission\"\r\n (deleteAssets)=\"deleteAssets($event)\"\r\n ></vdr-asset-gallery>\r\n\r\n <div class=\"paging-controls\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n</vdr-page-block>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n Dialog,\r\n GetChannelsQuery,\r\n ItemOf,\r\n LogicalOperator,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, from, lastValueFrom, Observable } from 'rxjs';\r\nimport { map, startWith } from 'rxjs/operators';\r\n\r\ntype Channel = ItemOf<GetChannelsQuery, 'channels'>;\r\n\r\n@Component({\r\n selector: 'vdr-assign-products-to-channel-dialog',\r\n templateUrl: './assign-products-to-channel-dialog.component.html',\r\n styleUrls: ['./assign-products-to-channel-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssignProductsToChannelDialogComponent implements OnInit, Dialog<any> {\r\n selectedChannel: Channel | null | undefined;\r\n currentChannel: Channel;\r\n availableChannels: Channel[];\r\n resolveWith: (result?: any) => void;\r\n variantsPreview$: Observable<Array<{ id: string; name: string; price: number; pricePreview: number }>>;\r\n priceFactorControl = new UntypedFormControl(1);\r\n selectedChannelIdControl = new UntypedFormControl();\r\n\r\n // assigned by ModalService.fromComponent() call\r\n productIds: string[];\r\n productVariantIds: string[] | undefined;\r\n currentChannelIds: string[];\r\n\r\n get isProductVariantMode(): boolean {\r\n return this.productVariantIds != null;\r\n }\r\n\r\n constructor(private dataService: DataService, private notificationService: NotificationService) {}\r\n\r\n ngOnInit() {\r\n const activeChannelId$ = this.dataService.client\r\n .userStatus()\r\n .mapSingle(({ userStatus }) => userStatus.activeChannelId);\r\n const allChannels$ = this.dataService.settings.getChannels().mapSingle(data => data.channels);\r\n\r\n combineLatest(activeChannelId$, allChannels$).subscribe(([activeChannelId, channels]) => {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n this.currentChannel = channels.items.find(c => c.id === activeChannelId)!;\r\n this.availableChannels = channels.items;\r\n });\r\n\r\n this.selectedChannelIdControl.valueChanges.subscribe(ids => {\r\n this.selectChannel(ids);\r\n });\r\n\r\n this.variantsPreview$ = combineLatest(\r\n from(this.getTopVariants(10)),\r\n this.priceFactorControl.valueChanges.pipe(startWith(1)),\r\n ).pipe(\r\n map(([variants, factor]) =>\r\n variants.map(v => ({\r\n id: v.id,\r\n name: v.name,\r\n price: v.price,\r\n pricePreview: v.price * +factor,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n selectChannel(channelIds: string[]) {\r\n this.selectedChannel = this.availableChannels.find(c => c.id === channelIds[0]);\r\n }\r\n\r\n assign() {\r\n const selectedChannel = this.selectedChannel;\r\n if (selectedChannel) {\r\n if (!this.isProductVariantMode) {\r\n this.dataService.product\r\n .assignProductsToChannel({\r\n channelId: selectedChannel.id,\r\n productIds: this.productIds,\r\n priceFactor: +this.priceFactorControl.value,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('catalog.assign-product-to-channel-success'), {\r\n channel: selectedChannel.code,\r\n count: this.productIds.length,\r\n });\r\n this.resolveWith(true);\r\n });\r\n } else if (this.productVariantIds) {\r\n this.dataService.product\r\n .assignVariantsToChannel({\r\n channelId: selectedChannel.id,\r\n productVariantIds: this.productVariantIds,\r\n priceFactor: +this.priceFactorControl.value,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('catalog.assign-variant-to-channel-success'), {\r\n channel: selectedChannel.code,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n count: this.productVariantIds!.length,\r\n });\r\n this.resolveWith(true);\r\n });\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private async getTopVariants(take: number) {\r\n return (\r\n await lastValueFrom(\r\n this.dataService.product.getProductVariants({\r\n filterOperator: LogicalOperator.OR,\r\n filter: {\r\n productId: { in: this.productIds },\r\n id: { in: this.productVariantIds },\r\n },\r\n take,\r\n }).single$,\r\n )\r\n ).productVariants.items;\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <ng-container *ngIf=\"isProductVariantMode; else productModeTitle\">{{\r\n 'catalog.assign-variants-to-channel' | translate\r\n }}</ng-container>\r\n <ng-template #productModeTitle>{{ 'catalog.assign-products-to-channel' | translate }}</ng-template>\r\n</ng-template>\r\n\r\n<div class=\"flex\">\r\n <clr-input-container>\r\n <label>{{ 'common.channel' | translate }}</label>\r\n <vdr-channel-assignment-control\r\n clrInput\r\n [multiple]=\"false\"\r\n [includeDefaultChannel]=\"false\"\r\n [disableChannelIds]=\"currentChannelIds\"\r\n [formControl]=\"selectedChannelIdControl\"\r\n ></vdr-channel-assignment-control>\r\n </clr-input-container>\r\n <div class=\"flex-spacer\"></div>\r\n <clr-input-container>\r\n <label>{{ 'catalog.price-conversion-factor' | translate }}</label>\r\n <input clrInput type=\"number\" min=\"0\" max=\"99999\" [formControl]=\"priceFactorControl\" />\r\n </clr-input-container>\r\n</div>\r\n\r\n<div class=\"channel-price-preview\">\r\n <label class=\"clr-control-label\">{{ 'catalog.channel-price-preview' | translate }}</label>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>\r\n {{\r\n 'catalog.price-in-channel'\r\n | translate: { channel: currentChannel?.code | channelCodeToLabel | translate }\r\n }}\r\n </th>\r\n <th>\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\r\n {{ 'catalog.price-in-channel' | translate: { channel: selectedChannel?.code } }}\r\n </ng-template>\r\n <ng-template #noSelection>\r\n {{ 'catalog.no-channel-selected' | translate }}\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of variantsPreview$ | async\">\r\n <td>{{ row.name }}</td>\r\n <td>{{ row.price | localeCurrency: currentChannel?.defaultCurrencyCode }}</td>\r\n <td>\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noChannelSelected\">\r\n {{ row.pricePreview | localeCurrency: selectedChannel?.defaultCurrencyCode }}\r\n </ng-template>\r\n <ng-template #noChannelSelected> - </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"assign()\" [disabled]=\"!selectedChannel\" class=\"btn btn-primary\">\r\n <ng-template [ngIf]=\"selectedChannel\" [ngIfElse]=\"noSelection\">\r\n {{ 'catalog.assign-to-named-channel' | translate: { channelCode: selectedChannel?.code } }}\r\n </ng-template>\r\n <ng-template #noSelection>\r\n {{ 'catalog.no-channel-selected' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n","import { gql } from 'apollo-angular';\r\n\r\nexport const GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS = gql`\r\n query GetProductsWithFacetValuesByIds($ids: [String!]!) {\r\n products(options: { filter: { id: { in: $ids } } }) {\r\n items {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n facet {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const GET_VARIANTS_WITH_FACET_VALUES_BY_IDS = gql`\r\n query GetVariantsWithFacetValuesByIds($ids: [String!]!) {\r\n productVariants(options: { filter: { id: { in: $ids } } }) {\r\n items {\r\n id\r\n name\r\n sku\r\n facetValues {\r\n id\r\n name\r\n code\r\n facet {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_PRODUCTS_BULK = gql`\r\n mutation UpdateProductsBulk($input: [UpdateProductInput!]!) {\r\n updateProducts(input: $input) {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_VARIANTS_BULK = gql`\r\n mutation UpdateVariantsBulk($input: [UpdateProductVariantInput!]!) {\r\n updateProductVariants(input: $input) {\r\n id\r\n name\r\n facetValues {\r\n id\r\n name\r\n code\r\n }\r\n }\r\n }\r\n`;\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n DataService,\r\n Dialog,\r\n FacetWithValuesFragment,\r\n GetProductsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables,\r\n GetVariantsWithFacetValuesByIdsQuery,\r\n UpdateProductsBulkMutation,\r\n UpdateProductsBulkMutationVariables,\r\n UpdateVariantsBulkMutation,\r\n UpdateVariantsBulkMutationVariables,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nimport {\r\n GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS,\r\n GET_VARIANTS_WITH_FACET_VALUES_BY_IDS,\r\n UPDATE_PRODUCTS_BULK,\r\n UPDATE_VARIANTS_BULK,\r\n} from './bulk-add-facet-values-dialog.graphql';\r\n\r\ninterface ProductOrVariant {\r\n id: string;\r\n name: string;\r\n sku?: string;\r\n facetValues: Array<{\r\n id: string;\r\n name: string;\r\n code: string;\r\n facet: Array<{\r\n id: string;\r\n name: string;\r\n code: string;\r\n }>;\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-bulk-add-facet-values-dialog',\r\n templateUrl: './bulk-add-facet-values-dialog.component.html',\r\n styleUrls: ['./bulk-add-facet-values-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BulkAddFacetValuesDialogComponent\r\n implements OnInit, OnDestroy, Dialog<FacetWithValuesFragment[]>\r\n{\r\n resolveWith: (result?: FacetWithValuesFragment[]) => void;\r\n /* provided by call to ModalService */\r\n mode: 'product' | 'variant' = 'product';\r\n ids?: string[];\r\n state: 'loading' | 'ready' | 'saving' = 'loading';\r\n\r\n selectedValues: FacetWithValuesFragment[] = [];\r\n items: ProductOrVariant[] = [];\r\n facetValuesRemoved = false;\r\n private subscription: Subscription;\r\n constructor(private dataService: DataService, private changeDetectorRef: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n const fetchData$: Observable<any> =\r\n this.mode === 'product'\r\n ? this.dataService\r\n .query<\r\n GetProductsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables\r\n >(GET_PRODUCTS_WITH_FACET_VALUES_BY_IDS, {\r\n ids: this.ids ?? [],\r\n })\r\n .mapSingle(({ products }) =>\r\n products.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\r\n )\r\n : this.dataService\r\n .query<\r\n GetVariantsWithFacetValuesByIdsQuery,\r\n GetProductsWithFacetValuesByIdsQueryVariables\r\n >(GET_VARIANTS_WITH_FACET_VALUES_BY_IDS, {\r\n ids: this.ids ?? [],\r\n })\r\n .mapSingle(({ productVariants }) =>\r\n productVariants.items.map(p => ({ ...p, facetValues: [...p.facetValues] })),\r\n );\r\n this.subscription = fetchData$.subscribe({\r\n next: items => {\r\n this.items = items;\r\n this.state = 'ready';\r\n this.changeDetectorRef.markForCheck();\r\n },\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n removeFacetValue(item: ProductOrVariant, facetValueId: string) {\r\n item.facetValues = item.facetValues.filter(fv => fv.id !== facetValueId);\r\n this.facetValuesRemoved = true;\r\n }\r\n\r\n addFacetValues() {\r\n const selectedFacetValueIds = this.selectedValues.map(sv => sv.id);\r\n this.state = 'saving';\r\n const save$: Observable<any> =\r\n this.mode === 'product'\r\n ? this.dataService.mutate<UpdateProductsBulkMutation, UpdateProductsBulkMutationVariables>(\r\n UPDATE_PRODUCTS_BULK,\r\n {\r\n input: this.items?.map(product => ({\r\n id: product.id,\r\n facetValueIds: unique([\r\n ...product.facetValues.map(fv => fv.id),\r\n ...selectedFacetValueIds,\r\n ]),\r\n })),\r\n },\r\n )\r\n : this.dataService.mutate<UpdateVariantsBulkMutation, UpdateVariantsBulkMutationVariables>(\r\n UPDATE_VARIANTS_BULK,\r\n {\r\n input: this.items?.map(product => ({\r\n id: product.id,\r\n facetValueIds: unique([\r\n ...product.facetValues.map(fv => fv.id),\r\n ...selectedFacetValueIds,\r\n ]),\r\n })),\r\n },\r\n );\r\n return save$.subscribe(result => {\r\n this.resolveWith(this.selectedValues);\r\n });\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.edit-facet-values' | translate }}\r\n</ng-template>\r\n\r\n<div class=\"flex\">\r\n <div class=\"flex center\">\r\n <div class=\"mr2\">\r\n {{ 'catalog.add-facet-value' | translate }}\r\n </div>\r\n <vdr-facet-value-selector\r\n (selectedValuesChange)=\"selectedValues = $event\"\r\n ></vdr-facet-value-selector>\r\n </div>\r\n</div>\r\n\r\n<table class=\"table\" *ngIf=\"state !== 'loading'; else placeholder\">\r\n <tbody>\r\n <tr *ngFor=\"let item of items\">\r\n <td class=\"left align-middle\">\r\n <div>{{ item.name }}</div>\r\n <div *ngIf=\"item.sku\" class=\"sku\">{{ item.sku }}</div>\r\n </td>\r\n <td class=\"left\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of item.facetValues\"\r\n [facetValue]=\"facetValue\"\r\n (remove)=\"removeFacetValue(item, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<ng-template #placeholder>\r\n <div class=\"loading\">\r\n <clr-spinner></clr-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"addFacetValues()\"\r\n [disabled]=\"selectedValues.length === 0 && facetValuesRemoved === false\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n CollectionFilterParameter,\r\n ConfigurableOperationInput,\r\n DataService,\r\n GetCollectionContentsQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\r\nimport {\r\n catchError,\r\n debounceTime,\r\n distinctUntilChanged,\r\n filter,\r\n finalize,\r\n map,\r\n startWith,\r\n switchMap,\r\n takeUntil,\r\n tap,\r\n} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-collection-contents',\r\n templateUrl: './collection-contents.component.html',\r\n styleUrls: ['./collection-contents.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionContentsComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() collectionId: string;\r\n @Input() parentId: string;\r\n @Input() inheritFilters: boolean;\r\n @Input() updatedFilters: ConfigurableOperationInput[] | undefined;\r\n @Input() previewUpdatedFilters = false;\r\n @ContentChild(TemplateRef, { static: true }) headerTemplate: TemplateRef<any>;\r\n\r\n contents$: Observable<NonNullable<GetCollectionContentsQuery['collection']>['productVariants']['items']>;\r\n contentsTotalItems$: Observable<number>;\r\n contentsItemsPerPage$: Observable<number>;\r\n contentsCurrentPage$: Observable<number>;\r\n filterTermControl = new UntypedFormControl('');\r\n isLoading = false;\r\n private collectionIdChange$ = new BehaviorSubject<string>('');\r\n private parentIdChange$ = new BehaviorSubject<string>('');\r\n private filterChanges$ = new BehaviorSubject<ConfigurableOperationInput[]>([]);\r\n private inheritFiltersChanges$ = new BehaviorSubject<boolean>(true);\r\n private refresh$ = new BehaviorSubject<boolean>(true);\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(private route: ActivatedRoute, private router: Router, private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.contentsCurrentPage$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('contentsPage')),\r\n map(page => (!page ? 1 : +page)),\r\n startWith(1),\r\n distinctUntilChanged(),\r\n );\r\n\r\n this.contentsItemsPerPage$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('contentsPerPage')),\r\n map(perPage => (!perPage ? 10 : +perPage)),\r\n startWith(10),\r\n distinctUntilChanged(),\r\n );\r\n\r\n const filterTerm$ = this.filterTermControl.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith(''),\r\n );\r\n\r\n const filterChanges$ = this.filterChanges$.asObservable().pipe(\r\n filter(() => this.previewUpdatedFilters),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith([]),\r\n );\r\n\r\n const inheritFiltersChanges$ = this.inheritFiltersChanges$.asObservable().pipe(\r\n filter(() => this.inheritFilters != null),\r\n distinctUntilChanged(),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith(true),\r\n );\r\n\r\n const fetchUpdate$ = combineLatest(\r\n this.collectionIdChange$,\r\n this.parentIdChange$,\r\n this.contentsCurrentPage$,\r\n this.contentsItemsPerPage$,\r\n filterTerm$,\r\n filterChanges$,\r\n inheritFiltersChanges$,\r\n this.refresh$,\r\n );\r\n\r\n const collection$ = fetchUpdate$.pipe(\r\n takeUntil(this.destroy$),\r\n tap(() => (this.isLoading = true)),\r\n debounceTime(50),\r\n switchMap(([id, parentId, currentPage, itemsPerPage, filterTerm, filters, inheritFilters]) => {\r\n const take = itemsPerPage;\r\n const skip = (currentPage - 1) * itemsPerPage;\r\n if (filters.length && this.previewUpdatedFilters) {\r\n const filterClause = filterTerm\r\n ? ({ name: { contains: filterTerm } } as CollectionFilterParameter)\r\n : undefined;\r\n return this.dataService.collection\r\n .previewCollectionVariants(\r\n {\r\n parentId,\r\n filters,\r\n inheritFilters,\r\n },\r\n {\r\n take,\r\n skip,\r\n filter: filterClause,\r\n },\r\n )\r\n .mapSingle(data => data.previewCollectionVariants)\r\n .pipe(catchError(() => of({ items: [], totalItems: 0 })));\r\n } else if (id) {\r\n return this.dataService.collection\r\n .getCollectionContents(id, take, skip, filterTerm)\r\n .mapSingle(data => data.collection?.productVariants);\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n tap(() => (this.isLoading = false)),\r\n finalize(() => (this.isLoading = false)),\r\n );\r\n\r\n this.contents$ = collection$.pipe(map(result => (result ? result.items : [])));\r\n this.contentsTotalItems$ = collection$.pipe(map(result => (result ? result.totalItems : 0)));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('collectionId' in changes) {\r\n this.collectionIdChange$.next(changes.collectionId.currentValue);\r\n }\r\n if ('parentId' in changes) {\r\n this.parentIdChange$.next(changes.parentId.currentValue);\r\n }\r\n if ('inheritFilters' in changes) {\r\n this.inheritFiltersChanges$.next(changes.inheritFilters.currentValue);\r\n }\r\n if ('updatedFilters' in changes) {\r\n if (this.updatedFilters) {\r\n this.filterChanges$.next(this.updatedFilters);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n setContentsPageNumber(page: number) {\r\n this.setParam('contentsPage', page);\r\n }\r\n\r\n setContentsItemsPerPage(perPage: number) {\r\n this.setParam('contentsPerPage', perPage);\r\n }\r\n\r\n refresh() {\r\n this.refresh$.next(true);\r\n }\r\n\r\n private setParam(key: string, value: any) {\r\n this.router.navigate(['./'], {\r\n relativeTo: this.route,\r\n queryParams: {\r\n [key]: value,\r\n },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n}\r\n","<div class=\"table-wrapper\">\r\n <div class=\"progress loop\" [class.visible]=\"isLoading\"></div>\r\n <div class=\"header-title-row\">\r\n <ng-container\r\n *ngTemplateOutlet=\"headerTemplate; context: { $implicit: contentsTotalItems$ | async }\"\r\n ></ng-container>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"collection-contents\"\r\n [class.loading]=\"isLoading\"\r\n [items]=\"contents$ | async\"\r\n [itemsPerPage]=\"contentsItemsPerPage$ | async\"\r\n [totalItems]=\"contentsTotalItems$ | async\"\r\n [currentPage]=\"contentsCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/catalog/products', variant.productId]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n</div>\r\n","import { CdkDrag, CdkDragDrop, CdkDropList, DragRef } from '@angular/cdk/drag-drop';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { DataService, DataTable2Component, GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\r\n\r\nexport type CollectionTableItem = ItemOf<GetCollectionListQuery, 'collections'>;\r\nexport type CollectionOrderEvent = {\r\n collectionId: string;\r\n parentId: string;\r\n index: number;\r\n};\r\n@Component({\r\n selector: 'vdr-collection-data-table',\r\n templateUrl: './collection-data-table.component.html',\r\n styleUrls: [\r\n '../../../../core/src/shared/components/data-table-2/data-table2.component.scss',\r\n './collection-data-table.component.scss',\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionDataTableComponent\r\n extends DataTable2Component<CollectionTableItem>\r\n implements OnChanges, AfterViewInit\r\n{\r\n @Input() subCollections: CollectionTableItem[];\r\n @Output() changeOrder = new EventEmitter<CollectionOrderEvent>();\r\n @ViewChild(CdkDropList, { static: true }) dropList: CdkDropList<{\r\n depth: number;\r\n collection: CollectionTableItem;\r\n }>;\r\n @ViewChildren('collectionRow', { read: CdkDrag }) collectionRowList: QueryList<CdkDrag>;\r\n dragRefs: DragRef[] = [];\r\n absoluteIndex: { [id: string]: number } = {};\r\n constructor(\r\n protected changeDetectorRef: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n ) {\r\n super(changeDetectorRef, dataService);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n if (changes.subCollections || changes.items) {\r\n const allCollections: CollectionTableItem[] = [];\r\n for (const collection of this.items ?? []) {\r\n allCollections.push(collection);\r\n const subCollectionMatches = this.getSubcollections(collection);\r\n allCollections.push(...subCollectionMatches.flat());\r\n }\r\n allCollections.forEach((collection, index) => (this.absoluteIndex[collection.id] = index));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.collectionRowList.changes.subscribe((val: QueryList<CdkDrag>) => {\r\n this.dropList.getSortedItems().forEach(item => this.dropList.removeItem(item));\r\n for (const ref of val.toArray()) {\r\n ref.dropContainer = this.dropList;\r\n ref._dragRef._withDropContainer(this.dropList._dropListRef);\r\n this.dropList.addItem(ref);\r\n }\r\n });\r\n }\r\n\r\n getSubcollections(item: CollectionTableItem) {\r\n return this.subCollections?.filter(c => c.parentId === item.id) ?? [];\r\n }\r\n\r\n sortPredicate = (index: number, item: CdkDrag<{ depth: number; collection: CollectionTableItem }>) => {\r\n const itemAtIndex = this.dropList.getSortedItems()[index];\r\n return itemAtIndex?.data.collection.parentId === item.data.collection.parentId;\r\n };\r\n\r\n onDrop(\r\n event: CdkDragDrop<{\r\n depth: number;\r\n collection: CollectionTableItem;\r\n }>,\r\n ) {\r\n const isTopLevel = event.item.data.collection.breadcrumbs.length === 2;\r\n const pageIndexOffset = isTopLevel ? (this.currentPage - 1) * this.itemsPerPage : 0;\r\n const parentId = event.item.data.collection.parentId;\r\n const parentIndex = this.items.findIndex(i => i.id === parentId);\r\n const adjustedIndex = pageIndexOffset + event.currentIndex - parentIndex - 1;\r\n this.changeOrder.emit({\r\n collectionId: event.item.data.collection.id,\r\n index: adjustedIndex,\r\n parentId: event.item.data.collection.parentId,\r\n });\r\n\r\n if (isTopLevel) {\r\n this.items = [...this.items];\r\n this.items.splice(event.previousIndex, 1);\r\n this.items.splice(event.currentIndex, 0, event.item.data.collection);\r\n } else {\r\n const parent = this.items.find(i => i.id === parentId);\r\n if (parent) {\r\n const subCollections = this.getSubcollections(parent);\r\n const adjustedPreviousIndex = pageIndexOffset + event.previousIndex - parentIndex - 1;\r\n subCollections.splice(adjustedPreviousIndex, 1);\r\n subCollections.splice(event.currentIndex, 0, event.item.data.collection);\r\n }\r\n }\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n}\r\n","<vdr-data-table-filter-presets\r\n *ngIf=\"filters\"\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n></vdr-data-table-filter-presets>\r\n<div class=\"table-wrapper\">\r\n <div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n </div>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <vdr-ui-extension-point\r\n [locationId]=\"id\"\r\n [metadata]=\"column.id\"\r\n api=\"dataTable\"\r\n [topPx]=\"-6\"\r\n [leftPx]=\"-24\"\r\n display=\"block\"\r\n >\r\n <span>{{ column.heading }}</span>\r\n </vdr-ui-extension-point>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngIf=\"customComponents.get(column.id) as componentConfig; else defaultComponent\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentConfig.config.component;\r\n inputs: { rowItem: item };\r\n injector: componentConfig.injector\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-template #defaultComponent>\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormBuilder, UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n COLLECTION_FRAGMENT,\r\n CollectionDetailQueryDocument,\r\n CollectionFragment,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n ConfigurableOperationInput,\r\n CreateCollectionInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n encodeConfigArgValue,\r\n findTranslation,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n LanguageCode,\r\n LocalStorageService,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n unicodePatternValidator,\r\n UpdateCollectionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { CollectionContentsComponent } from '../collection-contents/collection-contents.component';\r\n\r\nexport const COLLECTION_DETAIL_QUERY = gql`\r\n query CollectionDetailQuery($id: ID!) {\r\n collection(id: $id) {\r\n ...Collection\r\n }\r\n }\r\n ${COLLECTION_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-collection-detail',\r\n templateUrl: './collection-detail.component.html',\r\n styleUrls: ['./collection-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionDetailComponent\r\n extends TypedBaseDetailComponent<typeof CollectionDetailQueryDocument, 'collection'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Collection');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/)],\r\n description: '',\r\n visible: false,\r\n inheritFilters: true,\r\n filters: this.formBuilder.array([]),\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n assetChanges: { assets?: Asset[]; featuredAsset?: Asset } = {};\r\n filters: ConfigurableOperation[] = [];\r\n allFilters: ConfigurableOperationDefinition[] = [];\r\n updatedFilters$: Observable<ConfigurableOperationInput[]>;\r\n inheritFilters$: Observable<boolean>;\r\n livePreview = false;\r\n parentId$: Observable<string | undefined>;\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateCollection];\r\n private filterRemoved$ = new Subject<void>();\r\n @ViewChild('collectionContents') contentsComponent: CollectionContentsComponent;\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private localStorageService: LocalStorageService,\r\n ) {\r\n super();\r\n this.livePreview = this.localStorageService.get('livePreviewCollectionContents') ?? false;\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.collection.getCollectionFilters().single$.subscribe(res => {\r\n this.allFilters = res.collectionFilters;\r\n });\r\n const filtersFormArray = this.detailForm.get('filters') as UntypedFormArray;\r\n const inheritFiltersControl = this.detailForm.get('inheritFilters') as UntypedFormControl;\r\n this.inheritFilters$ = inheritFiltersControl.valueChanges.pipe(distinctUntilChanged());\r\n this.updatedFilters$ = merge(filtersFormArray.statusChanges, this.filterRemoved$).pipe(\r\n debounceTime(200),\r\n filter(() => filtersFormArray.touched),\r\n map(() =>\r\n this.mapOperationsToInputs(this.filters, filtersFormArray.value).filter(_filter => {\r\n // ensure all the arguments have valid values. E.g. a newly-added\r\n // filter will not yet have valid values\r\n for (const arg of _filter.arguments) {\r\n if (arg.value === '') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }),\r\n ),\r\n );\r\n this.parentId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('parentId') || undefined),\r\n switchMap(parentId => {\r\n if (parentId) {\r\n return of(parentId);\r\n } else {\r\n return this.entity$.pipe(map(collection => collection.parent?.id));\r\n }\r\n }),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n getFilterDefinition(_filter: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allFilters.find(f => f.code === _filter.code);\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n /**\r\n * If creating a new Collection, automatically generate the slug based on the collection name.\r\n */\r\n updateSlug(nameValue: string) {\r\n const slugControl = this.detailForm.get(['slug']);\r\n const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\r\n const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\r\n if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\r\n slugControl.setValue(normalizeString(`${nameValue}`, '-'));\r\n }\r\n }\r\n\r\n addFilter(collectionFilter: ConfigurableOperation) {\r\n const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\r\n const argsHash = collectionFilter.args.reduce(\r\n (output, arg) => ({\r\n ...output,\r\n [arg.name]: getConfigArgValue(arg.value),\r\n }),\r\n {},\r\n );\r\n filtersArray.push(\r\n this.formBuilder.control({\r\n code: collectionFilter.code,\r\n args: argsHash,\r\n }),\r\n );\r\n this.filters.push({\r\n code: collectionFilter.code,\r\n args: collectionFilter.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\r\n });\r\n }\r\n\r\n removeFilter(index: number) {\r\n const filtersArray = this.detailForm.get('filters') as UntypedFormArray;\r\n if (index !== -1) {\r\n filtersArray.removeAt(index);\r\n filtersArray.markAsDirty();\r\n filtersArray.markAsTouched();\r\n this.filters.splice(index, 1);\r\n this.filterRemoved$.next();\r\n }\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const input = this.getUpdatedCollection(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n languageCode: this.languageCode,\r\n name: '',\r\n slug: '',\r\n isPrivate: false,\r\n breadcrumbs: [],\r\n description: '',\r\n featuredAsset: null,\r\n assets: [],\r\n translations: [],\r\n inheritFilters: true,\r\n filters: [],\r\n parent: {} as any,\r\n children: null,\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n ) as CreateCollectionInput;\r\n const parentId = this.route.snapshot.paramMap.get('parentId');\r\n if (parentId) {\r\n input.parentId = parentId;\r\n }\r\n this.dataService.collection.createCollection(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Collection',\r\n });\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCollection.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Collection',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([category, languageCode]) => {\r\n const input = this.getUpdatedCollection(\r\n category,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateCollectionInput;\r\n return this.dataService.collection.updateCollection(input);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Collection',\r\n });\r\n this.contentsComponent.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Collection',\r\n });\r\n },\r\n );\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\r\n }\r\n\r\n toggleLivePreview() {\r\n this.livePreview = !this.livePreview;\r\n this.localStorageService.set('livePreviewCollectionContents', this.livePreview);\r\n }\r\n\r\n trackByFn(index: number, item: ConfigurableOperation) {\r\n return JSON.stringify(item);\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the category or current language.\r\n */\r\n protected setFormValues(entity: CollectionFragment, languageCode: LanguageCode) {\r\n const currentTranslation = findTranslation(entity, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n name: currentTranslation ? currentTranslation.name : '',\r\n slug: currentTranslation ? currentTranslation.slug : '',\r\n description: currentTranslation ? currentTranslation.description : '',\r\n visible: !entity.isPrivate,\r\n inheritFilters: entity.inheritFilters,\r\n });\r\n\r\n const formArray = this.detailForm.get('filters') as UntypedFormArray;\r\n if (formArray.length !== entity.filters.length) {\r\n formArray.clear();\r\n this.filters = [];\r\n entity.filters.forEach(f => this.addFilter(f));\r\n }\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n entity,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a category and the value of the form, this method creates an updated copy of the category which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedCollection(\r\n category: CollectionFragment,\r\n form: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): CreateCollectionInput | UpdateCollectionInput {\r\n const updatedCategory = createUpdatedTranslatable({\r\n translatable: category,\r\n updatedFields: form.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: category.name || '',\r\n slug: category.slug || '',\r\n description: category.description || '',\r\n },\r\n });\r\n return {\r\n ...updatedCategory,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n isPrivate: !form.value.visible,\r\n filters: this.mapOperationsToInputs(this.filters, this.detailForm.value.filters),\r\n };\r\n }\r\n\r\n /**\r\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\r\n */\r\n private mapOperationsToInputs(\r\n operations: ConfigurableOperation[],\r\n formValueOperations: any,\r\n ): ConfigurableOperationInput[] {\r\n return operations.map((o, i) => ({\r\n code: o.code,\r\n arguments: Object.entries(formValueOperations[i].args).map(([name, value], j) => ({\r\n name,\r\n value: encodeConfigArgValue(value),\r\n })),\r\n }));\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-detail\" />\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"collection-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.visible; else private\">{{\r\n 'catalog.public' | translate\r\n }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block *ngIf=\"entity$ | async as entity\"\r\n ><nav role=\"navigation\">\r\n <ul class=\"collection-breadcrumbs\">\r\n <li *ngFor=\"let breadcrumb of entity.breadcrumbs; let isFirst = first; let isLast = last\">\r\n <a [routerLink]=\"['/catalog/collections']\" *ngIf=\"isFirst\">{{\r\n 'catalog.root-collection' | translate\r\n }}</a>\r\n <a\r\n [routerLink]=\"['/catalog/collections', breadcrumb.id]\"\r\n *ngIf=\"!isFirst && !isLast\"\r\n >{{ breadcrumb.name | translate }}</a\r\n >\r\n <ng-container *ngIf=\"isLast\">{{ breadcrumb.name | translate }}</ng-container>\r\n </li>\r\n </ul>\r\n </nav>\r\n </vdr-page-block>\r\n\r\n <vdr-page-block>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: ('catalog.slug-pattern-error' | translate) }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Collection\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"collection-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"entity?.assets\"\r\n [featuredAsset]=\"entity?.featuredAsset\"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.filters' | translate\">\r\n <vdr-form-field [label]=\"'catalog.filter-inheritance' | translate\" for=\"inheritFilters\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"inheritFilters\"\r\n id=\"inheritFilters\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.inheritFilters; else noInherit\">{{\r\n 'catalog.inherit-filters-from-parent' | translate\r\n }}</ng-container>\r\n <ng-template #noInherit>{{\r\n 'catalog.do-not-inherit-filters' | translate\r\n }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <div formArrayName=\"filters\">\r\n <ng-container *ngFor=\"let filter of filters; index as i; trackBy: trackByFn\">\r\n <vdr-configurable-input\r\n (remove)=\"removeFilter(i)\"\r\n [position]=\"i\"\r\n [operation]=\"filter\"\r\n [operationDefinition]=\"getFilterDefinition(filter)\"\r\n [formControlName]=\"i\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-configurable-input>\r\n </ng-container>\r\n </div>\r\n <div *vdrIfPermissions=\"updatePermission\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n <span>{{ 'marketing.add-condition' | translate }}</span>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let filter of allFilters\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"addFilter(filter)\"\r\n >\r\n {{ filter.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card [title]=\"'common.contents' | translate\" [paddingX]=\"false\">\r\n <vdr-collection-contents\r\n [collectionId]=\"id\"\r\n [parentId]=\"parentId$ | async\"\r\n [updatedFilters]=\"updatedFilters$ | async\"\r\n [inheritFilters]=\"inheritFilters$ | async\"\r\n [previewUpdatedFilters]=\"livePreview\"\r\n #collectionContents\r\n >\r\n <ng-template let-count>\r\n <div class=\"ml-3\">\r\n <div class=\"contents-title\">\r\n {{ 'catalog.collection-contents' | translate }} ({{\r\n 'common.results-count' | translate : { count: count }\r\n }})\r\n </div>\r\n <clr-checkbox-wrapper [class.disabled]=\"detailForm.get('filters')?.pristine\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [disabled]=\"detailForm.get('filters')?.pristine\"\r\n [ngModel]=\"livePreview\"\r\n (ngModelChange)=\"toggleLivePreview()\"\r\n />\r\n <label>{{ 'catalog.live-preview-contents' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GetCollectionListQuery, ItemOf } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Removes the root collection and self breadcrumb from the collection breadcrumb list.\r\n */\r\n@Pipe({\r\n name: 'collectionBreadcrumb',\r\n})\r\nexport class CollectionBreadcrumbPipe implements PipeTransform {\r\n transform(value: ItemOf<GetCollectionListQuery, 'collections'>): unknown {\r\n return value?.breadcrumbs.slice(1, -1);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DataService, Dialog, GetCollectionListQuery, I18nService, ItemOf } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-move-collections-dialog',\r\n templateUrl: './move-collections-dialog.component.html',\r\n styleUrls: ['./move-collections-dialog.component.scss', '../collection-list/collection-list-common.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MoveCollectionsDialogComponent\r\n implements OnInit, Dialog<ItemOf<GetCollectionListQuery, 'collections'>>\r\n{\r\n resolveWith: (result?: ItemOf<GetCollectionListQuery, 'collections'>) => void;\r\n searchTermControl = new FormControl('');\r\n items$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n totalItems$: Observable<number>;\r\n currentPage$ = new BehaviorSubject(1);\r\n itemsPerPage$ = new BehaviorSubject(10);\r\n expandedIds$ = new Subject<string[]>();\r\n expandedIds: string[] = [];\r\n subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n\r\n constructor(private dataService: DataService, private i18nService: I18nService) {}\r\n\r\n ngOnInit() {\r\n const getCollectionsResult = this.dataService.collection.getCollections();\r\n\r\n const searchTerm$ = this.searchTermControl.valueChanges.pipe(\r\n debounceTime(250),\r\n distinctUntilChanged(),\r\n startWith(''),\r\n );\r\n const currentPage$ = this.currentPage$.pipe(distinctUntilChanged());\r\n const itemsPerPage$ = this.itemsPerPage$.pipe(distinctUntilChanged());\r\n combineLatest(searchTerm$, currentPage$, itemsPerPage$).subscribe(\r\n ([searchTerm, currentPage, itemsPerPage]) => {\r\n const topLevelOnly = searchTerm === '';\r\n getCollectionsResult.ref.refetch({\r\n options: {\r\n skip: (currentPage - 1) * itemsPerPage,\r\n take: itemsPerPage,\r\n filter: {\r\n name: { contains: searchTerm },\r\n },\r\n topLevelOnly,\r\n },\r\n });\r\n },\r\n );\r\n\r\n const rootCollectionId$ = this.dataService.collection\r\n .getCollections({\r\n take: 1,\r\n topLevelOnly: true,\r\n })\r\n .mapSingle(data => data.collections.items[0].parentId);\r\n\r\n this.items$ = combineLatest(\r\n getCollectionsResult.mapStream(({ collections }) => collections),\r\n rootCollectionId$,\r\n ).pipe(\r\n map(([collections, rootCollectionId]) => [\r\n ...(rootCollectionId\r\n ? [\r\n {\r\n id: rootCollectionId,\r\n name: this.i18nService.translate('catalog.root-collection'),\r\n slug: '',\r\n parentId: '__',\r\n position: 0,\r\n featuredAsset: null,\r\n children: [],\r\n breadcrumbs: [],\r\n isPrivate: false,\r\n createdAt: '',\r\n updatedAt: '',\r\n } satisfies ItemOf<GetCollectionListQuery, 'collections'>,\r\n ]\r\n : []),\r\n ...collections.items,\r\n ]),\r\n );\r\n this.totalItems$ = getCollectionsResult.mapStream(data => data.collections.totalItems);\r\n\r\n this.subCollections$ = this.expandedIds$.pipe(\r\n tap(val => (this.expandedIds = val)),\r\n switchMap(ids => {\r\n if (ids.length) {\r\n return this.dataService.collection\r\n .getCollections({\r\n take: 999,\r\n filter: {\r\n parentId: { in: ids },\r\n },\r\n })\r\n .mapStream(data => data.collections.items);\r\n } else {\r\n return of([]);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\r\n let expandedIds = this.expandedIds;\r\n if (!expandedIds.includes(collection.id)) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.expandedIds$.next(expandedIds);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length && collection.parentId !== '__'\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"icon-button folder-button\" *ngIf=\"collection.parentId === '__'\" disabled>\r\n <clr-icon shape=\"folder\" class=\"is-solid\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {name: collection.name} }}</span>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-collection-data-table>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DuplicateEntityDialogComponent,\r\n GetCollectionListQuery,\r\n ItemOf,\r\n ModalService,\r\n MoveCollectionInput,\r\n NotificationService,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { CollectionPartial } from '../collection-tree/collection-tree.types';\r\nimport { MoveCollectionsDialogComponent } from '../move-collections-dialog/move-collections-dialog.component';\r\n\r\nimport { CollectionListComponent } from './collection-list.component';\r\n\r\nexport const deleteCollectionsBulkAction = createBulkDeleteAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCollection) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.collection.deleteCollections(ids).pipe(map(res => res.deleteCollections)),\r\n});\r\n\r\nexport const moveCollectionsBulkAction: BulkAction<CollectionPartial, CollectionListComponent> = {\r\n location: 'collection-list',\r\n label: _('catalog.move-collections'),\r\n icon: 'drag-handle',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateCollection),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .fromComponent(MoveCollectionsDialogComponent, {\r\n size: 'xl',\r\n closable: true,\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n const inputs: MoveCollectionInput[] = selection.map(c => ({\r\n collectionId: c.id,\r\n parentId: result.id,\r\n index: 0,\r\n }));\r\n return dataService.collection.moveCollection(inputs);\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n notificationService.success(_('catalog.move-collections-success'), {\r\n count: selection.length,\r\n });\r\n clearSelection();\r\n hostComponent.refresh();\r\n });\r\n },\r\n};\r\n\r\nexport const assignCollectionsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateCollection),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, collectionIds, channelIds) =>\r\n channelIds.map(channelId =>\r\n dataService.collection\r\n .assignCollectionsToChannel({\r\n collectionIds,\r\n channelId,\r\n })\r\n .pipe(map(res => res.assignCollectionsToChannel)),\r\n ),\r\n});\r\n\r\nexport const removeCollectionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>\r\n>({\r\n location: 'collection-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteCollection),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, collectionIds, channelId) =>\r\n dataService.collection\r\n .removeCollectionsFromChannel({\r\n channelId: channelId,\r\n collectionIds,\r\n })\r\n .pipe(map(res => res.removeCollectionsFromChannel)),\r\n});\r\n\r\nexport const duplicateCollectionsBulkAction: BulkAction<\r\n ItemOf<GetCollectionListQuery, 'collections'>,\r\n CollectionListComponent\r\n> = {\r\n location: 'collection-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetCollectionListQuery, 'collections'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Collection',\r\n title: _('catalog.duplicate-collections'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n GetCollectionListDocument,\r\n GetCollectionListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n NotificationService,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { CollectionOrderEvent } from '../collection-data-table/collection-data-table.component';\r\n\r\n@Component({\r\n selector: 'vdr-collection-list',\r\n templateUrl: './collection-list.component.html',\r\n styleUrls: ['./collection-list.component.scss', './collection-list-common.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionListComponent\r\n extends TypedBaseListComponent<typeof GetCollectionListDocument, 'collections'>\r\n implements OnInit\r\n{\r\n activeCollectionId$: Observable<string | null>;\r\n activeCollectionIndex$: Observable<number>;\r\n activeCollectionTitle$: Observable<string>;\r\n subCollections$: Observable<Array<ItemOf<GetCollectionListQuery, 'collections'>>>;\r\n expandedIds: string[] = [];\r\n dataTableListId = 'collection-list';\r\n readonly customFields = this.getCustomFieldConfig('Collection');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'slug',\r\n label: _('common.slug'),\r\n type: { kind: 'text' },\r\n filterField: 'slug',\r\n })\r\n .addFilter({\r\n name: 'visibility',\r\n type: { kind: 'boolean' },\r\n label: _('common.visibility'),\r\n toFilterInput: value => ({\r\n isPrivate: { eq: !value },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('position', 'ASC')\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'slug' })\r\n .addSort({ name: 'position' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super();\r\n super.configure({\r\n document: GetCollectionListDocument,\r\n getItems: data => data.collections,\r\n setVariables: (skip, _take) => {\r\n const topLevelOnly =\r\n this.searchTermControl.value === '' && this.filters.activeFilters.length === 0\r\n ? true\r\n : undefined;\r\n return {\r\n options: {\r\n skip,\r\n take: _take,\r\n filter: {\r\n name: { contains: this.searchTermControl.value },\r\n ...this.filters.createFilterInput(),\r\n },\r\n topLevelOnly,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.activeCollectionId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n );\r\n const expandedIds$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('expanded')),\r\n distinctUntilChanged(),\r\n map(ids => (ids ? ids.split(',') : [])),\r\n );\r\n expandedIds$.pipe(takeUntil(this.destroy$)).subscribe(ids => {\r\n this.expandedIds = ids;\r\n });\r\n this.subCollections$ = combineLatest(expandedIds$, this.refresh$).pipe(\r\n switchMap(([ids]) => {\r\n if (ids.length) {\r\n return this.dataService.collection\r\n .getCollections({\r\n take: 999,\r\n filter: {\r\n parentId: { in: ids },\r\n },\r\n })\r\n .mapStream(data => data.collections.items);\r\n } else {\r\n return of([]);\r\n }\r\n }),\r\n );\r\n\r\n this.activeCollectionTitle$ = combineLatest(\r\n this.activeCollectionId$,\r\n this.items$,\r\n this.subCollections$,\r\n ).pipe(\r\n map(([id, collections, subCollections]) => {\r\n if (id) {\r\n const match = [...collections, ...subCollections].find(c => c.id === id);\r\n return match ? match.name : '';\r\n }\r\n return '';\r\n }),\r\n );\r\n this.activeCollectionIndex$ = combineLatest(\r\n this.activeCollectionId$,\r\n this.items$,\r\n this.subCollections$,\r\n ).pipe(\r\n map(([id, collections, subCollections]) => {\r\n if (id) {\r\n const allCollections: typeof collections = [];\r\n for (const collection of collections) {\r\n allCollections.push(collection);\r\n const subCollectionMatches = subCollections.filter(\r\n c => c.parentId && c.parentId === collection.id,\r\n );\r\n allCollections.push(...subCollectionMatches);\r\n }\r\n return allCollections.findIndex(c => c.id === id);\r\n }\r\n return -1;\r\n }),\r\n );\r\n }\r\n\r\n onRearrange(event: CollectionOrderEvent) {\r\n this.dataService.collection.moveCollection([event]).subscribe({\r\n next: () => {\r\n this.notificationService.success(_('common.notify-saved-changes'));\r\n this.refresh();\r\n },\r\n error: err => {\r\n this.notificationService.error(_('common.notify-save-changes-error'));\r\n },\r\n });\r\n }\r\n\r\n closeContents() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n toggleExpanded(collection: ItemOf<GetCollectionListQuery, 'collections'>) {\r\n let expandedIds = this.expandedIds;\r\n if (!expandedIds.includes(collection.id)) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.router.navigate(['./'], {\r\n queryParams: {\r\n expanded: expandedIds.filter(id => !!id).join(','),\r\n },\r\n queryParamsHandling: 'merge',\r\n relativeTo: this.route,\r\n });\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"collection-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\" id=\"position\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\" id=\"name\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\" id=\"breadcrumb\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" id=\"view-contents\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n [queryParams]=\"{ contentsPage: 1 }\"\r\n queryParamsHandling=\"merge\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { RootNode, TreeNode } from './array-to-tree';\r\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\r\n\r\n/**\r\n * Facilitates communication between the CollectionTreeComponent and child CollectionTreeNodeComponents\r\n * without introducing a cyclic dependency.\r\n */\r\n@Injectable()\r\nexport class CollectionTreeService implements OnDestroy {\r\n private allMoveListItems: Array<{ path: string; id: string; ancestorIdPath: Set<string> }> = [];\r\n private collectionTree: RootNode<CollectionPartial>;\r\n private _rearrange$ = new Subject<RearrangeEvent>();\r\n private _delete$ = new Subject<string>();\r\n\r\n public rearrange$: Observable<RearrangeEvent>;\r\n public delete$: Observable<string>;\r\n\r\n constructor() {\r\n this.rearrange$ = this._rearrange$.asObservable();\r\n this.delete$ = this._delete$.asObservable();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._rearrange$.complete();\r\n this._delete$.complete();\r\n }\r\n\r\n setCollectionTree(tree: RootNode<CollectionPartial>) {\r\n this.collectionTree = tree;\r\n }\r\n\r\n resetMoveList() {\r\n this.allMoveListItems = [];\r\n }\r\n\r\n getMoveListItems(collection: CollectionPartial) {\r\n if (this.allMoveListItems.length === 0) {\r\n this.allMoveListItems = this.calculateAllMoveListItems();\r\n }\r\n return this.allMoveListItems.filter(\r\n item =>\r\n item.id !== collection.id &&\r\n !item.ancestorIdPath.has(collection.id) &&\r\n item.id !== collection.parent?.id,\r\n );\r\n }\r\n\r\n onDrop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\r\n const item = event.item.data as CollectionPartial;\r\n const newParent = event.container.data;\r\n const newParentId = newParent.id;\r\n if (newParentId == null) {\r\n throw new Error(`Could not determine the ID of the root Collection`);\r\n }\r\n this._rearrange$.next({\r\n collectionId: item.id,\r\n parentId: newParentId,\r\n index: event.currentIndex,\r\n });\r\n }\r\n\r\n onMove(event: RearrangeEvent) {\r\n this._rearrange$.next(event);\r\n }\r\n\r\n onDelete(id: string) {\r\n this._delete$.next(id);\r\n }\r\n\r\n private calculateAllMoveListItems() {\r\n const visit = (\r\n node: TreeNode<any>,\r\n parentPath: string[],\r\n ancestorIdPath: Set<string>,\r\n output: Array<{ path: string; id: string; ancestorIdPath: Set<string> }>,\r\n ) => {\r\n const path = parentPath.concat(node.name);\r\n output.push({ path: path.slice(1).join(' / ') || 'root', id: node.id, ancestorIdPath });\r\n node.children.forEach(child =>\r\n visit(child, path, new Set<string>([...ancestorIdPath, node.id]), output),\r\n );\r\n return output;\r\n };\r\n return visit(this.collectionTree, [], new Set<string>(), []);\r\n }\r\n}\r\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n SimpleChanges,\r\n SkipSelf,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { DataService, Permission, SelectionManager } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { map, shareReplay } from 'rxjs/operators';\r\n\r\nimport { RootNode, TreeNode } from './array-to-tree';\r\nimport { CollectionTreeService } from './collection-tree.service';\r\nimport { CollectionPartial } from './collection-tree.types';\r\n\r\n@Component({\r\n selector: 'vdr-collection-tree-node',\r\n templateUrl: './collection-tree-node.component.html',\r\n styleUrls: ['./collection-tree-node.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CollectionTreeNodeComponent implements OnInit, OnChanges, OnDestroy {\r\n depth = 0;\r\n parentName: string;\r\n @Input() collectionTree: TreeNode<CollectionPartial>;\r\n @Input() activeCollectionId: string;\r\n @Input() expandAll = false;\r\n @Input() selectionManager: SelectionManager<CollectionPartial>;\r\n hasUpdatePermission$: Observable<boolean>;\r\n hasDeletePermission$: Observable<boolean>;\r\n moveListItems: Array<{ path: string; id: string }> = [];\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n @SkipSelf() @Optional() private parent: CollectionTreeNodeComponent,\r\n private dataService: DataService,\r\n private collectionTreeService: CollectionTreeService,\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n ) {\r\n if (parent) {\r\n this.depth = parent.depth + 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.parentName = this.collectionTree.name || '<root>';\r\n const permissions$ = this.dataService.client\r\n .userStatus()\r\n .mapStream(data => data.userStatus.permissions)\r\n .pipe(shareReplay(1));\r\n this.hasUpdatePermission$ = permissions$.pipe(\r\n map(\r\n perms =>\r\n perms.includes(Permission.UpdateCatalog) || perms.includes(Permission.UpdateCollection),\r\n ),\r\n );\r\n this.hasDeletePermission$ = permissions$.pipe(\r\n map(\r\n perms =>\r\n perms.includes(Permission.DeleteCatalog) || perms.includes(Permission.DeleteCollection),\r\n ),\r\n );\r\n this.subscription = this.selectionManager?.selectionChanges$.subscribe(() =>\r\n this.changeDetectorRef.markForCheck(),\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const expandAllChange = changes['expandAll'];\r\n if (expandAllChange) {\r\n if (expandAllChange.previousValue === true && expandAllChange.currentValue === false) {\r\n this.collectionTree.children.forEach(c => (c.expanded = false));\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n trackByFn(index: number, item: CollectionPartial) {\r\n return item.id;\r\n }\r\n\r\n toggleExpanded(collection: TreeNode<CollectionPartial>) {\r\n collection.expanded = !collection.expanded;\r\n let expandedIds = this.route.snapshot.queryParamMap.get('expanded')?.split(',') ?? [];\r\n if (collection.expanded) {\r\n expandedIds.push(collection.id);\r\n } else {\r\n expandedIds = expandedIds.filter(id => id !== collection.id);\r\n }\r\n this.router.navigate(['./'], {\r\n queryParams: {\r\n expanded: expandedIds.filter(id => !!id).join(','),\r\n },\r\n queryParamsHandling: 'merge',\r\n relativeTo: this.route,\r\n });\r\n }\r\n\r\n getMoveListItems(collection: CollectionPartial) {\r\n this.moveListItems = this.collectionTreeService.getMoveListItems(collection);\r\n }\r\n\r\n move(collection: CollectionPartial, parentId: string) {\r\n this.collectionTreeService.onMove({\r\n index: 0,\r\n parentId,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n moveUp(collection: CollectionPartial, currentIndex: number) {\r\n if (!collection.parent) {\r\n return;\r\n }\r\n this.collectionTreeService.onMove({\r\n index: currentIndex - 1,\r\n parentId: collection.parent.id,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n moveDown(collection: CollectionPartial, currentIndex: number) {\r\n if (!collection.parent) {\r\n return;\r\n }\r\n this.collectionTreeService.onMove({\r\n index: currentIndex + 1,\r\n parentId: collection.parent.id,\r\n collectionId: collection.id,\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<CollectionPartial | RootNode<CollectionPartial>>) {\r\n moveItemInArray(this.collectionTree.children, event.previousIndex, event.currentIndex);\r\n this.collectionTreeService.onDrop(event);\r\n }\r\n\r\n delete(id: string) {\r\n this.collectionTreeService.onDelete(id);\r\n }\r\n}\r\n","<div\r\n cdkDropList\r\n class=\"tree-node\"\r\n #dropList\r\n [cdkDropListData]=\"collectionTree\"\r\n [cdkDropListDisabled]=\"!(hasUpdatePermission$ | async)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <div\r\n class=\"collection\"\r\n [class.private]=\"collection.isPrivate\"\r\n *ngFor=\"let collection of collectionTree.children; index as i; trackBy: trackByFn\"\r\n cdkDrag\r\n [cdkDragData]=\"collection\"\r\n >\r\n <div\r\n class=\"collection-detail\"\r\n [ngClass]=\"'depth-' + depth\"\r\n [class.active]=\"collection.id === activeCollectionId\"\r\n >\r\n <div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager.isSelected(collection)\"\r\n (click)=\"selectionManager.toggleSelection(collection, $event)\"\r\n />\r\n </div>\r\n <div class=\"name\">\r\n <button\r\n class=\"icon-button folder-button\"\r\n [disabled]=\"expandAll\"\r\n *ngIf=\"collection.children?.length; else folderSpacer\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!collection.expanded && !expandAll\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"collection.expanded || expandAll\"></clr-icon>\r\n </button>\r\n <ng-template #folderSpacer>\r\n <div class=\"folder-button-spacer\"></div>\r\n </ng-template>\r\n {{ collection.name }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-chip *ngIf=\"collection.isPrivate\">{{ 'catalog.private' | translate }}</vdr-chip>\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'catalog.view-contents' | translate }}\r\n </a>\r\n <a class=\"btn btn-link btn-sm\" [routerLink]=\"['/catalog/collections/', collection.id]\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <div class=\"drag-handle\" cdkDragHandle *vdrIfPermissions=\"['UpdateCatalog', 'UpdateCollection']\">\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger (click)=\"getMoveListItems(collection)\">\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n class=\"dropdown-item\"\r\n [routerLink]=\"['./', 'create', { parentId: collection.id }]\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"i === 0 || !(hasUpdatePermission$ | async)\"\r\n (click)=\"moveUp(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret up\"></clr-icon>\r\n {{ 'catalog.move-up' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"\r\n i === collectionTree.children.length - 1 || !(hasUpdatePermission$ | async)\r\n \"\r\n (click)=\"moveDown(collection, i)\"\r\n >\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n {{ 'catalog.move-down' | translate }}\r\n </button>\r\n <h4 class=\"dropdown-header\">{{ 'catalog.move-to' | translate }}</h4>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let item of moveListItems\"\r\n (click)=\"move(collection, item.id)\"\r\n [disabled]=\"!(hasUpdatePermission$ | async)\"\r\n >\r\n <div class=\"move-to-item\">\r\n <div class=\"move-icon\">\r\n <clr-icon shape=\"child-arrow\"></clr-icon>\r\n </div>\r\n <div class=\"path\">\r\n {{ item.path }}\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(collection.id)\"\r\n [disabled]=\"!(hasDeletePermission$ | async)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n <vdr-collection-tree-node\r\n *ngIf=\"collection.expanded || expandAll\"\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collection\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-collection-tree-node>\r\n </div>\r\n</div>\r\n","export type HasParent = { id: string; parent?: { id: string } | null };\r\nexport type TreeNode<T extends HasParent> = T & { children: Array<TreeNode<T>>; expanded: boolean };\r\nexport type RootNode<T extends HasParent> = { id?: string; children: Array<TreeNode<T>> };\r\n\r\n/**\r\n * Builds a tree from an array of nodes which have a parent.\r\n * Based on https://stackoverflow.com/a/31247960/772859, modified to preserve ordering.\r\n */\r\nexport function arrayToTree<T extends HasParent>(\r\n nodes: T[],\r\n currentState?: RootNode<T>,\r\n expandedIds: string[] = [],\r\n): RootNode<T> {\r\n const topLevelNodes: Array<TreeNode<T>> = [];\r\n const mappedArr: { [id: string]: TreeNode<T> } = {};\r\n const currentStateMap = treeToMap(currentState);\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (const node of nodes) {\r\n mappedArr[node.id] = { ...(node as any), children: [] };\r\n }\r\n\r\n for (const id of nodes.map(n => n.id)) {\r\n if (mappedArr.hasOwnProperty(id)) {\r\n const mappedElem = mappedArr[id];\r\n mappedElem.expanded = currentStateMap.get(id)?.expanded ?? expandedIds.includes(id);\r\n const parent = mappedElem.parent;\r\n if (!parent) {\r\n continue;\r\n }\r\n // If the element is not at the root level, add it to its parent array of children.\r\n const parentIsRoot = !mappedArr[parent.id];\r\n if (!parentIsRoot) {\r\n if (mappedArr[parent.id]) {\r\n mappedArr[parent.id].children.push(mappedElem);\r\n } else {\r\n mappedArr[parent.id] = { children: [mappedElem] } as any;\r\n }\r\n } else {\r\n topLevelNodes.push(mappedElem);\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const rootId = topLevelNodes.length ? topLevelNodes[0].parent!.id : undefined;\r\n return { id: rootId, children: topLevelNodes };\r\n}\r\n\r\n/**\r\n * Converts an existing tree (as generated by the arrayToTree function) into a flat\r\n * Map. This is used to persist certain states (e.g. `expanded`) when re-building the\r\n * tree.\r\n */\r\nfunction treeToMap<T extends HasParent>(tree?: RootNode<T>): Map<string, TreeNode<T>> {\r\n const nodeMap = new Map<string, TreeNode<T>>();\r\n function visit(node: TreeNode<T>) {\r\n nodeMap.set(node.id, node);\r\n node.children.forEach(visit);\r\n }\r\n if (tree) {\r\n visit(tree as TreeNode<T>);\r\n }\r\n return nodeMap;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { Collection, SelectionManager } from '@vendure/admin-ui/core';\r\n\r\nimport { arrayToTree, RootNode } from './array-to-tree';\r\nimport { CollectionTreeService } from './collection-tree.service';\r\nimport { CollectionPartial, RearrangeEvent } from './collection-tree.types';\r\n\r\n@Component({\r\n selector: 'vdr-collection-tree',\r\n templateUrl: 'collection-tree.component.html',\r\n styleUrls: ['./collection-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [CollectionTreeService],\r\n})\r\nexport class CollectionTreeComponent implements OnInit, OnChanges {\r\n @Input() collections: CollectionPartial[];\r\n @Input() activeCollectionId: string;\r\n @Input() expandAll = false;\r\n @Input() expandedIds: string[] = [];\r\n @Input() selectionManager: SelectionManager<CollectionPartial>;\r\n @Output() rearrange = new EventEmitter<RearrangeEvent>();\r\n @Output() deleteCollection = new EventEmitter<string>();\r\n collectionTree: RootNode<CollectionPartial>;\r\n\r\n constructor(private collectionTreeService: CollectionTreeService) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if ('collections' in changes && this.collections) {\r\n this.collectionTree = arrayToTree(this.collections, this.collectionTree, this.expandedIds);\r\n this.collectionTreeService.setCollectionTree(this.collectionTree);\r\n this.collectionTreeService.resetMoveList();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.collectionTreeService.rearrange$.subscribe(event => this.rearrange.emit(event));\r\n this.collectionTreeService.delete$.subscribe(id => this.deleteCollection.emit(id));\r\n }\r\n}\r\n","<vdr-collection-tree-node\r\n *ngIf=\"collectionTree\"\r\n cdkDropListGroup\r\n [expandAll]=\"expandAll\"\r\n [collectionTree]=\"collectionTree\"\r\n [selectionManager]=\"selectionManager\"\r\n [activeCollectionId]=\"activeCollectionId\"\r\n></vdr-collection-tree-node>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { Dialog, GetProductVariantOptionsQuery } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-confirm-variant-deletion-dialog',\r\n templateUrl: './confirm-variant-deletion-dialog.component.html',\r\n styleUrls: ['./confirm-variant-deletion-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ConfirmVariantDeletionDialogComponent implements Dialog<boolean> {\r\n resolveWith: (result?: boolean) => void;\r\n variants: NonNullable<GetProductVariantOptionsQuery['product']>['variants'] = [];\r\n\r\n confirm() {\r\n this.resolveWith(true);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.confirm-deletion-of-unused-variants-title' | translate }}\r\n</ng-template>\r\n{{ 'catalog.confirm-deletion-of-unused-variants-body' | translate }}\r\n<ul>\r\n <li *ngFor=\"let variant of variants\">{{ variant.name }} ({{ variant.sku }})</li>\r\n</ul>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { CreateFacetValueInput, Dialog, LanguageCode } from '@vendure/admin-ui/core';\r\n\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-create-facet-value-dialog',\r\n templateUrl: './create-facet-value-dialog.component.html',\r\n styleUrls: ['./create-facet-value-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CreateFacetValueDialogComponent implements Dialog<CreateFacetValueInput> {\r\n resolveWith: (result?: CreateFacetValueInput) => void;\r\n languageCode: LanguageCode;\r\n form = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n code: ['', Validators.required],\r\n });\r\n facetId: string;\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n updateCode() {\r\n const nameControl = this.form.get('name');\r\n const codeControl = this.form.get('code');\r\n if (nameControl && codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(`${nameControl.value}`, '-'));\r\n }\r\n }\r\n\r\n confirm() {\r\n const { name, code } = this.form.value;\r\n if (!name || !code) {\r\n return;\r\n }\r\n this.resolveWith({\r\n facetId: this.facetId,\r\n code,\r\n translations: [{ languageCode: this.languageCode, name }],\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-facet-value' | translate }}\r\n</ng-template>\r\n<div class=\"form-grid\" [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input id=\"name\" type=\"text\" formControlName=\"name\" (input)=\"updateCode()\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormRecord,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CreateFacetInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n DeletionResult,\r\n FACET_WITH_VALUE_LIST_FRAGMENT,\r\n FacetWithValueListFragment,\r\n findTranslation,\r\n getCustomFieldsDefaults,\r\n GetFacetDetailDocument,\r\n GetFacetDetailQuery,\r\n GetFacetDetailQueryVariables,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n TypedBaseDetailComponent,\r\n UpdateFacetInput,\r\n UpdateFacetValueInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { SortOrder } from '@vendure/common/lib/generated-types';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { gql } from 'apollo-angular';\r\nimport { BehaviorSubject, combineLatest, EMPTY, forkJoin, Observable } from 'rxjs';\r\nimport { debounceTime, map, mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\nimport { CreateFacetValueDialogComponent } from '../create-facet-value-dialog/create-facet-value-dialog.component';\r\n\r\nexport const FACET_DETAIL_QUERY = gql`\r\n query GetFacetDetail($id: ID!, $facetValueListOptions: FacetValueListOptions) {\r\n facet(id: $id) {\r\n ...FacetWithValueList\r\n }\r\n }\r\n ${FACET_WITH_VALUE_LIST_FRAGMENT}\r\n`;\r\n\r\ntype ValueItem =\r\n | FacetWithValueListFragment['valueList']['items'][number]\r\n | { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-facet-detail',\r\n templateUrl: './facet-detail.component.html',\r\n styleUrls: ['./facet-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FacetDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetFacetDetailDocument, 'facet'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Facet');\r\n readonly customValueFields = this.getCustomFieldConfig('FacetValue');\r\n detailForm = this.formBuilder.group({\r\n facet: this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: '',\r\n visible: true,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n }),\r\n values: this.formBuilder.record<\r\n FormGroup<{\r\n id: FormControl<string>;\r\n name: FormControl<string>;\r\n code: FormControl<string>;\r\n customFields: FormGroup;\r\n }>\r\n >({}),\r\n });\r\n currentPage = 1;\r\n itemsPerPage = 10;\r\n totalItems = 0;\r\n filterControl = new FormControl('');\r\n values$ = new BehaviorSubject<ValueItem[]>([]);\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateFacet];\r\n\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.filterControl.valueChanges\r\n .pipe(debounceTime(200), takeUntil(this.destroy$))\r\n .subscribe(filterTerm => {\r\n this.currentPage = 1;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, filterTerm);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['facet', 'code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n updateValueCode(currentCode: string, nameValue: string, valueId: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['values', valueId, 'code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n customValueFieldIsSet(index: number, name: string): boolean {\r\n return !!this.detailForm.get(['values', index, 'customFields', name]);\r\n }\r\n\r\n addFacetValue() {\r\n this.modalService\r\n .fromComponent(CreateFacetValueDialogComponent, {\r\n locals: {\r\n languageCode: this.languageCode,\r\n facetId: this.id,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (!result) {\r\n return EMPTY;\r\n } else {\r\n return this.dataService.facet.createFacetValues([result]);\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result.createFacetValues) {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'FacetValue',\r\n });\r\n this.currentPage = 1;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage);\r\n }\r\n });\r\n }\r\n\r\n create() {\r\n const facetForm = this.detailForm.get('facet') as (typeof this.detailForm)['controls']['facet'];\r\n if (!facetForm || !facetForm.dirty) {\r\n return;\r\n }\r\n const newFacet = this.getUpdatedFacet(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n isPrivate: false,\r\n languageCode: this.languageCode,\r\n name: '',\r\n code: '',\r\n translations: [],\r\n },\r\n facetForm,\r\n this.languageCode,\r\n ) as CreateFacetInput;\r\n this.dataService.facet.createFacet(newFacet).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Facet' });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createFacet.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Facet',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const valuesFormRecord = this.detailForm.get(\r\n 'values',\r\n ) as (typeof this.detailForm)['controls']['values'];\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([facet, languageCode]) => {\r\n const facetForm = this.detailForm.get(\r\n 'facet',\r\n ) as (typeof this.detailForm)['controls']['facet'];\r\n const updateOperations: Array<Observable<any>> = [];\r\n\r\n if (facetForm && facetForm.dirty) {\r\n const updatedFacetInput = this.getUpdatedFacet(\r\n facet,\r\n facetForm,\r\n languageCode,\r\n ) as UpdateFacetInput;\r\n if (updatedFacetInput) {\r\n updateOperations.push(this.dataService.facet.updateFacet(updatedFacetInput));\r\n }\r\n }\r\n if (valuesFormRecord && valuesFormRecord.dirty) {\r\n const updatedValues = this.getUpdatedFacetValues(valuesFormRecord, languageCode);\r\n if (updatedValues.length) {\r\n updateOperations.push(this.dataService.facet.updateFacetValues(updatedValues));\r\n }\r\n }\r\n return forkJoin(updateOperations);\r\n }),\r\n )\r\n .subscribe(\r\n () => {\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Facet' });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Facet',\r\n });\r\n },\r\n );\r\n }\r\n\r\n deleteFacetValue(facetValueId: string) {\r\n this.showModalAndDelete(facetValueId)\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(facetValueId, response.message || '').pipe(\r\n map(r => r.result === DeletionResult.DELETED),\r\n );\r\n }\r\n }),\r\n switchMap(deleted =>\r\n deleted\r\n ? this.dataService.query(GetFacetDetailDocument, {\r\n id: this.id,\r\n }).single$\r\n : [],\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'FacetValue',\r\n });\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'FacetValue',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(facetValueId: string, message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-facet-value'),\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.facet.deleteFacetValues([facetValueId], !!message) : EMPTY,\r\n ),\r\n map(result => result.deleteFacetValues[0]),\r\n );\r\n }\r\n\r\n protected setCurrentPage(newPage: number) {\r\n this.currentPage = newPage;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n }\r\n\r\n protected setItemsPerPage(itemsPerPage: number) {\r\n this.itemsPerPage = itemsPerPage;\r\n this.fetchFacetValues(this.currentPage, this.itemsPerPage, this.filterControl.value);\r\n }\r\n\r\n private fetchFacetValues(currentPage: number, itemsPerPage: number, filterTerm?: string | null) {\r\n this.dataService\r\n .query<GetFacetDetailQuery, GetFacetDetailQueryVariables>(FACET_DETAIL_QUERY, {\r\n id: this.id,\r\n facetValueListOptions: {\r\n take: itemsPerPage,\r\n skip: (currentPage - 1) * itemsPerPage,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n ...(filterTerm ? { filter: { name: { contains: filterTerm } } } : {}),\r\n },\r\n })\r\n .single$.subscribe(({ facet }) => {\r\n if (facet) {\r\n this.values$.next([...facet.valueList.items]);\r\n this.totalItems = facet.valueList.totalItems;\r\n this.setFacetValueFormValues(facet, this.languageCode);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the facet or current language.\r\n */\r\n protected setFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\r\n const currentTranslation = findTranslation(facet, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n facet: {\r\n code: facet.code,\r\n visible: !facet.isPrivate,\r\n name: currentTranslation?.name ?? '',\r\n },\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['facet', 'customFields']),\r\n facet,\r\n currentTranslation,\r\n );\r\n }\r\n this.values$.next([...facet.valueList.items]);\r\n this.totalItems = facet.valueList.totalItems;\r\n this.setFacetValueFormValues(facet, languageCode);\r\n }\r\n\r\n private setFacetValueFormValues(facet: FacetWithValueListFragment, languageCode: LanguageCode) {\r\n const currentValuesFormGroup = this.detailForm.get('values') as FormRecord;\r\n facet.valueList.items.forEach(value => {\r\n const valueTranslation = findTranslation(value, languageCode);\r\n const group = {\r\n id: value.id,\r\n code: value.code,\r\n name: valueTranslation ? valueTranslation.name : '',\r\n };\r\n let valueControl = currentValuesFormGroup.get(value.id) as FormGroup;\r\n if (!valueControl) {\r\n valueControl = this.formBuilder.group(group);\r\n currentValuesFormGroup.addControl(value.id, valueControl);\r\n } else {\r\n valueControl.patchValue(group);\r\n }\r\n if (this.customValueFields.length) {\r\n let customValueFieldsGroup = valueControl.get(['customFields']) as\r\n | UntypedFormGroup\r\n | undefined;\r\n if (!customValueFieldsGroup) {\r\n customValueFieldsGroup = new UntypedFormGroup({});\r\n valueControl.addControl('customFields', customValueFieldsGroup);\r\n }\r\n\r\n if (customValueFieldsGroup) {\r\n for (const fieldDef of this.customValueFields) {\r\n const key = fieldDef.name;\r\n const fieldValue =\r\n fieldDef.type === 'localeString'\r\n ? (valueTranslation as any | undefined)?.customFields?.[key]\r\n : (value as any).customFields[key];\r\n const control = customValueFieldsGroup.get(key);\r\n if (control) {\r\n control.setValue(fieldValue);\r\n } else {\r\n customValueFieldsGroup.addControl(key, new UntypedFormControl(fieldValue));\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a facet and the value of the detailForm, this method creates an updated copy of the facet which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedFacet(\r\n facet: Omit<FacetWithValueListFragment, 'valueList'>,\r\n facetFormGroup: (typeof this.detailForm)['controls']['facet'],\r\n languageCode: LanguageCode,\r\n ): CreateFacetInput | UpdateFacetInput {\r\n const input = createUpdatedTranslatable({\r\n translatable: facet,\r\n updatedFields: facetFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: facet.name || '',\r\n },\r\n });\r\n input.isPrivate = !facetFormGroup.value.visible;\r\n return input;\r\n }\r\n\r\n /**\r\n * Given an array of facet values and the values from the detailForm, this method creates a new array\r\n * which can be persisted to the API via an updateFacetValues mutation.\r\n */\r\n private getUpdatedFacetValues(\r\n valuesFormGroup: FormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateFacetValueInput[] {\r\n const dirtyValueValues = Object.values(valuesFormGroup.controls)\r\n .filter(c => c.dirty)\r\n .map(c => c.value);\r\n\r\n return dirtyValueValues\r\n .map((value, i) =>\r\n createUpdatedTranslatable({\r\n translatable: value,\r\n updatedFields: value,\r\n customFieldConfig: this.customValueFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: '',\r\n },\r\n }),\r\n )\r\n .filter(notNullOrUndefined);\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-detail\" />\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar formGroupName=\"facet\">\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.facet?.visible; else private\">{{\r\n 'catalog.public' | translate\r\n }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card formGroupName=\"facet\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Facet\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('facet.customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"facet-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card\r\n *ngIf=\"!(isNew$ | async)\"\r\n [title]=\"'catalog.facet-values' | translate\"\r\n [paddingX]=\"false\"\r\n >\r\n <ng-template vdrCardControls>\r\n <input\r\n type=\"text\"\r\n class=\"mr-3\"\r\n [formControl]=\"filterControl\"\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n </ng-template>\r\n <ng-container *ngIf=\"values$ | async as filteredValues\">\r\n <table class=\"facet-values-list table\" formArrayName=\"values\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>{{ 'common.code' | translate }}</th>\r\n <ng-container *ngIf=\"customValueFields.length\">\r\n <th>{{ 'common.custom-fields' | translate }}</th>\r\n </ng-container>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n class=\"facet-value\"\r\n *ngFor=\"\r\n let value of filteredValues\r\n | paginate\r\n : {\r\n currentPage: currentPage,\r\n itemsPerPage: itemsPerPage,\r\n totalItems: totalItems,\r\n };\r\n let i = index\r\n \"\r\n [formGroup]=\"detailForm.get(['values', value.id])\"\r\n >\r\n <td class=\"align-middle\">\r\n <vdr-entity-info [entity]=\"value\"></vdr-entity-info>\r\n </td>\r\n <td class=\"align-middle\">\r\n <input\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateValueCode(value.code, $event.target.value, value.id)\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <input type=\"text\" formControlName=\"code\" />\r\n </td>\r\n <td class=\"\" *ngIf=\"customValueFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"FacetValue\"\r\n [customFields]=\"customValueFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"\r\n detailForm.get(['values', value.id, 'customFields'])\r\n \"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteFacetValue(value.id)\"\r\n [disabled]=\"!(updatePermission | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"pagination-wrapper\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n <vdr-pagination-controls\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"setCurrentPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n </ng-container>\r\n <div>\r\n <button\r\n type=\"button\"\r\n class=\"button m-3\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n (click)=\"addFacetValue()\"\r\n >\r\n <clr-icon shape=\"add\"></clr-icon>\r\n {{ 'catalog.add-facet-value' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n currentChannelIsNotDefault,\r\n DataService,\r\n DuplicateEntityDialogComponent,\r\n getChannelCodeFromUserStatus,\r\n GetFacetListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n RemoveFacetsFromChannelMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY, of } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\nimport { FacetListComponent } from './facet-list.component';\r\n\r\nexport const deleteFacetsBulkAction = createBulkDeleteAction<ItemOf<GetFacetListQuery, 'facets'>>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteFacet) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n getItemName: item => item.name,\r\n shouldRetryItem: (response, item) => !!response.message,\r\n bulkDelete: (dataService, ids, retrying) =>\r\n dataService.facet.deleteFacets(ids, retrying).pipe(map(res => res.deleteFacets)),\r\n});\r\n\r\nexport const assignFacetsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetFacetListQuery, 'facets'>\r\n>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateFacet),\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, facetIds, channelIds) =>\r\n channelIds.map(channelId =>\r\n dataService.facet\r\n .assignFacetsToChannel({\r\n facetIds,\r\n channelId,\r\n })\r\n .pipe(map(res => res.assignFacetsToChannel)),\r\n ),\r\n});\r\n\r\nexport const removeFacetsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n RemoveFacetsFromChannelMutation['removeFacetsFromChannel'][number]\r\n>({\r\n location: 'facet-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteCatalog) ||\r\n userPermissions.includes(Permission.DeleteFacet),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, facetIds, channelId, retrying) =>\r\n dataService.facet\r\n .removeFacetsFromChannel({\r\n channelId: channelId,\r\n facetIds,\r\n force: retrying,\r\n })\r\n .pipe(map(res => res.removeFacetsFromChannel)),\r\n isErrorResult: result => (result.__typename === 'FacetInUseError' ? result.message : undefined),\r\n});\r\n\r\nexport const removeFacetsFromChannelBulkAction2: BulkAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n FacetListComponent\r\n> = {\r\n location: 'facet-list',\r\n label: _('catalog.remove-from-channel'),\r\n getTranslationVars: ({ injector }) => getChannelCodeFromUserStatus(injector.get(DataService)),\r\n icon: 'layers',\r\n iconClass: 'is-warning',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateFacet) ||\r\n userPermissions.includes(Permission.UpdateCatalog),\r\n isVisible: ({ injector }) => currentChannelIsNotDefault(injector.get(DataService)),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n\r\n const activeChannelId$ = dataService.client\r\n .userStatus()\r\n .mapSingle(({ userStatus }) => userStatus.activeChannelId);\r\n\r\n function showModalAndDelete(facetIds: string[], message?: string) {\r\n return modalService\r\n .dialog({\r\n title: _('catalog.remove-from-channel'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n size: message ? 'lg' : 'md',\r\n body: message,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: message ? _('common.force-remove') : _('common.remove'),\r\n returnValue: true,\r\n },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(res =>\r\n res\r\n ? activeChannelId$.pipe(\r\n switchMap(activeChannelId =>\r\n activeChannelId\r\n ? dataService.facet.removeFacetsFromChannel({\r\n channelId: activeChannelId,\r\n facetIds,\r\n force: !!message,\r\n })\r\n : EMPTY,\r\n ),\r\n map(res2 => res2.removeFacetsFromChannel),\r\n )\r\n : EMPTY,\r\n ),\r\n );\r\n }\r\n\r\n showModalAndDelete(unique(selection.map(f => f.id)))\r\n .pipe(\r\n switchMap(result => {\r\n let removedCount = selection.length;\r\n const errors: string[] = [];\r\n const errorIds: string[] = [];\r\n let i = 0;\r\n for (const item of result) {\r\n if (item.__typename === 'FacetInUseError') {\r\n errors.push(item.message);\r\n errorIds.push(selection[i]?.id);\r\n removedCount--;\r\n }\r\n i++;\r\n }\r\n if (0 < errorIds.length) {\r\n return showModalAndDelete(errorIds, errors.join('\\n')).pipe(\r\n map(result2 => {\r\n const notRemovedCount = result2.filter(\r\n r => r.__typename === 'FacetInUseError',\r\n ).length;\r\n return selection.length - notRemovedCount;\r\n }),\r\n );\r\n } else {\r\n return of(removedCount);\r\n }\r\n }),\r\n switchMap(removedCount =>\r\n removedCount\r\n ? getChannelCodeFromUserStatus(dataService).then(({ channelCode }) => ({\r\n channelCode,\r\n removedCount,\r\n }))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(({ removedCount, channelCode }) => {\r\n if (removedCount) {\r\n hostComponent.refresh();\r\n clearSelection();\r\n notificationService.success(_('catalog.notify-remove-facets-from-channel-success'), {\r\n count: removedCount,\r\n channelCode,\r\n });\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const duplicateFacetsBulkAction: BulkAction<\r\n ItemOf<GetFacetListQuery, 'facets'>,\r\n FacetListComponent\r\n> = {\r\n location: 'facet-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetFacetListQuery, 'facets'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Facet',\r\n title: _('catalog.duplicate-facets'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n FACET_WITH_VALUE_LIST_FRAGMENT,\r\n GetFacetListDocument,\r\n GetFacetListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const FACET_LIST_QUERY = gql`\r\n query GetFacetList($options: FacetListOptions, $facetValueListOptions: FacetValueListOptions) {\r\n facets(options: $options) {\r\n items {\r\n ...FacetWithValueList\r\n }\r\n totalItems\r\n }\r\n }\r\n ${FACET_WITH_VALUE_LIST_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-facet-list',\r\n templateUrl: './facet-list.component.html',\r\n styleUrls: ['./facet-list.component.scss'],\r\n})\r\nexport class FacetListComponent\r\n extends TypedBaseListComponent<typeof GetFacetListDocument, 'facets'>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n\r\n dataTableListId = 'facet-list';\r\n readonly customFields = this.getCustomFieldConfig('Facet');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilter({\r\n name: 'visibility',\r\n type: { kind: 'boolean' },\r\n label: _('common.visibility'),\r\n toFilterInput: value => ({\r\n isPrivate: { eq: !value },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSort({ name: 'id' })\r\n .addSort({ name: 'createdAt' })\r\n .addSort({ name: 'updatedAt' })\r\n .addSort({ name: 'name' })\r\n .addSort({ name: 'code' })\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(protected dataService: DataService) {\r\n super();\r\n super.configure({\r\n document: GetFacetListDocument,\r\n getItems: data => data.facets,\r\n setVariables: (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: {\r\n contains: this.searchTermControl.value,\r\n },\r\n ...this.filters.createFilterInput(),\r\n },\r\n sort: this.sorts.createSortInput(),\r\n },\r\n facetValueListOptions: {\r\n take: 100,\r\n },\r\n }),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n toggleDisplayLimit(facet: ItemOf<GetFacetListQuery, 'facets'>) {\r\n if (this.displayLimit[facet.id] === facet.valueList.items.length) {\r\n this.displayLimit[facet.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[facet.id] = facet.valueList.items.length;\r\n }\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-facet' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"facet-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-facet=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', facet.id]\"\r\n ><span>{{ facet.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-facet=\"item\">\r\n <vdr-chip *ngIf=\"facet.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!facet.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.values' | translate\" id=\"values\">\r\n <ng-template let-facet=\"item\">\r\n <div class=\"facet-values-list\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let value of facet.valueList.items | slice : 0 : displayLimit[facet.id] || 3\"\r\n [facetValue]=\"value\"\r\n [removable]=\"false\"\r\n [displayFacetName]=\"false\"\r\n ></vdr-facet-value-chip>\r\n <vdr-chip *ngIf=\"displayLimit[facet.id] < facet.valueList.totalItems && (displayLimit[facet.id] || 0) === facet.valueList.items.length\">\r\n ... + {{ facet.valueList.totalItems - facet.valueList.items.length }}\r\n </vdr-chip>\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"facet.valueList.items.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(facet)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[facet.id] || 0) < facet.valueList.items.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ facet.valueList.totalItems - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { Component, ElementRef, EventEmitter, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n GetStockLocationListDocument,\r\n GetStockLocationListQuery,\r\n ItemOf,\r\n} from '@vendure/admin-ui/core';\r\nimport { generateAllCombinations } from '@vendure/common/lib/shared-utils';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport { OptionValueInputComponent } from '../option-value-input/option-value-input.component';\r\n\r\nconst DEFAULT_VARIANT_CODE = '__DEFAULT_VARIANT__';\r\nexport type CreateVariantValues = {\r\n optionValues: string[];\r\n enabled: boolean;\r\n sku: string;\r\n price: number;\r\n stock: number;\r\n};\r\nexport type CreateProductVariantsConfig = {\r\n groups: Array<{ name: string; values: string[] }>;\r\n variants: CreateVariantValues[];\r\n stockLocationId: string;\r\n};\r\n\r\n@Component({\r\n selector: 'vdr-generate-product-variants',\r\n templateUrl: './generate-product-variants.component.html',\r\n styleUrls: ['./generate-product-variants.component.scss'],\r\n})\r\nexport class GenerateProductVariantsComponent implements OnInit {\r\n @Output() variantsChange = new EventEmitter<CreateProductVariantsConfig>();\r\n @ViewChildren('optionGroupName', { read: ElementRef }) groupNameInputs: QueryList<ElementRef>;\r\n optionGroups: Array<{ name: string; values: Array<{ name: string; locked: boolean }> }> = [];\r\n currencyCode: CurrencyCode;\r\n variants: Array<{ id: string; values: string[] }>;\r\n variantFormValues: {\r\n [id: string]: FormGroup<{\r\n optionValues: FormControl<string[]>;\r\n enabled: FormControl<boolean>;\r\n price: FormControl<number>;\r\n sku: FormControl<string>;\r\n stock: FormControl<number>;\r\n }>;\r\n } = {};\r\n stockLocations$: Observable<Array<ItemOf<GetStockLocationListQuery, 'stockLocations'>>>;\r\n selectedStockLocationId: string | null = null;\r\n constructor(\r\n private dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.dataService.settings.getActiveChannel().single$.subscribe(data => {\r\n this.currencyCode = data.activeChannel.defaultCurrencyCode;\r\n });\r\n this.stockLocations$ = this.dataService\r\n .query(GetStockLocationListDocument, {\r\n options: {\r\n take: 999,\r\n },\r\n })\r\n .refetchOnChannelChange()\r\n .mapStream(({ stockLocations }) => stockLocations.items)\r\n .pipe(\r\n tap(items => {\r\n if (items.length) {\r\n this.selectedStockLocationId = items[0].id;\r\n this.onFormChange();\r\n }\r\n }),\r\n );\r\n\r\n this.generateVariants();\r\n }\r\n\r\n addOption() {\r\n this.optionGroups.push({ name: '', values: [] });\r\n const index = this.optionGroups.length - 1;\r\n setTimeout(() => {\r\n const input = this.groupNameInputs.get(index)?.nativeElement;\r\n input?.focus();\r\n });\r\n }\r\n\r\n removeOption(name: string) {\r\n this.optionGroups = this.optionGroups.filter(g => g.name !== name);\r\n this.generateVariants();\r\n }\r\n\r\n generateVariants() {\r\n const totalValuesCount = this.optionGroups.reduce((sum, group) => sum + group.values.length, 0);\r\n const groups = totalValuesCount\r\n ? this.optionGroups.map(g => g.values.map(v => v.name))\r\n : [[DEFAULT_VARIANT_CODE]];\r\n this.variants = generateAllCombinations(groups).map(values => ({ id: values.join('|'), values }));\r\n\r\n this.variants.forEach((variant, index) => {\r\n if (!this.variantFormValues[variant.id]) {\r\n const formGroup = this.formBuilder.nonNullable.group({\r\n optionValues: [variant.values],\r\n enabled: true as boolean,\r\n price: this.copyFromDefault(variant.id, 'price', 0),\r\n sku: this.copyFromDefault(variant.id, 'sku', ''),\r\n stock: this.copyFromDefault(variant.id, 'stock', 0),\r\n });\r\n formGroup.valueChanges.subscribe(() => this.onFormChange());\r\n if (index === 0) {\r\n formGroup.get('price')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('price', formGroup.get('price'));\r\n });\r\n formGroup.get('sku')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('sku', formGroup.get('sku'));\r\n });\r\n formGroup.get('stock')?.valueChanges.subscribe(value => {\r\n this.copyValuesToPristine('stock', formGroup.get('stock'));\r\n });\r\n }\r\n this.variantFormValues[variant.id] = formGroup;\r\n }\r\n });\r\n this.onFormChange();\r\n }\r\n\r\n trackByFn(index: number, variant: { name: string; values: string[] }) {\r\n return variant.values.join('|');\r\n }\r\n\r\n handleEnter(event: KeyboardEvent, optionValueInputComponent: OptionValueInputComponent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n optionValueInputComponent.focus();\r\n }\r\n\r\n copyValuesToPristine(field: 'price' | 'sku' | 'stock', formControl: AbstractControl | null) {\r\n if (!formControl) {\r\n return;\r\n }\r\n Object.values(this.variantFormValues).forEach(formGroup => {\r\n const correspondingFormControl = formGroup.get(field) as FormControl;\r\n if (correspondingFormControl && correspondingFormControl.pristine) {\r\n correspondingFormControl.setValue(formControl.value, { emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n onFormChange() {\r\n const variantsToCreate = this.variants\r\n .map(v => this.variantFormValues[v.id].value as CreateVariantValues)\r\n .filter(v => v.enabled);\r\n this.variantsChange.emit({\r\n groups: this.optionGroups.map(og => ({ name: og.name, values: og.values.map(v => v.name) })),\r\n variants: variantsToCreate,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockLocationId: this.selectedStockLocationId!,\r\n });\r\n }\r\n\r\n private copyFromDefault<T extends keyof CreateVariantValues>(\r\n variantId: string,\r\n prop: T,\r\n value: CreateVariantValues[T],\r\n ): CreateVariantValues[T] {\r\n return variantId !== DEFAULT_VARIANT_CODE\r\n ? (this.variantFormValues[DEFAULT_VARIANT_CODE].get(prop)?.value as CreateVariantValues[T])\r\n : value;\r\n }\r\n}\r\n","<div *ngFor=\"let group of optionGroups\" class=\"option-groups\">\r\n <div class=\"name\">\r\n <label>{{ 'catalog.option' | translate }}</label>\r\n <input\r\n #optionGroupName\r\n placeholder=\"e.g. Size\"\r\n clrInput\r\n [(ngModel)]=\"group.name\"\r\n name=\"name\"\r\n required\r\n (keydown.enter)=\"handleEnter($event, optionValueInputComponent)\"\r\n />\r\n </div>\r\n <div class=\"values\">\r\n <label>{{ 'catalog.option-values' | translate }}</label>\r\n <vdr-option-value-input\r\n #optionValueInputComponent\r\n [(ngModel)]=\"group.values\"\r\n (ngModelChange)=\"generateVariants()\"\r\n (edit)=\"generateVariants()\"\r\n [groupName]=\"group.name\"\r\n [disabled]=\"group.name === ''\"\r\n ></vdr-option-value-input>\r\n </div>\r\n <div class=\"remove-group\">\r\n <button\r\n class=\"button-small mt-2\"\r\n [title]=\"'catalog.remove-option' | translate\"\r\n (click)=\"removeOption(group.name)\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n</div>\r\n<button class=\"button mb-2\" (click)=\"addOption()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-option' | translate }}\r\n</button>\r\n\r\n<ng-container *ngIf=\"stockLocations$ | async as stockLocations\">\r\n <clr-alert *ngIf=\"stockLocations.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.no-stock-locations-available-on-current-channel' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <div class=\"form-grid mb-2\">\r\n <vdr-form-field *ngIf=\"stockLocations.length\" [label]=\"'catalog.add-stock-to-location' | translate\">\r\n <select [(ngModel)]=\"selectedStockLocationId\">\r\n <option *ngFor=\"let location of stockLocations\" [value]=\"location.id\">\r\n {{ location.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n\r\n <div class=\"variants-preview\" *ngIf=\"0 < stockLocations.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"1 < variants.length\">{{ 'common.create' | translate }}</th>\r\n <th *ngIf=\"1 < variants.length\">{{ 'catalog.variant' | translate }}</th>\r\n <th>{{ 'catalog.sku' | translate }}</th>\r\n <th>{{ 'catalog.price' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let variant of variants; trackBy: trackByFn\"\r\n [class.disabled]=\"!variantFormValues[variant.id].value.enabled === false\"\r\n [formGroup]=\"variantFormValues[variant.id]\"\r\n >\r\n <td *ngIf=\"1 < variants.length\">\r\n <input type=\"checkbox\" formControlName=\"enabled\" clrCheckbox />\r\n </td>\r\n <td *ngIf=\"1 < variants.length\">\r\n {{ variant.values.join(' ') }}\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <input type=\"text\" formControlName=\"sku\" [placeholder]=\"'catalog.sku' | translate\" />\r\n </vdr-form-field>\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <vdr-currency-input\r\n formControlName=\"price\"\r\n [currencyCode]=\"currencyCode\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n </td>\r\n <td>\r\n <vdr-form-field>\r\n <input type=\"number\" formControlName=\"stock\" min=\"0\" step=\"1\" />\r\n </vdr-form-field>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n</ng-container>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataTableLocationId,\r\n LogicalOperator,\r\n ProductVariantFilterParameter,\r\n ProductVariantListQueryDocument,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-product-variant-list',\r\n templateUrl: './product-variant-list.component.html',\r\n styleUrls: ['./product-variant-list.component.scss'],\r\n})\r\nexport class ProductVariantListComponent\r\n extends TypedBaseListComponent<typeof ProductVariantListQueryDocument, 'productVariants'>\r\n implements OnInit\r\n{\r\n @Input() productId?: string;\r\n @Input() hideLanguageSelect = false;\r\n @Input() dataTableId: DataTableLocationId | undefined;\r\n readonly customFields = this.getCustomFieldConfig('ProductVariant');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n },\r\n {\r\n name: 'sku',\r\n type: { kind: 'text' },\r\n label: _('catalog.sku'),\r\n filterField: 'sku',\r\n },\r\n {\r\n name: 'price',\r\n type: { kind: 'number', inputType: 'currency' },\r\n label: _('common.price'),\r\n filterField: 'price',\r\n },\r\n {\r\n name: 'priceWithTax',\r\n type: { kind: 'number', inputType: 'currency' },\r\n label: _('common.price-with-tax'),\r\n filterField: 'priceWithTax',\r\n },\r\n ])\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'sku' },\r\n { name: 'price' },\r\n { name: 'priceWithTax' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n this.configure({\r\n document: ProductVariantListQueryDocument,\r\n getItems: data => data.productVariants,\r\n setVariables: (skip, take) => {\r\n const searchTerm = this.searchTermControl.value;\r\n const filterParam: ProductVariantFilterParameter = { _and: [] };\r\n const filterInput = this.filters.createFilterInput();\r\n if (Object.keys(filterInput).length) {\r\n filterParam._and?.push(filterInput);\r\n }\r\n if (searchTerm) {\r\n filterParam._and?.push({\r\n _or: [\r\n {\r\n name: { contains: searchTerm },\r\n },\r\n {\r\n sku: { contains: searchTerm },\r\n },\r\n ],\r\n });\r\n }\r\n if (this.productId) {\r\n filterParam._and?.push({\r\n productId: {\r\n eq: this.productId,\r\n },\r\n });\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: filterParam,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n}\r\n","<vdr-page-block *ngIf=\"!hideLanguageSelect\">\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableId || 'product-variant-list'\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"product-variant-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-variant=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"variant.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-variant=\"item\">\r\n <a\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/catalog/products', variant.productId, 'variants', variant.id]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [sort]=\"sorts.get('sku')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip *ngIf=\"variant.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!variant.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.price' | translate\" id=\"price\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('price')\"\r\n >\r\n <ng-template let-variant=\"item\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.price-with-tax' | translate\" id=\"price-with-tax\" [sort]=\"sorts.get('priceWithTax')\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n\r\n <vdr-dt2-column [heading]=\"'catalog.stock-on-hand' | translate\" id=\"stock-on-hand\" [hiddenByDefault]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <vdr-chip *ngFor=\"let stockLevel of variant.stockLevels\" [title]=\"stockLevel.stockLocation?.name\">\r\n <div class=\"flex center\">\r\n <div>\r\n {{ stockLevel.stockOnHand\r\n }}<span class=\"ml-1\" *ngIf=\"stockLevel.stockAllocated\"\r\n >({{ stockLevel.stockAllocated }} allocated)</span\r\n >\r\n </div>\r\n </div>\r\n </vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let field of customFields\" [customField]=\"field\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n CreateProductInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n findTranslation,\r\n getChannelCodeFromUserStatus,\r\n getCustomFieldsDefaults,\r\n GetProductDetailDocument,\r\n GetProductDetailQuery,\r\n GetProductWithVariantsQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n PRODUCT_DETAIL_FRAGMENT,\r\n ProductDetailFragment,\r\n ProductVariantFragment,\r\n TypedBaseDetailComponent,\r\n unicodePatternValidator,\r\n UpdateProductInput,\r\n UpdateProductMutation,\r\n UpdateProductVariantInput,\r\n UpdateProductVariantsMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest, concat, EMPTY, from, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, mergeMap, shareReplay, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { CreateProductVariantsConfig } from '../generate-product-variants/generate-product-variants.component';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\nexport const GET_PRODUCT_DETAIL = gql`\r\n query GetProductDetail($id: ID!) {\r\n product(id: $id) {\r\n ...ProductDetail\r\n }\r\n }\r\n ${PRODUCT_DETAIL_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-product-detail2',\r\n templateUrl: './product-detail.component.html',\r\n styleUrls: ['./product-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetProductDetailDocument, 'product'>\r\n implements OnInit, OnDestroy\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Product');\r\n detailForm = this.formBuilder.group({\r\n enabled: true,\r\n name: ['', Validators.required],\r\n autoUpdateVariantNames: true,\r\n slug: ['', unicodePatternValidator(/^[\\p{Letter}0-9._-]+$/)],\r\n description: '',\r\n facetValueIds: [[] as string[]],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n assetChanges: SelectedAssets = {};\r\n productChannels$: Observable<ProductDetailFragment['channels']>;\r\n facetValues$: Observable<ProductDetailFragment['facetValues']>;\r\n createVariantsConfig: CreateProductVariantsConfig = { groups: [], variants: [], stockLocationId: '' };\r\n public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n\r\n constructor(\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: FormBuilder,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n\r\n const productFacetValues$ = this.isNew$.pipe(\r\n switchMap(isNew => {\r\n return isNew ? of([]) : this.entity$.pipe(map(product => product.facetValues));\r\n }),\r\n );\r\n const productGroup = this.detailForm;\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const formFacetValueIdChanges$ = productGroup.get('facetValueIds')!.valueChanges.pipe(\r\n distinctUntilChanged(),\r\n switchMap(ids =>\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: ids } } })\r\n .mapSingle(({ facetValues }) => facetValues.items),\r\n ),\r\n shareReplay(1),\r\n );\r\n this.facetValues$ = concat(\r\n productFacetValues$.pipe(take(1)),\r\n productFacetValues$.pipe(switchMap(() => formFacetValueIdChanges$)),\r\n );\r\n this.productChannels$ = this.entity$.pipe(map(p => p.channels));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n\r\n assignToChannel() {\r\n this.productChannels$\r\n .pipe(\r\n take(1),\r\n switchMap(channels =>\r\n this.modalService.fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: [this.id],\r\n currentChannelIds: channels.map(c => c.id),\r\n },\r\n }),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n\r\n removeFromChannel(channelId: string) {\r\n from(getChannelCodeFromUserStatus(this.dataService, channelId))\r\n .pipe(\r\n switchMap(({ channelCode }) =>\r\n this.modalService.dialog({\r\n title: _('catalog.remove-product-from-channel'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: _('catalog.remove-from-channel'),\r\n translationVars: { channelCode },\r\n returnValue: true,\r\n },\r\n ],\r\n }),\r\n ),\r\n switchMap(response =>\r\n response\r\n ? this.dataService.product.removeProductsFromChannel({\r\n channelId,\r\n productIds: [this.id],\r\n })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('catalog.notify-remove-product-from-channel-success'));\r\n },\r\n err => {\r\n this.notificationService.error(_('catalog.notify-remove-product-from-channel-error'));\r\n },\r\n );\r\n }\r\n\r\n assignVariantToChannel(variant: ProductVariantFragment) {\r\n return this.modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: [this.id],\r\n productVariantIds: [variant.id],\r\n currentChannelIds: variant.channels.map(c => c.id),\r\n },\r\n })\r\n .subscribe();\r\n }\r\n\r\n removeVariantFromChannel({ channelId, variant }: { channelId: string; variant: ProductVariantFragment }) {\r\n from(getChannelCodeFromUserStatus(this.dataService, channelId))\r\n .pipe(\r\n switchMap(({ channelCode }) =>\r\n this.modalService.dialog({\r\n title: _('catalog.remove-product-variant-from-channel'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n {\r\n type: 'danger',\r\n label: _('catalog.remove-from-channel'),\r\n translationVars: { channelCode },\r\n returnValue: true,\r\n },\r\n ],\r\n }),\r\n ),\r\n switchMap(response =>\r\n response\r\n ? this.dataService.product.removeVariantsFromChannel({\r\n channelId,\r\n productVariantIds: [variant.id],\r\n })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('catalog.notify-remove-variant-from-channel-success'));\r\n },\r\n err => {\r\n this.notificationService.error(_('catalog.notify-remove-variant-from-channel-error'));\r\n },\r\n );\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n /**\r\n * If creating a new product, automatically generate the slug based on the product name.\r\n */\r\n updateSlug(nameValue: string) {\r\n const slugControl = this.detailForm.get('slug');\r\n const currentTranslation = this.entity ? findTranslation(this.entity, this.languageCode) : undefined;\r\n const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;\r\n if (slugControl && slugControl.pristine && currentSlugIsEmpty) {\r\n slugControl.setValue(normalizeString(`${nameValue}`, '-'));\r\n }\r\n }\r\n\r\n selectProductFacetValue() {\r\n this.displayFacetValueModal().subscribe(facetValueIds => {\r\n if (facetValueIds) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n removeProductFacetValue(facetValueId: string) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n\r\n private displayFacetValueModal(): Observable<string[] | undefined> {\r\n return this.modalService\r\n .fromComponent(ApplyFacetDialogComponent, {\r\n size: 'md',\r\n closable: true,\r\n })\r\n .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\r\n }\r\n\r\n create() {\r\n const productGroup = this.detailForm;\r\n if (!productGroup.dirty) {\r\n return;\r\n }\r\n\r\n const newProduct = this.getUpdatedProduct(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n enabled: true,\r\n languageCode: this.languageCode,\r\n name: '',\r\n slug: '',\r\n featuredAsset: null,\r\n assets: [],\r\n description: '',\r\n translations: [],\r\n optionGroups: [],\r\n facetValues: [],\r\n channels: [],\r\n },\r\n productGroup as UntypedFormGroup,\r\n this.languageCode,\r\n ) as CreateProductInput;\r\n this.productDetailService\r\n .createProductWithVariants(newProduct, this.createVariantsConfig, this.languageCode)\r\n .subscribe(\r\n ({ createProductVariants, productId }) => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Product',\r\n });\r\n this.assetChanges = {};\r\n this.detailForm.markAsPristine();\r\n this.router.navigate(['../', productId], { relativeTo: this.route });\r\n },\r\n err => {\r\n // eslint-disable-next-line no-console\r\n console.error(err);\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([product, languageCode]) => {\r\n const productGroup = this.detailForm;\r\n let productInput: UpdateProductInput | undefined;\r\n let variantsInput: UpdateProductVariantInput[] | undefined;\r\n\r\n if (productGroup.dirty || this.assetsChanged()) {\r\n productInput = this.getUpdatedProduct(\r\n product,\r\n productGroup as UntypedFormGroup,\r\n languageCode,\r\n ) as UpdateProductInput;\r\n }\r\n\r\n return this.productDetailService.updateProduct({\r\n product,\r\n languageCode,\r\n autoUpdate: this.detailForm.get(['autoUpdateVariantNames'])?.value ?? false,\r\n productInput,\r\n variantsInput,\r\n });\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n this.updateSlugAfterSave(result);\r\n this.detailForm.markAsPristine();\r\n this.assetChanges = {};\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Product',\r\n });\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n\r\n canDeactivate(): boolean {\r\n return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;\r\n }\r\n\r\n /**\r\n * Sets the values of the form on changes to the product or current language.\r\n */\r\n protected setFormValues(\r\n product: NonNullable<GetProductWithVariantsQuery['product']>,\r\n languageCode: LanguageCode,\r\n ) {\r\n const currentTranslation = findTranslation(product, languageCode);\r\n this.detailForm.patchValue({\r\n enabled: product.enabled,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n slug: currentTranslation ? currentTranslation.slug : '',\r\n description: currentTranslation ? currentTranslation.description : '',\r\n facetValueIds: product.facetValues.map(fv => fv.id),\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n product,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a product and the value of the detailForm, this method creates an updated copy of the product which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedProduct(\r\n product: NonNullable<GetProductDetailQuery['product']>,\r\n productFormGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdateProductInput | CreateProductInput {\r\n const updatedProduct = createUpdatedTranslatable({\r\n translatable: product,\r\n updatedFields: productFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: product.name || '',\r\n slug: product.slug || '',\r\n description: product.description || '',\r\n },\r\n });\r\n return {\r\n ...updatedProduct,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n facetValueIds: productFormGroup.controls.facetValueIds.dirty\r\n ? productFormGroup.value.facetValueIds\r\n : undefined,\r\n } as UpdateProductInput | CreateProductInput;\r\n }\r\n\r\n /**\r\n * The server may alter the slug value in order to normalize and ensure uniqueness upon saving.\r\n */\r\n private updateSlugAfterSave(results: Array<UpdateProductMutation | UpdateProductVariantsMutation>) {\r\n const firstResult = results[0];\r\n const slugControl = this.detailForm.get(['product', 'slug']);\r\n\r\n function isUpdateMutation(input: any): input is UpdateProductMutation {\r\n return input.hasOwnProperty('updateProduct');\r\n }\r\n\r\n if (slugControl && isUpdateMutation(firstResult)) {\r\n slugControl.setValue(firstResult.updateProduct.slug, { emitEvent: false });\r\n }\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-flex-row\"></div>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine || createVariantsConfig.variants.length === 0\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermissions\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"product-detail\"></vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermissions\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <vdr-card *vdrIfMultichannel [title]=\"'common.channels' | translate\">\r\n <vdr-form-item *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <div class=\"mb-2\">\r\n <ng-container *ngFor=\"let channel of productChannels$ | async\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n (iconClick)=\"removeFromChannel(channel.id)\"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n </div>\r\n <button class=\"button-small\" (click)=\"assignToChannel()\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'common.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </vdr-form-item>\r\n </vdr-card>\r\n </ng-container>\r\n <vdr-card *ngIf=\"entity?.optionGroups.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let optionGroup of entity?.optionGroups | sort : 'id'\"\r\n [colorFrom]=\"optionGroup.code\"\r\n [invert]=\"true\"\r\n >\r\n {{ optionGroup.name }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a [routerLink]=\"['options']\" class=\"button-small mt-2\" *vdrIfPermissions=\"updatePermissions\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeProductFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectProductFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\"></vdr-page-entity-info>\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <div>\r\n <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <div *ngIf=\"(isNew$ | async) === false && detailForm.get(['name'])?.dirty\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n formControlName=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n class=\"form-grid-span\"\r\n [label]=\"'common.description' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-rich-text-editor>\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Product\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || entity?.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || entity?.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </vdr-card>\r\n\r\n <vdr-card [title]=\"'catalog.product-variants' | translate\" [paddingX]=\"isNew$ | async\">\r\n <div *ngIf=\"isNew$ | async; else variantList\">\r\n <vdr-generate-product-variants\r\n (variantsChange)=\"createVariantsConfig = $event\"\r\n ></vdr-generate-product-variants>\r\n </div>\r\n <ng-template #variantList>\r\n <vdr-product-variant-list\r\n [productId]=\"this.id\"\r\n dataTableId=\"product-detail-variants-list\"\r\n [hideLanguageSelect]=\"true\"\r\n ></vdr-product-variant-list>\r\n </ng-template>\r\n <div class=\"mx-3\" *ngIf=\"(isNew$ | async) === false\">\r\n <a class=\"button\" [routerLink]=\"['manage-variants']\">\r\n <clr-icon shape=\"add-text\"></clr-icon>\r\n {{ 'catalog.manage-variants' | translate }}</a\r\n >\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DeletionResult,\r\n DuplicateEntityDialogComponent,\r\n GetProductListQuery,\r\n isMultiChannel,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\n\r\nimport { ProductListComponent } from './product-list.component';\r\n\r\nexport const deleteProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.delete'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteProduct) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .dialog({\r\n title: _('catalog.confirm-bulk-delete-products'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response ? dataService.product.deleteProducts(unique(selection.map(p => p.id))) : EMPTY,\r\n ),\r\n )\r\n .subscribe(result => {\r\n let deleted = 0;\r\n const errors: string[] = [];\r\n for (const item of result.deleteProducts) {\r\n if (item.result === DeletionResult.DELETED) {\r\n deleted++;\r\n } else if (item.message) {\r\n errors.push(item.message);\r\n }\r\n }\r\n if (0 < deleted) {\r\n notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\r\n count: deleted,\r\n });\r\n }\r\n if (0 < errors.length) {\r\n notificationService.error(errors.join('\\n'));\r\n }\r\n hostComponent.refresh();\r\n clearSelection();\r\n });\r\n },\r\n};\r\n\r\nexport const assignProductsToChannelBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.assign-to-channel'),\r\n icon: 'layers',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productIds: unique(selection.map(p => p.id)),\r\n currentChannelIds: [],\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const removeProductsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetProductListQuery, 'products'>\r\n>({\r\n location: 'product-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, productIds, channelId) =>\r\n dataService.product\r\n .removeProductsFromChannel({\r\n channelId: channelId,\r\n productIds,\r\n })\r\n .pipe(map(res => res.removeProductsFromChannel)),\r\n});\r\n\r\nexport const assignFacetValuesToProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('catalog.edit-facet-values'),\r\n icon: 'tag',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const notificationService = injector.get(NotificationService);\r\n const mode = 'product';\r\n const ids = unique(selection.map(p => p.id));\r\n return modalService\r\n .fromComponent(BulkAddFacetValuesDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n mode,\r\n ids,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n notificationService.success(_('common.notify-bulk-update-success'), {\r\n count: selection.length,\r\n entity: mode === 'product' ? 'Products' : 'ProductVariants',\r\n });\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const duplicateProductsBulkAction: BulkAction<\r\n ItemOf<GetProductListQuery, 'products'>,\r\n ProductListComponent\r\n> = {\r\n location: 'product-list',\r\n label: _('common.duplicate'),\r\n icon: 'copy',\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetProductListQuery, 'products'>>, {\r\n locals: {\r\n entities: selection,\r\n entityName: 'Product',\r\n title: _('catalog.duplicate-products'),\r\n getEntityName: entity => entity.name,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n hostComponent.refresh();\r\n }\r\n });\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n FacetValueFormInputComponent,\r\n JobQueueService,\r\n JobState,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n ProductListQueryDocument,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, lastValueFrom } from 'rxjs';\r\nimport { delay, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-products-list',\r\n templateUrl: './product-list.component.html',\r\n styleUrls: ['./product-list.component.scss'],\r\n})\r\nexport class ProductListComponent\r\n extends TypedBaseListComponent<typeof ProductListQueryDocument, 'products'>\r\n implements OnInit\r\n{\r\n pendingSearchIndexUpdates = 0;\r\n dataTableListId = 'product-list';\r\n pageLocationId = 'product-list';\r\n readonly customFields = this.getCustomFieldConfig('Product');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'enabled',\r\n type: { kind: 'boolean' },\r\n label: _('common.enabled'),\r\n filterField: 'enabled',\r\n },\r\n {\r\n name: 'slug',\r\n type: { kind: 'text' },\r\n label: _('common.slug'),\r\n filterField: 'slug',\r\n },\r\n ])\r\n .addFilter({\r\n name: 'facetValues',\r\n type: {\r\n kind: 'custom',\r\n component: FacetValueFormInputComponent,\r\n serializeValue: value => value.map(v => v.id).join(','),\r\n deserializeValue: value => value.split(',').map(id => ({ id })),\r\n getLabel: value => {\r\n if (value.length === 0) {\r\n return '';\r\n }\r\n if (value[0].name) {\r\n return value.map(v => v.name).join(', ');\r\n } else {\r\n return lastValueFrom(\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: value.map(v => v.id) } } })\r\n .mapSingle(({ facetValues }) =>\r\n facetValues.items.map(fv => fv.name).join(', '),\r\n ),\r\n );\r\n }\r\n },\r\n },\r\n label: _('catalog.facet-values'),\r\n toFilterInput: (value: any[]) => ({\r\n facetValueId: {\r\n in: value.map(v => v.id),\r\n },\r\n }),\r\n })\r\n .addCustomFieldFilters(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n readonly sorts = this.createSortCollection()\r\n .defaultSort('createdAt', 'DESC')\r\n .addSorts([\r\n { name: 'id' },\r\n { name: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'name' },\r\n { name: 'slug' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor(\r\n protected dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private jobQueueService: JobQueueService,\r\n ) {\r\n super();\r\n this.configure({\r\n document: ProductListQueryDocument,\r\n getItems: data => data.products,\r\n setVariables: (skip, take) => {\r\n const searchTerm = this.searchTermControl.value;\r\n let filterInput = this.filters.createFilterInput();\r\n if (searchTerm) {\r\n filterInput = {\r\n name: {\r\n contains: searchTerm,\r\n },\r\n sku: {\r\n contains: searchTerm,\r\n },\r\n };\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(filterInput ?? {}),\r\n },\r\n filterOperator: searchTerm ? LogicalOperator.OR : LogicalOperator.AND,\r\n sort: this.sorts.createSortInput(),\r\n },\r\n };\r\n },\r\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\r\n });\r\n }\r\n\r\n rebuildSearchIndex() {\r\n this.dataService.product.reindex().subscribe(({ reindex }) => {\r\n this.notificationService.info(_('catalog.reindexing'));\r\n this.jobQueueService.addJob(reindex.id, job => {\r\n if (job.state === JobState.COMPLETED) {\r\n const time = new Intl.NumberFormat().format(job.duration || 0);\r\n this.notificationService.success(_('catalog.reindex-successful'), {\r\n count: job.result.indexedItemCount,\r\n time,\r\n });\r\n this.refresh();\r\n } else {\r\n this.notificationService.error(_('catalog.reindex-error'));\r\n }\r\n });\r\n });\r\n }\r\n\r\n deleteProduct(productId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-product'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response => (response ? this.dataService.product.deleteProduct(productId) : EMPTY)),\r\n // Short delay to allow the product to be removed from the search index before\r\n // refreshing.\r\n delay(500),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Product',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Product',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items [locationId]=\"pageLocationId\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary mr-1\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-product' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu [alwaysShow]=\"true\" [locationId]=\"pageLocationId\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\r\n <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"dataTableListId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-product=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-product=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\r\n ><span>{{ product.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-product=\"item\">\r\n <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\" id=\"number-of-variants\">\r\n <ng-template let-product=\"item\">\r\n {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-variant-price-detail',\r\n templateUrl: './variant-price-detail.component.html',\r\n styleUrls: ['./variant-price-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariantPriceDetailComponent implements OnInit, OnChanges {\r\n @Input() priceIncludesTax: boolean;\r\n @Input() price: number;\r\n @Input() currencyCode: string;\r\n @Input() taxCategoryId: string;\r\n\r\n grossPrice$: Observable<number>;\r\n taxRate$: Observable<number>;\r\n\r\n private priceChange$ = new BehaviorSubject<number>(0);\r\n private taxCategoryIdChange$ = new BehaviorSubject<string>('');\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n const taxRates$ = this.dataService.settings\r\n .getTaxRatesSimple(999, 0, 'cache-first')\r\n .mapStream(data => data.taxRates.items);\r\n const activeChannel$ = this.dataService.settings\r\n .getActiveChannel('cache-first')\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.taxRate$ = combineLatest(activeChannel$, taxRates$, this.taxCategoryIdChange$).pipe(\r\n map(([channel, taxRates, taxCategoryId]) => {\r\n const defaultTaxZone = channel.defaultTaxZone;\r\n if (!defaultTaxZone) {\r\n return 0;\r\n }\r\n const applicableRate = taxRates.find(\r\n taxRate => taxRate.zone.id === defaultTaxZone.id && taxRate.category.id === taxCategoryId,\r\n );\r\n\r\n if (!applicableRate) {\r\n return 0;\r\n }\r\n return applicableRate.value;\r\n }),\r\n );\r\n\r\n this.grossPrice$ = combineLatest(this.taxRate$, this.priceChange$).pipe(\r\n map(([taxRate, price]) => Math.round(price * ((100 + taxRate) / 100))),\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('price' in changes) {\r\n this.priceChange$.next(changes.price.currentValue);\r\n }\r\n if ('taxCategoryId' in changes) {\r\n this.taxCategoryIdChange$.next(changes.taxCategoryId.currentValue);\r\n }\r\n }\r\n}\r\n","<label class=\"clr-control-label\">{{ 'catalog.taxes' | translate }}</label>\r\n<div *ngIf=\"priceIncludesTax\" class=\"value\">\r\n {{ 'catalog.price-includes-tax-at' | translate: { rate: taxRate$ | async } }}\r\n</div>\r\n<div *ngIf=\"!priceIncludesTax\" class=\"value\">\r\n {{\r\n 'catalog.price-with-tax-in-default-zone'\r\n | translate: { price: grossPrice$ | async | localeCurrency: currencyCode, rate: taxRate$ | async }\r\n }}\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n ProductVariantDetailQueryProductVariantFragmentFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-variant-price-strategy-detail',\r\n templateUrl: './variant-price-strategy-detail.component.html',\r\n styleUrls: ['./variant-price-strategy-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariantPriceStrategyDetailComponent {\r\n @Input() channelPriceIncludesTax: boolean;\r\n @Input() variant: ProductVariantDetailQueryProductVariantFragmentFragment;\r\n @Input() channelDefaultCurrencyCode: CurrencyCode;\r\n\r\n calculatedPriceDiffersFromInputPrice(): boolean {\r\n const defaultPrice =\r\n this.variant.prices.find(p => p.currencyCode === this.channelDefaultCurrencyCode) ??\r\n this.variant.prices[0];\r\n if (!defaultPrice) {\r\n return false;\r\n }\r\n if (this.channelPriceIncludesTax) {\r\n return this.variant.priceWithTax !== defaultPrice.price;\r\n } else {\r\n return this.variant.price !== defaultPrice.price;\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"calculatedPriceDiffersFromInputPrice()\" class=\"price-strategy-detail\">\r\n <vdr-form-item\r\n [label]=\"'catalog.calculated-price' | translate\"\r\n [tooltip]=\"'catalog.calculated-price-tooltip' | translate\"\r\n for=\"price\"\r\n >\r\n </vdr-form-item>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-item [label]=\"'common.price' | translate\">\r\n {{ variant.price | localeCurrency : variant.currencyCode }}\r\n </vdr-form-item>\r\n <vdr-form-item [label]=\"'common.price-with-tax' | translate\">\r\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\r\n </vdr-form-item>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n DataService,\r\n GetProductVariantsQuickJumpDocument,\r\n GetProductVariantsQuickJumpQuery,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { Observable } from 'rxjs';\r\n\r\nconst GET_PRODUCT_VARIANTS_QUICK_JUMP = gql`\r\n query GetProductVariantsQuickJump($id: ID!) {\r\n product(id: $id) {\r\n id\r\n variants {\r\n id\r\n name\r\n sku\r\n }\r\n }\r\n }\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-product-variant-quick-jump',\r\n templateUrl: './product-variant-quick-jump.component.html',\r\n styleUrls: ['./product-variant-quick-jump.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantQuickJumpComponent implements OnInit {\r\n @Input() productId: string;\r\n selectedVariantId: string | undefined;\r\n variants$: Observable<NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants']>;\r\n constructor(\r\n private dataService: DataService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.variants$ = this.dataService\r\n .query(GetProductVariantsQuickJumpDocument, {\r\n id: this.productId,\r\n })\r\n .mapStream(data => data.product?.variants ?? []);\r\n }\r\n\r\n searchFn = (\r\n term: string,\r\n item: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number],\r\n ) =>\r\n item.name.toLowerCase().includes(term.toLowerCase()) ||\r\n item.sku.toLowerCase().includes(term.toLowerCase());\r\n\r\n onSelect(item?: NonNullable<GetProductVariantsQuickJumpQuery['product']>['variants'][number]) {\r\n if (item) {\r\n this.router\r\n .navigate(['catalog', 'products', this.productId, 'variants', item.id])\r\n .then(() => (this.selectedVariantId = undefined));\r\n }\r\n }\r\n}\r\n","<ng-select\r\n *ngIf=\"(variants$ | async)?.length > 1\"\r\n [items]=\"variants$ | async\"\r\n appendTo=\"body\"\r\n bindValue=\"id\"\r\n [(ngModel)]=\"selectedVariantId\"\r\n [searchFn]=\"searchFn\"\r\n [clearable]=\"false\"\r\n [placeholder]=\"'catalog.quick-jump-placeholder' | translate\"\r\n (change)=\"onSelect($event)\"\r\n>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n {{ item.name }} ({{ item.sku }})\r\n </ng-template>\r\n</ng-select>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, UntypedFormGroup } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n Asset,\r\n CreateProductVariantInput,\r\n createUpdatedTranslatable,\r\n CurrencyCode,\r\n DataService,\r\n findTranslation,\r\n getCustomFieldsDefaults,\r\n GetProductVariantDetailDocument,\r\n GetProductVariantDetailQuery,\r\n GlobalFlag,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n ProductOptionFragment,\r\n ProductVariantUpdateMutationDocument,\r\n TypedBaseDetailComponent,\r\n UpdateProductVariantInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { pick } from '@vendure/common/lib/pick';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { combineLatest, concat, Observable } from 'rxjs';\r\nimport {\r\n distinctUntilChanged,\r\n map,\r\n mergeMap,\r\n shareReplay,\r\n skip,\r\n switchMap,\r\n switchMapTo,\r\n take,\r\n tap,\r\n} from 'rxjs/operators';\r\nimport { ProductDetailService } from '../../providers/product-detail/product-detail.service';\r\nimport { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\ninterface VariantFormValue {\r\n id: string;\r\n enabled: boolean;\r\n sku: string;\r\n name: string;\r\n taxCategoryId: string;\r\n stockOnHand: number;\r\n useGlobalOutOfStockThreshold: boolean;\r\n outOfStockThreshold: number;\r\n trackInventory: GlobalFlag;\r\n facetValueIds: string[][];\r\n customFields?: any;\r\n}\r\ntype T = NonNullable<GetProductVariantDetailQuery['productVariant']>;\r\ntype T1 = T['stockLevels'];\r\n@Component({\r\n selector: 'vdr-product-variant-detail',\r\n templateUrl: './product-variant-detail.component.html',\r\n styleUrls: ['./product-variant-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetProductVariantDetailDocument, 'productVariant'>\r\n implements OnInit, OnDestroy\r\n{\r\n public readonly updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n readonly customFields = this.getCustomFieldConfig('ProductVariant');\r\n readonly customPriceFields = this.getCustomFieldConfig('ProductVariantPrice');\r\n readonly customOptionFields = this.getCustomFieldConfig('ProductOption');\r\n stockLevels$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['stockLevels']>;\r\n detailForm = this.formBuilder.group<VariantFormValue>({\r\n id: '',\r\n enabled: false,\r\n sku: '',\r\n name: '',\r\n taxCategoryId: '',\r\n stockOnHand: 0,\r\n useGlobalOutOfStockThreshold: true,\r\n outOfStockThreshold: 0,\r\n trackInventory: GlobalFlag.TRUE,\r\n facetValueIds: [],\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n stockLevelsForm = this.formBuilder.array<\r\n FormGroup<{\r\n stockLocationId: FormControl<string | null>;\r\n stockLocationName: FormControl<string | null>;\r\n stockOnHand: FormControl<number | null>;\r\n stockAllocated: FormControl<number | null>;\r\n }>\r\n >([]);\r\n pricesForm = this.formBuilder.array<\r\n FormGroup<{\r\n price: FormControl<number | null>;\r\n currencyCode: FormControl<CurrencyCode | null>;\r\n delete: FormControl<boolean | null>;\r\n customFields: FormGroup<any>; //TODO: Add type\r\n }>\r\n >([]);\r\n assetChanges: SelectedAssets = {};\r\n taxCategories$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'taxCategories'>>>;\r\n unusedStockLocation$: Observable<Array<ItemOf<GetProductVariantDetailQuery, 'stockLocations'>>>;\r\n unusedCurrencyCodes$: Observable<string[]>;\r\n channelPriceIncludesTax$: Observable<boolean>;\r\n readonly GlobalFlag = GlobalFlag;\r\n globalTrackInventory: boolean;\r\n globalOutOfStockThreshold: number;\r\n facetValues$: Observable<NonNullable<GetProductVariantDetailQuery['productVariant']>['facetValues']>;\r\n channelDefaultCurrencyCode: CurrencyCode;\r\n\r\n constructor(\r\n private productDetailService: ProductDetailService,\r\n private formBuilder: FormBuilder,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n protected dataService: DataService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.settings.getGlobalSettings('cache-first').single$.subscribe(({ globalSettings }) => {\r\n this.globalTrackInventory = globalSettings.trackInventory;\r\n this.globalOutOfStockThreshold = globalSettings.outOfStockThreshold;\r\n this.changeDetector.markForCheck();\r\n });\r\n this.taxCategories$ = this.result$.pipe(map(data => data.taxCategories.items));\r\n const availableCurrencyCodes$ = this.result$.pipe(\r\n tap(data => (this.channelDefaultCurrencyCode = data.activeChannel.defaultCurrencyCode)),\r\n map(data => data.activeChannel.availableCurrencyCodes),\r\n );\r\n this.unusedCurrencyCodes$ = combineLatest(this.pricesForm.valueChanges, availableCurrencyCodes$).pipe(\r\n map(([prices, currencyCodes]) =>\r\n currencyCodes.filter(code => !prices.map(p => p.currencyCode).includes(code)),\r\n ),\r\n );\r\n const stockLocations$ = this.result$.pipe(map(data => data.stockLocations.items));\r\n this.unusedStockLocation$ = combineLatest(this.entity$, stockLocations$).pipe(\r\n map(([entity, stockLocations]) => {\r\n const usedIds = entity.stockLevels.map(l => l.stockLocation.id);\r\n return stockLocations.filter(l => !usedIds.includes(l.id));\r\n }),\r\n );\r\n this.channelPriceIncludesTax$ = this.dataService.settings\r\n .getActiveChannel('cache-first')\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel.pricesIncludeTax)\r\n .pipe(shareReplay(1));\r\n this.stockLevels$ = this.entity$.pipe(map(entity => entity?.stockLevels ?? []));\r\n const facetValues$ = this.entity$.pipe(map(variant => variant.facetValues ?? []));\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const formFacetValueIdChanges$ = this.detailForm.get('facetValueIds')!.valueChanges.pipe(\r\n skip(1),\r\n distinctUntilChanged(),\r\n switchMap(ids =>\r\n this.dataService.facet\r\n .getFacetValues({ filter: { id: { in: ids } } })\r\n .mapSingle(({ facetValues }) => facetValues.items),\r\n ),\r\n shareReplay(1),\r\n );\r\n this.facetValues$ = concat(\r\n facetValues$.pipe(take(1)),\r\n facetValues$.pipe(switchMapTo(formFacetValueIdChanges$)),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n addPriceInCurrency(currencyCode: CurrencyCode) {\r\n this.pricesForm.push(\r\n this.formBuilder.group({\r\n currencyCode,\r\n price: 0,\r\n delete: false as boolean,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customPriceFields)),\r\n }),\r\n );\r\n }\r\n\r\n toggleDeletePrice(deleteFormControl: FormControl) {\r\n deleteFormControl.setValue(!deleteFormControl.value);\r\n deleteFormControl.markAsDirty();\r\n }\r\n\r\n addStockLocation(stockLocation: ItemOf<GetProductVariantDetailQuery, 'stockLocations'>) {\r\n this.stockLevelsForm.push(\r\n this.formBuilder.group({\r\n stockLocationId: stockLocation.id,\r\n stockLocationName: stockLocation.name,\r\n stockOnHand: 0,\r\n stockAllocated: 0,\r\n }),\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([variant, languageCode]) => {\r\n const input = pick(\r\n this.getUpdatedVariant(\r\n variant,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateProductVariantInput,\r\n [\r\n 'id',\r\n 'enabled',\r\n 'translations',\r\n 'sku',\r\n 'taxCategoryId',\r\n 'facetValueIds',\r\n 'featuredAssetId',\r\n 'assetIds',\r\n 'trackInventory',\r\n 'outOfStockThreshold',\r\n 'useGlobalOutOfStockThreshold',\r\n 'customFields',\r\n ],\r\n ) as UpdateProductVariantInput;\r\n if (this.stockLevelsForm.dirty) {\r\n input.stockLevels = this.stockLevelsForm.controls\r\n .filter(control => control.dirty)\r\n .map(control => ({\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockLocationId: control.value.stockLocationId!,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n stockOnHand: control.value.stockOnHand!,\r\n }));\r\n }\r\n if (this.pricesForm.dirty) {\r\n input.prices = this.pricesForm.controls\r\n .filter(control => control.dirty)\r\n .map(control => ({\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n price: control.value.price!,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n currencyCode: control.value.currencyCode!,\r\n delete: control.value.delete === true,\r\n customFields: control.get('customFields')?.value,\r\n }));\r\n }\r\n return this.dataService.mutate(ProductVariantUpdateMutationDocument, {\r\n input: [input],\r\n });\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n this.detailForm.markAsPristine();\r\n this.stockLevelsForm.markAsPristine();\r\n this.pricesForm.markAsPristine();\r\n this.assetChanges = {};\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ProductVariant',\r\n });\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ProductVariant',\r\n });\r\n },\r\n );\r\n }\r\n\r\n assetsChanged(): boolean {\r\n return !!Object.values(this.assetChanges).length;\r\n }\r\n\r\n inventoryIsNotTracked(formGroup: UntypedFormGroup): boolean {\r\n const trackInventory = formGroup.get('trackInventory')?.value;\r\n return (\r\n trackInventory === GlobalFlag.FALSE ||\r\n (trackInventory === GlobalFlag.INHERIT && this.globalTrackInventory === false)\r\n );\r\n }\r\n\r\n optionGroupCode(optionGroupId: string): string | undefined {\r\n const group = this.entity?.product.optionGroups.find(g => g.id === optionGroupId);\r\n return group?.code;\r\n }\r\n\r\n optionName(option: ProductOptionFragment) {\r\n const translation =\r\n option.translations.find(t => t.languageCode === this.languageCode) ?? option.translations[0];\r\n return translation.name;\r\n }\r\n\r\n removeFacetValue(facetValueId: string) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(currentFacetValueIds.filter(id => id !== facetValueId));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n\r\n selectFacetValue() {\r\n this.displayFacetValueModal().subscribe(facetValueIds => {\r\n if (facetValueIds) {\r\n const facetValueIdsControl = this.detailForm.controls.facetValueIds;\r\n const currentFacetValueIds = facetValueIdsControl.value ?? [];\r\n facetValueIdsControl.setValue(unique([...currentFacetValueIds, ...facetValueIds]));\r\n facetValueIdsControl.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n private displayFacetValueModal(): Observable<string[] | undefined> {\r\n return this.modalService\r\n .fromComponent(ApplyFacetDialogComponent, {\r\n size: 'md',\r\n closable: true,\r\n })\r\n .pipe(map(facetValues => facetValues && facetValues.map(v => v.id)));\r\n }\r\n\r\n protected setFormValues(\r\n variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\r\n languageCode: LanguageCode,\r\n ): void {\r\n const variantTranslation = findTranslation(variant, languageCode);\r\n const facetValueIds = variant.facetValues.map(fv => fv.id);\r\n this.detailForm.patchValue({\r\n id: variant.id,\r\n enabled: variant.enabled,\r\n sku: variant.sku,\r\n name: variantTranslation ? variantTranslation.name : '',\r\n taxCategoryId: variant.taxCategory.id,\r\n stockOnHand: variant.stockLevels[0]?.stockOnHand ?? 0,\r\n useGlobalOutOfStockThreshold: variant.useGlobalOutOfStockThreshold,\r\n outOfStockThreshold: variant.outOfStockThreshold,\r\n trackInventory: variant.trackInventory,\r\n facetValueIds,\r\n });\r\n this.stockLevelsForm.clear();\r\n for (const stockLevel of variant.stockLevels) {\r\n this.stockLevelsForm.push(\r\n this.formBuilder.group({\r\n stockLocationId: stockLevel.stockLocation.id,\r\n stockLocationName: stockLevel.stockLocation.name,\r\n stockOnHand: stockLevel.stockOnHand,\r\n stockAllocated: stockLevel.stockAllocated,\r\n }),\r\n );\r\n }\r\n this.pricesForm.clear();\r\n for (const price of variant.prices) {\r\n const priceForm = this.formBuilder.group({\r\n price: price.price,\r\n currencyCode: price.currencyCode,\r\n delete: false as boolean,\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customPriceFields)),\r\n });\r\n if (this.customPriceFields.length) {\r\n this.setCustomFieldFormValues(this.customPriceFields, priceForm.get(['customFields']), price);\r\n }\r\n this.pricesForm.push(priceForm);\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n variant,\r\n variantTranslation,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Given a product and the value of the detailForm, this method creates an updated copy of the product which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedVariant(\r\n variant: NonNullable<GetProductVariantDetailQuery['productVariant']>,\r\n variantFormGroup: typeof this.detailForm,\r\n languageCode: LanguageCode,\r\n ): UpdateProductVariantInput | CreateProductVariantInput {\r\n const updatedProduct = createUpdatedTranslatable({\r\n translatable: variant,\r\n updatedFields: variantFormGroup.value,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: variant.name || '',\r\n },\r\n });\r\n return {\r\n ...updatedProduct,\r\n assetIds: this.assetChanges.assets?.map(a => a.id),\r\n featuredAssetId: this.assetChanges.featuredAsset?.id,\r\n facetValueIds: variantFormGroup.controls.facetValueIds.dirty\r\n ? variantFormGroup.value.facetValueIds\r\n : undefined,\r\n taxCategoryId: variantFormGroup.controls.taxCategoryId.dirty\r\n ? variantFormGroup.value.taxCategoryId\r\n : undefined,\r\n } as UpdateProductVariantInput | CreateProductVariantInput;\r\n }\r\n}\r\n","<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"flex center\">\r\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\r\n <vdr-language-selector\r\n *ngIf=\"availableLanguages.length > 1\"\r\n class=\"mr-2\"\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </ng-container>\r\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid ||\r\n stockLevelsForm.invalid ||\r\n pricesForm.invalid ||\r\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\r\n !assetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n <vdr-action-bar-dropdown-menu locationId=\"product-variant-detail\"></vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar\r\n ><vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\r\n [colorFrom]=\"optionGroupCode(option.groupId)\"\r\n [invert]=\"true\"\r\n >\r\n <span>{{ optionGroupCode(option.groupId) }}:</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a\r\n [routerLink]=\"['../../', 'options']\"\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n >\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\r\n <input\r\n id=\"sku\"\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-variant-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n />\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || variant.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n />\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\r\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\r\n <vdr-form-field\r\n [label]=\"\r\n ('catalog.price' | translate) +\r\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\r\n \"\r\n [tooltip]=\"\r\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\r\n ? ('catalog.default-currency' | translate)\r\n : undefined\r\n \"\r\n for=\"price\"\r\n >\r\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\r\n <vdr-currency-input\r\n name=\"price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [readonly]=\"\r\n !(updatePermissions | hasPermission) || price.value.delete === true\r\n \"\r\n formControlName=\"price\"\r\n />\r\n <div *ngIf=\"1 < pricesForm.controls.length\">\r\n <button\r\n class=\"button-small delete-button\"\r\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\r\n (click)=\"toggleDeletePrice(price.get('delete'))\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </vdr-form-field>\r\n <vdr-variant-price-detail\r\n [price]=\"price.value.price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\r\n />\r\n\r\n <div class=\"form-grid-span\" *ngIf=\"customPriceFields.length\">\r\n <div class=\"title-row\">\r\n <span class=\"title\">{{ 'common.custom-fields' | translate }}</span>\r\n </div>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariantPrice\"\r\n [customFields]=\"customPriceFields\"\r\n [customFieldsFormGroup]=\"price.get(['customFields'])\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <vdr-variant-price-strategy-detail\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [channelDefaultCurrencyCode]=\"channelDefaultCurrencyCode\"\r\n [variant]=\"variant\"\r\n />\r\n\r\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\r\n <div *ngIf=\"unusedCurrencyCodes.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-price-in-another-currency' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\r\n (click)=\"addPriceInCurrency(currencyCode)\"\r\n >\r\n {{ currencyCode | localeCurrencyName }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n for=\"track-inventory\"\r\n [label]=\"'catalog.track-inventory' | translate\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <select\r\n name=\"track-inventory\"\r\n formControlName=\"trackInventory\"\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n >\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <vdr-form-item\r\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\r\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n [vdrDisabled]=\"\r\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\r\n inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </vdr-form-item>\r\n </div>\r\n <div\r\n class=\"form-grid stock-levels\"\r\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\r\n [formGroup]=\"stockLevel\"\r\n >\r\n <vdr-form-field\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-on-hand' | translate)\r\n \"\r\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n >\r\n <input\r\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n type=\"number\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-allocated' | translate)\r\n \"\r\n >\r\n {{ stockLevel.get('stockAllocated')?.value }}\r\n </vdr-form-item>\r\n </div>\r\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\r\n <div *ngIf=\"unusedStockLocations.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-stock-location' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let stockLocation of unusedStockLocations\"\r\n (click)=\"addStockLocation(stockLocation)\"\r\n >\r\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BulkAction,\r\n createBulkRemoveFromChannelAction,\r\n DataService,\r\n DeletionResult,\r\n GetProductVariantListQuery,\r\n isMultiChannel,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n Permission,\r\n ProductVariant,\r\n} from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from '../bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\nimport { ProductVariantListComponent } from './product-variant-list.component';\r\n\r\nexport const assignProductVariantsToChannelBulkAction: BulkAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>,\r\n ProductVariantListComponent\r\n> = {\r\n location: 'product-variant-list',\r\n label: _('common.assign-to-channel'),\r\n icon: 'layers',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n isVisible: ({ injector }) => isMultiChannel(injector.get(DataService)),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n modalService\r\n .fromComponent(AssignProductsToChannelDialogComponent, {\r\n size: 'lg',\r\n locals: {\r\n productVariantIds: unique(selection.map(p => p.id)),\r\n currentChannelIds: [],\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n\r\nexport const removeProductVariantsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>\r\n>({\r\n location: 'product-variant-list',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, ids, channelId) =>\r\n dataService.product\r\n .removeVariantsFromChannel({\r\n channelId: channelId,\r\n productVariantIds: ids,\r\n })\r\n .pipe(map(res => res.removeProductVariantsFromChannel)),\r\n});\r\n\r\nexport const deleteProductVariantsBulkAction: BulkAction<ProductVariant, ProductVariantListComponent> = {\r\n location: 'product-variant-list',\r\n label: _('common.delete'),\r\n icon: 'trash',\r\n iconClass: 'is-danger',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.DeleteProduct) ||\r\n userPermissions.includes(Permission.DeleteCatalog),\r\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const dataService = injector.get(DataService);\r\n const notificationService = injector.get(NotificationService);\r\n modalService\r\n .dialog({\r\n title: _('common.confirm-bulk-delete'),\r\n translationVars: {\r\n count: selection.length,\r\n },\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response\r\n ? dataService.product.deleteProductVariants(unique(selection.map(p => p.id)))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(result => {\r\n let deleted = 0;\r\n const errors: string[] = [];\r\n for (const item of result.deleteProductVariants) {\r\n if (item.result === DeletionResult.DELETED) {\r\n deleted++;\r\n } else if (item.message) {\r\n errors.push(item.message);\r\n }\r\n }\r\n if (0 < deleted) {\r\n notificationService.success(_('catalog.notify-bulk-delete-products-success'), {\r\n count: deleted,\r\n });\r\n }\r\n if (0 < errors.length) {\r\n notificationService.error(errors.join('\\n'));\r\n }\r\n hostComponent.refresh();\r\n clearSelection();\r\n });\r\n },\r\n};\r\n\r\nexport const assignFacetValuesToProductVariantsBulkAction: BulkAction<\r\n ItemOf<GetProductVariantListQuery, 'productVariants'>,\r\n ProductVariantListComponent\r\n> = {\r\n location: 'product-variant-list',\r\n label: _('catalog.edit-facet-values'),\r\n icon: 'tag',\r\n requiresPermission: userPermissions =>\r\n userPermissions.includes(Permission.UpdateCatalog) ||\r\n userPermissions.includes(Permission.UpdateProduct),\r\n onClick: ({ injector, selection, clearSelection }) => {\r\n const modalService = injector.get(ModalService);\r\n const notificationService = injector.get(NotificationService);\r\n const mode = 'variant';\r\n const ids = unique(selection.map(p => p.id));\r\n return modalService\r\n .fromComponent(BulkAddFacetValuesDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n mode,\r\n ids,\r\n },\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n notificationService.success(_('common.notify-bulk-update-success'), {\r\n count: selection.length,\r\n entity: mode === 'variant' ? 'Products' : 'ProductVariants',\r\n });\r\n clearSelection();\r\n }\r\n });\r\n },\r\n};\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\r\nimport { Asset, Permission, ProductDetailFragment, ProductVariantFragment } from '@vendure/admin-ui/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\r\n\r\ninterface SelectedAssets {\r\n assets?: Asset[];\r\n featuredAsset?: Asset;\r\n}\r\n\r\ninterface PaginationConfig {\r\n totalItems: number;\r\n currentPage: number;\r\n itemsPerPage: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-product-variants-table',\r\n templateUrl: './product-variants-table.component.html',\r\n styleUrls: ['./product-variants-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProductVariantsTableComponent implements OnInit, OnDestroy {\r\n @Input('productVariantsFormArray') formArray: UntypedFormArray;\r\n @Input() variants: ProductVariantFragment[];\r\n @Input() paginationConfig: PaginationConfig;\r\n @Input() channelPriceIncludesTax: boolean;\r\n @Input() optionGroups: ProductDetailFragment['optionGroups'];\r\n @Input() pendingAssetChanges: { [variantId: string]: SelectedAssets };\r\n formGroupMap = new Map<string, UntypedFormGroup>();\r\n readonly updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];\r\n private subscription: Subscription;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.subscription = this.formArray.valueChanges\r\n .pipe(\r\n map(value => value.length),\r\n debounceTime(1),\r\n distinctUntilChanged(),\r\n )\r\n .subscribe(() => {\r\n this.buildFormGroupMap();\r\n });\r\n\r\n this.buildFormGroupMap();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: any) {\r\n if ((item as any).id != null) {\r\n return (item as any).id;\r\n } else {\r\n return index;\r\n }\r\n }\r\n\r\n getFeaturedAsset(variant: ProductVariantFragment) {\r\n return this.pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset;\r\n }\r\n\r\n optionGroupName(optionGroupId: string): string | undefined {\r\n const group = this.optionGroups.find(g => g.id === optionGroupId);\r\n return group && group.name;\r\n }\r\n\r\n private buildFormGroupMap() {\r\n this.formGroupMap.clear();\r\n for (const controlGroup of this.formArray.controls) {\r\n this.formGroupMap.set(controlGroup.value.id, controlGroup as UntypedFormGroup);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>{{ 'catalog.sku' | translate }}</th>\r\n <ng-container *ngFor=\"let optionGroup of optionGroups | sort: 'id'\">\r\n <th>{{ optionGroup.name }}</th>\r\n </ng-container>\r\n <th>{{ 'catalog.price' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n <th>{{ 'common.enabled' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let variant of variants | paginate: paginationConfig; index as i; trackBy: trackByFn\">\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <div class=\"card-img\">\r\n <div class=\"featured-asset\">\r\n <img\r\n *ngIf=\"getFeaturedAsset(variant) as featuredAsset; else placeholder\"\r\n [src]=\"featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n <ng-template #placeholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <ng-container *ngFor=\"let option of variant.options | sort: 'groupId'\">\r\n <td\r\n class=\"left align-middle\"\r\n [class.disabled]=\"!formGroup.get('enabled')!.value\"\r\n [style.color]=\"optionGroupName(option.groupId) | stringToColor\"\r\n >\r\n {{ option.name }}\r\n </td>\r\n </ng-container>\r\n <td class=\"left align-middle price\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n min=\"0\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-input-container>\r\n </td>\r\n <td class=\"left align-middle stock\" [class.disabled]=\"!formGroup.get('enabled')!.value\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\r\nimport {\r\n CustomFieldConfig,\r\n LanguageCode,\r\n ProductVariantFragment,\r\n UpdateProductOptionInput,\r\n createUpdatedTranslatable,\r\n Dialog,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\n\r\n@Component({\r\n selector: 'vdr-update-product-option-dialog',\r\n templateUrl: './update-product-option-dialog.component.html',\r\n styleUrls: ['./update-product-option-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UpdateProductOptionDialogComponent\r\n implements Dialog<UpdateProductOptionInput & { autoUpdate: boolean }>, OnInit\r\n{\r\n resolveWith: (result?: UpdateProductOptionInput & { autoUpdate: boolean }) => void;\r\n updateVariantName = true;\r\n // Provided by caller\r\n productOption: ProductVariantFragment['options'][number];\r\n activeLanguage: LanguageCode;\r\n name: string;\r\n code: string;\r\n customFields: CustomFieldConfig[];\r\n codeInputTouched = false;\r\n customFieldsForm: UntypedFormGroup;\r\n\r\n ngOnInit(): void {\r\n const currentTranslation = this.productOption.translations.find(\r\n t => t.languageCode === this.activeLanguage,\r\n );\r\n this.name = currentTranslation?.name ?? '';\r\n this.code = this.productOption.code;\r\n this.customFieldsForm = new UntypedFormGroup({});\r\n if (this.customFields) {\r\n const cfCurrentTranslation =\r\n (currentTranslation && (currentTranslation as any).customFields) || {};\r\n\r\n for (const fieldDef of this.customFields) {\r\n const key = fieldDef.name;\r\n const value =\r\n fieldDef.type === 'localeString'\r\n ? cfCurrentTranslation[key]\r\n : (this.productOption as any).customFields[key];\r\n this.customFieldsForm.addControl(fieldDef.name, new UntypedFormControl(value));\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n const result = createUpdatedTranslatable({\r\n translatable: this.productOption,\r\n languageCode: this.activeLanguage,\r\n updatedFields: {\r\n code: this.code,\r\n name: this.name,\r\n customFields: this.customFieldsForm.value,\r\n },\r\n customFieldConfig: this.customFields,\r\n defaultTranslation: {\r\n languageCode: this.activeLanguage,\r\n name: '',\r\n },\r\n });\r\n this.resolveWith({ ...result, autoUpdate: this.updateVariantName });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n updateCode(nameValue: string) {\r\n if (!this.codeInputTouched && !this.productOption.code) {\r\n this.code = normalizeString(nameValue, '-');\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'catalog.update-product-option' | translate }}</ng-template>\r\n<vdr-form-field [label]=\"'catalog.option-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n #nameInput=\"ngModel\"\r\n [(ngModel)]=\"name\"\r\n required\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n</vdr-form-field>\r\n<vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input id=\"code\" type=\"text\" #codeInput=\"ngModel\" required [(ngModel)]=\"code\" pattern=\"[a-z0-9_-]+\" />\r\n</vdr-form-field>\r\n<clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"updateVariantName\" />\r\n <label>{{ 'catalog.auto-update-option-variant-name' | translate }}</label>\r\n</clr-checkbox-wrapper>\r\n<section *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"customFieldsForm\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n</section>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"update()\"\r\n [disabled]=\"\r\n nameInput.invalid ||\r\n codeInput.invalid ||\r\n (nameInput.pristine && codeInput.pristine && customFieldsForm.pristine)\r\n \"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'catalog.update-product-option' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, ROUTES } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n AssetDetailQueryDocument,\r\n BulkActionRegistryService,\r\n CollectionDetailQueryDocument,\r\n detailComponentWithResolver,\r\n GetFacetDetailDocument,\r\n GetProductDetailDocument,\r\n GetProductVariantDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\nimport { SortOrder } from '@vendure/common/lib/generated-types';\r\n\r\nimport { createRoutes } from './catalog.routes';\r\nimport { ApplyFacetDialogComponent } from './components/apply-facet-dialog/apply-facet-dialog.component';\r\nimport { AssetDetailComponent } from './components/asset-detail/asset-detail.component';\r\nimport { AssetListComponent } from './components/asset-list/asset-list.component';\r\nimport { AssignProductsToChannelDialogComponent } from './components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';\r\nimport { BulkAddFacetValuesDialogComponent } from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';\r\nimport { CollectionContentsComponent } from './components/collection-contents/collection-contents.component';\r\nimport { CollectionDataTableComponent } from './components/collection-data-table/collection-data-table.component';\r\nimport { CollectionDetailComponent } from './components/collection-detail/collection-detail.component';\r\nimport { CollectionBreadcrumbPipe } from './components/collection-list/collection-breadcrumb.pipe';\r\nimport {\r\n assignCollectionsToChannelBulkAction,\r\n deleteCollectionsBulkAction,\r\n duplicateCollectionsBulkAction,\r\n moveCollectionsBulkAction,\r\n removeCollectionsFromChannelBulkAction,\r\n} from './components/collection-list/collection-list-bulk-actions';\r\nimport { CollectionListComponent } from './components/collection-list/collection-list.component';\r\nimport { CollectionTreeNodeComponent } from './components/collection-tree/collection-tree-node.component';\r\nimport { CollectionTreeComponent } from './components/collection-tree/collection-tree.component';\r\nimport { ConfirmVariantDeletionDialogComponent } from './components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component';\r\nimport { CreateFacetValueDialogComponent } from './components/create-facet-value-dialog/create-facet-value-dialog.component';\r\nimport { CreateProductOptionGroupDialogComponent } from './components/create-product-option-group-dialog/create-product-option-group-dialog.component';\r\nimport { CreateProductVariantDialogComponent } from './components/create-product-variant-dialog/create-product-variant-dialog.component';\r\nimport { FacetDetailComponent } from './components/facet-detail/facet-detail.component';\r\nimport {\r\n assignFacetsToChannelBulkAction,\r\n deleteFacetsBulkAction,\r\n duplicateFacetsBulkAction,\r\n removeFacetsFromChannelBulkAction,\r\n} from './components/facet-list/facet-list-bulk-actions';\r\nimport { FacetListComponent } from './components/facet-list/facet-list.component';\r\nimport { GenerateProductVariantsComponent } from './components/generate-product-variants/generate-product-variants.component';\r\nimport { MoveCollectionsDialogComponent } from './components/move-collections-dialog/move-collections-dialog.component';\r\nimport { OptionValueInputComponent } from './components/option-value-input/option-value-input.component';\r\nimport { ProductDetailComponent } from './components/product-detail/product-detail.component';\r\nimport {\r\n assignFacetValuesToProductsBulkAction,\r\n assignProductsToChannelBulkAction,\r\n deleteProductsBulkAction,\r\n duplicateProductsBulkAction,\r\n removeProductsFromChannelBulkAction,\r\n} from './components/product-list/product-list-bulk-actions';\r\nimport { ProductListComponent } from './components/product-list/product-list.component';\r\nimport { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';\r\nimport { ProductVariantDetailComponent } from './components/product-variant-detail/product-variant-detail.component';\r\nimport {\r\n assignFacetValuesToProductVariantsBulkAction,\r\n assignProductVariantsToChannelBulkAction,\r\n deleteProductVariantsBulkAction,\r\n removeProductVariantsFromChannelBulkAction,\r\n} from './components/product-variant-list/product-variant-list-bulk-actions';\r\nimport { ProductVariantListComponent } from './components/product-variant-list/product-variant-list.component';\r\nimport { ProductVariantQuickJumpComponent } from './components/product-variant-quick-jump/product-variant-quick-jump.component';\r\nimport { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';\r\nimport { ProductVariantsTableComponent } from './components/product-variants-table/product-variants-table.component';\r\nimport { UpdateProductOptionDialogComponent } from './components/update-product-option-dialog/update-product-option-dialog.component';\r\nimport { VariantPriceDetailComponent } from './components/variant-price-detail/variant-price-detail.component';\r\nimport { VariantPriceStrategyDetailComponent } from './components/variant-price-strategy-detail/variant-price-strategy-detail.component';\r\n\r\nconst CATALOG_COMPONENTS = [\r\n ProductListComponent,\r\n ProductDetailComponent,\r\n FacetListComponent,\r\n FacetDetailComponent,\r\n GenerateProductVariantsComponent,\r\n ApplyFacetDialogComponent,\r\n AssetListComponent,\r\n VariantPriceDetailComponent,\r\n VariantPriceStrategyDetailComponent,\r\n CollectionListComponent,\r\n CollectionDetailComponent,\r\n CollectionTreeComponent,\r\n CollectionTreeNodeComponent,\r\n CollectionContentsComponent,\r\n ProductVariantsTableComponent,\r\n OptionValueInputComponent,\r\n UpdateProductOptionDialogComponent,\r\n ProductVariantsEditorComponent,\r\n AssignProductsToChannelDialogComponent,\r\n AssetDetailComponent,\r\n ConfirmVariantDeletionDialogComponent,\r\n ProductOptionsEditorComponent,\r\n BulkAddFacetValuesDialogComponent,\r\n CollectionDataTableComponent,\r\n CollectionBreadcrumbPipe,\r\n MoveCollectionsDialogComponent,\r\n ProductVariantListComponent,\r\n ProductDetailComponent,\r\n ProductVariantDetailComponent,\r\n CreateProductVariantDialogComponent,\r\n CreateProductOptionGroupDialogComponent,\r\n ProductVariantQuickJumpComponent,\r\n CreateFacetValueDialogComponent,\r\n];\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([])],\r\n exports: [...CATALOG_COMPONENTS],\r\n declarations: [...CATALOG_COMPONENTS],\r\n providers: [\r\n {\r\n provide: ROUTES,\r\n useFactory: (pageService: PageService) => createRoutes(pageService),\r\n multi: true,\r\n deps: [PageService],\r\n },\r\n ],\r\n})\r\nexport class CatalogModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (CatalogModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignProductsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateProductsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeProductsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteProductsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductVariantsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignProductVariantsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeProductVariantsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteProductVariantsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(assignFacetsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateFacetsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeFacetsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteFacetsBulkAction);\r\n\r\n bulkActionRegistryService.registerBulkAction(moveCollectionsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(assignCollectionsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(duplicateCollectionsBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removeCollectionsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deleteCollectionsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-list',\r\n tab: _('catalog.products'),\r\n route: '',\r\n component: ProductListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-detail',\r\n tab: _('catalog.product'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ProductDetailComponent,\r\n query: GetProductDetailDocument,\r\n entityKey: 'product',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-product'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-list',\r\n tab: _('catalog.product-variants'),\r\n route: 'variants',\r\n component: ProductVariantListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'product-variant-detail',\r\n tab: _('catalog.product-variants'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: ProductVariantDetailComponent,\r\n query: GetProductVariantDetailDocument,\r\n entityKey: 'productVariant',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: `${entity?.product.name}`,\r\n link: ['/catalog', 'products', entity?.product.id],\r\n },\r\n {\r\n label: `${entity?.name} (${entity?.sku})`,\r\n link: ['variants', entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'facet-list',\r\n tab: _('catalog.facets'),\r\n route: '',\r\n component: FacetListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'facet-detail',\r\n tab: _('catalog.facet'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: FacetDetailComponent,\r\n query: GetFacetDetailDocument,\r\n variables: {\r\n facetValueListOptions: {\r\n take: 10,\r\n skip: 0,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n },\r\n },\r\n entityKey: 'facet',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-facet'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'collection-list',\r\n tab: _('catalog.collections'),\r\n route: '',\r\n component: CollectionListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'collection-detail',\r\n tab: _('catalog.collection'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: CollectionDetailComponent,\r\n query: CollectionDetailQueryDocument,\r\n entityKey: 'collection',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('catalog.create-new-collection'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'asset-list',\r\n tab: _('catalog.assets'),\r\n route: '',\r\n component: AssetListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'asset-detail',\r\n tab: _('catalog.asset'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: AssetDetailComponent,\r\n query: AssetDetailQueryDocument,\r\n entityKey: 'asset',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: `${entity?.name}`,\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n CatalogModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n","import { gql } from 'apollo-angular';\r\n\r\nconst PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT = gql`\r\n fragment ProductListQueryProductFragment on Product {\r\n id\r\n createdAt\r\n updatedAt\r\n enabled\r\n languageCode\r\n name\r\n slug\r\n featuredAsset {\r\n id\r\n createdAt\r\n updatedAt\r\n preview\r\n focalPoint {\r\n x\r\n y\r\n }\r\n }\r\n variantList {\r\n totalItems\r\n }\r\n }\r\n`;\r\n\r\nexport const PRODUCT_LIST_QUERY = gql`\r\n query ProductListQuery($options: ProductListOptions) {\r\n products(options: $options) {\r\n items {\r\n ...ProductListQueryProductFragment\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PRODUCT_LIST_QUERY_PRODUCT_FRAGMENT}\r\n`;\r\n","import {\r\n ASSET_FRAGMENT,\r\n PRODUCT_OPTION_FRAGMENT,\r\n PRODUCT_VARIANT_PRICE_FRAGMENT,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\r\n fragment ProductVariantDetailQueryProductVariantFragment on ProductVariant {\r\n id\r\n createdAt\r\n updatedAt\r\n enabled\r\n languageCode\r\n name\r\n price\r\n currencyCode\r\n prices {\r\n ...ProductVariantPrice\r\n }\r\n priceWithTax\r\n stockOnHand\r\n stockAllocated\r\n trackInventory\r\n outOfStockThreshold\r\n useGlobalOutOfStockThreshold\r\n taxRateApplied {\r\n id\r\n name\r\n value\r\n }\r\n taxCategory {\r\n id\r\n name\r\n }\r\n sku\r\n options {\r\n ...ProductOption\r\n }\r\n stockLevels {\r\n id\r\n createdAt\r\n updatedAt\r\n stockOnHand\r\n stockAllocated\r\n stockLocationId\r\n stockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n }\r\n facetValues {\r\n id\r\n code\r\n name\r\n facet {\r\n id\r\n name\r\n }\r\n }\r\n featuredAsset {\r\n ...Asset\r\n }\r\n assets {\r\n ...Asset\r\n }\r\n translations {\r\n id\r\n languageCode\r\n name\r\n }\r\n channels {\r\n id\r\n code\r\n }\r\n product {\r\n id\r\n name\r\n optionGroups {\r\n id\r\n name\r\n code\r\n translations {\r\n id\r\n languageCode\r\n name\r\n }\r\n }\r\n }\r\n }\r\n ${PRODUCT_VARIANT_PRICE_FRAGMENT}\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_DETAIL_QUERY = gql`\r\n query GetProductVariantDetail($id: ID!) {\r\n productVariant(id: $id) {\r\n ...ProductVariantDetailQueryProductVariantFragment\r\n }\r\n stockLocations(options: { take: 100 }) {\r\n items {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n description\r\n }\r\n }\r\n taxCategories(options: { take: 100 }) {\r\n items {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n isDefault\r\n }\r\n totalItems\r\n }\r\n activeChannel {\r\n id\r\n availableCurrencyCodes\r\n defaultCurrencyCode\r\n }\r\n }\r\n ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_UPDATE_MUTATION = gql`\r\n mutation ProductVariantUpdateMutation($input: [UpdateProductVariantInput!]!) {\r\n updateProductVariants(input: $input) {\r\n ...ProductVariantDetailQueryProductVariantFragment\r\n }\r\n }\r\n ${PRODUCT_VARIANT_DETAIL_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\n","import { ASSET_FRAGMENT } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nconst PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT = gql`\r\n fragment ProductVariantListQueryProductVariantFragment on ProductVariant {\r\n id\r\n createdAt\r\n updatedAt\r\n productId\r\n enabled\r\n languageCode\r\n name\r\n price\r\n currencyCode\r\n priceWithTax\r\n trackInventory\r\n outOfStockThreshold\r\n stockLevels {\r\n id\r\n createdAt\r\n updatedAt\r\n stockLocationId\r\n stockOnHand\r\n stockAllocated\r\n stockLocation {\r\n id\r\n createdAt\r\n updatedAt\r\n name\r\n }\r\n }\r\n useGlobalOutOfStockThreshold\r\n sku\r\n featuredAsset {\r\n ...Asset\r\n }\r\n }\r\n\r\n ${ASSET_FRAGMENT}\r\n`;\r\n\r\nexport const PRODUCT_VARIANT_LIST_QUERY = gql`\r\n query ProductVariantListQuery($options: ProductVariantListOptions!) {\r\n productVariants(options: $options) {\r\n items {\r\n ...ProductVariantListQueryProductVariantFragment\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PRODUCT_VARIANT_LIST_QUERY_PRODUCT_VARIANT_FRAGMENT}\r\n`;\r\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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"}