@vendure/admin-ui 3.4.3-master-202509260228 → 3.5.0-minor-202510012036

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-marketing.mjs","sources":["../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.html","../../src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.html","../../src/lib/marketing/src/marketing.routes.ts","../../src/lib/marketing/src/marketing.module.ts","../../src/lib/marketing/src/public_api.ts","../../src/lib/marketing/src/vendure-admin-ui-marketing.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n ConfigurableOperationInput,\n CreatePromotionInput,\n createUpdatedTranslatable,\n DataService,\n encodeConfigArgValue,\n findTranslation,\n getConfigArgValue,\n getCustomFieldsDefaults,\n getDefaultConfigArgValue,\n GetPromotionDetailDocument,\n LanguageCode,\n NotificationService,\n PROMOTION_FRAGMENT,\n PromotionFragment,\n TypedBaseDetailComponent,\n UpdatePromotionInput,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { combineLatest } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_PROMOTION_DETAIL = gql`\n query GetPromotionDetail($id: ID!) {\n promotion(id: $id) {\n ...Promotion\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-detail',\n templateUrl: './promotion-detail.component.html',\n styleUrls: ['./promotion-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PromotionDetailComponent\n extends TypedBaseDetailComponent<typeof GetPromotionDetailDocument, 'promotion'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Promotion');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n description: '',\n enabled: true,\n couponCode: null as string | null,\n perCustomerUsageLimit: null as number | null,\n usageLimit: null as number | null,\n startsAt: null,\n endsAt: null,\n conditions: this.formBuilder.array([]),\n actions: this.formBuilder.array([]),\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n conditions: ConfigurableOperation[] = [];\n actions: ConfigurableOperation[] = [];\n\n private allConditions: ConfigurableOperationDefinition[] = [];\n private allActions: ConfigurableOperationDefinition[] = [];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private formBuilder: FormBuilder,\n private notificationService: NotificationService,\n ) {\n super();\n this.customFields = this.getCustomFieldConfig('Promotion');\n }\n\n ngOnInit() {\n this.init();\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\n this.allActions = data.promotionActions;\n this.allConditions = data.promotionConditions;\n this.changeDetector.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n getAvailableConditions(): ConfigurableOperationDefinition[] {\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\n }\n\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allConditions.find(c => c.code === condition.code);\n }\n\n getAvailableActions(): ConfigurableOperationDefinition[] {\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\n }\n\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allActions.find(c => c.code === action.code);\n }\n\n saveButtonEnabled(): boolean {\n return !!(\n this.detailForm.dirty &&\n this.detailForm.valid &&\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\n this.actions.length !== 0\n );\n }\n\n addCondition(condition: ConfigurableOperation) {\n this.addOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n addAction(action: ConfigurableOperation) {\n this.addOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n removeCondition(condition: ConfigurableOperation) {\n this.removeOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n removeAction(action: ConfigurableOperation) {\n this.removeOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n formArrayOf(key: 'conditions' | 'actions'): UntypedFormArray {\n return this.detailForm.get(key) as UntypedFormArray;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n\n const input = this.getUpdatedPromotion(\n {\n id: '',\n createdAt: '',\n updatedAt: '',\n startsAt: '',\n endsAt: '',\n name: '',\n description: '',\n couponCode: null,\n perCustomerUsageLimit: null,\n usageLimit: null,\n enabled: false,\n conditions: [],\n actions: [],\n translations: [],\n },\n this.detailForm,\n this.languageCode,\n ) as CreatePromotionInput;\n this.dataService.promotion.createPromotion(input).subscribe(\n ({ createPromotion }) => {\n switch (createPromotion.__typename) {\n case 'Promotion':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\n break;\n case 'MissingConditionsError':\n this.notificationService.error(createPromotion.message);\n break;\n }\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n combineLatest(this.entity$, this.languageCode$)\n .pipe(\n take(1),\n mergeMap(([paymentMethod, languageCode]) => {\n const input = this.getUpdatedPromotion(\n paymentMethod,\n this.detailForm,\n languageCode,\n ) as UpdatePromotionInput;\n return this.dataService.promotion.updatePromotion(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n /**\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\n * can then be persisted to the API.\n */\n private getUpdatedPromotion(\n promotion: PromotionFragment,\n formGroup: UntypedFormGroup,\n languageCode: LanguageCode,\n ): UpdatePromotionInput | CreatePromotionInput {\n const formValue = formGroup.value;\n const input = createUpdatedTranslatable({\n translatable: promotion,\n updatedFields: formValue,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n languageCode,\n name: promotion.name || '',\n description: promotion.description || '',\n },\n });\n\n return {\n ...input,\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\n };\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: PromotionFragment, languageCode: LanguageCode): void {\n const currentTranslation = findTranslation(entity, languageCode);\n this.detailForm.patchValue({\n name: currentTranslation?.name,\n description: currentTranslation?.description,\n enabled: entity.enabled,\n couponCode: entity.couponCode,\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\n usageLimit: entity.usageLimit,\n startsAt: entity.startsAt,\n endsAt: entity.endsAt,\n });\n entity.conditions.forEach(o => {\n this.addOperation('conditions', o);\n });\n entity.actions.forEach(o => this.addOperation('actions', o));\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get('customFields'),\n entity,\n currentTranslation,\n );\n }\n }\n\n /**\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\n */\n private mapOperationsToInputs(\n operations: ConfigurableOperation[],\n formValueOperations: any,\n ): ConfigurableOperationInput[] {\n return operations.map((o, i) => ({\n code: o.code,\n arguments: Object.values<any>(formValueOperations[i].args).map((value, j) => ({\n name: o.args[j].name,\n value: encodeConfigArgValue(value),\n })),\n }));\n }\n\n /**\n * Adds a new condition or action to the promotion.\n */\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index === -1) {\n const argsHash = operation.args.reduce(\n (output, arg) => ({\n ...output,\n [arg.name]:\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\n }),\n {},\n );\n operationsArray.push(\n this.formBuilder.control({\n code: operation.code,\n args: argsHash,\n }),\n );\n collection.push({\n code: operation.code,\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\n });\n }\n }\n\n private getDefaultArgValue(\n key: 'conditions' | 'actions',\n operation: ConfigurableOperation,\n argName: string,\n ) {\n const def =\n key === 'conditions'\n ? this.allConditions.find(c => c.code === operation.code)\n : this.allActions.find(a => a.code === operation.code);\n if (def) {\n const argDef = def.args.find(a => a.name === argName);\n if (argDef) {\n return getDefaultConfigArgValue(argDef);\n }\n }\n throw new Error(`Could not determine default value for \"argName\"`);\n }\n\n /**\n * Removes a condition or action from the promotion.\n */\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index !== -1) {\n operationsArray.removeAt(index);\n collection.splice(index, 1);\n }\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <div class=\"flex clr-align-items-center\">\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n ></vdr-language-selector>\n </div>\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"'UpdatePromotion'\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\n <clr-toggle-wrapper>\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\n <label>{{ 'common.enabled' | translate }}</label>\n </clr-toggle-wrapper>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"name\"\n />\n </vdr-form-field>\n <vdr-rich-text-editor\n class=\"form-grid-span\"\n formControlName=\"description\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [label]=\"'common.description' | translate\"\n ></vdr-rich-text-editor>\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\n <input\n id=\"couponCode\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"couponCode\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.per-customer-limit' | translate\"\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\n for=\"perCustomerUsageLimit\"\n >\n <input\n id=\"perCustomerUsageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"999\"\n formControlName=\"perCustomerUsageLimit\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.usage-limit' | translate\"\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\n for=\"usageLimit\"\n >\n <input\n id=\"usageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"9999999\"\n formControlName=\"usageLimit\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n [title]=\"'common.custom-fields' | translate\"\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Promotion\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"promotion-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\n <div *ngFor=\"let condition of conditions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeCondition($event)\"\n [position]=\"i\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operation]=\"condition\"\n [operationDefinition]=\"getConditionDefinition(condition)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-condition' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let condition of getAvailableConditions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addCondition(condition)\"\n >\n {{ condition.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\n <div *ngFor=\"let action of actions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeAction($event)\"\n [position]=\"i\"\n [operation]=\"action\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operationDefinition]=\"getActionDefinition(action)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-action' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let action of getAvailableActions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addAction(action)\"\n >\n {{ action.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n AssignPromotionsToChannelDocument,\n BulkAction,\n createBulkAssignToChannelAction,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n DuplicateEntityDialogComponent,\n GetPromotionListQuery,\n ItemOf,\n ModalService,\n Permission,\n RemovePromotionsFromChannelDocument,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\nimport { PromotionListComponent } from './promotion-list.component';\n\nconst ASSIGN_PROMOTIONS_TO_CHANNEL = gql`\n mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {\n assignPromotionsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_PROMOTIONS_FROM_CHANNEL = gql`\n mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {\n removePromotionsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nexport const deletePromotionsBulkAction = createBulkDeleteAction<ItemOf<GetPromotionListQuery, 'promotions'>>(\n {\n location: 'promotion-list',\n requiresPermission: Permission.DeletePromotion,\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.promotion.deletePromotions(ids).pipe(map(res => res.deletePromotions)),\n },\n);\n\nexport const assignPromotionsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.UpdatePromotion,\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, promotionIds, channelIds) => {\n return channelIds.map(channelId =>\n dataService\n .mutate(AssignPromotionsToChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.assignPromotionsToChannel)),\n );\n },\n});\n\nexport const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.DeleteCatalog,\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, promotionIds, channelId) =>\n dataService\n .mutate(RemovePromotionsFromChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.removePromotionsFromChannel)),\n});\n\nexport const duplicatePromotionsBulkAction: BulkAction<\n ItemOf<GetPromotionListQuery, 'promotions'>,\n PromotionListComponent\n> = {\n location: 'promotion-list',\n label: _('common.duplicate'),\n icon: 'copy',\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n const modalService = injector.get(ModalService);\n modalService\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetPromotionListQuery, 'promotions'>>, {\n locals: {\n entities: selection,\n entityName: 'Promotion',\n title: _('marketing.duplicate-promotions'),\n getEntityName: entity => entity.name,\n },\n })\n .subscribe(result => {\n if (result) {\n clearSelection();\n hostComponent.refresh();\n }\n });\n },\n};\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n GetPromotionListDocument,\n LogicalOperator,\n PROMOTION_FRAGMENT,\n PromotionListOptions,\n PromotionSortParameter,\n TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_PROMOTION_LIST = gql`\n query GetPromotionList($options: PromotionListOptions) {\n promotions(options: $options) {\n items {\n ...Promotion\n }\n totalItems\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-list',\n templateUrl: './promotion-list.component.html',\n styleUrls: ['./promotion-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PromotionListComponent\n extends TypedBaseListComponent<typeof GetPromotionListDocument, 'promotions'>\n implements OnInit\n{\n dataTableListId = 'promotion-list';\n readonly customFields = this.getCustomFieldConfig('Promotion');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilters([\n {\n name: 'startsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.starts-at'),\n filterField: 'startsAt',\n },\n {\n name: 'endsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.ends-at'),\n filterField: 'endsAt',\n },\n {\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n },\n {\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n },\n {\n name: 'couponCode',\n type: { kind: 'text' },\n label: _('marketing.coupon-code'),\n filterField: 'couponCode',\n },\n {\n name: 'desc',\n type: { kind: 'text' },\n label: _('common.description'),\n filterField: 'description',\n },\n {\n name: 'perCustomerUsageLimit',\n type: { kind: 'number' },\n label: _('marketing.per-customer-limit'),\n filterField: 'perCustomerUsageLimit',\n },\n {\n name: 'usageLimit',\n type: { kind: 'number' },\n label: _('marketing.usage-limit'),\n filterField: 'usageLimit',\n },\n ])\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSorts([\n { name: 'createdAt' },\n { name: 'updatedAt' },\n { name: 'startsAt' },\n { name: 'endsAt' },\n { name: 'name' },\n { name: 'couponCode' },\n { name: 'perCustomerUsageLimit' },\n { name: 'usageLimit' },\n ])\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetPromotionListDocument,\n getItems: data => data.promotions,\n setVariables: (skip, take) => this.createQueryOptions(skip, take, this.searchTermControl.value),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n private createQueryOptions(\n skip: number,\n take: number,\n searchTerm: string | null,\n ): { options: PromotionListOptions } {\n const filter = this.filters.createFilterInput();\n const sort = this.sorts.createSortInput();\n let filterOperator = LogicalOperator.AND;\n if (searchTerm) {\n filter.couponCode = { contains: searchTerm };\n filter.name = { contains: searchTerm };\n filterOperator = LogicalOperator.OR;\n }\n\n return {\n options: {\n skip,\n take,\n filter,\n filterOperator,\n sort,\n },\n };\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-list\" />\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.create-new-promotion' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<vdr-data-table-2\n [id]=\"dataTableListId\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"promotion-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\"\n id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\"\n id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-promotion=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\n ><span> {{ promotion.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-promotion=\"item\">\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.coupon-code' | translate\"\n id=\"coupon-code\"\n [sort]=\"sorts.get('couponCode')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.couponCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.starts-at' | translate\"\n id=\"starts-at\"\n [sort]=\"sorts.get('startsAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.startsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" id=\"ends-at\" [sort]=\"sorts.get('endsAt')\">\n <ng-template let-promotion=\"item\">\n {{ promotion.endsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.per-customer-limit' | translate\"\n id=\"per-customer-limit\"\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.perCustomerUsageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.usage-limit' | translate\"\n id=\"usage-limit\"\n [sort]=\"sorts.get('usageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.usageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { detailBreadcrumb, PageComponent, PageService, PromotionFragment } from '@vendure/admin-ui/core';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n {\n path: 'promotions',\n component: PageComponent,\n data: {\n locationId: 'promotion-list',\n breadcrumb: _('breadcrumb.promotions'),\n },\n children: pageService.getPageTabRoutes('promotion-list'),\n },\n {\n path: 'promotions/:id',\n component: PageComponent,\n data: {\n locationId: 'promotion-detail',\n breadcrumb: { label: _('breadcrumb.promotions'), link: ['../', 'promotions'] },\n },\n children: pageService.getPageTabRoutes('promotion-detail'),\n },\n];\n\nexport function promotionBreadcrumb(data: any, params: any) {\n return detailBreadcrumb<PromotionFragment>({\n entity: data.entity,\n id: params.id,\n breadcrumbKey: 'breadcrumb.promotions',\n getName: promotion => promotion.name,\n route: 'promotions',\n });\n}\n","import { AsyncPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkActionRegistryService,\n detailComponentWithResolver,\n GetPromotionDetailDocument,\n PageService,\n SharedModule,\n} from '@vendure/admin-ui/core';\n\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\nimport {\n assignPromotionsToChannelBulkAction,\n deletePromotionsBulkAction,\n duplicatePromotionsBulkAction,\n removePromotionsFromChannelBulkAction,\n} from './components/promotion-list/promotion-list-bulk-actions';\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\nimport { createRoutes } from './marketing.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild([]), SharedModule, AsyncPipe, SharedModule],\n providers: [\n {\n provide: ROUTES,\n useFactory: (pageService: PageService) => createRoutes(pageService),\n multi: true,\n deps: [PageService],\n },\n ],\n declarations: [PromotionListComponent, PromotionDetailComponent],\n})\nexport class MarketingModule {\n private static hasRegisteredTabsAndBulkActions = false;\n\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n if (MarketingModule.hasRegisteredTabsAndBulkActions) {\n return;\n }\n bulkActionRegistryService.registerBulkAction(assignPromotionsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(duplicatePromotionsBulkAction);\n bulkActionRegistryService.registerBulkAction(removePromotionsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deletePromotionsBulkAction);\n\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-list',\n tab: _('breadcrumb.promotions'),\n route: '',\n component: PromotionListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-detail',\n tab: _('marketing.promotion'),\n route: '',\n component: detailComponentWithResolver({\n component: PromotionDetailComponent,\n query: GetPromotionDetailDocument,\n entityKey: 'promotion',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('marketing.create-new-promotion'),\n link: [entity?.id],\n },\n ],\n }),\n });\n MarketingModule.hasRegisteredTabsAndBulkActions = true;\n }\n}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/promotion-detail/promotion-detail.component';\nexport * from './components/promotion-list/promotion-list-bulk-actions';\nexport * from './components/promotion-list/promotion-list.component';\nexport * from './marketing.module';\nexport * from './marketing.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_","i1","i2","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"vendure-admin-ui-marketing.mjs","sources":["../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.html","../../src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.html","../../src/lib/marketing/src/marketing.routes.ts","../../src/lib/marketing/src/marketing.module.ts","../../src/lib/marketing/src/public_api.ts","../../src/lib/marketing/src/vendure-admin-ui-marketing.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n ConfigurableOperationInput,\n CreatePromotionInput,\n createUpdatedTranslatable,\n DataService,\n encodeConfigArgValue,\n findTranslation,\n getConfigArgValue,\n getCustomFieldsDefaults,\n getDefaultConfigArgValue,\n GetPromotionDetailDocument,\n LanguageCode,\n NotificationService,\n PROMOTION_FRAGMENT,\n PromotionFragment,\n TypedBaseDetailComponent,\n UpdatePromotionInput,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { combineLatest } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_PROMOTION_DETAIL = gql`\n query GetPromotionDetail($id: ID!) {\n promotion(id: $id) {\n ...Promotion\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-detail',\n templateUrl: './promotion-detail.component.html',\n styleUrls: ['./promotion-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PromotionDetailComponent\n extends TypedBaseDetailComponent<typeof GetPromotionDetailDocument, 'promotion'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Promotion');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n description: '',\n enabled: true,\n couponCode: null as string | null,\n perCustomerUsageLimit: null as number | null,\n usageLimit: null as number | null,\n startsAt: null,\n endsAt: null,\n conditions: this.formBuilder.array([]),\n actions: this.formBuilder.array([]),\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n conditions: ConfigurableOperation[] = [];\n actions: ConfigurableOperation[] = [];\n\n private allConditions: ConfigurableOperationDefinition[] = [];\n private allActions: ConfigurableOperationDefinition[] = [];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private formBuilder: FormBuilder,\n private notificationService: NotificationService,\n ) {\n super();\n this.customFields = this.getCustomFieldConfig('Promotion');\n }\n\n ngOnInit() {\n this.init();\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\n this.allActions = data.promotionActions;\n this.allConditions = data.promotionConditions;\n this.changeDetector.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n getAvailableConditions(): ConfigurableOperationDefinition[] {\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\n }\n\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allConditions.find(c => c.code === condition.code);\n }\n\n getAvailableActions(): ConfigurableOperationDefinition[] {\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\n }\n\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allActions.find(c => c.code === action.code);\n }\n\n saveButtonEnabled(): boolean {\n return !!(\n this.detailForm.dirty &&\n this.detailForm.valid &&\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\n this.actions.length !== 0\n );\n }\n\n addCondition(condition: ConfigurableOperation) {\n this.addOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n addAction(action: ConfigurableOperation) {\n this.addOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n removeCondition(condition: ConfigurableOperation) {\n this.removeOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n removeAction(action: ConfigurableOperation) {\n this.removeOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n formArrayOf(key: 'conditions' | 'actions'): UntypedFormArray {\n return this.detailForm.get(key) as UntypedFormArray;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n\n const input = this.getUpdatedPromotion(\n {\n id: '',\n createdAt: '',\n updatedAt: '',\n startsAt: '',\n endsAt: '',\n name: '',\n description: '',\n couponCode: null,\n perCustomerUsageLimit: null,\n usageLimit: null,\n enabled: false,\n conditions: [],\n actions: [],\n translations: [],\n },\n this.detailForm,\n this.languageCode,\n ) as CreatePromotionInput;\n this.dataService.promotion.createPromotion(input).subscribe(\n ({ createPromotion }) => {\n switch (createPromotion.__typename) {\n case 'Promotion':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\n break;\n case 'MissingConditionsError':\n this.notificationService.error(createPromotion.message);\n break;\n }\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n combineLatest(this.entity$, this.languageCode$)\n .pipe(\n take(1),\n mergeMap(([paymentMethod, languageCode]) => {\n const input = this.getUpdatedPromotion(\n paymentMethod,\n this.detailForm,\n languageCode,\n ) as UpdatePromotionInput;\n return this.dataService.promotion.updatePromotion(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n /**\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\n * can then be persisted to the API.\n */\n private getUpdatedPromotion(\n promotion: PromotionFragment,\n formGroup: UntypedFormGroup,\n languageCode: LanguageCode,\n ): UpdatePromotionInput | CreatePromotionInput {\n const formValue = formGroup.value;\n const input = createUpdatedTranslatable({\n translatable: promotion,\n updatedFields: formValue,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n languageCode,\n name: promotion.name || '',\n description: promotion.description || '',\n },\n });\n\n return {\n ...input,\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\n };\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: PromotionFragment, languageCode: LanguageCode): void {\n const currentTranslation = findTranslation(entity, languageCode);\n this.detailForm.patchValue({\n name: currentTranslation?.name,\n description: currentTranslation?.description,\n enabled: entity.enabled,\n couponCode: entity.couponCode,\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\n usageLimit: entity.usageLimit,\n startsAt: entity.startsAt,\n endsAt: entity.endsAt,\n });\n entity.conditions.forEach(o => {\n this.addOperation('conditions', o);\n });\n entity.actions.forEach(o => this.addOperation('actions', o));\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get('customFields'),\n entity,\n currentTranslation,\n );\n }\n }\n\n /**\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\n */\n private mapOperationsToInputs(\n operations: ConfigurableOperation[],\n formValueOperations: any,\n ): ConfigurableOperationInput[] {\n return operations.map((o, i) => ({\n code: o.code,\n arguments: Object.values<any>(formValueOperations[i].args).map((value, j) => ({\n name: o.args[j].name,\n value: encodeConfigArgValue(value),\n })),\n }));\n }\n\n /**\n * Adds a new condition or action to the promotion.\n */\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index === -1) {\n const argsHash = operation.args.reduce(\n (output, arg) => ({\n ...output,\n [arg.name]:\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\n }),\n {},\n );\n operationsArray.push(\n this.formBuilder.control({\n code: operation.code,\n args: argsHash,\n }),\n );\n collection.push({\n code: operation.code,\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\n });\n }\n }\n\n private getDefaultArgValue(\n key: 'conditions' | 'actions',\n operation: ConfigurableOperation,\n argName: string,\n ) {\n const def =\n key === 'conditions'\n ? this.allConditions.find(c => c.code === operation.code)\n : this.allActions.find(a => a.code === operation.code);\n if (def) {\n const argDef = def.args.find(a => a.name === argName);\n if (argDef) {\n return getDefaultConfigArgValue(argDef);\n }\n }\n throw new Error(`Could not determine default value for \"argName\"`);\n }\n\n /**\n * Removes a condition or action from the promotion.\n */\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index !== -1) {\n operationsArray.removeAt(index);\n collection.splice(index, 1);\n }\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <div class=\"flex clr-align-items-center\">\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n ></vdr-language-selector>\n </div>\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"'UpdatePromotion'\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\n <clr-toggle-wrapper>\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\n <label>{{ 'common.enabled' | translate }}</label>\n </clr-toggle-wrapper>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"name\"\n />\n </vdr-form-field>\n <vdr-rich-text-editor\n class=\"form-grid-span\"\n formControlName=\"description\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [label]=\"'common.description' | translate\"\n ></vdr-rich-text-editor>\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\n <input\n id=\"couponCode\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"couponCode\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.per-customer-limit' | translate\"\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\n for=\"perCustomerUsageLimit\"\n >\n <input\n id=\"perCustomerUsageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"999\"\n formControlName=\"perCustomerUsageLimit\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.usage-limit' | translate\"\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\n for=\"usageLimit\"\n >\n <input\n id=\"usageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"9999999\"\n formControlName=\"usageLimit\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n [title]=\"'common.custom-fields' | translate\"\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Promotion\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"promotion-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\n <div *ngFor=\"let condition of conditions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeCondition($event)\"\n [position]=\"i\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operation]=\"condition\"\n [operationDefinition]=\"getConditionDefinition(condition)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-condition' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let condition of getAvailableConditions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addCondition(condition)\"\n >\n {{ condition.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\n <div *ngFor=\"let action of actions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeAction($event)\"\n [position]=\"i\"\n [operation]=\"action\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operationDefinition]=\"getActionDefinition(action)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-action' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let action of getAvailableActions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addAction(action)\"\n >\n {{ action.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n AssignPromotionsToChannelDocument,\n BulkAction,\n createBulkAssignToChannelAction,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n DuplicateEntityDialogComponent,\n GetPromotionListQuery,\n ItemOf,\n ModalService,\n Permission,\n RemovePromotionsFromChannelDocument,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\nimport { PromotionListComponent } from './promotion-list.component';\n\nconst ASSIGN_PROMOTIONS_TO_CHANNEL = gql`\n mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {\n assignPromotionsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_PROMOTIONS_FROM_CHANNEL = gql`\n mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {\n removePromotionsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nexport const deletePromotionsBulkAction = createBulkDeleteAction<ItemOf<GetPromotionListQuery, 'promotions'>>(\n {\n location: 'promotion-list',\n requiresPermission: Permission.DeletePromotion,\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.promotion.deletePromotions(ids).pipe(map(res => res.deletePromotions)),\n },\n);\n\nexport const assignPromotionsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.UpdatePromotion,\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, promotionIds, channelIds) => {\n return channelIds.map(channelId =>\n dataService\n .mutate(AssignPromotionsToChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.assignPromotionsToChannel)),\n );\n },\n});\n\nexport const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.DeleteCatalog,\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, promotionIds, channelId) =>\n dataService\n .mutate(RemovePromotionsFromChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.removePromotionsFromChannel)),\n});\n\nexport const duplicatePromotionsBulkAction: BulkAction<\n ItemOf<GetPromotionListQuery, 'promotions'>,\n PromotionListComponent\n> = {\n location: 'promotion-list',\n label: _('common.duplicate'),\n icon: 'copy',\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n const modalService = injector.get(ModalService);\n modalService\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetPromotionListQuery, 'promotions'>>, {\n locals: {\n entities: selection,\n entityName: 'Promotion',\n title: _('marketing.duplicate-promotions'),\n getEntityName: entity => entity.name,\n },\n })\n .subscribe(result => {\n if (result) {\n clearSelection();\n hostComponent.refresh();\n }\n });\n },\n};\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n GetPromotionListDocument,\n LogicalOperator,\n PROMOTION_FRAGMENT,\n PromotionListOptions,\n PromotionSortParameter,\n TypedBaseListComponent,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_PROMOTION_LIST = gql`\n query GetPromotionList($options: PromotionListOptions) {\n promotions(options: $options) {\n items {\n ...Promotion\n }\n totalItems\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-list',\n templateUrl: './promotion-list.component.html',\n styleUrls: ['./promotion-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PromotionListComponent\n extends TypedBaseListComponent<typeof GetPromotionListDocument, 'promotions'>\n implements OnInit\n{\n dataTableListId = 'promotion-list';\n readonly customFields = this.getCustomFieldConfig('Promotion');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilters([\n {\n name: 'startsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.starts-at'),\n filterField: 'startsAt',\n },\n {\n name: 'endsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.ends-at'),\n filterField: 'endsAt',\n },\n {\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n },\n {\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n },\n {\n name: 'couponCode',\n type: { kind: 'text' },\n label: _('marketing.coupon-code'),\n filterField: 'couponCode',\n },\n {\n name: 'desc',\n type: { kind: 'text' },\n label: _('common.description'),\n filterField: 'description',\n },\n {\n name: 'perCustomerUsageLimit',\n type: { kind: 'number' },\n label: _('marketing.per-customer-limit'),\n filterField: 'perCustomerUsageLimit',\n },\n {\n name: 'usageLimit',\n type: { kind: 'number' },\n label: _('marketing.usage-limit'),\n filterField: 'usageLimit',\n },\n ])\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSorts([\n { name: 'createdAt' },\n { name: 'updatedAt' },\n { name: 'startsAt' },\n { name: 'endsAt' },\n { name: 'name' },\n { name: 'couponCode' },\n { name: 'perCustomerUsageLimit' },\n { name: 'usageLimit' },\n ])\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetPromotionListDocument,\n getItems: data => data.promotions,\n setVariables: (skip, take) => this.createQueryOptions(skip, take, this.searchTermControl.value),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n private createQueryOptions(\n skip: number,\n take: number,\n searchTerm: string | null,\n ): { options: PromotionListOptions } {\n const filter = this.filters.createFilterInput();\n const sort = this.sorts.createSortInput();\n let filterOperator = LogicalOperator.AND;\n if (searchTerm) {\n filter.couponCode = { contains: searchTerm };\n filter.name = { contains: searchTerm };\n filterOperator = LogicalOperator.OR;\n }\n\n return {\n options: {\n skip,\n take,\n filter,\n filterOperator,\n sort,\n },\n };\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-list\" />\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.create-new-promotion' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<vdr-data-table-2\n [id]=\"dataTableListId\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"promotion-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\"\n id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\"\n id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-promotion=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\n ><span> {{ promotion.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-promotion=\"item\">\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.coupon-code' | translate\"\n id=\"coupon-code\"\n [sort]=\"sorts.get('couponCode')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.couponCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.starts-at' | translate\"\n id=\"starts-at\"\n [sort]=\"sorts.get('startsAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.startsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" id=\"ends-at\" [sort]=\"sorts.get('endsAt')\">\n <ng-template let-promotion=\"item\">\n {{ promotion.endsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.per-customer-limit' | translate\"\n id=\"per-customer-limit\"\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.perCustomerUsageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.usage-limit' | translate\"\n id=\"usage-limit\"\n [sort]=\"sorts.get('usageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.usageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { detailBreadcrumb, PageComponent, PageService, PromotionFragment } from '@vendure/admin-ui/core';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n {\n path: 'promotions',\n component: PageComponent,\n data: {\n locationId: 'promotion-list',\n breadcrumb: _('breadcrumb.promotions'),\n },\n children: pageService.getPageTabRoutes('promotion-list'),\n },\n {\n path: 'promotions/:id',\n component: PageComponent,\n data: {\n locationId: 'promotion-detail',\n breadcrumb: { label: _('breadcrumb.promotions'), link: ['../', 'promotions'] },\n },\n children: pageService.getPageTabRoutes('promotion-detail'),\n },\n];\n\nexport function promotionBreadcrumb(data: any, params: any) {\n return detailBreadcrumb<PromotionFragment>({\n entity: data.entity,\n id: params.id,\n breadcrumbKey: 'breadcrumb.promotions',\n getName: promotion => promotion.name,\n route: 'promotions',\n });\n}\n","import { AsyncPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkActionRegistryService,\n detailComponentWithResolver,\n GetPromotionDetailDocument,\n PageService,\n SharedModule,\n} from '@vendure/admin-ui/core';\n\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\nimport {\n assignPromotionsToChannelBulkAction,\n deletePromotionsBulkAction,\n duplicatePromotionsBulkAction,\n removePromotionsFromChannelBulkAction,\n} from './components/promotion-list/promotion-list-bulk-actions';\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\nimport { createRoutes } from './marketing.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild([]), SharedModule, AsyncPipe, SharedModule],\n providers: [\n {\n provide: ROUTES,\n useFactory: (pageService: PageService) => createRoutes(pageService),\n multi: true,\n deps: [PageService],\n },\n ],\n declarations: [PromotionListComponent, PromotionDetailComponent],\n})\nexport class MarketingModule {\n private static hasRegisteredTabsAndBulkActions = false;\n\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n if (MarketingModule.hasRegisteredTabsAndBulkActions) {\n return;\n }\n bulkActionRegistryService.registerBulkAction(assignPromotionsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(duplicatePromotionsBulkAction);\n bulkActionRegistryService.registerBulkAction(removePromotionsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deletePromotionsBulkAction);\n\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-list',\n tab: _('breadcrumb.promotions'),\n route: '',\n component: PromotionListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-detail',\n tab: _('marketing.promotion'),\n route: '',\n component: detailComponentWithResolver({\n component: PromotionDetailComponent,\n query: GetPromotionDetailDocument,\n entityKey: 'promotion',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('marketing.create-new-promotion'),\n link: [entity?.id],\n },\n ],\n }),\n });\n MarketingModule.hasRegisteredTabsAndBulkActions = true;\n }\n}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/promotion-detail/promotion-detail.component';\nexport * from './components/promotion-list/promotion-list-bulk-actions';\nexport * from './components/promotion-list/promotion-list.component';\nexport * from './marketing.module';\nexport * from './marketing.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_","i1","i2","i3","i4"],"mappings":"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"}