{"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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"}