@vendure/admin-ui-plugin 2.1.4 → 2.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/admin-ui/396.14bc4711db84b4e5.js.map +1 -1
- package/lib/admin-ui/818.a3413024616b3f72.js.map +1 -1
- package/lib/admin-ui/index.html +1 -1
- package/lib/admin-ui/{main.35afff705bae92e8.js → main.d2e634c94590b75d.js} +3 -3
- package/lib/admin-ui/{main.35afff705bae92e8.js.map → main.d2e634c94590b75d.js.map} +1 -1
- package/lib/admin-ui/{runtime.918adfb17c5e4a70.js → runtime.f47620a276c9b31d.js} +2 -2
- package/lib/admin-ui/{runtime.918adfb17c5e4a70.js.map → runtime.f47620a276c9b31d.js.map} +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"396.14bc4711db84b4e5.js","mappings":"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","names":["i0","_r11","ctx_r10","create","ctx_r0","saveButtonEnabled","_r14","ctx_r13","save","ctx_r12","PromotionDetailComponent_ng_template_12_button_0_Template","entity_r15","ctx_r5","customFields","detailForm","get","$event","_r19","ctx_r18","removeCondition","i_r17","condition_r16","ctx_r6","getConditionDefinition","condition_r21","_r23","$implicit","ctx_r22","addCondition","description","PromotionDetailComponent_vdr_dropdown_56_button_6_Template","ctx_r7","getAvailableConditions","_r27","ctx_r26","removeAction","i_r25","action_r24","ctx_r8","getActionDefinition","action_r29","_r31","ctx_r30","addAction","PromotionDetailComponent_vdr_dropdown_61_button_6_Template","ctx_r9","getAvailableActions","GET_PROMOTION_DETAIL","gql","PROMOTION_FRAGMENT","PromotionDetailComponent","TypedBaseDetailComponent","constructor","changeDetector","dataService","formBuilder","notificationService","super","this","getCustomFieldConfig","group","name","Validators","required","enabled","couponCode","perCustomerUsageLimit","usageLimit","startsAt","endsAt","conditions","array","actions","getCustomFieldsDefaults","allConditions","allActions","ngOnInit","init","promotion","getPromotionActionsAndConditions","single$","subscribe","data","promotionActions","promotionConditions","markForCheck","ngOnDestroy","destroy","filter","o","find","c","code","condition","a","action","dirty","valid","length","value","addOperation","markAsDirty","removeOperation","formArrayOf","key","input","getUpdatedPromotion","id","createdAt","updatedAt","translations","languageCode","createPromotion","__typename","success","_","entity","markAsPristine","router","navigate","relativeTo","route","error","message","err","combineLatest","entity$","languageCode$","pipe","take","mergeMap","paymentMethod","updatePromotion","formGroup","formValue","createUpdatedTranslatable","translatable","updatedFields","customFieldConfig","defaultTranslation","mapOperationsToInputs","setFormValues","currentTranslation","findTranslation","patchValue","forEach","setCustomFieldFormValues","operations","formValueOperations","map","i","arguments","Object","values","args","j","encodeConfigArgValue","operation","operationsArray","collection","findIndex","argsHash","reduce","output","arg","getConfigArgValue","getDefaultArgValue","push","control","argName","def","argDef","getDefaultConfigArgValue","Error","index","removeAt","splice","i1","i2","selectors","features","decls","vars","consts","template","rf","ctx","setLanguage","PromotionDetailComponent_button_10_Template","PromotionDetailComponent_ng_template_12_Template","PromotionDetailComponent_vdr_card_17_Template","PromotionDetailComponent_vdr_card_18_Template","PromotionDetailComponent_vdr_card_50_Template","PromotionDetailComponent_div_54_Template","PromotionDetailComponent_vdr_dropdown_56_Template","PromotionDetailComponent_div_59_Template","PromotionDetailComponent_vdr_dropdown_61_Template","isNew$","availableLanguages$","_r1","deletePromotionsBulkAction","createBulkDeleteAction","location","requiresPermission","Permission","DeletePromotion","getItemName","item","bulkDelete","ids","deletePromotions","res","assignPromotionsToChannelBulkAction","createBulkAssignToChannelAction","UpdatePromotion","bulkAssignToChannel","promotionIds","channelId","mutate","AssignPromotionsToChannelDocument","assignPromotionsToChannel","removePromotionsFromChannelBulkAction","createBulkRemoveFromChannelAction","DeleteCatalog","bulkRemoveFromChannel","RemovePromotionsFromChannelDocument","removePromotionsFromChannel","_c0","promotion_r12","promotion_r13","promotion_r14","_c1","promotion_r15","PromotionListComponent_ng_template_31_vdr_chip_0_Template","PromotionListComponent_ng_template_31_vdr_chip_1_Template","promotion_r16","promotion_r19","promotion_r20","promotion_r21","promotion_r22","promotion_r23","customField_r24","ctx_r11","sorts","GET_PROMOTION_LIST","PromotionListComponent","TypedBaseListComponent","filters","createFilterCollection","addIdFilter","addDateFilters","addFilters","type","kind","label","filterField","addCustomFieldFilters","connectToRoute","createSortCollection","defaultSort","addSorts","addCustomFieldSorts","configure","document","GetPromotionListDocument","getItems","promotions","setVariables","skip","createQueryOptions","searchTermControl","refreshListOnChanges","valueChanges","searchTerm","createFilterInput","sort","createSortInput","filterOperator","LogicalOperator","AND","contains","OR","options","PromotionListComponent_a_8_Template","setPageNumber","setItemsPerPage","PromotionListComponent_ng_template_19_Template","PromotionListComponent_ng_template_22_Template","PromotionListComponent_ng_template_25_Template","PromotionListComponent_ng_template_28_Template","PromotionListComponent_ng_template_31_Template","PromotionListComponent_ng_template_34_Template","PromotionListComponent_ng_template_37_Template","PromotionListComponent_ng_template_40_Template","PromotionListComponent_ng_template_43_Template","PromotionListComponent_ng_template_46_Template","PromotionListComponent_vdr_dt2_custom_field_column_47_Template","contentLanguage$","items$","itemsPerPage$","totalItems$","currentPage$","selectionManager","createRoutes","pageService","path","component","PageComponent","locationId","breadcrumb","children","getPageTabRoutes","link","promotionBreadcrumb","params","detailBreadcrumb","breadcrumbKey","getName","MarketingModule","bulkActionRegistryService","hasRegisteredTabsAndBulkActions","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","query","GetPromotionDetailDocument","entityKey","getBreadcrumbs","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"sourceRoot":"webpack:///","sources":["./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.html","./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","./src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts","./src/lib/marketing/src/components/promotion-list/promotion-list.component.html","./src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","./src/lib/marketing/src/marketing.routes.ts","./src/lib/marketing/src/marketing.module.ts"],"sourcesContent":["<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\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 </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-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]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\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 *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\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 [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.usage-limit' | translate\"\r\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\r\n for=\"usageLimit\"\r\n >\r\n <input\r\n id=\"usageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"9999999\"\r\n formControlName=\"usageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","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})\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","import {\r\n AssignPromotionsToChannelDocument,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetPromotionListQuery,\r\n ItemOf,\r\n Permission,\r\n RemovePromotionsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst ASSIGN_PROMOTIONS_TO_CHANNEL = gql`\r\n mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {\r\n assignPromotionsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_PROMOTIONS_FROM_CHANNEL = gql`\r\n mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {\r\n removePromotionsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nexport const deletePromotionsBulkAction = createBulkDeleteAction<ItemOf<GetPromotionListQuery, 'promotions'>>(\r\n {\r\n location: 'promotion-list',\r\n requiresPermission: Permission.DeletePromotion,\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.promotion.deletePromotions(ids).pipe(map(res => res.deletePromotions)),\r\n },\r\n);\r\n\r\nexport const assignPromotionsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetPromotionListQuery, 'promotions'>\r\n>({\r\n location: 'promotion-list',\r\n requiresPermission: Permission.UpdatePromotion,\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, promotionIds, channelId) =>\r\n dataService\r\n .mutate(AssignPromotionsToChannelDocument, {\r\n input: {\r\n channelId,\r\n promotionIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignPromotionsToChannel)),\r\n});\r\n\r\nexport const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetPromotionListQuery, 'promotions'>\r\n>({\r\n location: 'promotion-list',\r\n requiresPermission: Permission.DeleteCatalog,\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, promotionIds, channelId) =>\r\n dataService\r\n .mutate(RemovePromotionsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n promotionIds,\r\n },\r\n })\r\n .pipe(map(res => res.removePromotionsFromChannel)),\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=\"promotion-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-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=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</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-promotion=\"item\">\r\n {{ promotion.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-promotion=\"item\">\r\n {{ promotion.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-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.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]=\"'marketing.coupon-code' | translate\" id=\"coupon-code\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" id=\"starts-at\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" id=\"ends-at\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\" id=\"per-customer-limit\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\" id=\"per-customer-limit\"\r\n [sort]=\"sorts.get('usageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.usageLimit }}\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 { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetPromotionListDocument,\r\n LogicalOperator,\r\n PROMOTION_FRAGMENT,\r\n PromotionListOptions,\r\n PromotionSortParameter,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_PROMOTION_LIST = gql`\r\n query GetPromotionList($options: PromotionListOptions) {\r\n promotions(options: $options) {\r\n items {\r\n ...Promotion\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PROMOTION_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-promotion-list',\r\n templateUrl: './promotion-list.component.html',\r\n styleUrls: ['./promotion-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionListComponent\r\n extends TypedBaseListComponent<typeof GetPromotionListDocument, 'promotions'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Promotion');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'startsAt',\r\n type: { kind: 'dateRange' },\r\n label: _('marketing.starts-at'),\r\n filterField: 'startsAt',\r\n },\r\n {\r\n name: 'endsAt',\r\n type: { kind: 'dateRange' },\r\n label: _('marketing.ends-at'),\r\n filterField: 'endsAt',\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: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'couponCode',\r\n type: { kind: 'text' },\r\n label: _('marketing.coupon-code'),\r\n filterField: 'couponCode',\r\n },\r\n {\r\n name: 'desc',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n },\r\n {\r\n name: 'perCustomerUsageLimit',\r\n type: { kind: 'number' },\r\n label: _('marketing.per-customer-limit'),\r\n filterField: 'perCustomerUsageLimit',\r\n },\r\n {\r\n name: 'usageLimit',\r\n type: { kind: 'number' },\r\n label: _('marketing.usage-limit'),\r\n filterField: 'usageLimit',\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: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'startsAt' },\r\n { name: 'endsAt' },\r\n { name: 'name' },\r\n { name: 'couponCode' },\r\n { name: 'perCustomerUsageLimit' },\r\n { name: 'usageLimit' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetPromotionListDocument,\r\n getItems: data => data.promotions,\r\n setVariables: (skip, take) => this.createQueryOptions(skip, take, this.searchTermControl.value),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n private createQueryOptions(\r\n skip: number,\r\n take: number,\r\n searchTerm: string | null,\r\n ): { options: PromotionListOptions } {\r\n const filter = this.filters.createFilterInput();\r\n const sort = this.sorts.createSortInput();\r\n let filterOperator = LogicalOperator.AND;\r\n if (searchTerm) {\r\n filter.couponCode = { contains: searchTerm };\r\n filter.name = { contains: searchTerm };\r\n filterOperator = LogicalOperator.OR;\r\n }\r\n\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter,\r\n filterOperator,\r\n sort,\r\n },\r\n };\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { detailBreadcrumb, PageComponent, PageService, PromotionFragment } from '@vendure/admin-ui/core';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'promotions',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'promotion-list',\r\n breadcrumb: _('breadcrumb.promotions'),\r\n },\r\n children: pageService.getPageTabRoutes('promotion-list'),\r\n },\r\n {\r\n path: 'promotions/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'promotion-detail',\r\n breadcrumb: { label: _('breadcrumb.promotions'), link: ['../', 'promotions'] },\r\n },\r\n children: pageService.getPageTabRoutes('promotion-detail'),\r\n },\r\n];\r\n\r\nexport function promotionBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<PromotionFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.promotions',\r\n getName: promotion => promotion.name,\r\n route: 'promotions',\r\n });\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { 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 BulkActionRegistryService,\r\n detailComponentWithResolver,\r\n GetPromotionDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport {\r\n assignPromotionsToChannelBulkAction,\r\n deletePromotionsBulkAction,\r\n removePromotionsFromChannelBulkAction,\r\n} from './components/promotion-list/promotion-list-bulk-actions';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { createRoutes } from './marketing.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([]), SharedModule, AsyncPipe, SharedModule],\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 declarations: [PromotionListComponent, PromotionDetailComponent],\r\n})\r\nexport class MarketingModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (MarketingModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(assignPromotionsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removePromotionsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deletePromotionsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'promotion-list',\r\n tab: _('breadcrumb.promotions'),\r\n route: '',\r\n component: PromotionListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'promotion-detail',\r\n tab: _('marketing.promotion'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: PromotionDetailComponent,\r\n query: GetPromotionDetailDocument,\r\n entityKey: 'promotion',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('marketing.create-new-promotion'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n MarketingModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n"],"x_google_ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"396.14bc4711db84b4e5.js","mappings":"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","names":["i0","_r11","ctx_r10","create","ctx_r0","saveButtonEnabled","_r14","ctx_r13","save","ctx_r12","PromotionDetailComponent_ng_template_12_button_0_Template","entity_r15","ctx_r5","customFields","detailForm","get","$event","_r19","ctx_r18","removeCondition","i_r17","condition_r16","ctx_r6","getConditionDefinition","condition_r21","_r23","$implicit","ctx_r22","addCondition","description","PromotionDetailComponent_vdr_dropdown_56_button_6_Template","ctx_r7","getAvailableConditions","_r27","ctx_r26","removeAction","i_r25","action_r24","ctx_r8","getActionDefinition","action_r29","_r31","ctx_r30","addAction","PromotionDetailComponent_vdr_dropdown_61_button_6_Template","ctx_r9","getAvailableActions","GET_PROMOTION_DETAIL","gql","PROMOTION_FRAGMENT","PromotionDetailComponent","TypedBaseDetailComponent","constructor","changeDetector","dataService","formBuilder","notificationService","super","this","getCustomFieldConfig","group","name","Validators","required","enabled","couponCode","perCustomerUsageLimit","usageLimit","startsAt","endsAt","conditions","array","actions","getCustomFieldsDefaults","allConditions","allActions","ngOnInit","init","promotion","getPromotionActionsAndConditions","single$","subscribe","data","promotionActions","promotionConditions","markForCheck","ngOnDestroy","destroy","filter","o","find","c","code","condition","a","action","dirty","valid","length","value","addOperation","markAsDirty","removeOperation","formArrayOf","key","input","getUpdatedPromotion","id","createdAt","updatedAt","translations","languageCode","createPromotion","__typename","success","_","entity","markAsPristine","router","navigate","relativeTo","route","error","message","err","combineLatest","entity$","languageCode$","pipe","take","mergeMap","paymentMethod","updatePromotion","formGroup","formValue","createUpdatedTranslatable","translatable","updatedFields","customFieldConfig","defaultTranslation","mapOperationsToInputs","setFormValues","currentTranslation","findTranslation","patchValue","forEach","setCustomFieldFormValues","operations","formValueOperations","map","i","arguments","Object","values","args","j","encodeConfigArgValue","operation","operationsArray","collection","findIndex","argsHash","reduce","output","arg","getConfigArgValue","getDefaultArgValue","push","control","argName","def","argDef","getDefaultConfigArgValue","Error","index","removeAt","splice","i1","i2","selectors","features","decls","vars","consts","template","rf","ctx","setLanguage","PromotionDetailComponent_button_10_Template","PromotionDetailComponent_ng_template_12_Template","PromotionDetailComponent_vdr_card_17_Template","PromotionDetailComponent_vdr_card_18_Template","PromotionDetailComponent_vdr_card_50_Template","PromotionDetailComponent_div_54_Template","PromotionDetailComponent_vdr_dropdown_56_Template","PromotionDetailComponent_div_59_Template","PromotionDetailComponent_vdr_dropdown_61_Template","isNew$","availableLanguages$","_r1","deletePromotionsBulkAction","createBulkDeleteAction","location","requiresPermission","Permission","DeletePromotion","getItemName","item","bulkDelete","ids","deletePromotions","res","assignPromotionsToChannelBulkAction","createBulkAssignToChannelAction","UpdatePromotion","bulkAssignToChannel","promotionIds","channelId","mutate","AssignPromotionsToChannelDocument","assignPromotionsToChannel","removePromotionsFromChannelBulkAction","createBulkRemoveFromChannelAction","DeleteCatalog","bulkRemoveFromChannel","RemovePromotionsFromChannelDocument","removePromotionsFromChannel","_c0","promotion_r12","promotion_r13","promotion_r14","_c1","promotion_r15","PromotionListComponent_ng_template_31_vdr_chip_0_Template","PromotionListComponent_ng_template_31_vdr_chip_1_Template","promotion_r16","promotion_r19","promotion_r20","promotion_r21","promotion_r22","promotion_r23","customField_r24","ctx_r11","sorts","GET_PROMOTION_LIST","PromotionListComponent","TypedBaseListComponent","filters","createFilterCollection","addIdFilter","addDateFilters","addFilters","type","kind","label","filterField","addCustomFieldFilters","connectToRoute","createSortCollection","defaultSort","addSorts","addCustomFieldSorts","configure","document","GetPromotionListDocument","getItems","promotions","setVariables","skip","createQueryOptions","searchTermControl","refreshListOnChanges","valueChanges","searchTerm","createFilterInput","sort","createSortInput","filterOperator","LogicalOperator","AND","contains","OR","options","PromotionListComponent_a_8_Template","setPageNumber","setItemsPerPage","PromotionListComponent_ng_template_19_Template","PromotionListComponent_ng_template_22_Template","PromotionListComponent_ng_template_25_Template","PromotionListComponent_ng_template_28_Template","PromotionListComponent_ng_template_31_Template","PromotionListComponent_ng_template_34_Template","PromotionListComponent_ng_template_37_Template","PromotionListComponent_ng_template_40_Template","PromotionListComponent_ng_template_43_Template","PromotionListComponent_ng_template_46_Template","PromotionListComponent_vdr_dt2_custom_field_column_47_Template","contentLanguage$","items$","itemsPerPage$","totalItems$","currentPage$","selectionManager","createRoutes","pageService","path","component","PageComponent","locationId","breadcrumb","children","getPageTabRoutes","link","promotionBreadcrumb","params","detailBreadcrumb","breadcrumbKey","getName","MarketingModule","bulkActionRegistryService","hasRegisteredTabsAndBulkActions","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","query","GetPromotionDetailDocument","entityKey","getBreadcrumbs","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"sourceRoot":"webpack:///","sources":["./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.html","./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","./src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts","./src/lib/marketing/src/components/promotion-list/promotion-list.component.html","./src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","./src/lib/marketing/src/marketing.routes.ts","./src/lib/marketing/src/marketing.module.ts"],"sourcesContent":["<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\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 </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"promotion-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]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdatePromotion'\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\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 *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <clr-toggle-wrapper>\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"entity$ | async as entity\">\r\n <vdr-page-entity-info [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\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 [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n class=\"form-grid-span\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\r\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\r\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\r\n <input\r\n id=\"couponCode\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"text\"\r\n formControlName=\"couponCode\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.per-customer-limit' | translate\"\r\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\r\n for=\"perCustomerUsageLimit\"\r\n >\r\n <input\r\n id=\"perCustomerUsageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"999\"\r\n formControlName=\"perCustomerUsageLimit\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'marketing.usage-limit' | translate\"\r\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\r\n for=\"usageLimit\"\r\n >\r\n <input\r\n id=\"usageLimit\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n type=\"number\"\r\n min=\"1\"\r\n max=\"9999999\"\r\n formControlName=\"usageLimit\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'common.custom-fields' | translate\"\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Promotion\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"promotion-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\r\n <div *ngFor=\"let condition of conditions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeCondition($event)\"\r\n [position]=\"i\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operation]=\"condition\"\r\n [operationDefinition]=\"getConditionDefinition(condition)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let condition of getAvailableConditions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addCondition(condition)\"\r\n >\r\n {{ condition.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\r\n <div *ngFor=\"let action of actions; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeAction($event)\"\r\n [position]=\"i\"\r\n [operation]=\"action\"\r\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\r\n [operationDefinition]=\"getActionDefinition(action)\"\r\n [formControlName]=\"i\"\r\n ></vdr-configurable-input>\r\n </div>\r\n <div>\r\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-action' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let action of getAvailableActions()\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n class=\"item-wrap\"\r\n (click)=\"addAction(action)\"\r\n >\r\n {{ action.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormBuilder, UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n ConfigurableOperationInput,\r\n CreatePromotionInput,\r\n createUpdatedTranslatable,\r\n DataService,\r\n encodeConfigArgValue,\r\n findTranslation,\r\n getConfigArgValue,\r\n getCustomFieldsDefaults,\r\n getDefaultConfigArgValue,\r\n GetPromotionDetailDocument,\r\n LanguageCode,\r\n NotificationService,\r\n PROMOTION_FRAGMENT,\r\n PromotionFragment,\r\n TypedBaseDetailComponent,\r\n UpdatePromotionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport const GET_PROMOTION_DETAIL = gql`\r\n query GetPromotionDetail($id: ID!) {\r\n promotion(id: $id) {\r\n ...Promotion\r\n }\r\n }\r\n ${PROMOTION_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-promotion-detail',\r\n templateUrl: './promotion-detail.component.html',\r\n styleUrls: ['./promotion-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionDetailComponent\r\n extends TypedBaseDetailComponent<typeof GetPromotionDetailDocument, 'promotion'>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields = this.getCustomFieldConfig('Promotion');\r\n detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n description: '',\r\n enabled: true,\r\n couponCode: null as string | null,\r\n perCustomerUsageLimit: null as number | null,\r\n usageLimit: null as number | null,\r\n startsAt: null,\r\n endsAt: null,\r\n conditions: this.formBuilder.array([]),\r\n actions: this.formBuilder.array([]),\r\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\r\n });\r\n conditions: ConfigurableOperation[] = [];\r\n actions: ConfigurableOperation[] = [];\r\n\r\n private allConditions: ConfigurableOperationDefinition[] = [];\r\n private allActions: ConfigurableOperationDefinition[] = [];\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 ) {\r\n super();\r\n this.customFields = this.getCustomFieldConfig('Promotion');\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\r\n this.allActions = data.promotionActions;\r\n this.allConditions = data.promotionConditions;\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n getAvailableConditions(): ConfigurableOperationDefinition[] {\r\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\r\n }\r\n\r\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allConditions.find(c => c.code === condition.code);\r\n }\r\n\r\n getAvailableActions(): ConfigurableOperationDefinition[] {\r\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\r\n }\r\n\r\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allActions.find(c => c.code === action.code);\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return !!(\r\n this.detailForm.dirty &&\r\n this.detailForm.valid &&\r\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\r\n this.actions.length !== 0\r\n );\r\n }\r\n\r\n addCondition(condition: ConfigurableOperation) {\r\n this.addOperation('conditions', condition);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n addAction(action: ConfigurableOperation) {\r\n this.addOperation('actions', action);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeCondition(condition: ConfigurableOperation) {\r\n this.removeOperation('conditions', condition);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeAction(action: ConfigurableOperation) {\r\n this.removeOperation('actions', action);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n formArrayOf(key: 'conditions' | 'actions'): UntypedFormArray {\r\n return this.detailForm.get(key) as UntypedFormArray;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n\r\n const input = this.getUpdatedPromotion(\r\n {\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n startsAt: '',\r\n endsAt: '',\r\n name: '',\r\n description: '',\r\n couponCode: null,\r\n perCustomerUsageLimit: null,\r\n usageLimit: null,\r\n enabled: false,\r\n conditions: [],\r\n actions: [],\r\n translations: [],\r\n },\r\n this.detailForm,\r\n this.languageCode,\r\n ) as CreatePromotionInput;\r\n this.dataService.promotion.createPromotion(input).subscribe(\r\n ({ createPromotion }) => {\r\n switch (createPromotion.__typename) {\r\n case 'Promotion':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\r\n break;\r\n case 'MissingConditionsError':\r\n this.notificationService.error(createPromotion.message);\r\n break;\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n combineLatest(this.entity$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([paymentMethod, languageCode]) => {\r\n const input = this.getUpdatedPromotion(\r\n paymentMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdatePromotionInput;\r\n return this.dataService.promotion.updatePromotion(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedPromotion(\r\n promotion: PromotionFragment,\r\n formGroup: UntypedFormGroup,\r\n languageCode: LanguageCode,\r\n ): UpdatePromotionInput | CreatePromotionInput {\r\n const formValue = formGroup.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: promotion,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: promotion.name || '',\r\n description: promotion.description || '',\r\n },\r\n });\r\n\r\n return {\r\n ...input,\r\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\r\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\r\n };\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: PromotionFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(entity, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name,\r\n description: currentTranslation?.description,\r\n enabled: entity.enabled,\r\n couponCode: entity.couponCode,\r\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\r\n usageLimit: entity.usageLimit,\r\n startsAt: entity.startsAt,\r\n endsAt: entity.endsAt,\r\n });\r\n entity.conditions.forEach(o => {\r\n this.addOperation('conditions', o);\r\n });\r\n entity.actions.forEach(o => this.addOperation('actions', o));\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 * 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.values<any>(formValueOperations[i].args).map((value, j) => ({\r\n name: o.args[j].name,\r\n value: encodeConfigArgValue(value),\r\n })),\r\n }));\r\n }\r\n\r\n /**\r\n * Adds a new condition or action to the promotion.\r\n */\r\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\r\n const operationsArray = this.formArrayOf(key);\r\n const collection = key === 'conditions' ? this.conditions : this.actions;\r\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\r\n if (index === -1) {\r\n const argsHash = operation.args.reduce(\r\n (output, arg) => ({\r\n ...output,\r\n [arg.name]:\r\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\r\n }),\r\n {},\r\n );\r\n operationsArray.push(\r\n this.formBuilder.control({\r\n code: operation.code,\r\n args: argsHash,\r\n }),\r\n );\r\n collection.push({\r\n code: operation.code,\r\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\r\n });\r\n }\r\n }\r\n\r\n private getDefaultArgValue(\r\n key: 'conditions' | 'actions',\r\n operation: ConfigurableOperation,\r\n argName: string,\r\n ) {\r\n const def =\r\n key === 'conditions'\r\n ? this.allConditions.find(c => c.code === operation.code)\r\n : this.allActions.find(a => a.code === operation.code);\r\n if (def) {\r\n const argDef = def.args.find(a => a.name === argName);\r\n if (argDef) {\r\n return getDefaultConfigArgValue(argDef);\r\n }\r\n }\r\n throw new Error(`Could not determine default value for \"argName\"`);\r\n }\r\n\r\n /**\r\n * Removes a condition or action from the promotion.\r\n */\r\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\r\n const operationsArray = this.formArrayOf(key);\r\n const collection = key === 'conditions' ? this.conditions : this.actions;\r\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\r\n if (index !== -1) {\r\n operationsArray.removeAt(index);\r\n collection.splice(index, 1);\r\n }\r\n }\r\n}\r\n","import {\r\n AssignPromotionsToChannelDocument,\r\n createBulkAssignToChannelAction,\r\n createBulkDeleteAction,\r\n createBulkRemoveFromChannelAction,\r\n GetPromotionListQuery,\r\n ItemOf,\r\n Permission,\r\n RemovePromotionsFromChannelDocument,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst ASSIGN_PROMOTIONS_TO_CHANNEL = gql`\r\n mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {\r\n assignPromotionsToChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nconst REMOVE_PROMOTIONS_FROM_CHANNEL = gql`\r\n mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {\r\n removePromotionsFromChannel(input: $input) {\r\n id\r\n name\r\n }\r\n }\r\n`;\r\n\r\nexport const deletePromotionsBulkAction = createBulkDeleteAction<ItemOf<GetPromotionListQuery, 'promotions'>>(\r\n {\r\n location: 'promotion-list',\r\n requiresPermission: Permission.DeletePromotion,\r\n getItemName: item => item.name,\r\n bulkDelete: (dataService, ids) =>\r\n dataService.promotion.deletePromotions(ids).pipe(map(res => res.deletePromotions)),\r\n },\r\n);\r\n\r\nexport const assignPromotionsToChannelBulkAction = createBulkAssignToChannelAction<\r\n ItemOf<GetPromotionListQuery, 'promotions'>\r\n>({\r\n location: 'promotion-list',\r\n requiresPermission: Permission.UpdatePromotion,\r\n getItemName: item => item.name,\r\n bulkAssignToChannel: (dataService, promotionIds, channelId) =>\r\n dataService\r\n .mutate(AssignPromotionsToChannelDocument, {\r\n input: {\r\n channelId,\r\n promotionIds,\r\n },\r\n })\r\n .pipe(map(res => res.assignPromotionsToChannel)),\r\n});\r\n\r\nexport const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\r\n ItemOf<GetPromotionListQuery, 'promotions'>\r\n>({\r\n location: 'promotion-list',\r\n requiresPermission: Permission.DeleteCatalog,\r\n getItemName: item => item.name,\r\n bulkRemoveFromChannel: (dataService, promotionIds, channelId) =>\r\n dataService\r\n .mutate(RemovePromotionsFromChannelDocument, {\r\n input: {\r\n channelId,\r\n promotionIds,\r\n },\r\n })\r\n .pipe(map(res => res.removePromotionsFromChannel)),\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=\"promotion-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.create-new-promotion' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-data-table-2\r\n id=\"promotion-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=\"promotion-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n />\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-promotion=\"item\">{{ promotion.id }}</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-promotion=\"item\">\r\n {{ promotion.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-promotion=\"item\">\r\n {{ promotion.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-promotion=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\r\n ><span> {{ promotion.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.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-promotion=\"item\">\r\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!promotion.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]=\"'marketing.coupon-code' | translate\" id=\"coupon-code\" [sort]=\"sorts.get('couponCode')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.couponCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.starts-at' | translate\" id=\"starts-at\" [sort]=\"sorts.get('startsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.startsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" id=\"ends-at\" [sort]=\"sorts.get('endsAt')\">\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.endsAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\" id=\"per-customer-limit\"\r\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.perCustomerUsageLimit }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'marketing.per-customer-limit' | translate\" id=\"per-customer-limit\"\r\n [sort]=\"sorts.get('usageLimit')\"\r\n [hiddenByDefault]=\"true\"\r\n >\r\n <ng-template let-promotion=\"item\">\r\n {{ promotion.usageLimit }}\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 { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n GetPromotionListDocument,\r\n LogicalOperator,\r\n PROMOTION_FRAGMENT,\r\n PromotionListOptions,\r\n PromotionSortParameter,\r\n TypedBaseListComponent,\r\n} from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_PROMOTION_LIST = gql`\r\n query GetPromotionList($options: PromotionListOptions) {\r\n promotions(options: $options) {\r\n items {\r\n ...Promotion\r\n }\r\n totalItems\r\n }\r\n }\r\n ${PROMOTION_FRAGMENT}\r\n`;\r\n\r\n@Component({\r\n selector: 'vdr-promotion-list',\r\n templateUrl: './promotion-list.component.html',\r\n styleUrls: ['./promotion-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionListComponent\r\n extends TypedBaseListComponent<typeof GetPromotionListDocument, 'promotions'>\r\n implements OnInit\r\n{\r\n readonly customFields = this.getCustomFieldConfig('Promotion');\r\n readonly filters = this.createFilterCollection()\r\n .addIdFilter()\r\n .addDateFilters()\r\n .addFilters([\r\n {\r\n name: 'startsAt',\r\n type: { kind: 'dateRange' },\r\n label: _('marketing.starts-at'),\r\n filterField: 'startsAt',\r\n },\r\n {\r\n name: 'endsAt',\r\n type: { kind: 'dateRange' },\r\n label: _('marketing.ends-at'),\r\n filterField: 'endsAt',\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: 'name',\r\n type: { kind: 'text' },\r\n label: _('common.name'),\r\n filterField: 'name',\r\n },\r\n {\r\n name: 'couponCode',\r\n type: { kind: 'text' },\r\n label: _('marketing.coupon-code'),\r\n filterField: 'couponCode',\r\n },\r\n {\r\n name: 'desc',\r\n type: { kind: 'text' },\r\n label: _('common.description'),\r\n filterField: 'description',\r\n },\r\n {\r\n name: 'perCustomerUsageLimit',\r\n type: { kind: 'number' },\r\n label: _('marketing.per-customer-limit'),\r\n filterField: 'perCustomerUsageLimit',\r\n },\r\n {\r\n name: 'usageLimit',\r\n type: { kind: 'number' },\r\n label: _('marketing.usage-limit'),\r\n filterField: 'usageLimit',\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: 'createdAt' },\r\n { name: 'updatedAt' },\r\n { name: 'startsAt' },\r\n { name: 'endsAt' },\r\n { name: 'name' },\r\n { name: 'couponCode' },\r\n { name: 'perCustomerUsageLimit' },\r\n { name: 'usageLimit' },\r\n ])\r\n .addCustomFieldSorts(this.customFields)\r\n .connectToRoute(this.route);\r\n\r\n constructor() {\r\n super();\r\n super.configure({\r\n document: GetPromotionListDocument,\r\n getItems: data => data.promotions,\r\n setVariables: (skip, take) => this.createQueryOptions(skip, take, this.searchTermControl.value),\r\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\r\n });\r\n }\r\n\r\n private createQueryOptions(\r\n skip: number,\r\n take: number,\r\n searchTerm: string | null,\r\n ): { options: PromotionListOptions } {\r\n const filter = this.filters.createFilterInput();\r\n const sort = this.sorts.createSortInput();\r\n let filterOperator = LogicalOperator.AND;\r\n if (searchTerm) {\r\n filter.couponCode = { contains: searchTerm };\r\n filter.name = { contains: searchTerm };\r\n filterOperator = LogicalOperator.OR;\r\n }\r\n\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter,\r\n filterOperator,\r\n sort,\r\n },\r\n };\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { detailBreadcrumb, PageComponent, PageService, PromotionFragment } from '@vendure/admin-ui/core';\r\n\r\nexport const createRoutes = (pageService: PageService): Route[] => [\r\n {\r\n path: 'promotions',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'promotion-list',\r\n breadcrumb: _('breadcrumb.promotions'),\r\n },\r\n children: pageService.getPageTabRoutes('promotion-list'),\r\n },\r\n {\r\n path: 'promotions/:id',\r\n component: PageComponent,\r\n data: {\r\n locationId: 'promotion-detail',\r\n breadcrumb: { label: _('breadcrumb.promotions'), link: ['../', 'promotions'] },\r\n },\r\n children: pageService.getPageTabRoutes('promotion-detail'),\r\n },\r\n];\r\n\r\nexport function promotionBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<PromotionFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.promotions',\r\n getName: promotion => promotion.name,\r\n route: 'promotions',\r\n });\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { 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 BulkActionRegistryService,\r\n detailComponentWithResolver,\r\n GetPromotionDetailDocument,\r\n PageService,\r\n SharedModule,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport {\r\n assignPromotionsToChannelBulkAction,\r\n deletePromotionsBulkAction,\r\n removePromotionsFromChannelBulkAction,\r\n} from './components/promotion-list/promotion-list-bulk-actions';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { createRoutes } from './marketing.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild([]), SharedModule, AsyncPipe, SharedModule],\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 declarations: [PromotionListComponent, PromotionDetailComponent],\r\n})\r\nexport class MarketingModule {\r\n private static hasRegisteredTabsAndBulkActions = false;\r\n\r\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\r\n if (MarketingModule.hasRegisteredTabsAndBulkActions) {\r\n return;\r\n }\r\n bulkActionRegistryService.registerBulkAction(assignPromotionsToChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(removePromotionsFromChannelBulkAction);\r\n bulkActionRegistryService.registerBulkAction(deletePromotionsBulkAction);\r\n\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'promotion-list',\r\n tab: _('breadcrumb.promotions'),\r\n route: '',\r\n component: PromotionListComponent,\r\n });\r\n pageService.registerPageTab({\r\n priority: 0,\r\n location: 'promotion-detail',\r\n tab: _('marketing.promotion'),\r\n route: '',\r\n component: detailComponentWithResolver({\r\n component: PromotionDetailComponent,\r\n query: GetPromotionDetailDocument,\r\n entityKey: 'promotion',\r\n getBreadcrumbs: entity => [\r\n {\r\n label: entity ? entity.name : _('marketing.create-new-promotion'),\r\n link: [entity?.id],\r\n },\r\n ],\r\n }),\r\n });\r\n MarketingModule.hasRegisteredTabsAndBulkActions = true;\r\n }\r\n}\r\n"],"x_google_ignoreList":[]}
|