@vendure/admin-ui 1.7.4 → 1.8.1
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/bundles/vendure-admin-ui-catalog.umd.js +902 -74
- package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-core.umd.js +2392 -820
- package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-customer.umd.js +4 -3
- package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-dashboard.umd.js +3 -1
- package/bundles/vendure-admin-ui-dashboard.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-order.umd.js +781 -175
- package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-settings.umd.js +5 -4
- package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-system.umd.js +1 -1
- package/catalog/catalog.module.d.ts +3 -0
- package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +17 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +38 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
- package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
- package/catalog/components/collection-list/collection-list.component.d.ts +7 -5
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +8 -4
- package/catalog/components/collection-tree/collection-tree.component.d.ts +2 -1
- package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
- package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
- package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
- package/catalog/components/product-list/product-list.component.d.ts +2 -1
- package/catalog/public_api.d.ts +6 -0
- package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
- package/core/common/component-registry-types.d.ts +1 -1
- package/core/common/generated-types.d.ts +609 -3
- package/core/common/utilities/bulk-action-utils.d.ts +19 -0
- package/core/common/utilities/selection-manager.d.ts +7 -0
- package/core/common/version.d.ts +1 -1
- package/core/data/definitions/collection-definitions.d.ts +3 -0
- package/core/data/definitions/facet-definitions.d.ts +3 -0
- package/core/data/definitions/order-definitions.d.ts +12 -0
- package/core/data/definitions/product-definitions.d.ts +1 -0
- package/core/data/providers/collection-data.service.d.ts +4 -1
- package/core/data/providers/facet-data.service.d.ts +4 -1
- package/core/data/providers/order-data.service.d.ts +18 -1
- package/core/data/providers/product-data.service.d.ts +1 -0
- package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +6 -0
- package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
- package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
- package/core/providers/modal/modal.service.d.ts +2 -0
- package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
- package/core/public_api.d.ts +18 -1
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +3 -3
- package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +29 -0
- package/core/shared/components/data-table/data-table.component.d.ts +26 -7
- package/core/shared/components/dropdown/dropdown-menu.component.d.ts +1 -0
- package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +21 -0
- package/core/shared/components/radio-card/radio-card.component.d.ts +19 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +28 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +31 -0
- package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
- package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
- package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
- package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
- package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
- package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +18 -0
- package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
- package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +27 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +19 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
- package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +2 -1
- package/core/vendure-admin-ui-core.metadata.json +1 -1
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
- package/customer/vendure-admin-ui-customer.metadata.json +1 -1
- package/esm2015/catalog/catalog.module.js +25 -2
- package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +4 -1
- package/esm2015/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.js +51 -0
- package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.js +89 -0
- package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.js +69 -0
- package/esm2015/catalog/components/collection-detail/collection-detail.component.js +3 -3
- package/esm2015/catalog/components/collection-list/collection-list-bulk-actions.js +147 -0
- package/esm2015/catalog/components/collection-list/collection-list.component.js +17 -8
- package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +16 -7
- package/esm2015/catalog/components/collection-tree/collection-tree.component.js +3 -2
- package/esm2015/catalog/components/facet-list/facet-list-bulk-actions.js +208 -0
- package/esm2015/catalog/components/facet-list/facet-list.component.js +13 -4
- package/esm2015/catalog/components/product-detail/product-detail.component.js +35 -23
- package/esm2015/catalog/components/product-list/product-list-bulk-actions.js +173 -0
- package/esm2015/catalog/components/product-list/product-list.component.js +10 -5
- package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +2 -2
- package/esm2015/catalog/providers/routing/collection-resolver.js +2 -1
- package/esm2015/catalog/public_api.js +7 -1
- package/esm2015/core/common/component-registry-types.js +1 -1
- package/esm2015/core/common/generated-types.js +5 -1
- package/esm2015/core/common/introspection-result.js +296 -191
- package/esm2015/core/common/utilities/bulk-action-utils.js +44 -0
- package/esm2015/core/common/utilities/selection-manager.js +33 -1
- package/esm2015/core/common/version.js +2 -2
- package/esm2015/core/components/breadcrumb/breadcrumb.component.js +1 -1
- package/esm2015/core/data/definitions/collection-definitions.js +30 -1
- package/esm2015/core/data/definitions/facet-definitions.js +31 -1
- package/esm2015/core/data/definitions/order-definitions.js +114 -1
- package/esm2015/core/data/definitions/product-definitions.js +15 -1
- package/esm2015/core/data/providers/collection-data.service.js +17 -2
- package/esm2015/core/data/providers/customer-data.service.js +8 -4
- package/esm2015/core/data/providers/facet-data.service.js +18 -2
- package/esm2015/core/data/providers/order-data.service.js +38 -2
- package/esm2015/core/data/providers/product-data.service.js +7 -2
- package/esm2015/core/data/utils/remove-readonly-custom-fields.js +5 -1
- package/esm2015/core/providers/bulk-action-registry/bulk-action-registry.service.js +27 -0
- package/esm2015/core/providers/bulk-action-registry/bulk-action-types.js +2 -0
- package/esm2015/core/providers/bulk-action-registry/register-bulk-action.js +63 -0
- package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +1 -4
- package/esm2015/core/providers/modal/modal.service.js +2 -1
- package/esm2015/core/providers/nav-builder/nav-builder-types.js +1 -1
- package/esm2015/core/public_api.js +19 -2
- package/esm2015/core/shared/components/action-bar/action-bar.component.js +4 -8
- package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +2 -2
- package/esm2015/core/shared/components/bulk-action-menu/bulk-action-menu.component.js +99 -0
- package/esm2015/core/shared/components/data-table/data-table.component.js +64 -15
- package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +4 -3
- package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +2 -2
- package/esm2015/core/shared/components/language-selector/language-selector.component.js +2 -2
- package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +2 -1
- package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +1 -1
- package/esm2015/core/shared/components/product-selector/product-selector.component.js +1 -1
- package/esm2015/core/shared/components/radio-card/radio-card-fieldset.component.js +57 -0
- package/esm2015/core/shared/components/radio-card/radio-card.component.js +54 -0
- package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +2 -2
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.js +140 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.js +45 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/custom-nodes.js +60 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js +4 -4
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js +23 -1
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.js +12 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js +73 -18
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.js +16 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.js +100 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.js +97 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.js +166 -0
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +47 -17
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/types.js +1 -1
- package/esm2015/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.js +57 -0
- package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +20 -9
- package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +2 -2
- package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.js +59 -0
- package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.js +66 -0
- package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +47 -84
- package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +3 -3
- package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +3 -1
- package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +2 -1
- package/esm2015/core/shared/shared.module.js +13 -1
- package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +2 -2
- package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +6 -6
- package/esm2015/customer/components/customer-list/customer-list.component.js +2 -2
- package/esm2015/dashboard/dashboard.module.js +6 -2
- package/esm2015/order/components/coupon-code-selector/coupon-code-selector.component.js +42 -0
- package/esm2015/order/components/draft-order-detail/draft-order-detail.component.js +195 -0
- package/esm2015/order/components/draft-order-variant-selector/draft-order-variant-selector.component.js +59 -0
- package/esm2015/order/components/order-detail/order-detail.component.js +2 -2
- package/esm2015/order/components/order-editor/order-editor.component.js +5 -11
- package/esm2015/order/components/order-list/order-list.component.js +20 -4
- package/esm2015/order/components/order-table/order-table.component.js +16 -5
- package/esm2015/order/components/select-address-dialog/select-address-dialog.component.js +91 -0
- package/esm2015/order/components/select-address-dialog/select-address-dialog.graphql.js +14 -0
- package/esm2015/order/components/select-customer-dialog/select-customer-dialog.component.js +59 -0
- package/esm2015/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.js +30 -0
- package/esm2015/order/order.module.js +13 -1
- package/esm2015/order/order.routes.js +26 -7
- package/esm2015/order/providers/routing/order-resolver.js +29 -12
- package/esm2015/order/providers/routing/order.guard.js +41 -0
- package/esm2015/order/public_api.js +9 -1
- package/esm2015/settings/components/country-list/country-list.component.js +2 -2
- package/esm2015/settings/components/profile/profile.component.js +2 -2
- package/esm2015/settings/components/zone-list/zone-list.component.js +2 -2
- package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +2 -2
- package/esm2015/system/components/health-check/health-check.component.js +1 -1
- package/fesm2015/vendure-admin-ui-catalog.js +835 -61
- package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
- package/fesm2015/vendure-admin-ui-core.js +3122 -1514
- package/fesm2015/vendure-admin-ui-core.js.map +1 -1
- package/fesm2015/vendure-admin-ui-customer.js +7 -7
- package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
- package/fesm2015/vendure-admin-ui-dashboard.js +5 -1
- package/fesm2015/vendure-admin-ui-dashboard.js.map +1 -1
- package/fesm2015/vendure-admin-ui-order.js +780 -232
- package/fesm2015/vendure-admin-ui-order.js.map +1 -1
- package/fesm2015/vendure-admin-ui-settings.js +4 -4
- package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
- package/fesm2015/vendure-admin-ui-system.js +1 -1
- package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +18 -0
- package/order/components/draft-order-detail/draft-order-detail.component.d.ts +49 -0
- package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +21 -0
- package/order/components/order-editor/order-editor.component.d.ts +1 -6
- package/order/components/order-list/order-list.component.d.ts +1 -0
- package/order/components/order-table/order-table.component.d.ts +11 -2
- package/order/components/select-address-dialog/select-address-dialog.component.d.ts +24 -0
- package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
- package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +22 -0
- package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +16 -0
- package/order/providers/routing/order-resolver.d.ts +8 -5
- package/order/providers/routing/order.guard.d.ts +9 -0
- package/order/public_api.d.ts +8 -0
- package/order/vendure-admin-ui-order.metadata.json +1 -1
- package/package.json +13 -12
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
- package/settings/vendure-admin-ui-settings.metadata.json +1 -1
- package/static/i18n-messages/cs.json +33 -0
- package/static/i18n-messages/de.json +33 -0
- package/static/i18n-messages/en.json +36 -4
- package/static/i18n-messages/es.json +33 -0
- package/static/i18n-messages/fr.json +33 -0
- package/static/i18n-messages/it.json +33 -0
- package/static/i18n-messages/pl.json +33 -0
- package/static/i18n-messages/pt_BR.json +33 -0
- package/static/i18n-messages/pt_PT.json +33 -0
- package/static/i18n-messages/ru.json +33 -0
- package/static/i18n-messages/uk.json +33 -0
- package/static/i18n-messages/zh_Hans.json +33 -0
- package/static/i18n-messages/zh_Hant.json +33 -0
- package/static/styles/global/_forms.scss +4 -2
- package/static/styles/global/_overrides.scss +1 -1
- package/static/styles/global/_utilities.scss +4 -0
- package/static/theme.min.css +1 -1
- package/system/vendure-admin-ui-system.metadata.json +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js +0 -36
package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts
CHANGED
|
@@ -2,17 +2,17 @@ import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
|
2
2
|
import { FormControl } from '@angular/forms';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
4
|
import { Customer, DataService } from '@vendure/admin-ui/core';
|
|
5
|
-
import { ZoneMember } from '@vendure/admin-ui/settings';
|
|
6
5
|
import { Observable } from 'rxjs';
|
|
7
6
|
export interface CustomerGroupMemberFetchParams {
|
|
8
7
|
skip: number;
|
|
9
8
|
take: number;
|
|
10
9
|
filterTerm: string;
|
|
11
10
|
}
|
|
11
|
+
declare type CustomerGroupMember = Pick<Customer, 'id' | 'createdAt' | 'updatedAt' | 'title' | 'firstName' | 'lastName' | 'emailAddress'>;
|
|
12
12
|
export declare class CustomerGroupMemberListComponent implements OnInit, OnDestroy {
|
|
13
13
|
private router;
|
|
14
14
|
private dataService;
|
|
15
|
-
members:
|
|
15
|
+
members: CustomerGroupMember[];
|
|
16
16
|
totalItems: number;
|
|
17
17
|
route: ActivatedRoute;
|
|
18
18
|
selectedMemberIds: string[];
|
|
@@ -32,6 +32,13 @@ export declare class CustomerGroupMemberListComponent implements OnInit, OnDestr
|
|
|
32
32
|
private setParam;
|
|
33
33
|
areAllSelected(): boolean;
|
|
34
34
|
toggleSelectAll(): void;
|
|
35
|
-
toggleSelectMember(
|
|
36
|
-
|
|
35
|
+
toggleSelectMember({ item: member }: {
|
|
36
|
+
item: {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
}): void;
|
|
40
|
+
isMemberSelected: (member: {
|
|
41
|
+
id: string;
|
|
42
|
+
}) => boolean;
|
|
37
43
|
}
|
|
44
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"AddCustomerToGroupDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"vdr-add-customer-to-group-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":12,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n {{ 'customer.add-customers-to-group-with-name' | translate: {groupName: group.name} }}\r\n</ng-template>\r\n\r\n<vdr-customer-group-member-list\r\n [members]=\"customers$ | async\"\r\n [totalItems]=\"customersTotal$ | async\"\r\n [route]=\"route\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n>\r\n\r\n</vdr-customer-group-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedCustomerIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customers-to-group-with-count' | translate: {count: selectedCustomerIds.length} }}\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":27,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}]}},"AddressCardComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":18,"character":1},"arguments":[{"selector":"vdr-address-card","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":22,"character":21},"member":"OnPush"},"template":"<div class=\"card\" *ngIf=\"addressForm.value as address\">\r\n <div class=\"card-header\">\r\n <div class=\"address-title\">\r\n <span class=\"street-line\" *ngIf=\"address.streetLine1\">{{ address.streetLine1 }},</span>\r\n {{ address.countryCode }}\r\n </div>\r\n <div class=\"default-controls\">\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultShipping\">\r\n <clr-icon shape=\"truck\"></clr-icon>\r\n {{ 'customer.default-shipping-address' | translate }}\r\n </vdr-chip>\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultBilling\">\r\n <clr-icon shape=\"credit-card\"></clr-icon>\r\n {{ 'customer.default-billing-address' | translate }}\r\n </vdr-chip>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-formatted-address [address]=\"address\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <vdr-entity-info [entity]=\"address\"></vdr-entity-info>\r\n <ng-container *ngIf=\"editable\">\r\n <button class=\"btn btn-sm btn-link\" (click)=\"editAddress()\">\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-sm btn-link\" vdrDropdownTrigger>\r\n {{ 'common.more' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultShipping\"\r\n (click)=\"setAsDefaultShippingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-shipping-address' | translate }}\r\n </button>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultBilling\"\r\n (click)=\"setAsDefaultBillingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-billing-address' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"delete()\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","styles":[":host{display:block;max-width:360px}clr-input-container{margin-bottom:12px}.defaul-controls{display:flex}.is-default{margin:0;color:var(--color-success-500)}\n"]}]}],"members":{"addressForm":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":5}}]}],"customFields":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":5}}]}],"availableCountries":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":5}}]}],"isDefaultBilling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":5}}]}],"isDefaultShipping":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":5}}]}],"editable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":5}}]}],"setAsDefaultShipping":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":5}}]}],"setAsDefaultBilling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":5}}]}],"deleteAddress":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":33,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":36,"character":38},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":36,"character":76}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"getCountryName":[{"__symbolic":"method"}],"setAsDefaultBillingAddress":[{"__symbolic":"method"}],"setAsDefaultShippingAddress":[{"__symbolic":"method"}],"delete":[{"__symbolic":"method"}],"editAddress":[{"__symbolic":"method"}]}},"AddressDetailDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"vdr-address-detail-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":8,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n <span *ngIf=\"addressForm.get('streetLine1')?.value as streetLine1\">{{ streetLine1 }},</span>\r\n <span *ngIf=\"addressForm.get('countryCode')?.value as countryCode\"> {{ countryCode }}</span>\r\n</ng-template>\r\n\r\n<vdr-address-form\r\n [formGroup]=\"addressForm\"\r\n [availableCountries]=\"availableCountries\"\r\n [customFields]=\"customFields\"\r\n></vdr-address-form>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"save()\"\r\n [disabled]=\"!addressForm.valid || !addressForm.touched\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n","styles":["clr-input-container{margin-bottom:12px}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":16,"character":40}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}]}},"CustomerDetailComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseDetailComponent","line":55,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":48,"character":1},"arguments":[{"selector":"vdr-customer-detail","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":52,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-customer-status-label [customer]=\"entity$ | async\"></vdr-customer-status-label>\r\n <div\r\n class=\"last-login\"\r\n *ngIf=\"(entity$ | async)?.user?.lastLogin as lastLogin\"\r\n [title]=\"lastLogin | localeDate: 'medium'\"\r\n >\r\n {{ 'customer.last-login' | translate }}: {{ lastLogin | timeAgo }}\r\n </div>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-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]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"'UpdateCustomer'\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\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\r\n<form class=\"form\" [formGroup]=\"detailForm.get('customer')\">\r\n <vdr-form-field [label]=\"'customer.title' | translate\" for=\"title\" [readOnlyToggle]=\"!(isNew$ | async)\">\r\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.first-name' | translate\"\r\n for=\"firstName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.last-name' | translate\"\r\n for=\"lastName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.email-address' | translate\"\r\n for=\"emailAddress\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.phone-number' | translate\"\r\n for=\"phoneNumber\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.password' | translate\" for=\"password\" *ngIf=\"isNew$ | async\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Customer\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['customer', 'customFields'])\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"customer-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n\r\n<div class=\"groups\" *ngIf=\"(entity$ | async)?.groups as groups\">\r\n <label class=\"clr-control-label\">{{ 'customer.customer-groups' | translate }}</label>\r\n <ng-container *ngIf=\"groups.length; else noGroups\">\r\n <vdr-chip\r\n *ngFor=\"let group of groups\"\r\n [colorFrom]=\"group.id\"\r\n icon=\"times\"\r\n (iconClick)=\"removeFromGroup(group)\"\r\n >{{ group.name }}</vdr-chip\r\n >\r\n </ng-container>\r\n <ng-template #noGroups>\r\n {{ 'customer.not-a-member-of-any-groups' | translate }}\r\n </ng-template>\r\n <div>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"addToGroup()\"\r\n *vdrIfPermissions=\"'UpdateCustomerGroup'\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-4\">\r\n <h3>{{ 'customer.addresses' | translate }}</h3>\r\n <vdr-address-card\r\n *ngFor=\"let addressForm of getAddressFormControls()\"\r\n [class.to-delete]=\"addressesToDeleteIds.has(addressForm.value.id)\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [isDefaultBilling]=\"defaultBillingAddressId === addressForm.value.id\"\r\n [isDefaultShipping]=\"defaultShippingAddressId === addressForm.value.id\"\r\n [addressForm]=\"addressForm\"\r\n [customFields]=\"addressCustomFields\"\r\n [editable]=\"(['UpdateCustomer'] | hasPermission) && !addressesToDeleteIds.has(addressForm.value.id)\"\r\n (setAsDefaultBilling)=\"setDefaultBillingAddressId($event)\"\r\n (setAsDefaultShipping)=\"setDefaultShippingAddressId($event)\"\r\n (deleteAddress)=\"toggleDeleteAddress($event)\"\r\n ></vdr-address-card>\r\n <button class=\"btn btn-secondary\" (click)=\"addAddress()\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-address' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"clr-col-md-8\">\r\n <h3>{{ 'customer.orders' | translate }}</h3>\r\n <vdr-data-table\r\n [items]=\"orders$ | async\"\r\n [itemsPerPage]=\"ordersPerPage\"\r\n [totalItems]=\"ordersCount$ | async\"\r\n [currentPage]=\"currentOrdersPage\"\r\n [emptyStateLabel]=\"'customer.no-orders-placed' | translate\"\r\n (itemsPerPageChange)=\"setOrderItemsPerPage($event)\"\r\n (pageChange)=\"setOrderCurrentPage($event)\"\r\n >\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left\">{{ order.code }}</td>\r\n <td class=\"left\">{{ order.state }}</td>\r\n <td class=\"left\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left\">{{ order.updatedAt | localeDate: 'medium' }}</td>\r\n <td class=\"right\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n</div>\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-6\">\r\n <vdr-customer-history\r\n [customer]=\"entity$ | async\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNoteToCustomer($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-customer-history>\r\n </div>\r\n</div>\r\n","styles":[".last-login{margin-left:6px;color:var(--color-grey-500)}.to-delete{opacity:.5}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":75,"character":15},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":76,"character":16},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ServerConfigService","line":77,"character":29},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":78,"character":32},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":79,"character":29},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":80,"character":31},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":81,"character":30},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":82,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getAddressFormControls":[{"__symbolic":"method"}],"setDefaultBillingAddressId":[{"__symbolic":"method"}],"setDefaultShippingAddressId":[{"__symbolic":"method"}],"toggleDeleteAddress":[{"__symbolic":"method"}],"addAddress":[{"__symbolic":"method"}],"setOrderItemsPerPage":[{"__symbolic":"method"}],"setOrderCurrentPage":[{"__symbolic":"method"}],"create":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"addToGroup":[{"__symbolic":"method"}],"removeFromGroup":[{"__symbolic":"method"}],"addNoteToCustomer":[{"__symbolic":"method"}],"updateNote":[{"__symbolic":"method"}],"deleteNote":[{"__symbolic":"method"}],"setFormValues":[{"__symbolic":"method"}],"fetchOrdersList":[{"__symbolic":"method"}]}},"CustomerGroupDetailDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":10,"character":1},"arguments":[{"selector":"vdr-customer-group-detail-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":14,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['CreateCustomerGroup', 'UpdateCustomerGroup'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"CustomerGroup\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"form.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"!form.valid\" class=\"btn btn-primary\">\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ServerConfigService","line":22,"character":45},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":22,"character":87}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}]}},"CustomerGroupListComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseListComponent","line":40,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":33,"character":1},"arguments":[{"selector":"vdr-customer-group-list","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":37,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-by-group-name' | translate\"\r\n class=\"search-input ml3\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <vdr-data-table\r\n [class.expanded]=\"activeGroup$ | async\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <ng-template let-group=\"item\">\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-entity-info [entity]=\"group\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"right align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td [class.active]=\"group.id === activeGroupId\" class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","styles":[".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list .active{background-color:var(--clr-global-selection-color)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}vdr-data-table ::ng-deep table{margin-top:0}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":61,"character":29},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":62,"character":37},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":63,"character":30},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":64,"character":22},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":65,"character":26}]}],"ngOnInit":[{"__symbolic":"method"}],"create":[{"__symbolic":"method"}],"delete":[{"__symbolic":"method"}],"update":[{"__symbolic":"method"}],"closeMembers":[{"__symbolic":"method"}],"addToGroup":[{"__symbolic":"method"}],"removeFromGroup":[{"__symbolic":"method"}]}},"CustomerGroupMemberFetchParams":{"__symbolic":"interface"},"CustomerGroupMemberListComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":22,"character":1},"arguments":[{"selector":"vdr-customer-group-member-list","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":26,"character":21},"member":"OnPush"},"template":"<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","styles":[""]}]}],"members":{"members":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":5}}]}],"totalItems":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":5}}]}],"route":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":5}}]}],"selectedMemberIds":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":5}}]}],"selectionChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":35,"character":5}}]}],"fetchParamsChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":36,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"Router","line":44,"character":32},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":44,"character":61}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"setContentsPageNumber":[{"__symbolic":"method"}],"setContentsItemsPerPage":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"setParam":[{"__symbolic":"method"}],"areAllSelected":[{"__symbolic":"method"}],"toggleSelectAll":[{"__symbolic":"method"}],"toggleSelectMember":[{"__symbolic":"method"}]}},"CustomerHistoryComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":9,"character":1},"arguments":[{"selector":"vdr-customer-history","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":13,"character":21},"member":"OnPush"},"template":"<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n","styles":[".entry-list{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}textarea.note{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text{color:var(--color-text-100);white-space:pre-wrap}.address-string{font-size:smaller;color:var(--color-text-200)}\n"]}]}],"members":{"customer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":5}}]}],"history":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":5}}]}],"addNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":18,"character":5}}]}],"updateNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":19,"character":5}}]}],"deleteNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":20,"character":5}}]}],"getDisplayType":[{"__symbolic":"method"}],"getTimelineIcon":[{"__symbolic":"method"}],"isFeatured":[{"__symbolic":"method"}],"getName":[{"__symbolic":"method"}],"addNoteToCustomer":[{"__symbolic":"method"}]}},"CustomerListComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseListComponent","line":22,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"vdr-customer-list","template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-customers-by-email-last-name-postal-code' | translate\"\r\n class=\"search-input ml3\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'customer.customer-type' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-status-label [customer]=\"customer\"></vdr-customer-status-label>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteCustomer(customer)\"\r\n [disabled]=\"!('DeleteCustomer' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","styles":[".search-input{margin-top:6px;min-width:300px}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":27,"character":29},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":28,"character":16},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":29,"character":15},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":30,"character":30},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":31,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"deleteCustomer":[{"__symbolic":"method"}]}},"CustomerStatusLabelComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"vdr-customer-status-label","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":8,"character":21},"member":"OnPush"},"template":"<vdr-chip *ngIf=\"customer.user?.id\">\r\n <ng-container *ngIf=\"customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"verified-user-icon\"></clr-icon>\r\n {{ 'customer.verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"registered-user-icon\"></clr-icon>\r\n {{ 'customer.registered' | translate }}\r\n </ng-container>\r\n</vdr-chip>\r\n<vdr-chip *ngIf=\"!customer.user?.id\">{{ 'customer.guest' | translate }}</vdr-chip>\r\n","styles":[".registered-user-icon{color:var(--color-grey-300)}.verified-user-icon{color:var(--color-success-500)}\n"]}]}],"members":{"customer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":5}}]}]}},"SelectCustomerGroupDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"vdr-select-customer-group-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":10,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n</ng-template>\r\n\r\n<ng-select\r\n [items]=\"groups$ | async\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n bindValue=\"id\"\r\n [(ngModel)]=\"selectedGroupIds\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span aria-hidden=\"true\" class=\"ng-value-icon left\" (click)=\"clear(item)\"> × </span>\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n</ng-select>\r\n\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedGroupIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customer-to-groups-with-count' | translate: {count: selectedGroupIds.length} }}\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":17,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}]}},"CustomerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"SharedModule","line":18,"character":14},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":18,"character":28},"member":"forChild"},"arguments":[{"__symbolic":"reference","name":"customerRoutes"}]}],"declarations":[{"__symbolic":"reference","name":"CustomerListComponent"},{"__symbolic":"reference","name":"CustomerDetailComponent"},{"__symbolic":"reference","name":"CustomerStatusLabelComponent"},{"__symbolic":"reference","name":"AddressCardComponent"},{"__symbolic":"reference","name":"CustomerGroupListComponent"},{"__symbolic":"reference","name":"CustomerGroupDetailDialogComponent"},{"__symbolic":"reference","name":"AddCustomerToGroupDialogComponent"},{"__symbolic":"reference","name":"CustomerGroupMemberListComponent"},{"__symbolic":"reference","name":"SelectCustomerGroupDialogComponent"},{"__symbolic":"reference","name":"CustomerHistoryComponent"},{"__symbolic":"reference","name":"AddressDetailDialogComponent"}],"exports":[{"__symbolic":"reference","name":"AddressCardComponent"}]}]}],"members":{}},"customerRoutes":[{"path":"customers","component":{"__symbolic":"reference","name":"CustomerListComponent"},"pathMatch":"","data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":20,"character":24},"arguments":["breadcrumb.customers"]}}},{"path":"customers/:id","component":{"__symbolic":"reference","name":"CustomerDetailComponent"},"resolve":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"createResolveData","line":26,"character":17},"arguments":[{"__symbolic":"reference","name":"CustomerResolver"}]},"canDeactivate":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"CanDeactivateDetailGuard","line":27,"character":24}],"data":{"breadcrumb":{"__symbolic":"reference","name":"customerBreadcrumb"}}},{"path":"groups","component":{"__symbolic":"reference","name":"CustomerGroupListComponent"},"data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":36,"character":24},"arguments":["breadcrumb.customer-groups"]}}}],"customerBreadcrumb":{"__symbolic":"function","parameters":["data","params"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"detailBreadcrumb","line":42,"character":11},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":46,"character":17,"module":"./customer.routes"}]}},"CustomerResolver":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseEntityResolver","line":9,"character":38},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"Router","line":10,"character":24},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":10,"character":45}]}]},"statics":{"ɵprov":{}}}},"origins":{"AddCustomerToGroupDialogComponent":"./components/add-customer-to-group-dialog/add-customer-to-group-dialog.component","AddressCardComponent":"./components/address-card/address-card.component","AddressDetailDialogComponent":"./components/address-detail-dialog/address-detail-dialog.component","CustomerDetailComponent":"./components/customer-detail/customer-detail.component","CustomerGroupDetailDialogComponent":"./components/customer-group-detail-dialog/customer-group-detail-dialog.component","CustomerGroupListComponent":"./components/customer-group-list/customer-group-list.component","CustomerGroupMemberFetchParams":"./components/customer-group-member-list/customer-group-member-list.component","CustomerGroupMemberListComponent":"./components/customer-group-member-list/customer-group-member-list.component","CustomerHistoryComponent":"./components/customer-history/customer-history.component","CustomerListComponent":"./components/customer-list/customer-list.component","CustomerStatusLabelComponent":"./components/customer-status-label/customer-status-label.component","SelectCustomerGroupDialogComponent":"./components/select-customer-group-dialog/select-customer-group-dialog.component","CustomerModule":"./customer.module","customerRoutes":"./customer.routes","customerBreadcrumb":"./customer.routes","CustomerResolver":"./providers/routing/customer-resolver"},"importAs":"@vendure/admin-ui/customer"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"AddCustomerToGroupDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"vdr-add-customer-to-group-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":12,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n {{ 'customer.add-customers-to-group-with-name' | translate: {groupName: group.name} }}\r\n</ng-template>\r\n\r\n<vdr-customer-group-member-list\r\n [members]=\"customers$ | async\"\r\n [totalItems]=\"customersTotal$ | async\"\r\n [route]=\"route\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n>\r\n\r\n</vdr-customer-group-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedCustomerIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customers-to-group-with-count' | translate: {count: selectedCustomerIds.length} }}\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":27,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}]}},"AddressCardComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":18,"character":1},"arguments":[{"selector":"vdr-address-card","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":22,"character":21},"member":"OnPush"},"template":"<div class=\"card\" *ngIf=\"addressForm.value as address\">\r\n <div class=\"card-header\">\r\n <div class=\"address-title\">\r\n <span class=\"street-line\" *ngIf=\"address.streetLine1\">{{ address.streetLine1 }},</span>\r\n {{ address.countryCode }}\r\n </div>\r\n <div class=\"default-controls\">\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultShipping\">\r\n <clr-icon shape=\"truck\"></clr-icon>\r\n {{ 'customer.default-shipping-address' | translate }}\r\n </vdr-chip>\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultBilling\">\r\n <clr-icon shape=\"credit-card\"></clr-icon>\r\n {{ 'customer.default-billing-address' | translate }}\r\n </vdr-chip>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-formatted-address [address]=\"address\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <vdr-entity-info [entity]=\"address\"></vdr-entity-info>\r\n <ng-container *ngIf=\"editable\">\r\n <button class=\"btn btn-sm btn-link\" (click)=\"editAddress()\">\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-sm btn-link\" vdrDropdownTrigger>\r\n {{ 'common.more' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultShipping\"\r\n (click)=\"setAsDefaultShippingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-shipping-address' | translate }}\r\n </button>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultBilling\"\r\n (click)=\"setAsDefaultBillingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-billing-address' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"delete()\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","styles":[":host{display:block;max-width:360px}clr-input-container{margin-bottom:12px}.defaul-controls{display:flex}.is-default{margin:0;color:var(--color-success-500)}\n"]}]}],"members":{"addressForm":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":5}}]}],"customFields":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":5}}]}],"availableCountries":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":5}}]}],"isDefaultBilling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":5}}]}],"isDefaultShipping":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":5}}]}],"editable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":5}}]}],"setAsDefaultShipping":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":5}}]}],"setAsDefaultBilling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":5}}]}],"deleteAddress":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":33,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":36,"character":38},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":36,"character":76}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"getCountryName":[{"__symbolic":"method"}],"setAsDefaultBillingAddress":[{"__symbolic":"method"}],"setAsDefaultShippingAddress":[{"__symbolic":"method"}],"delete":[{"__symbolic":"method"}],"editAddress":[{"__symbolic":"method"}]}},"AddressDetailDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"vdr-address-detail-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":8,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n <span *ngIf=\"addressForm.get('streetLine1')?.value as streetLine1\">{{ streetLine1 }},</span>\r\n <span *ngIf=\"addressForm.get('countryCode')?.value as countryCode\"> {{ countryCode }}</span>\r\n</ng-template>\r\n\r\n<vdr-address-form\r\n [formGroup]=\"addressForm\"\r\n [availableCountries]=\"availableCountries\"\r\n [customFields]=\"customFields\"\r\n></vdr-address-form>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"save()\"\r\n [disabled]=\"!addressForm.valid || !addressForm.touched\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n","styles":["clr-input-container{margin-bottom:12px}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":16,"character":40}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}]}},"CustomerDetailComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseDetailComponent","line":55,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":48,"character":1},"arguments":[{"selector":"vdr-customer-detail","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":52,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-customer-status-label [customer]=\"entity$ | async\"></vdr-customer-status-label>\r\n <div\r\n class=\"last-login\"\r\n *ngIf=\"(entity$ | async)?.user?.lastLogin as lastLogin\"\r\n [title]=\"lastLogin | localeDate: 'medium'\"\r\n >\r\n {{ 'customer.last-login' | translate }}: {{ lastLogin | timeAgo }}\r\n </div>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-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]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"'UpdateCustomer'\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\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\r\n<form class=\"form\" [formGroup]=\"detailForm.get('customer')\">\r\n <vdr-form-field [label]=\"'customer.title' | translate\" for=\"title\" [readOnlyToggle]=\"!(isNew$ | async)\">\r\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.first-name' | translate\"\r\n for=\"firstName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.last-name' | translate\"\r\n for=\"lastName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.email-address' | translate\"\r\n for=\"emailAddress\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.phone-number' | translate\"\r\n for=\"phoneNumber\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.password' | translate\" for=\"password\" *ngIf=\"isNew$ | async\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Customer\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['customer', 'customFields'])\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"customer-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n\r\n<div class=\"groups\" *ngIf=\"(entity$ | async)?.groups as groups\">\r\n <label class=\"clr-control-label\">{{ 'customer.customer-groups' | translate }}</label>\r\n <ng-container *ngIf=\"groups.length; else noGroups\">\r\n <vdr-chip\r\n *ngFor=\"let group of groups\"\r\n [colorFrom]=\"group.id\"\r\n icon=\"times\"\r\n (iconClick)=\"removeFromGroup(group)\"\r\n >{{ group.name }}</vdr-chip\r\n >\r\n </ng-container>\r\n <ng-template #noGroups>\r\n {{ 'customer.not-a-member-of-any-groups' | translate }}\r\n </ng-template>\r\n <div>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"addToGroup()\"\r\n *vdrIfPermissions=\"'UpdateCustomerGroup'\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-4\">\r\n <h3>{{ 'customer.addresses' | translate }}</h3>\r\n <vdr-address-card\r\n *ngFor=\"let addressForm of getAddressFormControls()\"\r\n [class.to-delete]=\"addressesToDeleteIds.has(addressForm.value.id)\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [isDefaultBilling]=\"defaultBillingAddressId === addressForm.value.id\"\r\n [isDefaultShipping]=\"defaultShippingAddressId === addressForm.value.id\"\r\n [addressForm]=\"addressForm\"\r\n [customFields]=\"addressCustomFields\"\r\n [editable]=\"(['UpdateCustomer'] | hasPermission) && !addressesToDeleteIds.has(addressForm.value.id)\"\r\n (setAsDefaultBilling)=\"setDefaultBillingAddressId($event)\"\r\n (setAsDefaultShipping)=\"setDefaultShippingAddressId($event)\"\r\n (deleteAddress)=\"toggleDeleteAddress($event)\"\r\n ></vdr-address-card>\r\n <button class=\"btn btn-secondary\" (click)=\"addAddress()\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-address' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"clr-col-md-8\">\r\n <h3>{{ 'customer.orders' | translate }}</h3>\r\n <vdr-data-table\r\n [items]=\"orders$ | async\"\r\n [itemsPerPage]=\"ordersPerPage\"\r\n [totalItems]=\"ordersCount$ | async\"\r\n [currentPage]=\"currentOrdersPage\"\r\n [emptyStateLabel]=\"'customer.no-orders-placed' | translate\"\r\n (itemsPerPageChange)=\"setOrderItemsPerPage($event)\"\r\n (pageChange)=\"setOrderCurrentPage($event)\"\r\n >\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left\">{{ order.code }}</td>\r\n <td class=\"left\">{{ order.state }}</td>\r\n <td class=\"left\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left\">{{ order.updatedAt | localeDate: 'medium' }}</td>\r\n <td class=\"right\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n</div>\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-6\">\r\n <vdr-customer-history\r\n [customer]=\"entity$ | async\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNoteToCustomer($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-customer-history>\r\n </div>\r\n</div>\r\n","styles":[".last-login{margin-left:6px;color:var(--color-grey-500)}.to-delete{opacity:.5}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":75,"character":15},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":76,"character":16},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ServerConfigService","line":77,"character":29},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":78,"character":32},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":79,"character":29},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":80,"character":31},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":81,"character":30},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":82,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getAddressFormControls":[{"__symbolic":"method"}],"setDefaultBillingAddressId":[{"__symbolic":"method"}],"setDefaultShippingAddressId":[{"__symbolic":"method"}],"toggleDeleteAddress":[{"__symbolic":"method"}],"addAddress":[{"__symbolic":"method"}],"setOrderItemsPerPage":[{"__symbolic":"method"}],"setOrderCurrentPage":[{"__symbolic":"method"}],"create":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"addToGroup":[{"__symbolic":"method"}],"removeFromGroup":[{"__symbolic":"method"}],"addNoteToCustomer":[{"__symbolic":"method"}],"updateNote":[{"__symbolic":"method"}],"deleteNote":[{"__symbolic":"method"}],"setFormValues":[{"__symbolic":"method"}],"fetchOrdersList":[{"__symbolic":"method"}]}},"CustomerGroupDetailDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":10,"character":1},"arguments":[{"selector":"vdr-customer-group-detail-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":14,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['CreateCustomerGroup', 'UpdateCustomerGroup'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"CustomerGroup\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"form.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"!form.valid\" class=\"btn btn-primary\">\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ServerConfigService","line":22,"character":45},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":22,"character":87}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}]}},"CustomerGroupListComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseListComponent","line":40,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":33,"character":1},"arguments":[{"selector":"vdr-customer-group-list","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":37,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-by-group-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <vdr-data-table\r\n [class.expanded]=\"activeGroup$ | async\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <ng-template let-group=\"item\">\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-entity-info [entity]=\"group\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"right align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td [class.active]=\"group.id === activeGroupId\" class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate: { count: selectedCustomerIds.length } }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","styles":[".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list .active{background-color:var(--clr-global-selection-color)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}vdr-data-table ::ng-deep table{margin-top:0}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":61,"character":29},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":62,"character":37},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":63,"character":30},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":64,"character":22},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":65,"character":26}]}],"ngOnInit":[{"__symbolic":"method"}],"create":[{"__symbolic":"method"}],"delete":[{"__symbolic":"method"}],"update":[{"__symbolic":"method"}],"closeMembers":[{"__symbolic":"method"}],"addToGroup":[{"__symbolic":"method"}],"removeFromGroup":[{"__symbolic":"method"}]}},"CustomerGroupMemberFetchParams":{"__symbolic":"interface"},"CustomerGroupMemberListComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":26,"character":1},"arguments":[{"selector":"vdr-customer-group-member-list","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":30,"character":21},"member":"OnPush"},"template":"<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","styles":[""]}]}],"members":{"members":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":5}}]}],"totalItems":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":5}}]}],"route":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":5}}]}],"selectedMemberIds":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":5}}]}],"selectionChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":37,"character":5}}]}],"fetchParamsChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":38,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"Router","line":46,"character":32},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":46,"character":61}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"setContentsPageNumber":[{"__symbolic":"method"}],"setContentsItemsPerPage":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"setParam":[{"__symbolic":"method"}],"areAllSelected":[{"__symbolic":"method"}],"toggleSelectAll":[{"__symbolic":"method"}],"toggleSelectMember":[{"__symbolic":"method"}]}},"CustomerHistoryComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":9,"character":1},"arguments":[{"selector":"vdr-customer-history","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":13,"character":21},"member":"OnPush"},"template":"<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n","styles":[".entry-list{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}textarea.note{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text{color:var(--color-text-100);white-space:pre-wrap}.address-string{font-size:smaller;color:var(--color-text-200)}\n"]}]}],"members":{"customer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":5}}]}],"history":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":5}}]}],"addNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":18,"character":5}}]}],"updateNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":19,"character":5}}]}],"deleteNote":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":20,"character":5}}]}],"getDisplayType":[{"__symbolic":"method"}],"getTimelineIcon":[{"__symbolic":"method"}],"isFeatured":[{"__symbolic":"method"}],"getName":[{"__symbolic":"method"}],"addNoteToCustomer":[{"__symbolic":"method"}]}},"CustomerListComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseListComponent","line":22,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"vdr-customer-list","template":"<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-customers-by-email-last-name-postal-code' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'customer.customer-type' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-status-label [customer]=\"customer\"></vdr-customer-status-label>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteCustomer(customer)\"\r\n [disabled]=\"!('DeleteCustomer' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","styles":[".search-input{margin-top:6px;min-width:300px}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":27,"character":29},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":28,"character":16},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":29,"character":15},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"ModalService","line":30,"character":30},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"NotificationService","line":31,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"deleteCustomer":[{"__symbolic":"method"}]}},"CustomerStatusLabelComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"vdr-customer-status-label","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":8,"character":21},"member":"OnPush"},"template":"<vdr-chip *ngIf=\"customer.user?.id\">\r\n <ng-container *ngIf=\"customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"verified-user-icon\"></clr-icon>\r\n {{ 'customer.verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"registered-user-icon\"></clr-icon>\r\n {{ 'customer.registered' | translate }}\r\n </ng-container>\r\n</vdr-chip>\r\n<vdr-chip *ngIf=\"!customer.user?.id\">{{ 'customer.guest' | translate }}</vdr-chip>\r\n","styles":[".registered-user-icon{color:var(--color-grey-300)}.verified-user-icon{color:var(--color-success-500)}\n"]}]}],"members":{"customer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":5}}]}]}},"SelectCustomerGroupDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"vdr-select-customer-group-dialog","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":10,"character":21},"member":"OnPush"},"template":"<ng-template vdrDialogTitle>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n</ng-template>\r\n\r\n<ng-select\r\n [items]=\"groups$ | async\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n bindValue=\"id\"\r\n [(ngModel)]=\"selectedGroupIds\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span aria-hidden=\"true\" class=\"ng-value-icon left\" (click)=\"clear(item)\"> × </span>\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n</ng-select>\r\n\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedGroupIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customer-to-groups-with-count' | translate: {count: selectedGroupIds.length} }}\r\n </button>\r\n</ng-template>\r\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":17,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}]}},"CustomerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"SharedModule","line":18,"character":14},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":18,"character":28},"member":"forChild"},"arguments":[{"__symbolic":"reference","name":"customerRoutes"}]}],"declarations":[{"__symbolic":"reference","name":"CustomerListComponent"},{"__symbolic":"reference","name":"CustomerDetailComponent"},{"__symbolic":"reference","name":"CustomerStatusLabelComponent"},{"__symbolic":"reference","name":"AddressCardComponent"},{"__symbolic":"reference","name":"CustomerGroupListComponent"},{"__symbolic":"reference","name":"CustomerGroupDetailDialogComponent"},{"__symbolic":"reference","name":"AddCustomerToGroupDialogComponent"},{"__symbolic":"reference","name":"CustomerGroupMemberListComponent"},{"__symbolic":"reference","name":"SelectCustomerGroupDialogComponent"},{"__symbolic":"reference","name":"CustomerHistoryComponent"},{"__symbolic":"reference","name":"AddressDetailDialogComponent"}],"exports":[{"__symbolic":"reference","name":"AddressCardComponent"}]}]}],"members":{}},"customerRoutes":[{"path":"customers","component":{"__symbolic":"reference","name":"CustomerListComponent"},"pathMatch":"","data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":20,"character":24},"arguments":["breadcrumb.customers"]}}},{"path":"customers/:id","component":{"__symbolic":"reference","name":"CustomerDetailComponent"},"resolve":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"createResolveData","line":26,"character":17},"arguments":[{"__symbolic":"reference","name":"CustomerResolver"}]},"canDeactivate":[{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"CanDeactivateDetailGuard","line":27,"character":24}],"data":{"breadcrumb":{"__symbolic":"reference","name":"customerBreadcrumb"}}},{"path":"groups","component":{"__symbolic":"reference","name":"CustomerGroupListComponent"},"data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":36,"character":24},"arguments":["breadcrumb.customer-groups"]}}}],"customerBreadcrumb":{"__symbolic":"function","parameters":["data","params"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"detailBreadcrumb","line":42,"character":11},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":46,"character":17,"module":"./customer.routes"}]}},"CustomerResolver":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"BaseEntityResolver","line":9,"character":38},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"Router","line":10,"character":24},{"__symbolic":"reference","module":"@vendure/admin-ui/core","name":"DataService","line":10,"character":45}]}]},"statics":{"ɵprov":{}}}},"origins":{"AddCustomerToGroupDialogComponent":"./components/add-customer-to-group-dialog/add-customer-to-group-dialog.component","AddressCardComponent":"./components/address-card/address-card.component","AddressDetailDialogComponent":"./components/address-detail-dialog/address-detail-dialog.component","CustomerDetailComponent":"./components/customer-detail/customer-detail.component","CustomerGroupDetailDialogComponent":"./components/customer-group-detail-dialog/customer-group-detail-dialog.component","CustomerGroupListComponent":"./components/customer-group-list/customer-group-list.component","CustomerGroupMemberFetchParams":"./components/customer-group-member-list/customer-group-member-list.component","CustomerGroupMemberListComponent":"./components/customer-group-member-list/customer-group-member-list.component","CustomerHistoryComponent":"./components/customer-history/customer-history.component","CustomerListComponent":"./components/customer-list/customer-list.component","CustomerStatusLabelComponent":"./components/customer-status-label/customer-status-label.component","SelectCustomerGroupDialogComponent":"./components/select-customer-group-dialog/select-customer-group-dialog.component","CustomerModule":"./customer.module","customerRoutes":"./customer.routes","customerBreadcrumb":"./customer.routes","CustomerResolver":"./providers/routing/customer-resolver"},"importAs":"@vendure/admin-ui/customer"}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { RouterModule } from '@angular/router';
|
|
3
|
-
import { SharedModule } from '@vendure/admin-ui/core';
|
|
3
|
+
import { BulkActionRegistryService, SharedModule } from '@vendure/admin-ui/core';
|
|
4
4
|
import { catalogRoutes } from './catalog.routes';
|
|
5
5
|
import { ApplyFacetDialogComponent } from './components/apply-facet-dialog/apply-facet-dialog.component';
|
|
6
6
|
import { AssetDetailComponent } from './components/asset-detail/asset-detail.component';
|
|
7
7
|
import { AssetListComponent } from './components/asset-list/asset-list.component';
|
|
8
8
|
import { AssetsComponent } from './components/assets/assets.component';
|
|
9
9
|
import { AssignProductsToChannelDialogComponent } from './components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';
|
|
10
|
+
import { AssignToChannelDialogComponent } from './components/assign-to-channel-dialog/assign-to-channel-dialog.component';
|
|
11
|
+
import { BulkAddFacetValuesDialogComponent } from './components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component';
|
|
10
12
|
import { CollectionContentsComponent } from './components/collection-contents/collection-contents.component';
|
|
11
13
|
import { CollectionDetailComponent } from './components/collection-detail/collection-detail.component';
|
|
14
|
+
import { assignCollectionsToChannelBulkAction, deleteCollectionsBulkAction, removeCollectionsFromChannelBulkAction, } from './components/collection-list/collection-list-bulk-actions';
|
|
12
15
|
import { CollectionListComponent } from './components/collection-list/collection-list.component';
|
|
13
16
|
import { CollectionTreeNodeComponent } from './components/collection-tree/collection-tree-node.component';
|
|
14
17
|
import { CollectionTreeComponent } from './components/collection-tree/collection-tree.component';
|
|
15
18
|
import { ConfirmVariantDeletionDialogComponent } from './components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component';
|
|
16
19
|
import { FacetDetailComponent } from './components/facet-detail/facet-detail.component';
|
|
20
|
+
import { assignFacetsToChannelBulkAction, deleteFacetsBulkAction, removeFacetsFromChannelBulkAction, } from './components/facet-list/facet-list-bulk-actions';
|
|
17
21
|
import { FacetListComponent } from './components/facet-list/facet-list.component';
|
|
18
22
|
import { GenerateProductVariantsComponent } from './components/generate-product-variants/generate-product-variants.component';
|
|
19
23
|
import { OptionValueInputComponent } from './components/option-value-input/option-value-input.component';
|
|
20
24
|
import { ProductDetailComponent } from './components/product-detail/product-detail.component';
|
|
25
|
+
import { assignFacetValuesToProductsBulkAction, assignProductsToChannelBulkAction, deleteProductsBulkAction, removeProductsFromChannelBulkAction, } from './components/product-list/product-list-bulk-actions';
|
|
21
26
|
import { ProductListComponent } from './components/product-list/product-list.component';
|
|
22
27
|
import { ProductOptionsEditorComponent } from './components/product-options-editor/product-options-editor.component';
|
|
23
28
|
import { ProductVariantsEditorComponent } from './components/product-variants-editor/product-variants-editor.component';
|
|
@@ -49,8 +54,23 @@ const CATALOG_COMPONENTS = [
|
|
|
49
54
|
AssetDetailComponent,
|
|
50
55
|
ConfirmVariantDeletionDialogComponent,
|
|
51
56
|
ProductOptionsEditorComponent,
|
|
57
|
+
BulkAddFacetValuesDialogComponent,
|
|
58
|
+
AssignToChannelDialogComponent,
|
|
52
59
|
];
|
|
53
60
|
export class CatalogModule {
|
|
61
|
+
constructor(bulkActionRegistryService) {
|
|
62
|
+
this.bulkActionRegistryService = bulkActionRegistryService;
|
|
63
|
+
bulkActionRegistryService.registerBulkAction(assignFacetValuesToProductsBulkAction);
|
|
64
|
+
bulkActionRegistryService.registerBulkAction(assignProductsToChannelBulkAction);
|
|
65
|
+
bulkActionRegistryService.registerBulkAction(removeProductsFromChannelBulkAction);
|
|
66
|
+
bulkActionRegistryService.registerBulkAction(deleteProductsBulkAction);
|
|
67
|
+
bulkActionRegistryService.registerBulkAction(assignFacetsToChannelBulkAction);
|
|
68
|
+
bulkActionRegistryService.registerBulkAction(removeFacetsFromChannelBulkAction);
|
|
69
|
+
bulkActionRegistryService.registerBulkAction(deleteFacetsBulkAction);
|
|
70
|
+
bulkActionRegistryService.registerBulkAction(assignCollectionsToChannelBulkAction);
|
|
71
|
+
bulkActionRegistryService.registerBulkAction(removeCollectionsFromChannelBulkAction);
|
|
72
|
+
bulkActionRegistryService.registerBulkAction(deleteCollectionsBulkAction);
|
|
73
|
+
}
|
|
54
74
|
}
|
|
55
75
|
CatalogModule.decorators = [
|
|
56
76
|
{ type: NgModule, args: [{
|
|
@@ -59,4 +79,7 @@ CatalogModule.decorators = [
|
|
|
59
79
|
declarations: [...CATALOG_COMPONENTS],
|
|
60
80
|
},] }
|
|
61
81
|
];
|
|
62
|
-
|
|
82
|
+
CatalogModule.ctorParameters = () => [
|
|
83
|
+
{ type: BulkActionRegistryService }
|
|
84
|
+
];
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NhdGFsb2cubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDRGQUE0RixDQUFDO0FBQ3BKLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQzFILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQ3JJLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3ZHLE9BQU8sRUFDSCxvQ0FBb0MsRUFDcEMsMkJBQTJCLEVBQzNCLHNDQUFzQyxHQUN6QyxNQUFNLDJEQUEyRCxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzFHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQy9JLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3hGLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0Isc0JBQXNCLEVBQ3RCLGlDQUFpQyxHQUNwQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQzlILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFDSCxxQ0FBcUMsRUFDckMsaUNBQWlDLEVBQ2pDLHdCQUF3QixFQUN4QixtQ0FBbUMsR0FDdEMsTUFBTSxxREFBcUQsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNySCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUUvRyxNQUFNLGtCQUFrQixHQUFHO0lBQ3ZCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixnQ0FBZ0M7SUFDaEMsNEJBQTRCO0lBQzVCLHlCQUF5QjtJQUN6QixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLDJCQUEyQjtJQUMzQix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QiwyQkFBMkI7SUFDM0IsMkJBQTJCO0lBQzNCLDZCQUE2QjtJQUM3Qix5QkFBeUI7SUFDekIsa0NBQWtDO0lBQ2xDLDhCQUE4QjtJQUM5QixzQ0FBc0M7SUFDdEMsb0JBQW9CO0lBQ3BCLHFDQUFxQztJQUNyQyw2QkFBNkI7SUFDN0IsaUNBQWlDO0lBQ2pDLDhCQUE4QjtDQUNqQyxDQUFDO0FBT0YsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFBb0IseUJBQW9EO1FBQXBELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEUseUJBQXlCLENBQUMsa0JBQWtCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNwRix5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDbEYseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV2RSx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzlFLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVyRSx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ25GLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDckYseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM5RSxDQUFDOzs7WUFuQkosUUFBUSxTQUFDO2dCQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO2dCQUNoQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO2FBQ3hDOzs7WUE3RVEseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnVsa0FjdGlvblJlZ2lzdHJ5U2VydmljZSwgU2hhcmVkTW9kdWxlIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBjYXRhbG9nUm91dGVzIH0gZnJvbSAnLi9jYXRhbG9nLnJvdXRlcyc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXBwbHktZmFjZXQtZGlhbG9nL2FwcGx5LWZhY2V0LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3NldERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hc3NldC1kZXRhaWwvYXNzZXQtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2V0TGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hc3NldC1saXN0L2Fzc2V0LWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNzZXRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Fzc2V0cy9hc3NldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXNzaWduLXByb2R1Y3RzLXRvLWNoYW5uZWwtZGlhbG9nL2Fzc2lnbi1wcm9kdWN0cy10by1jaGFubmVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3NpZ25Ub0NoYW5uZWxEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXNzaWduLXRvLWNoYW5uZWwtZGlhbG9nL2Fzc2lnbi10by1jaGFubmVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdWxrQWRkRmFjZXRWYWx1ZXNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnVsay1hZGQtZmFjZXQtdmFsdWVzLWRpYWxvZy9idWxrLWFkZC1mYWNldC12YWx1ZXMtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2xsZWN0aW9uLWNvbnRlbnRzL2NvbGxlY3Rpb24tY29udGVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2xsZWN0aW9uLWRldGFpbC9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgYXNzaWduQ29sbGVjdGlvbnNUb0NoYW5uZWxCdWxrQWN0aW9uLFxyXG4gICAgZGVsZXRlQ29sbGVjdGlvbnNCdWxrQWN0aW9uLFxyXG4gICAgcmVtb3ZlQ29sbGVjdGlvbnNGcm9tQ2hhbm5lbEJ1bGtBY3Rpb24sXHJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2NvbGxlY3Rpb24tbGlzdC9jb2xsZWN0aW9uLWxpc3QtYnVsay1hY3Rpb25zJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sbGVjdGlvbi1saXN0L2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sbGVjdGlvbi10cmVlL2NvbGxlY3Rpb24tdHJlZS1ub2RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25UcmVlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbGxlY3Rpb24tdHJlZS9jb2xsZWN0aW9uLXRyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29uZmlybVZhcmlhbnREZWxldGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25maXJtLXZhcmlhbnQtZGVsZXRpb24tZGlhbG9nL2NvbmZpcm0tdmFyaWFudC1kZWxldGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmFjZXREZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmFjZXQtZGV0YWlsL2ZhY2V0LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgYXNzaWduRmFjZXRzVG9DaGFubmVsQnVsa0FjdGlvbixcclxuICAgIGRlbGV0ZUZhY2V0c0J1bGtBY3Rpb24sXHJcbiAgICByZW1vdmVGYWNldHNGcm9tQ2hhbm5lbEJ1bGtBY3Rpb24sXHJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2ZhY2V0LWxpc3QvZmFjZXQtbGlzdC1idWxrLWFjdGlvbnMnO1xyXG5pbXBvcnQgeyBGYWNldExpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmFjZXQtbGlzdC9mYWNldC1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdlbmVyYXRlUHJvZHVjdFZhcmlhbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMvZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPcHRpb25WYWx1ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL29wdGlvbi12YWx1ZS1pbnB1dC9vcHRpb24tdmFsdWUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgYXNzaWduRmFjZXRWYWx1ZXNUb1Byb2R1Y3RzQnVsa0FjdGlvbixcclxuICAgIGFzc2lnblByb2R1Y3RzVG9DaGFubmVsQnVsa0FjdGlvbixcclxuICAgIGRlbGV0ZVByb2R1Y3RzQnVsa0FjdGlvbixcclxuICAgIHJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWxCdWxrQWN0aW9uLFxyXG59IGZyb20gJy4vY29tcG9uZW50cy9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LWJ1bGstYWN0aW9ucyc7XHJcbmltcG9ydCB7IFByb2R1Y3RMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2R1Y3QtbGlzdC9wcm9kdWN0LWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZHVjdE9wdGlvbnNFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByb2R1Y3RWYXJpYW50c0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnRzLWVkaXRvci9wcm9kdWN0LXZhcmlhbnRzLWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcm9kdWN0VmFyaWFudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2R1Y3QtdmFyaWFudHMtbGlzdC9wcm9kdWN0LXZhcmlhbnRzLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZHVjdFZhcmlhbnRzVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvZHVjdC12YXJpYW50cy10YWJsZS9wcm9kdWN0LXZhcmlhbnRzLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVwZGF0ZVByb2R1Y3RPcHRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXBkYXRlLXByb2R1Y3Qtb3B0aW9uLWRpYWxvZy91cGRhdGUtcHJvZHVjdC1vcHRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZhcmlhbnRQcmljZURldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy92YXJpYW50LXByaWNlLWRldGFpbC92YXJpYW50LXByaWNlLWRldGFpbC5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgQ0FUQUxPR19DT01QT05FTlRTID0gW1xyXG4gICAgUHJvZHVjdExpc3RDb21wb25lbnQsXHJcbiAgICBQcm9kdWN0RGV0YWlsQ29tcG9uZW50LFxyXG4gICAgRmFjZXRMaXN0Q29tcG9uZW50LFxyXG4gICAgRmFjZXREZXRhaWxDb21wb25lbnQsXHJcbiAgICBHZW5lcmF0ZVByb2R1Y3RWYXJpYW50c0NvbXBvbmVudCxcclxuICAgIFByb2R1Y3RWYXJpYW50c0xpc3RDb21wb25lbnQsXHJcbiAgICBBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgQXNzZXRMaXN0Q29tcG9uZW50LFxyXG4gICAgQXNzZXRzQ29tcG9uZW50LFxyXG4gICAgVmFyaWFudFByaWNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ29sbGVjdGlvbkxpc3RDb21wb25lbnQsXHJcbiAgICBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ29sbGVjdGlvblRyZWVDb21wb25lbnQsXHJcbiAgICBDb2xsZWN0aW9uVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICBDb2xsZWN0aW9uQ29udGVudHNDb21wb25lbnQsXHJcbiAgICBQcm9kdWN0VmFyaWFudHNUYWJsZUNvbXBvbmVudCxcclxuICAgIE9wdGlvblZhbHVlSW5wdXRDb21wb25lbnQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgUHJvZHVjdFZhcmlhbnRzRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQsXHJcbiAgICBBc3NldERldGFpbENvbXBvbmVudCxcclxuICAgIENvbmZpcm1WYXJpYW50RGVsZXRpb25EaWFsb2dDb21wb25lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uc0VkaXRvckNvbXBvbmVudCxcclxuICAgIEJ1bGtBZGRGYWNldFZhbHVlc0RpYWxvZ0NvbXBvbmVudCxcclxuICAgIEFzc2lnblRvQ2hhbm5lbERpYWxvZ0NvbXBvbmVudCxcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbU2hhcmVkTW9kdWxlLCBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoY2F0YWxvZ1JvdXRlcyldLFxyXG4gICAgZXhwb3J0czogWy4uLkNBVEFMT0dfQ09NUE9ORU5UU10sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5DQVRBTE9HX0NPTVBPTkVOVFNdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ01vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1bGtBY3Rpb25SZWdpc3RyeVNlcnZpY2U6IEJ1bGtBY3Rpb25SZWdpc3RyeVNlcnZpY2UpIHtcclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihhc3NpZ25GYWNldFZhbHVlc1RvUHJvZHVjdHNCdWxrQWN0aW9uKTtcclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihhc3NpZ25Qcm9kdWN0c1RvQ2hhbm5lbEJ1bGtBY3Rpb24pO1xyXG4gICAgICAgIGJ1bGtBY3Rpb25SZWdpc3RyeVNlcnZpY2UucmVnaXN0ZXJCdWxrQWN0aW9uKHJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWxCdWxrQWN0aW9uKTtcclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihkZWxldGVQcm9kdWN0c0J1bGtBY3Rpb24pO1xyXG5cclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihhc3NpZ25GYWNldHNUb0NoYW5uZWxCdWxrQWN0aW9uKTtcclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihyZW1vdmVGYWNldHNGcm9tQ2hhbm5lbEJ1bGtBY3Rpb24pO1xyXG4gICAgICAgIGJ1bGtBY3Rpb25SZWdpc3RyeVNlcnZpY2UucmVnaXN0ZXJCdWxrQWN0aW9uKGRlbGV0ZUZhY2V0c0J1bGtBY3Rpb24pO1xyXG5cclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihhc3NpZ25Db2xsZWN0aW9uc1RvQ2hhbm5lbEJ1bGtBY3Rpb24pO1xyXG4gICAgICAgIGJ1bGtBY3Rpb25SZWdpc3RyeVNlcnZpY2UucmVnaXN0ZXJCdWxrQWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25zRnJvbUNoYW5uZWxCdWxrQWN0aW9uKTtcclxuICAgICAgICBidWxrQWN0aW9uUmVnaXN0cnlTZXJ2aWNlLnJlZ2lzdGVyQnVsa0FjdGlvbihkZWxldGVDb2xsZWN0aW9uc0J1bGtBY3Rpb24pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|