@vendure/admin-ui 1.0.0-beta.9 → 1.0.3

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.
Files changed (138) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +37 -17
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-catalog.umd.min.js +2 -2
  4. package/bundles/vendure-admin-ui-catalog.umd.min.js.map +1 -1
  5. package/bundles/vendure-admin-ui-core.umd.js +233 -38
  6. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  7. package/bundles/vendure-admin-ui-core.umd.min.js +2 -2
  8. package/bundles/vendure-admin-ui-core.umd.min.js.map +1 -1
  9. package/bundles/vendure-admin-ui-customer.umd.js +8 -6
  10. package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
  11. package/bundles/vendure-admin-ui-customer.umd.min.js +2 -2
  12. package/bundles/vendure-admin-ui-customer.umd.min.js.map +1 -1
  13. package/bundles/vendure-admin-ui-order.umd.js +113 -39
  14. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  15. package/bundles/vendure-admin-ui-order.umd.min.js +2 -2
  16. package/bundles/vendure-admin-ui-order.umd.min.js.map +1 -1
  17. package/bundles/vendure-admin-ui-settings.umd.js +71 -46
  18. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  19. package/bundles/vendure-admin-ui-settings.umd.min.js +2 -2
  20. package/bundles/vendure-admin-ui-settings.umd.min.js.map +1 -1
  21. package/bundles/vendure-admin-ui-system.umd.js +1 -1
  22. package/bundles/vendure-admin-ui-system.umd.js.map +1 -1
  23. package/bundles/vendure-admin-ui-system.umd.min.js +1 -1
  24. package/bundles/vendure-admin-ui-system.umd.min.js.map +1 -1
  25. package/catalog/components/collection-detail/collection-detail.component.d.ts +2 -1
  26. package/catalog/components/facet-detail/facet-detail.component.d.ts +2 -1
  27. package/catalog/components/product-assets/product-assets.component.d.ts +7 -2
  28. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +2 -1
  29. package/catalog/components/product-variants-table/product-variants-table.component.d.ts +2 -1
  30. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  31. package/core/common/generated-types.d.ts +242 -148
  32. package/core/common/version.d.ts +1 -1
  33. package/core/components/main-nav/main-nav.component.d.ts +1 -1
  34. package/core/shared/components/channel-assignment-control/channel-assignment-control.component.d.ts +3 -2
  35. package/core/shared/components/product-selector/product-selector.component.d.ts +1 -1
  36. package/core/shared/pipes/has-permission.pipe.d.ts +3 -2
  37. package/core/vendure-admin-ui-core.metadata.json +1 -1
  38. package/customer/components/address-card/address-card.component.d.ts +1 -0
  39. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  40. package/esm2015/catalog/components/asset-detail/asset-detail.component.js +2 -2
  41. package/esm2015/catalog/components/asset-list/asset-list.component.js +2 -2
  42. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +4 -3
  43. package/esm2015/catalog/components/collection-list/collection-list.component.js +2 -2
  44. package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +5 -6
  45. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +4 -3
  46. package/esm2015/catalog/components/facet-list/facet-list.component.js +2 -2
  47. package/esm2015/catalog/components/product-assets/product-assets.component.js +19 -6
  48. package/esm2015/catalog/components/product-detail/product-detail.component.js +2 -2
  49. package/esm2015/catalog/components/product-list/product-list.component.js +2 -2
  50. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +4 -3
  51. package/esm2015/catalog/components/product-variants-table/product-variants-table.component.js +4 -2
  52. package/esm2015/catalog/components/update-product-option-dialog/update-product-option-dialog.component.js +2 -2
  53. package/esm2015/core/common/generated-types.js +123 -9
  54. package/esm2015/core/common/utilities/configurable-operation-utils.js +1 -1
  55. package/esm2015/core/common/version.js +2 -2
  56. package/esm2015/core/components/main-nav/main-nav.component.js +36 -9
  57. package/esm2015/core/data/definitions/order-definitions.js +11 -1
  58. package/esm2015/core/data/definitions/product-definitions.js +696 -697
  59. package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +2 -2
  60. package/esm2015/core/shared/components/channel-assignment-control/channel-assignment-control.component.js +25 -7
  61. package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +13 -10
  62. package/esm2015/core/shared/directives/if-permissions.directive.js +4 -4
  63. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +2 -2
  64. package/esm2015/core/shared/pipes/has-permission.pipe.js +16 -6
  65. package/esm2015/customer/components/address-card/address-card.component.js +4 -2
  66. package/esm2015/customer/components/customer-detail/customer-detail.component.js +2 -2
  67. package/esm2015/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.js +2 -2
  68. package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +2 -2
  69. package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +2 -2
  70. package/esm2015/customer/components/customer-history/customer-history.component.js +2 -2
  71. package/esm2015/order/components/line-refunds/line-refunds.component.js +20 -3
  72. package/esm2015/order/components/order-detail/order-detail.component.js +30 -9
  73. package/esm2015/order/components/order-editor/order-editor.component.js +2 -2
  74. package/esm2015/order/components/order-payment-card/order-payment-card.component.js +2 -2
  75. package/esm2015/order/components/order-table/order-table.component.js +2 -2
  76. package/esm2015/order/components/refund-order-dialog/refund-order-dialog.component.js +27 -6
  77. package/esm2015/settings/components/admin-detail/admin-detail.component.js +5 -2
  78. package/esm2015/settings/components/channel-detail/channel-detail.component.js +5 -3
  79. package/esm2015/settings/components/channel-list/channel-list.component.js +2 -2
  80. package/esm2015/settings/components/country-detail/country-detail.component.js +4 -3
  81. package/esm2015/settings/components/country-list/country-list.component.js +2 -2
  82. package/esm2015/settings/components/global-settings/global-settings.component.js +3 -2
  83. package/esm2015/settings/components/payment-method-detail/payment-method-detail.component.js +16 -15
  84. package/esm2015/settings/components/payment-method-list/payment-method-list.component.js +2 -2
  85. package/esm2015/settings/components/permission-grid/permission-grid.component.js +8 -3
  86. package/esm2015/settings/components/role-detail/role-detail.component.js +2 -2
  87. package/esm2015/settings/components/role-list/role-list.component.js +9 -5
  88. package/esm2015/settings/components/shipping-method-detail/shipping-method-detail.component.js +16 -11
  89. package/esm2015/settings/components/shipping-method-list/shipping-method-list.component.js +2 -2
  90. package/esm2015/settings/components/tax-category-detail/tax-category-detail.component.js +4 -3
  91. package/esm2015/settings/components/tax-category-list/tax-category-list.component.js +2 -2
  92. package/esm2015/settings/components/tax-rate-detail/tax-rate-detail.component.js +11 -10
  93. package/esm2015/settings/components/tax-rate-list/tax-rate-list.component.js +2 -2
  94. package/esm2015/settings/components/test-order-builder/test-order-builder.component.js +3 -2
  95. package/esm2015/settings/components/zone-detail-dialog/zone-detail-dialog.component.js +2 -2
  96. package/esm2015/settings/components/zone-list/zone-list.component.js +2 -2
  97. package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +2 -2
  98. package/esm2015/system/components/job-list/job-list.component.js +2 -2
  99. package/fesm2015/vendure-admin-ui-catalog.js +34 -18
  100. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  101. package/fesm2015/vendure-admin-ui-core.js +884 -705
  102. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  103. package/fesm2015/vendure-admin-ui-customer.js +8 -6
  104. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  105. package/fesm2015/vendure-admin-ui-order.js +76 -18
  106. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  107. package/fesm2015/vendure-admin-ui-settings.js +74 -50
  108. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  109. package/fesm2015/vendure-admin-ui-system.js +1 -1
  110. package/fesm2015/vendure-admin-ui-system.js.map +1 -1
  111. package/order/components/line-refunds/line-refunds.component.d.ts +1 -0
  112. package/order/components/refund-order-dialog/refund-order-dialog.component.d.ts +1 -0
  113. package/order/vendure-admin-ui-order.metadata.json +1 -1
  114. package/package.json +2 -2
  115. package/settings/components/channel-detail/channel-detail.component.d.ts +2 -1
  116. package/settings/components/country-detail/country-detail.component.d.ts +2 -1
  117. package/settings/components/global-settings/global-settings.component.d.ts +2 -1
  118. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +2 -2
  119. package/settings/components/permission-grid/permission-grid.component.d.ts +2 -0
  120. package/settings/components/role-list/role-list.component.d.ts +5 -1
  121. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +2 -1
  122. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +2 -1
  123. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +2 -1
  124. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  125. package/static/i18n-messages/cs.json +2 -0
  126. package/static/i18n-messages/de.json +8 -6
  127. package/static/i18n-messages/en.json +2 -0
  128. package/static/i18n-messages/es.json +2 -0
  129. package/static/i18n-messages/fr.json +89 -89
  130. package/static/i18n-messages/pl.json +2 -0
  131. package/static/i18n-messages/pt_BR.json +2 -0
  132. package/static/i18n-messages/ru.json +811 -0
  133. package/static/i18n-messages/zh_Hans.json +178 -176
  134. package/static/i18n-messages/zh_Hant.json +2 -0
  135. package/static/styles/_variables.scss +0 -65
  136. package/static/styles/theme/default.scss +54 -54
  137. package/static/vendure-ui-config.json +1 -1
  138. package/system/vendure-admin-ui-system.metadata.json +1 -1
@@ -1,4 +1,4 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@vendure/admin-ui/core"),require("rxjs"),require("rxjs/operators"),require("@angular/forms"),require("@angular/router"),require("@biesbjerg/ngx-translate-extract-marker"),require("@vendure/common/lib/shared-utils"),require("@vendure/common/lib/generated-shop-types")):"function"==typeof define&&define.amd?define("@vendure/admin-ui/customer",["exports","@angular/core","@vendure/admin-ui/core","rxjs","rxjs/operators","@angular/forms","@angular/router","@biesbjerg/ngx-translate-extract-marker","@vendure/common/lib/shared-utils","@vendure/common/lib/generated-shop-types"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).vendure=e.vendure||{},e.vendure["admin-ui"]=e.vendure["admin-ui"]||{},e.vendure["admin-ui"].customer={}),e.ng.core,e.vendure["admin-ui"].core,e.rxjs,e.rxjs.operators,e.ng.forms,e.ng.router,e.ngxTranslateExtractMarker,e.sharedUtils,e.generatedShopTypes)}(this,(function(e,t,r,n,o,s,a,i,c,d){"use strict";var l=function(){function e(e){this.dataService=e,this.selectedCustomerIds=[],this.fetchGroupMembers$=new n.BehaviorSubject({skip:0,take:10,filterTerm:""})}return e.prototype.ngOnInit=function(){var e=this,t=this.fetchGroupMembers$.pipe(o.switchMap((function(t){var r=t.skip,n=t.take,o=t.filterTerm;return e.dataService.customer.getCustomerList(n,r,o).mapStream((function(e){return e.customers}))})));this.customers$=t.pipe(o.map((function(e){return e.items}))),this.customersTotal$=t.pipe(o.map((function(e){return e.totalItems})))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.add=function(){this.resolveWith(this.selectedCustomerIds)},e}();l.decorators=[{type:t.Component,args:[{selector:"vdr-add-customer-to-group-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],l.ctorParameters=function(){return[{type:r.DataService}]};var u=function(){function e(e){this.changeDetector=e,this.availableCountries=[]}return e.prototype.ngOnInit=function(){var e=this;this.addressForm.valueChanges.subscribe((function(){return e.changeDetector.markForCheck()}))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.save=function(){this.resolveWith(this.addressForm)},e}();u.decorators=[{type:t.Component,args:[{selector:"vdr-address-detail-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:["clr-input-container{margin-bottom:12px}"]}]}],u.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]};var m=function(){function e(e,r){this.modalService=e,this.changeDetector=r,this.availableCountries=[],this.setAsDefaultShipping=new t.EventEmitter,this.setAsDefaultBilling=new t.EventEmitter,this.dataDependenciesPopulated=new n.BehaviorSubject(!1)}return e.prototype.ngOnInit=function(){var e=this;this.addressForm.get("streetLine1").value||this.dataDependenciesPopulated.pipe(o.filter((function(e){return e})),o.take(1)).subscribe((function(){e.editAddress()}))},e.prototype.ngOnChanges=function(e){null!=this.customFields&&null!=this.availableCountries&&this.dataDependenciesPopulated.next(!0)},e.prototype.getCountryName=function(e){if(!this.availableCountries)return"";var t=this.availableCountries.find((function(t){return t.code===e}));return t?t.name:""},e.prototype.setAsDefaultBillingAddress=function(){this.setAsDefaultBilling.emit(this.addressForm.value.id),this.addressForm.markAsDirty()},e.prototype.setAsDefaultShippingAddress=function(){this.setAsDefaultShipping.emit(this.addressForm.value.id),this.addressForm.markAsDirty()},e.prototype.editAddress=function(){var e=this;this.modalService.fromComponent(u,{locals:{addressForm:this.addressForm,customFields:this.customFields,availableCountries:this.availableCountries},size:"md",closable:!0}).subscribe((function(){e.changeDetector.markForCheck()}))},e}();m.decorators=[{type:t.Component,args:[{selector:"vdr-address-card",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 <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 </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n</div>\r\n',changeDetection:t.ChangeDetectionStrategy.OnPush,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)}"]}]}],m.ctorParameters=function(){return[{type:r.ModalService},{type:t.ChangeDetectorRef}]},m.propDecorators={addressForm:[{type:t.Input}],customFields:[{type:t.Input}],availableCountries:[{type:t.Input}],isDefaultBilling:[{type:t.Input}],isDefaultShipping:[{type:t.Input}],setAsDefaultShipping:[{type:t.Output}],setAsDefaultBilling:[{type:t.Output}]};
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@vendure/admin-ui/core"),require("rxjs"),require("rxjs/operators"),require("@angular/forms"),require("@angular/router"),require("@biesbjerg/ngx-translate-extract-marker"),require("@vendure/common/lib/shared-utils"),require("@vendure/common/lib/generated-shop-types")):"function"==typeof define&&define.amd?define("@vendure/admin-ui/customer",["exports","@angular/core","@vendure/admin-ui/core","rxjs","rxjs/operators","@angular/forms","@angular/router","@biesbjerg/ngx-translate-extract-marker","@vendure/common/lib/shared-utils","@vendure/common/lib/generated-shop-types"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).vendure=e.vendure||{},e.vendure["admin-ui"]=e.vendure["admin-ui"]||{},e.vendure["admin-ui"].customer={}),e.ng.core,e.vendure["admin-ui"].core,e.rxjs,e.rxjs.operators,e.ng.forms,e.ng.router,e.ngxTranslateExtractMarker,e.sharedUtils,e.generatedShopTypes)}(this,(function(e,t,r,n,o,s,a,i,c,d){"use strict";var l=function(){function e(e){this.dataService=e,this.selectedCustomerIds=[],this.fetchGroupMembers$=new n.BehaviorSubject({skip:0,take:10,filterTerm:""})}return e.prototype.ngOnInit=function(){var e=this,t=this.fetchGroupMembers$.pipe(o.switchMap((function(t){var r=t.skip,n=t.take,o=t.filterTerm;return e.dataService.customer.getCustomerList(n,r,o).mapStream((function(e){return e.customers}))})));this.customers$=t.pipe(o.map((function(e){return e.items}))),this.customersTotal$=t.pipe(o.map((function(e){return e.totalItems})))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.add=function(){this.resolveWith(this.selectedCustomerIds)},e}();l.decorators=[{type:t.Component,args:[{selector:"vdr-add-customer-to-group-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],l.ctorParameters=function(){return[{type:r.DataService}]};var u=function(){function e(e){this.changeDetector=e,this.availableCountries=[]}return e.prototype.ngOnInit=function(){var e=this;this.addressForm.valueChanges.subscribe((function(){return e.changeDetector.markForCheck()}))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.save=function(){this.resolveWith(this.addressForm)},e}();u.decorators=[{type:t.Component,args:[{selector:"vdr-address-detail-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:["clr-input-container{margin-bottom:12px}"]}]}],u.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]};var m=function(){function e(e,r){this.modalService=e,this.changeDetector=r,this.availableCountries=[],this.editable=!0,this.setAsDefaultShipping=new t.EventEmitter,this.setAsDefaultBilling=new t.EventEmitter,this.dataDependenciesPopulated=new n.BehaviorSubject(!1)}return e.prototype.ngOnInit=function(){var e=this;this.addressForm.get("streetLine1").value||this.dataDependenciesPopulated.pipe(o.filter((function(e){return e})),o.take(1)).subscribe((function(){e.editAddress()}))},e.prototype.ngOnChanges=function(e){null!=this.customFields&&null!=this.availableCountries&&this.dataDependenciesPopulated.next(!0)},e.prototype.getCountryName=function(e){if(!this.availableCountries)return"";var t=this.availableCountries.find((function(t){return t.code===e}));return t?t.name:""},e.prototype.setAsDefaultBillingAddress=function(){this.setAsDefaultBilling.emit(this.addressForm.value.id),this.addressForm.markAsDirty()},e.prototype.setAsDefaultShippingAddress=function(){this.setAsDefaultShipping.emit(this.addressForm.value.id),this.addressForm.markAsDirty()},e.prototype.editAddress=function(){var e=this;this.modalService.fromComponent(u,{locals:{addressForm:this.addressForm,customFields:this.customFields,availableCountries:this.availableCountries},size:"md",closable:!0}).subscribe((function(){e.changeDetector.markForCheck()}))},e}();m.decorators=[{type:t.Component,args:[{selector:"vdr-address-card",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 </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n</div>\r\n',changeDetection:t.ChangeDetectionStrategy.OnPush,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)}"]}]}],m.ctorParameters=function(){return[{type:r.ModalService},{type:t.ChangeDetectorRef}]},m.propDecorators={addressForm:[{type:t.Input}],customFields:[{type:t.Input}],availableCountries:[{type:t.Input}],isDefaultBilling:[{type:t.Input}],isDefaultShipping:[{type:t.Input}],editable:[{type:t.Input}],setAsDefaultShipping:[{type:t.Output}],setAsDefaultBilling:[{type:t.Output}]};
2
2
  /*! *****************************************************************************
3
3
  Copyright (c) Microsoft Corporation.
4
4
 
@@ -13,5 +13,5 @@
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
15
  ***************************************************************************** */
16
- var p=function(e,t){return(p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function g(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function v(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}Object.create;function h(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,s=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(o)throw o.error}}return a}function y(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(f(arguments[t]));return e}Object.create;var b=function(){function e(e){this.dataService=e,this.selectedGroupIds=[]}return e.prototype.ngOnInit=function(){this.groups$=this.dataService.customer.getCustomerGroupList().mapStream((function(e){return e.customerGroups.items}))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.add=function(){this.resolveWith(this.selectedGroupIds)},e}();b.decorators=[{type:t.Component,args:[{selector:"vdr-select-customer-group-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],b.ctorParameters=function(){return[{type:r.DataService}]};var C=function(e){function t(t,r,o,a,i,c,d,l){var u=e.call(this,t,r,o,c)||this;return u.changeDetector=a,u.formBuilder=i,u.dataService=c,u.modalService=d,u.notificationService=l,u.fetchHistory=new n.Subject,u.addressDefaultsUpdated=!1,u.ordersPerPage=10,u.currentOrdersPage=1,u.orderListUpdates$=new n.Subject,u.customFields=u.getCustomFieldConfig("Customer"),u.addressCustomFields=u.getCustomFieldConfig("Address"),u.detailForm=u.formBuilder.group({customer:u.formBuilder.group({title:"",firstName:["",s.Validators.required],lastName:["",s.Validators.required],phoneNumber:"",emailAddress:["",[s.Validators.required,s.Validators.email]],password:"",customFields:u.formBuilder.group(u.customFields.reduce((function(e,t){var r;return Object.assign(Object.assign({},e),((r={})[t.name]="",r))}),{}))}),addresses:new s.FormArray([])}),u}return g(t,e),t.prototype.ngOnInit=function(){var e=this;this.init(),this.availableCountries$=this.dataService.settings.getAvailableCountries().mapSingle((function(e){return e.countries.items})).pipe(o.shareReplay(1));var t=this.entity$.pipe(o.merge(this.orderListUpdates$));this.orders$=t.pipe(o.map((function(e){return e.orders.items}))),this.ordersCount$=this.entity$.pipe(o.map((function(e){return e.orders.totalItems}))),this.history$=this.fetchHistory.pipe(o.startWith(null),o.switchMap((function(){return e.dataService.customer.getCustomerHistory(e.id,{sort:{createdAt:r.SortOrder.DESC}}).mapStream((function(e){var t;return null===(t=e.customer)||void 0===t?void 0:t.history.items}))})))},t.prototype.ngOnDestroy=function(){this.destroy(),this.orderListUpdates$.complete()},t.prototype.customFieldIsSet=function(e){return!!this.detailForm.get(["customer","customFields",e])},t.prototype.getAddressFormControls=function(){return this.detailForm.get(["addresses"]).controls},t.prototype.setDefaultBillingAddressId=function(e){this.defaultBillingAddressId=e,this.addressDefaultsUpdated=!0},t.prototype.setDefaultShippingAddressId=function(e){this.defaultShippingAddressId=e,this.addressDefaultsUpdated=!0},t.prototype.addAddress=function(){var e,t,r=this.detailForm.get("addresses"),n=this.formBuilder.group({fullName:"",company:"",streetLine1:["",s.Validators.required],streetLine2:"",city:"",province:"",postalCode:"",countryCode:["",s.Validators.required],phoneNumber:"",defaultShippingAddress:!1,defaultBillingAddress:!1});if(this.addressCustomFields.length){var o=this.formBuilder.group({});try{for(var a=h(this.addressCustomFields),i=a.next();!i.done;i=a.next()){var c=i.value;o.addControl(c.name,new s.FormControl(""))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}n.addControl("customFields",o)}r.push(n)},t.prototype.setOrderItemsPerPage=function(e){this.ordersPerPage=+e,this.fetchOrdersList()},t.prototype.setOrderCurrentPage=function(e){this.currentOrdersPage=+e,this.fetchOrdersList()},t.prototype.create=function(){var e,t=this,r=this.detailForm.get("customer");if(r){var n=r.value,o=null===(e=r.get("customFields"))||void 0===e?void 0:e.value,s={title:n.title,emailAddress:n.emailAddress,firstName:n.firstName,lastName:n.lastName,phoneNumber:n.phoneNumber,customFields:o};this.dataService.customer.createCustomer(s,n.password).subscribe((function(e){var r=e.createCustomer;switch(r.__typename){case"Customer":t.notificationService.success(i.marker("common.notify-create-success"),{entity:"Customer"}),r.emailAddress&&!n.password&&t.notificationService.notify({message:i.marker("customer.email-verification-sent"),translationVars:{emailAddress:n.emailAddress},type:"info",duration:1e4}),t.detailForm.markAsPristine(),t.addressDefaultsUpdated=!1,t.changeDetector.markForCheck(),t.router.navigate(["../",r.id],{relativeTo:t.route});break;case"EmailAddressConflictError":t.notificationService.error(r.message)}}))}},t.prototype.save=function(){var e=this;this.entity$.pipe(o.take(1),o.mergeMap((function(t){var r,s,a,i=t.id,c=[],d=e.detailForm.get("customer");if(d&&d.dirty){var l=d.value,u=null===(a=d.get("customFields"))||void 0===a?void 0:a.value,m={id:i,title:l.title,emailAddress:l.emailAddress,firstName:l.firstName,lastName:l.lastName,phoneNumber:l.phoneNumber,customFields:u};c.push(e.dataService.customer.updateCustomer(m).pipe(o.map((function(e){return e.updateCustomer}))))}var p=e.detailForm.get("addresses");if(p&&p.dirty||e.addressDefaultsUpdated)try{for(var g=h(p.controls),v=g.next();!v.done;v=g.next()){var f=v.value;if(f.dirty||e.addressDefaultsUpdated){var y=f.value,b={fullName:y.fullName,company:y.company,streetLine1:y.streetLine1,streetLine2:y.streetLine2,city:y.city,province:y.province,postalCode:y.postalCode,countryCode:y.countryCode,phoneNumber:y.phoneNumber,defaultShippingAddress:e.defaultShippingAddressId===y.id,defaultBillingAddress:e.defaultBillingAddressId===y.id,customFields:y.customFields};y.id?c.push(e.dataService.customer.updateCustomerAddress(Object.assign(Object.assign({},b),{id:y.id})).pipe(o.map((function(e){return e.updateCustomerAddress})))):c.push(e.dataService.customer.createCustomerAddress(i,b).pipe(o.map((function(e){return e.createCustomerAddress}))))}}}catch(e){r={error:e}}finally{try{v&&!v.done&&(s=g.return)&&s.call(g)}finally{if(r)throw r.error}}return n.forkJoin(c)}))).subscribe((function(t){var r,n;try{for(var o=h(t),s=o.next();!s.done;s=o.next()){var a=s.value;switch(a.__typename){case"Customer":case"Address":e.notificationService.success(i.marker("common.notify-update-success"),{entity:"Customer"}),e.detailForm.markAsPristine(),e.addressDefaultsUpdated=!1,e.changeDetector.markForCheck(),e.fetchHistory.next();break;case"EmailAddressConflictError":e.notificationService.error(a.message)}}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}),(function(t){e.notificationService.error(i.marker("common.notify-update-error"),{entity:"Customer"})}))},t.prototype.addToGroup=function(){var e=this;this.modalService.fromComponent(b,{size:"md"}).pipe(o.switchMap((function(e){return e?n.from(e):n.EMPTY})),o.concatMap((function(t){return e.dataService.customer.addCustomersToGroup(t,[e.id])}))).subscribe({next:function(t){e.notificationService.success(i.marker("customer.add-customers-to-group-success"),{customerCount:1,groupName:t.addCustomersToGroup.name})},complete:function(){e.dataService.customer.getCustomer(e.id,{take:0}).single$.subscribe(),e.fetchHistory.next()}})},t.prototype.removeFromGroup=function(e){var t=this;this.modalService.dialog({title:i.marker("customer.confirm-remove-customer-from-group"),buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.removeCustomersFromGroup(e.id,[t.id]):n.EMPTY})),o.switchMap((function(){return t.dataService.customer.getCustomer(t.id,{take:0}).single$}))).subscribe((function(r){t.notificationService.success(i.marker("customer.remove-customers-from-group-success"),{customerCount:1,groupName:e.name}),t.fetchHistory.next()}))},t.prototype.addNoteToCustomer=function(e){var t=this,r=e.note;this.dataService.customer.addNoteToCustomer(this.id,r).subscribe((function(){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-create-success"),{entity:"Note"})}))},t.prototype.updateNote=function(e){var t=this;this.modalService.fromComponent(r.EditNoteDialogComponent,{closable:!0,locals:{displayPrivacyControls:!1,note:e.data.note}}).pipe(o.switchMap((function(r){return r?t.dataService.customer.updateCustomerNote({noteId:e.id,note:r.note}):n.EMPTY}))).subscribe((function(e){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-update-success"),{entity:"Note"})}))},t.prototype.deleteNote=function(e){var t=this;return this.modalService.dialog({title:i.marker("common.confirm-delete-note"),body:e.data.note,buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomerNote(e.id):n.EMPTY}))).subscribe((function(){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"Note"})}))},t.prototype.setFormValues=function(e){var t,r,n,o,a,i,c,d,l=this.detailForm.get("customer");if(l&&l.patchValue({title:e.title,firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phoneNumber,emailAddress:e.emailAddress}),e.addresses){var u=new s.FormArray([]);try{for(var m=h(e.addresses),p=m.next();!p.done;p=m.next()){var g=p.value,f=g,y=(f.customFields,v(f,["customFields"])),b=this.formBuilder.group(Object.assign(Object.assign({},y),{countryCode:g.country.code}));if(u.push(b),g.defaultShippingAddress&&(this.defaultShippingAddressId=g.id),g.defaultBillingAddress&&(this.defaultBillingAddressId=g.id),this.addressCustomFields.length){var C=this.formBuilder.group({});try{for(var S=(n=void 0,h(this.addressCustomFields)),D=S.next();!D.done;D=S.next()){var w=D.value.name,I=null===(c=g.customFields)||void 0===c?void 0:c[w],E=new s.FormControl(I);C.addControl(w,E)}}catch(e){n={error:e}}finally{try{D&&!D.done&&(o=S.return)&&o.call(S)}finally{if(n)throw n.error}}b.addControl("customFields",C)}}}catch(e){t={error:e}}finally{try{p&&!p.done&&(r=m.return)&&r.call(m)}finally{if(t)throw t.error}}this.detailForm.setControl("addresses",u)}if(this.customFields.length){C=this.detailForm.get(["customer","customFields"]);try{for(var T=h(this.customFields),P=T.next();!P.done;P=T.next()){w=P.value.name,I=null===(d=e.customFields)||void 0===d?void 0:d[w];(E=C.get(w))&&E.patchValue(I)}}catch(e){a={error:e}}finally{try{P&&!P.done&&(i=T.return)&&i.call(T)}finally{if(a)throw a.error}}}this.changeDetector.markForCheck()},t.prototype.fetchOrdersList=function(){var e=this;this.dataService.customer.getCustomer(this.id,{take:this.ordersPerPage,skip:(this.currentOrdersPage-1)*this.ordersPerPage}).single$.pipe(o.map((function(e){return e.customer})),o.filter(c.notNullOrUndefined)).subscribe((function(t){return e.orderListUpdates$.next(t)}))},t}(r.BaseDetailComponent);C.decorators=[{type:t.Component,args:[{selector:"vdr-customer-detail",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 class="last-login" *ngIf="(entity$ | async)?.user?.lastLogin as lastLogin" [title]="lastLogin | localeDate:\'medium\'">\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 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 <ng-container *ngFor="let customField of customFields">\r\n <vdr-custom-field-control\r\n *ngIf="customFieldIsSet(customField.name)"\r\n entityName="Customer"\r\n [customFieldsFormGroup]="detailForm.get([\'customer\', \'customFields\'])"\r\n [customField]="customField"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </section>\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 class="btn btn-sm btn-secondary" (click)="addToGroup()">\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 [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 (setAsDefaultBilling)="setDefaultBillingAddressId($event)"\r\n (setAsDefaultShipping)="setDefaultShippingAddressId($event)"\r\n ></vdr-address-card>\r\n <button class="btn btn-secondary" (click)="addAddress()">\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.total | 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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".last-login{margin-left:6px;color:var(--color-grey-500)}"]}]}],C.ctorParameters=function(){return[{type:a.ActivatedRoute},{type:a.Router},{type:r.ServerConfigService},{type:t.ChangeDetectorRef},{type:s.FormBuilder},{type:r.DataService},{type:r.ModalService},{type:r.NotificationService}]};var S=function(){function e(){}return e.prototype.cancel=function(){this.resolveWith()},e.prototype.save=function(){this.resolveWith(this.group.name)},e}();S.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-detail-dialog",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\r\n<vdr-form-field [label]="\'common.name\' | translate" for="name">\r\n <input id="name" type="text" [(ngModel)]="group.name" [readonly]="!(\'UpdateCustomer\' | hasPermission)" />\r\n</vdr-form-field>\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)="save()" [disabled]="!group.name" 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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}];var D=function(){function e(e,t,r,o,s){this.dataService=e,this.notificationService=t,this.modalService=r,this.route=o,this.router=s,this.selectedCustomerIds=[],this.fetchGroupMembers$=new n.BehaviorSubject({skip:0,take:0,filterTerm:""}),this.refreshActiveGroupMembers$=new n.BehaviorSubject(void 0)}return e.prototype.ngOnInit=function(){var e=this;this.groups$=this.dataService.customer.getCustomerGroupList().mapStream((function(e){return e.customerGroups.items}));var t=this.route.paramMap.pipe(o.map((function(e){return e.get("contents")})),o.distinctUntilChanged(),o.tap((function(){return e.selectedCustomerIds=[]})));this.listIsEmpty$=this.groups$.pipe(o.map((function(e){return 0===e.length}))),this.activeGroup$=n.combineLatest(this.groups$,t).pipe(o.map((function(e){var t=f(e,2),r=t[0],n=t[1];if(n)return r.find((function(e){return e.id===n}))})));var r=n.combineLatest(this.activeGroup$,this.fetchGroupMembers$,this.refreshActiveGroupMembers$).pipe(o.switchMap((function(t){var r=f(t,2),o=r[0],s=r[1],a=s.skip,i=s.take,c=s.filterTerm;return o?e.dataService.customer.getCustomerGroupWithCustomers(o.id,{skip:a,take:i,filter:{emailAddress:{contains:c}}}).mapStream((function(e){var t;return null===(t=e.customerGroup)||void 0===t?void 0:t.customers})):n.of(void 0)})));this.members$=r.pipe(o.map((function(e){var t;return null!==(t=null==e?void 0:e.items)&&void 0!==t?t:[]}))),this.membersTotal$=r.pipe(o.map((function(e){var t;return null!==(t=null==e?void 0:e.totalItems)&&void 0!==t?t:0})))},e.prototype.create=function(){var e=this;this.modalService.fromComponent(S,{locals:{group:{name:""}}}).pipe(o.switchMap((function(t){return t?e.dataService.customer.createCustomerGroup({name:t,customerIds:[]}):n.EMPTY})),o.switchMap((function(){return e.dataService.customer.getCustomerGroupList().single$}))).subscribe((function(){e.notificationService.success(i.marker("common.notify-create-success"),{entity:"CustomerGroup"})}),(function(t){e.notificationService.error(i.marker("common.notify-create-error"),{entity:"CustomerGroup"})}))},e.prototype.delete=function(e){var t=this;this.modalService.dialog({title:i.marker("customer.confirm-delete-customer-group"),buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomerGroup(e):n.EMPTY})),o.switchMap((function(e){return e.deleteCustomerGroup.result===r.DeletionResult.DELETED?t.dataService.customer.getCustomerGroupList().mapSingle((function(){return{errorMessage:!1}})):n.of({errorMessage:e.deleteCustomerGroup.message})}))).subscribe((function(e){"string"==typeof e.errorMessage?t.notificationService.error(e.errorMessage):t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"CustomerGroup"})}),(function(e){t.notificationService.error(i.marker("common.notify-delete-error"),{entity:"CustomerGroup"})}))},e.prototype.update=function(e){var t=this;this.modalService.fromComponent(S,{locals:{group:e}}).pipe(o.switchMap((function(r){return r?t.dataService.customer.updateCustomerGroup({id:e.id,name:r}):n.EMPTY}))).subscribe((function(){t.notificationService.success(i.marker("common.notify-update-success"),{entity:"CustomerGroup"})}),(function(e){t.notificationService.error(i.marker("common.notify-update-error"),{entity:"CustomerGroup"})}))},e.prototype.closeMembers=function(){var e=Object.assign({},this.route.snapshot.params);delete e.contents,this.router.navigate(["./",e],{relativeTo:this.route,queryParamsHandling:"preserve"})},e.prototype.addToGroup=function(e){var t=this;this.modalService.fromComponent(l,{locals:{group:e,route:this.route},size:"md",verticalAlign:"top"}).pipe(o.switchMap((function(r){return r?t.dataService.customer.addCustomersToGroup(e.id,r).pipe(o.mapTo(r)):n.EMPTY}))).subscribe({next:function(r){t.notificationService.success(i.marker("customer.add-customers-to-group-success"),{customerCount:r.length,groupName:e.name}),t.refreshActiveGroupMembers$.next(),t.selectedCustomerIds=[]}})},e.prototype.removeFromGroup=function(e,t){var r=this;this.dataService.customer.removeCustomersFromGroup(e.id,t).subscribe({complete:function(){r.notificationService.success(i.marker("customer.remove-customers-from-group-success"),{customerCount:t.length,groupName:e.name}),r.refreshActiveGroupMembers$.next(),r.selectedCustomerIds=[]}})},e}();D.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-list",template:'<vdr-action-bar>\r\n <vdr-ab-left> </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="\'CreateCustomer\'" (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 <table class="table group-list" [class.expanded]="activeGroup$ | async" *ngIf="!(listIsEmpty$ | async); else emptyPlaceholder">\r\n <tbody>\r\n <tr *ngFor="let group of groups$ | async" [class.active]="group.id === (activeGroup$ | async)?.id">\r\n <td class="left align-middle"><vdr-entity-info [entity]="group"></vdr-entity-info></td>\r\n <td class="left align-middle"><vdr-chip [colorFrom]="group.id">{{ group.name }}</vdr-chip></td>\r\n <td class="text-right align-middle">\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="align-middle">\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="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]="!(\'DeleteSettings\' | 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 </tr>\r\n </tbody>\r\n </table>\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">\r\n {{ activeGroup.name }} ({{ membersTotal$ | async }})\r\n </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]="!(\'DeleteSettings\' | 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\r\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list tr.active{background-color:var(--color-component-bg-200)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}.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}"]}]}],D.ctorParameters=function(){return[{type:r.DataService},{type:r.NotificationService},{type:r.ModalService},{type:a.ActivatedRoute},{type:a.Router}]};var w=function(){function e(e,r){var o=this;this.router=e,this.dataService=r,this.selectedMemberIds=[],this.selectionChange=new t.EventEmitter,this.fetchParamsChange=new t.EventEmitter,this.filterTermControl=new s.FormControl(""),this.refresh$=new n.BehaviorSubject(!0),this.destroy$=new n.Subject,this.isMemberSelected=function(e){return-1<o.selectedMemberIds.indexOf(e.id)}}return e.prototype.ngOnInit=function(){var e=this;this.membersCurrentPage$=this.route.paramMap.pipe(o.map((function(e){return e.get("membersPage")})),o.map((function(e){return e?+e:1})),o.startWith(1),o.distinctUntilChanged()),this.membersItemsPerPage$=this.route.paramMap.pipe(o.map((function(e){return e.get("membersPerPage")})),o.map((function(e){return e?+e:10})),o.startWith(10),o.distinctUntilChanged());var t=this.filterTermControl.valueChanges.pipe(o.debounceTime(250),o.tap((function(){return e.setContentsPageNumber(1)})),o.startWith(""));n.combineLatest(this.membersCurrentPage$,this.membersItemsPerPage$,t,this.refresh$).pipe(o.takeUntil(this.destroy$)).subscribe((function(t){var r=f(t,3),n=r[0],o=r[1],s=r[2],a=o,i=(n-1)*o;e.fetchParamsChange.emit({filterTerm:s,skip:i,take:a})}))},e.prototype.ngOnDestroy=function(){this.destroy$.next(),this.destroy$.complete()},e.prototype.setContentsPageNumber=function(e){this.setParam("membersPage",e)},e.prototype.setContentsItemsPerPage=function(e){this.setParam("membersPerPage",e)},e.prototype.refresh=function(){this.refresh$.next(!0)},e.prototype.setParam=function(e,t){var r;this.router.navigate(["./",Object.assign(Object.assign({},this.route.snapshot.params),(r={},r[e]=t,r))],{relativeTo:this.route,queryParamsHandling:"merge"})},e.prototype.areAllSelected=function(){return!!this.members&&this.selectedMemberIds.length===this.members.length},e.prototype.toggleSelectAll=function(){this.areAllSelected()?this.selectionChange.emit([]):this.selectionChange.emit(this.members.map((function(e){return e.id})))},e.prototype.toggleSelectMember=function(e){this.selectedMemberIds.includes(e.id)?this.selectionChange.emit(this.selectedMemberIds.filter((function(t){return t!==e.id}))):this.selectionChange.emit(y(this.selectedMemberIds,[e.id]))},e}();w.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-member-list",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]="(\'UpdateCustomer\' | 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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],w.ctorParameters=function(){return[{type:a.Router},{type:r.DataService}]},w.propDecorators={members:[{type:t.Input}],totalItems:[{type:t.Input}],route:[{type:t.Input}],selectedMemberIds:[{type:t.Input}],selectionChange:[{type:t.Output}],fetchParamsChange:[{type:t.Output}]};var I=function(){function e(){this.addNote=new t.EventEmitter,this.updateNote=new t.EventEmitter,this.deleteNote=new t.EventEmitter,this.note="",this.type=r.HistoryEntryType}return e.prototype.getDisplayType=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_VERIFIED:case r.HistoryEntryType.CUSTOMER_EMAIL_UPDATE_VERIFIED:case r.HistoryEntryType.CUSTOMER_PASSWORD_RESET_VERIFIED:return"success";case r.HistoryEntryType.CUSTOMER_REGISTERED:return"muted";case r.HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:return"error";default:return"default"}},e.prototype.getTimelineIcon=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_REGISTERED:return"user";case r.HistoryEntryType.CUSTOMER_VERIFIED:return["assign-user","is-solid"];case r.HistoryEntryType.CUSTOMER_NOTE:return"note";case r.HistoryEntryType.CUSTOMER_ADDED_TO_GROUP:case r.HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:return"users"}},e.prototype.isFeatured=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_REGISTERED:case r.HistoryEntryType.CUSTOMER_VERIFIED:return!0;default:return!1}},e.prototype.getName=function(e){var t=e.administrator;return t?t.firstName+" "+t.lastName:this.customer.firstName+" "+this.customer.lastName},e.prototype.addNoteToCustomer=function(){this.addNote.emit({note:this.note}),this.note=""},e}();I.decorators=[{type:t.Component,args:[{selector:"vdr-customer-history",template:'<h4>{{ \'customer.customer-history\' | translate }}</h4>\r\n<div class="entry-list">\r\n <vdr-timeline-entry iconShape="note" displayType="muted">\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]="!(\'UpdateOrder\' | 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]="!(\'UpdateOrder\' | 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',changeDetection:t.ChangeDetectionStrategy.OnPush,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)}"]}]}],I.propDecorators={customer:[{type:t.Input}],history:[{type:t.Input}],addNote:[{type:t.Output}],updateNote:[{type:t.Output}],deleteNote:[{type:t.Output}]};var E=function(e){function t(t,r,n,o,a){var i=e.call(this,r,n)||this;return i.dataService=t,i.modalService=o,i.notificationService=a,i.emailSearchTerm=new s.FormControl(""),i.lastNameSearchTerm=new s.FormControl(""),e.prototype.setQueryFn.call(i,(function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return(e=i.dataService.customer).getCustomerList.apply(e,y(t)).refetchOnChannelChange()}),(function(e){return e.customers}),(function(e,t){return{options:{skip:e,take:t,filter:{emailAddress:{contains:i.emailSearchTerm.value},lastName:{contains:i.lastNameSearchTerm.value}},sort:{createdAt:d.SortOrder.DESC}}}})),i}return g(t,e),t.prototype.ngOnInit=function(){var t=this;e.prototype.ngOnInit.call(this),n.merge(this.emailSearchTerm.valueChanges,this.lastNameSearchTerm.valueChanges).pipe(o.filter((function(e){return 2<e.length||0===e.length})),o.debounceTime(250),o.takeUntil(this.destroy$)).subscribe((function(){return t.refresh()}))},t.prototype.deleteCustomer=function(e){var t=this;return this.modalService.dialog({title:i.marker("catalog.confirm-delete-customer"),body:e.firstName+" "+e.lastName,buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomer(e.id):n.EMPTY}))).subscribe((function(){t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"Customer"}),t.refresh()}),(function(e){t.notificationService.error(i.marker("common.notify-delete-error"),{entity:"Customer"})}))},t}(r.BaseListComponent);E.decorators=[{type:t.Component,args:[{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]="emailSearchTerm"\r\n [placeholder]="\'customer.search-customers-by-email\' | translate"\r\n class="search-input ml3"\r\n />\r\n <input\r\n type="text"\r\n name="lastNameSearchTerm"\r\n [formControl]="lastNameSearchTerm"\r\n [placeholder]="\'customer.search-customers-by-last-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-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}"]}]}],E.ctorParameters=function(){return[{type:r.DataService},{type:a.Router},{type:a.ActivatedRoute},{type:r.ModalService},{type:r.NotificationService}]};var T=function(){};T.decorators=[{type:t.Component,args:[{selector:"vdr-customer-status-label",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".registered-user-icon{color:var(--color-grey-300)}.verified-user-icon{color:var(--color-success-500)}"]}]}],T.propDecorators={customer:[{type:t.Input}]};var P=function(e){function t(t,r){return e.call(this,t,{__typename:"Customer",id:"",createdAt:"",updatedAt:"",title:"",firstName:"",lastName:"",emailAddress:"",phoneNumber:null,addresses:null,user:null},(function(e){return r.customer.getCustomer(e).mapStream((function(e){return e.customer}))}))||this}return g(t,e),t}(r.BaseEntityResolver);P.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new P(t.ɵɵinject(a.Router),t.ɵɵinject(r.DataService))},token:P,providedIn:"root"}),P.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],P.ctorParameters=function(){return[{type:a.Router},{type:r.DataService}]};var F={breadcrumb:i.marker("breadcrumb.customers")},N={breadcrumb:k},O={breadcrumb:i.marker("breadcrumb.customer-groups")},A=[{path:"customers",component:E,pathMatch:"",data:F},{path:"customers/:id",component:C,resolve:r.createResolveData(P),canDeactivate:[r.CanDeactivateDetailGuard],data:N},{path:"groups",component:D,data:O}];function k(e,t){return r.detailBreadcrumb({entity:e.entity,id:t.id,breadcrumbKey:"breadcrumb.customers",getName:function(e){return e.firstName+" "+e.lastName},route:"customers"})}var x=function(){};x.decorators=[{type:t.NgModule,args:[{imports:[r.SharedModule,a.RouterModule.forChild(A)],declarations:[E,C,T,m,D,S,l,w,b,I,u],exports:[m]}]}],e.AddCustomerToGroupDialogComponent=l,e.AddressCardComponent=m,e.AddressDetailDialogComponent=u,e.CustomerDetailComponent=C,e.CustomerGroupDetailDialogComponent=S,e.CustomerGroupListComponent=D,e.CustomerGroupMemberListComponent=w,e.CustomerHistoryComponent=I,e.CustomerListComponent=E,e.CustomerModule=x,e.CustomerResolver=P,e.CustomerStatusLabelComponent=T,e.SelectCustomerGroupDialogComponent=b,e.customerBreadcrumb=k,e.customerRoutes=A,e.ɵ0=F,e.ɵ1=N,e.ɵ2=O,Object.defineProperty(e,"__esModule",{value:!0})}));
16
+ var p=function(e,t){return(p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function g(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function v(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}Object.create;function h(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,s=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(o)throw o.error}}return a}function y(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(f(arguments[t]));return e}Object.create;var b=function(){function e(e){this.dataService=e,this.selectedGroupIds=[]}return e.prototype.ngOnInit=function(){this.groups$=this.dataService.customer.getCustomerGroupList().mapStream((function(e){return e.customerGroups.items}))},e.prototype.cancel=function(){this.resolveWith()},e.prototype.add=function(){this.resolveWith(this.selectedGroupIds)},e}();b.decorators=[{type:t.Component,args:[{selector:"vdr-select-customer-group-dialog",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],b.ctorParameters=function(){return[{type:r.DataService}]};var C=function(e){function t(t,r,o,a,i,c,d,l){var u=e.call(this,t,r,o,c)||this;return u.changeDetector=a,u.formBuilder=i,u.dataService=c,u.modalService=d,u.notificationService=l,u.fetchHistory=new n.Subject,u.addressDefaultsUpdated=!1,u.ordersPerPage=10,u.currentOrdersPage=1,u.orderListUpdates$=new n.Subject,u.customFields=u.getCustomFieldConfig("Customer"),u.addressCustomFields=u.getCustomFieldConfig("Address"),u.detailForm=u.formBuilder.group({customer:u.formBuilder.group({title:"",firstName:["",s.Validators.required],lastName:["",s.Validators.required],phoneNumber:"",emailAddress:["",[s.Validators.required,s.Validators.email]],password:"",customFields:u.formBuilder.group(u.customFields.reduce((function(e,t){var r;return Object.assign(Object.assign({},e),((r={})[t.name]="",r))}),{}))}),addresses:new s.FormArray([])}),u}return g(t,e),t.prototype.ngOnInit=function(){var e=this;this.init(),this.availableCountries$=this.dataService.settings.getAvailableCountries().mapSingle((function(e){return e.countries.items})).pipe(o.shareReplay(1));var t=this.entity$.pipe(o.merge(this.orderListUpdates$));this.orders$=t.pipe(o.map((function(e){return e.orders.items}))),this.ordersCount$=this.entity$.pipe(o.map((function(e){return e.orders.totalItems}))),this.history$=this.fetchHistory.pipe(o.startWith(null),o.switchMap((function(){return e.dataService.customer.getCustomerHistory(e.id,{sort:{createdAt:r.SortOrder.DESC}}).mapStream((function(e){var t;return null===(t=e.customer)||void 0===t?void 0:t.history.items}))})))},t.prototype.ngOnDestroy=function(){this.destroy(),this.orderListUpdates$.complete()},t.prototype.customFieldIsSet=function(e){return!!this.detailForm.get(["customer","customFields",e])},t.prototype.getAddressFormControls=function(){return this.detailForm.get(["addresses"]).controls},t.prototype.setDefaultBillingAddressId=function(e){this.defaultBillingAddressId=e,this.addressDefaultsUpdated=!0},t.prototype.setDefaultShippingAddressId=function(e){this.defaultShippingAddressId=e,this.addressDefaultsUpdated=!0},t.prototype.addAddress=function(){var e,t,r=this.detailForm.get("addresses"),n=this.formBuilder.group({fullName:"",company:"",streetLine1:["",s.Validators.required],streetLine2:"",city:"",province:"",postalCode:"",countryCode:["",s.Validators.required],phoneNumber:"",defaultShippingAddress:!1,defaultBillingAddress:!1});if(this.addressCustomFields.length){var o=this.formBuilder.group({});try{for(var a=h(this.addressCustomFields),i=a.next();!i.done;i=a.next()){var c=i.value;o.addControl(c.name,new s.FormControl(""))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}n.addControl("customFields",o)}r.push(n)},t.prototype.setOrderItemsPerPage=function(e){this.ordersPerPage=+e,this.fetchOrdersList()},t.prototype.setOrderCurrentPage=function(e){this.currentOrdersPage=+e,this.fetchOrdersList()},t.prototype.create=function(){var e,t=this,r=this.detailForm.get("customer");if(r){var n=r.value,o=null===(e=r.get("customFields"))||void 0===e?void 0:e.value,s={title:n.title,emailAddress:n.emailAddress,firstName:n.firstName,lastName:n.lastName,phoneNumber:n.phoneNumber,customFields:o};this.dataService.customer.createCustomer(s,n.password).subscribe((function(e){var r=e.createCustomer;switch(r.__typename){case"Customer":t.notificationService.success(i.marker("common.notify-create-success"),{entity:"Customer"}),r.emailAddress&&!n.password&&t.notificationService.notify({message:i.marker("customer.email-verification-sent"),translationVars:{emailAddress:n.emailAddress},type:"info",duration:1e4}),t.detailForm.markAsPristine(),t.addressDefaultsUpdated=!1,t.changeDetector.markForCheck(),t.router.navigate(["../",r.id],{relativeTo:t.route});break;case"EmailAddressConflictError":t.notificationService.error(r.message)}}))}},t.prototype.save=function(){var e=this;this.entity$.pipe(o.take(1),o.mergeMap((function(t){var r,s,a,i=t.id,c=[],d=e.detailForm.get("customer");if(d&&d.dirty){var l=d.value,u=null===(a=d.get("customFields"))||void 0===a?void 0:a.value,m={id:i,title:l.title,emailAddress:l.emailAddress,firstName:l.firstName,lastName:l.lastName,phoneNumber:l.phoneNumber,customFields:u};c.push(e.dataService.customer.updateCustomer(m).pipe(o.map((function(e){return e.updateCustomer}))))}var p=e.detailForm.get("addresses");if(p&&p.dirty||e.addressDefaultsUpdated)try{for(var g=h(p.controls),v=g.next();!v.done;v=g.next()){var f=v.value;if(f.dirty||e.addressDefaultsUpdated){var y=f.value,b={fullName:y.fullName,company:y.company,streetLine1:y.streetLine1,streetLine2:y.streetLine2,city:y.city,province:y.province,postalCode:y.postalCode,countryCode:y.countryCode,phoneNumber:y.phoneNumber,defaultShippingAddress:e.defaultShippingAddressId===y.id,defaultBillingAddress:e.defaultBillingAddressId===y.id,customFields:y.customFields};y.id?c.push(e.dataService.customer.updateCustomerAddress(Object.assign(Object.assign({},b),{id:y.id})).pipe(o.map((function(e){return e.updateCustomerAddress})))):c.push(e.dataService.customer.createCustomerAddress(i,b).pipe(o.map((function(e){return e.createCustomerAddress}))))}}}catch(e){r={error:e}}finally{try{v&&!v.done&&(s=g.return)&&s.call(g)}finally{if(r)throw r.error}}return n.forkJoin(c)}))).subscribe((function(t){var r,n;try{for(var o=h(t),s=o.next();!s.done;s=o.next()){var a=s.value;switch(a.__typename){case"Customer":case"Address":e.notificationService.success(i.marker("common.notify-update-success"),{entity:"Customer"}),e.detailForm.markAsPristine(),e.addressDefaultsUpdated=!1,e.changeDetector.markForCheck(),e.fetchHistory.next();break;case"EmailAddressConflictError":e.notificationService.error(a.message)}}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}),(function(t){e.notificationService.error(i.marker("common.notify-update-error"),{entity:"Customer"})}))},t.prototype.addToGroup=function(){var e=this;this.modalService.fromComponent(b,{size:"md"}).pipe(o.switchMap((function(e){return e?n.from(e):n.EMPTY})),o.concatMap((function(t){return e.dataService.customer.addCustomersToGroup(t,[e.id])}))).subscribe({next:function(t){e.notificationService.success(i.marker("customer.add-customers-to-group-success"),{customerCount:1,groupName:t.addCustomersToGroup.name})},complete:function(){e.dataService.customer.getCustomer(e.id,{take:0}).single$.subscribe(),e.fetchHistory.next()}})},t.prototype.removeFromGroup=function(e){var t=this;this.modalService.dialog({title:i.marker("customer.confirm-remove-customer-from-group"),buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.removeCustomersFromGroup(e.id,[t.id]):n.EMPTY})),o.switchMap((function(){return t.dataService.customer.getCustomer(t.id,{take:0}).single$}))).subscribe((function(r){t.notificationService.success(i.marker("customer.remove-customers-from-group-success"),{customerCount:1,groupName:e.name}),t.fetchHistory.next()}))},t.prototype.addNoteToCustomer=function(e){var t=this,r=e.note;this.dataService.customer.addNoteToCustomer(this.id,r).subscribe((function(){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-create-success"),{entity:"Note"})}))},t.prototype.updateNote=function(e){var t=this;this.modalService.fromComponent(r.EditNoteDialogComponent,{closable:!0,locals:{displayPrivacyControls:!1,note:e.data.note}}).pipe(o.switchMap((function(r){return r?t.dataService.customer.updateCustomerNote({noteId:e.id,note:r.note}):n.EMPTY}))).subscribe((function(e){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-update-success"),{entity:"Note"})}))},t.prototype.deleteNote=function(e){var t=this;return this.modalService.dialog({title:i.marker("common.confirm-delete-note"),body:e.data.note,buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomerNote(e.id):n.EMPTY}))).subscribe((function(){t.fetchHistory.next(),t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"Note"})}))},t.prototype.setFormValues=function(e){var t,r,n,o,a,i,c,d,l=this.detailForm.get("customer");if(l&&l.patchValue({title:e.title,firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phoneNumber,emailAddress:e.emailAddress}),e.addresses){var u=new s.FormArray([]);try{for(var m=h(e.addresses),p=m.next();!p.done;p=m.next()){var g=p.value,f=g,y=(f.customFields,v(f,["customFields"])),b=this.formBuilder.group(Object.assign(Object.assign({},y),{countryCode:g.country.code}));if(u.push(b),g.defaultShippingAddress&&(this.defaultShippingAddressId=g.id),g.defaultBillingAddress&&(this.defaultBillingAddressId=g.id),this.addressCustomFields.length){var C=this.formBuilder.group({});try{for(var S=(n=void 0,h(this.addressCustomFields)),w=S.next();!w.done;w=S.next()){var D=w.value.name,I=null===(c=g.customFields)||void 0===c?void 0:c[D],E=new s.FormControl(I);C.addControl(D,E)}}catch(e){n={error:e}}finally{try{w&&!w.done&&(o=S.return)&&o.call(S)}finally{if(n)throw n.error}}b.addControl("customFields",C)}}}catch(e){t={error:e}}finally{try{p&&!p.done&&(r=m.return)&&r.call(m)}finally{if(t)throw t.error}}this.detailForm.setControl("addresses",u)}if(this.customFields.length){C=this.detailForm.get(["customer","customFields"]);try{for(var P=h(this.customFields),T=P.next();!T.done;T=P.next()){D=T.value.name,I=null===(d=e.customFields)||void 0===d?void 0:d[D];(E=C.get(D))&&E.patchValue(I)}}catch(e){a={error:e}}finally{try{T&&!T.done&&(i=P.return)&&i.call(P)}finally{if(a)throw a.error}}}this.changeDetector.markForCheck()},t.prototype.fetchOrdersList=function(){var e=this;this.dataService.customer.getCustomer(this.id,{take:this.ordersPerPage,skip:(this.currentOrdersPage-1)*this.ordersPerPage}).single$.pipe(o.map((function(e){return e.customer})),o.filter(c.notNullOrUndefined)).subscribe((function(t){return e.orderListUpdates$.next(t)}))},t}(r.BaseDetailComponent);C.decorators=[{type:t.Component,args:[{selector:"vdr-customer-detail",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 class="last-login" *ngIf="(entity$ | async)?.user?.lastLogin as lastLogin" [title]="lastLogin | localeDate:\'medium\'">\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 <ng-container *ngFor="let customField of customFields">\r\n <vdr-custom-field-control\r\n *ngIf="customFieldIsSet(customField.name)"\r\n entityName="Customer"\r\n [customFieldsFormGroup]="detailForm.get([\'customer\', \'customFields\'])"\r\n [customField]="customField"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </section>\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 class="btn btn-sm btn-secondary" (click)="addToGroup()" *vdrIfPermissions="\'UpdateCustomerGroup\'">\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 [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"\r\n (setAsDefaultBilling)="setDefaultBillingAddressId($event)"\r\n (setAsDefaultShipping)="setDefaultShippingAddressId($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.total | 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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".last-login{margin-left:6px;color:var(--color-grey-500)}"]}]}],C.ctorParameters=function(){return[{type:a.ActivatedRoute},{type:a.Router},{type:r.ServerConfigService},{type:t.ChangeDetectorRef},{type:s.FormBuilder},{type:r.DataService},{type:r.ModalService},{type:r.NotificationService}]};var S=function(){function e(){}return e.prototype.cancel=function(){this.resolveWith()},e.prototype.save=function(){this.resolveWith(this.group.name)},e}();S.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-detail-dialog",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\r\n<vdr-form-field [label]="\'common.name\' | translate" for="name">\r\n <input id="name" type="text" [(ngModel)]="group.name" [readonly]="!([\'CreateCustomerGroup\', \'UpdateCustomerGroup\'] | hasPermission)" />\r\n</vdr-form-field>\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)="save()" [disabled]="!group.name" 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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}];var w=function(){function e(e,t,r,o,s){this.dataService=e,this.notificationService=t,this.modalService=r,this.route=o,this.router=s,this.selectedCustomerIds=[],this.fetchGroupMembers$=new n.BehaviorSubject({skip:0,take:0,filterTerm:""}),this.refreshActiveGroupMembers$=new n.BehaviorSubject(void 0)}return e.prototype.ngOnInit=function(){var e=this;this.groups$=this.dataService.customer.getCustomerGroupList().mapStream((function(e){return e.customerGroups.items}));var t=this.route.paramMap.pipe(o.map((function(e){return e.get("contents")})),o.distinctUntilChanged(),o.tap((function(){return e.selectedCustomerIds=[]})));this.listIsEmpty$=this.groups$.pipe(o.map((function(e){return 0===e.length}))),this.activeGroup$=n.combineLatest(this.groups$,t).pipe(o.map((function(e){var t=f(e,2),r=t[0],n=t[1];if(n)return r.find((function(e){return e.id===n}))})));var r=n.combineLatest(this.activeGroup$,this.fetchGroupMembers$,this.refreshActiveGroupMembers$).pipe(o.switchMap((function(t){var r=f(t,2),o=r[0],s=r[1],a=s.skip,i=s.take,c=s.filterTerm;return o?e.dataService.customer.getCustomerGroupWithCustomers(o.id,{skip:a,take:i,filter:{emailAddress:{contains:c}}}).mapStream((function(e){var t;return null===(t=e.customerGroup)||void 0===t?void 0:t.customers})):n.of(void 0)})));this.members$=r.pipe(o.map((function(e){var t;return null!==(t=null==e?void 0:e.items)&&void 0!==t?t:[]}))),this.membersTotal$=r.pipe(o.map((function(e){var t;return null!==(t=null==e?void 0:e.totalItems)&&void 0!==t?t:0})))},e.prototype.create=function(){var e=this;this.modalService.fromComponent(S,{locals:{group:{name:""}}}).pipe(o.switchMap((function(t){return t?e.dataService.customer.createCustomerGroup({name:t,customerIds:[]}):n.EMPTY})),o.switchMap((function(){return e.dataService.customer.getCustomerGroupList().single$}))).subscribe((function(){e.notificationService.success(i.marker("common.notify-create-success"),{entity:"CustomerGroup"})}),(function(t){e.notificationService.error(i.marker("common.notify-create-error"),{entity:"CustomerGroup"})}))},e.prototype.delete=function(e){var t=this;this.modalService.dialog({title:i.marker("customer.confirm-delete-customer-group"),buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomerGroup(e):n.EMPTY})),o.switchMap((function(e){return e.deleteCustomerGroup.result===r.DeletionResult.DELETED?t.dataService.customer.getCustomerGroupList().mapSingle((function(){return{errorMessage:!1}})):n.of({errorMessage:e.deleteCustomerGroup.message})}))).subscribe((function(e){"string"==typeof e.errorMessage?t.notificationService.error(e.errorMessage):t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"CustomerGroup"})}),(function(e){t.notificationService.error(i.marker("common.notify-delete-error"),{entity:"CustomerGroup"})}))},e.prototype.update=function(e){var t=this;this.modalService.fromComponent(S,{locals:{group:e}}).pipe(o.switchMap((function(r){return r?t.dataService.customer.updateCustomerGroup({id:e.id,name:r}):n.EMPTY}))).subscribe((function(){t.notificationService.success(i.marker("common.notify-update-success"),{entity:"CustomerGroup"})}),(function(e){t.notificationService.error(i.marker("common.notify-update-error"),{entity:"CustomerGroup"})}))},e.prototype.closeMembers=function(){var e=Object.assign({},this.route.snapshot.params);delete e.contents,this.router.navigate(["./",e],{relativeTo:this.route,queryParamsHandling:"preserve"})},e.prototype.addToGroup=function(e){var t=this;this.modalService.fromComponent(l,{locals:{group:e,route:this.route},size:"md",verticalAlign:"top"}).pipe(o.switchMap((function(r){return r?t.dataService.customer.addCustomersToGroup(e.id,r).pipe(o.mapTo(r)):n.EMPTY}))).subscribe({next:function(r){t.notificationService.success(i.marker("customer.add-customers-to-group-success"),{customerCount:r.length,groupName:e.name}),t.refreshActiveGroupMembers$.next(),t.selectedCustomerIds=[]}})},e.prototype.removeFromGroup=function(e,t){var r=this;this.dataService.customer.removeCustomersFromGroup(e.id,t).subscribe({complete:function(){r.notificationService.success(i.marker("customer.remove-customers-from-group-success"),{customerCount:t.length,groupName:e.name}),r.refreshActiveGroupMembers$.next(),r.selectedCustomerIds=[]}})},e}();w.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-list",template:'<vdr-action-bar>\r\n <vdr-ab-left> </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 <table class="table group-list" [class.expanded]="activeGroup$ | async" *ngIf="!(listIsEmpty$ | async); else emptyPlaceholder">\r\n <tbody>\r\n <tr *ngFor="let group of groups$ | async" [class.active]="group.id === (activeGroup$ | async)?.id">\r\n <td class="left align-middle"><vdr-entity-info [entity]="group"></vdr-entity-info></td>\r\n <td class="left align-middle"><vdr-chip [colorFrom]="group.id">{{ group.name }}</vdr-chip></td>\r\n <td class="text-right align-middle">\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="align-middle">\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="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 </tr>\r\n </tbody>\r\n </table>\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">\r\n {{ activeGroup.name }} ({{ membersTotal$ | async }})\r\n </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\r\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list tr.active{background-color:var(--color-component-bg-200)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}.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}"]}]}],w.ctorParameters=function(){return[{type:r.DataService},{type:r.NotificationService},{type:r.ModalService},{type:a.ActivatedRoute},{type:a.Router}]};var D=function(){function e(e,r){var o=this;this.router=e,this.dataService=r,this.selectedMemberIds=[],this.selectionChange=new t.EventEmitter,this.fetchParamsChange=new t.EventEmitter,this.filterTermControl=new s.FormControl(""),this.refresh$=new n.BehaviorSubject(!0),this.destroy$=new n.Subject,this.isMemberSelected=function(e){return-1<o.selectedMemberIds.indexOf(e.id)}}return e.prototype.ngOnInit=function(){var e=this;this.membersCurrentPage$=this.route.paramMap.pipe(o.map((function(e){return e.get("membersPage")})),o.map((function(e){return e?+e:1})),o.startWith(1),o.distinctUntilChanged()),this.membersItemsPerPage$=this.route.paramMap.pipe(o.map((function(e){return e.get("membersPerPage")})),o.map((function(e){return e?+e:10})),o.startWith(10),o.distinctUntilChanged());var t=this.filterTermControl.valueChanges.pipe(o.debounceTime(250),o.tap((function(){return e.setContentsPageNumber(1)})),o.startWith(""));n.combineLatest(this.membersCurrentPage$,this.membersItemsPerPage$,t,this.refresh$).pipe(o.takeUntil(this.destroy$)).subscribe((function(t){var r=f(t,3),n=r[0],o=r[1],s=r[2],a=o,i=(n-1)*o;e.fetchParamsChange.emit({filterTerm:s,skip:i,take:a})}))},e.prototype.ngOnDestroy=function(){this.destroy$.next(),this.destroy$.complete()},e.prototype.setContentsPageNumber=function(e){this.setParam("membersPage",e)},e.prototype.setContentsItemsPerPage=function(e){this.setParam("membersPerPage",e)},e.prototype.refresh=function(){this.refresh$.next(!0)},e.prototype.setParam=function(e,t){var r;this.router.navigate(["./",Object.assign(Object.assign({},this.route.snapshot.params),(r={},r[e]=t,r))],{relativeTo:this.route,queryParamsHandling:"merge"})},e.prototype.areAllSelected=function(){return!!this.members&&this.selectedMemberIds.length===this.members.length},e.prototype.toggleSelectAll=function(){this.areAllSelected()?this.selectionChange.emit([]):this.selectionChange.emit(this.members.map((function(e){return e.id})))},e.prototype.toggleSelectMember=function(e){this.selectedMemberIds.includes(e.id)?this.selectionChange.emit(this.selectedMemberIds.filter((function(t){return t!==e.id}))):this.selectionChange.emit(y(this.selectedMemberIds,[e.id]))},e}();D.decorators=[{type:t.Component,args:[{selector:"vdr-customer-group-member-list",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],D.ctorParameters=function(){return[{type:a.Router},{type:r.DataService}]},D.propDecorators={members:[{type:t.Input}],totalItems:[{type:t.Input}],route:[{type:t.Input}],selectedMemberIds:[{type:t.Input}],selectionChange:[{type:t.Output}],fetchParamsChange:[{type:t.Output}]};var I=function(){function e(){this.addNote=new t.EventEmitter,this.updateNote=new t.EventEmitter,this.deleteNote=new t.EventEmitter,this.note="",this.type=r.HistoryEntryType}return e.prototype.getDisplayType=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_VERIFIED:case r.HistoryEntryType.CUSTOMER_EMAIL_UPDATE_VERIFIED:case r.HistoryEntryType.CUSTOMER_PASSWORD_RESET_VERIFIED:return"success";case r.HistoryEntryType.CUSTOMER_REGISTERED:return"muted";case r.HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:return"error";default:return"default"}},e.prototype.getTimelineIcon=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_REGISTERED:return"user";case r.HistoryEntryType.CUSTOMER_VERIFIED:return["assign-user","is-solid"];case r.HistoryEntryType.CUSTOMER_NOTE:return"note";case r.HistoryEntryType.CUSTOMER_ADDED_TO_GROUP:case r.HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:return"users"}},e.prototype.isFeatured=function(e){switch(e.type){case r.HistoryEntryType.CUSTOMER_REGISTERED:case r.HistoryEntryType.CUSTOMER_VERIFIED:return!0;default:return!1}},e.prototype.getName=function(e){var t=e.administrator;return t?t.firstName+" "+t.lastName:this.customer.firstName+" "+this.customer.lastName},e.prototype.addNoteToCustomer=function(){this.addNote.emit({note:this.note}),this.note=""},e}();I.decorators=[{type:t.Component,args:[{selector:"vdr-customer-history",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',changeDetection:t.ChangeDetectionStrategy.OnPush,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)}"]}]}],I.propDecorators={customer:[{type:t.Input}],history:[{type:t.Input}],addNote:[{type:t.Output}],updateNote:[{type:t.Output}],deleteNote:[{type:t.Output}]};var E=function(e){function t(t,r,n,o,a){var i=e.call(this,r,n)||this;return i.dataService=t,i.modalService=o,i.notificationService=a,i.emailSearchTerm=new s.FormControl(""),i.lastNameSearchTerm=new s.FormControl(""),e.prototype.setQueryFn.call(i,(function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return(e=i.dataService.customer).getCustomerList.apply(e,y(t)).refetchOnChannelChange()}),(function(e){return e.customers}),(function(e,t){return{options:{skip:e,take:t,filter:{emailAddress:{contains:i.emailSearchTerm.value},lastName:{contains:i.lastNameSearchTerm.value}},sort:{createdAt:d.SortOrder.DESC}}}})),i}return g(t,e),t.prototype.ngOnInit=function(){var t=this;e.prototype.ngOnInit.call(this),n.merge(this.emailSearchTerm.valueChanges,this.lastNameSearchTerm.valueChanges).pipe(o.filter((function(e){return 2<e.length||0===e.length})),o.debounceTime(250),o.takeUntil(this.destroy$)).subscribe((function(){return t.refresh()}))},t.prototype.deleteCustomer=function(e){var t=this;return this.modalService.dialog({title:i.marker("catalog.confirm-delete-customer"),body:e.firstName+" "+e.lastName,buttons:[{type:"secondary",label:i.marker("common.cancel")},{type:"danger",label:i.marker("common.delete"),returnValue:!0}]}).pipe(o.switchMap((function(r){return r?t.dataService.customer.deleteCustomer(e.id):n.EMPTY}))).subscribe((function(){t.notificationService.success(i.marker("common.notify-delete-success"),{entity:"Customer"}),t.refresh()}),(function(e){t.notificationService.error(i.marker("common.notify-delete-error"),{entity:"Customer"})}))},t}(r.BaseListComponent);E.decorators=[{type:t.Component,args:[{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]="emailSearchTerm"\r\n [placeholder]="\'customer.search-customers-by-email\' | translate"\r\n class="search-input ml3"\r\n />\r\n <input\r\n type="text"\r\n name="lastNameSearchTerm"\r\n [formControl]="lastNameSearchTerm"\r\n [placeholder]="\'customer.search-customers-by-last-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-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}"]}]}],E.ctorParameters=function(){return[{type:r.DataService},{type:a.Router},{type:a.ActivatedRoute},{type:r.ModalService},{type:r.NotificationService}]};var P=function(){};P.decorators=[{type:t.Component,args:[{selector:"vdr-customer-status-label",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',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".registered-user-icon{color:var(--color-grey-300)}.verified-user-icon{color:var(--color-success-500)}"]}]}],P.propDecorators={customer:[{type:t.Input}]};var T=function(e){function t(t,r){return e.call(this,t,{__typename:"Customer",id:"",createdAt:"",updatedAt:"",title:"",firstName:"",lastName:"",emailAddress:"",phoneNumber:null,addresses:null,user:null},(function(e){return r.customer.getCustomer(e).mapStream((function(e){return e.customer}))}))||this}return g(t,e),t}(r.BaseEntityResolver);T.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new T(t.ɵɵinject(a.Router),t.ɵɵinject(r.DataService))},token:T,providedIn:"root"}),T.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],T.ctorParameters=function(){return[{type:a.Router},{type:r.DataService}]};var F={breadcrumb:i.marker("breadcrumb.customers")},N={breadcrumb:k},A={breadcrumb:i.marker("breadcrumb.customer-groups")},O=[{path:"customers",component:E,pathMatch:"",data:F},{path:"customers/:id",component:C,resolve:r.createResolveData(T),canDeactivate:[r.CanDeactivateDetailGuard],data:N},{path:"groups",component:w,data:A}];function k(e,t){return r.detailBreadcrumb({entity:e.entity,id:t.id,breadcrumbKey:"breadcrumb.customers",getName:function(e){return e.firstName+" "+e.lastName},route:"customers"})}var x=function(){};x.decorators=[{type:t.NgModule,args:[{imports:[r.SharedModule,a.RouterModule.forChild(O)],declarations:[E,C,P,m,w,S,l,D,b,I,u],exports:[m]}]}],e.AddCustomerToGroupDialogComponent=l,e.AddressCardComponent=m,e.AddressDetailDialogComponent=u,e.CustomerDetailComponent=C,e.CustomerGroupDetailDialogComponent=S,e.CustomerGroupListComponent=w,e.CustomerGroupMemberListComponent=D,e.CustomerHistoryComponent=I,e.CustomerListComponent=E,e.CustomerModule=x,e.CustomerResolver=T,e.CustomerStatusLabelComponent=P,e.SelectCustomerGroupDialogComponent=b,e.customerBreadcrumb=k,e.customerRoutes=O,e.ɵ0=F,e.ɵ1=N,e.ɵ2=A,Object.defineProperty(e,"__esModule",{value:!0})}));
17
17
  //# sourceMappingURL=vendure-admin-ui-customer.umd.min.js.map