@deenruv/admin-ui-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js +33 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js.map +1 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js +2 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js.map +1 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js +321 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js.map +1 -0
- package/lib/admin-ui/3rdpartylicenses.txt +1393 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js +2 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js.map +1 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js +86 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js.map +1 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js +46 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js.map +1 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js +73 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js.map +1 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js +379 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js.map +1 -0
- package/lib/admin-ui/assets/.gitkeep +0 -0
- package/lib/admin-ui/assets/logo-login.webp +0 -0
- package/lib/admin-ui/assets/logo-top.webp +0 -0
- package/lib/admin-ui/common.868070cec3f2418e.js +2 -0
- package/lib/admin-ui/common.868070cec3f2418e.js.map +1 -0
- package/lib/admin-ui/deenruv-ui-config.json +290 -0
- package/lib/admin-ui/favicon.ico +0 -0
- package/lib/admin-ui/fonts/fonts.scss +253 -0
- package/lib/admin-ui/fonts/inter-cyrillic-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-cyrillic.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-vietnamese.woff2 +0 -0
- package/lib/admin-ui/i18n-messages/ar.json +814 -0
- package/lib/admin-ui/i18n-messages/cs.json +814 -0
- package/lib/admin-ui/i18n-messages/de.json +814 -0
- package/lib/admin-ui/i18n-messages/en.json +814 -0
- package/lib/admin-ui/i18n-messages/es.json +814 -0
- package/lib/admin-ui/i18n-messages/fa.json +814 -0
- package/lib/admin-ui/i18n-messages/fr.json +814 -0
- package/lib/admin-ui/i18n-messages/he.json +814 -0
- package/lib/admin-ui/i18n-messages/hr.json +814 -0
- package/lib/admin-ui/i18n-messages/it.json +814 -0
- package/lib/admin-ui/i18n-messages/nb.json +812 -0
- package/lib/admin-ui/i18n-messages/ne.json +814 -0
- package/lib/admin-ui/i18n-messages/pl.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_BR.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_PT.json +814 -0
- package/lib/admin-ui/i18n-messages/ru.json +814 -0
- package/lib/admin-ui/i18n-messages/sv.json +807 -0
- package/lib/admin-ui/i18n-messages/uk.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hans.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hant.json +814 -0
- package/lib/admin-ui/index.html +14 -0
- package/lib/admin-ui/inter-cyrillic-ext.f62cc866835dd717.woff2 +0 -0
- package/lib/admin-ui/inter-cyrillic.fd42267cbb1bfdb0.woff2 +0 -0
- package/lib/admin-ui/inter-greek-ext.f876a5a3ea45d9a5.woff2 +0 -0
- package/lib/admin-ui/inter-greek.0455348926d6f41d.woff2 +0 -0
- package/lib/admin-ui/inter-latin-ext.7df16007e26681f5.woff2 +0 -0
- package/lib/admin-ui/inter-latin.40c45725dc5f525d.woff2 +0 -0
- package/lib/admin-ui/inter-vietnamese.530676b65c9e977f.woff2 +0 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js +3241 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js.map +1 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js +2 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js.map +1 -0
- package/lib/admin-ui/polyfills.ts +66 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js +2 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js.map +1 -0
- package/lib/admin-ui/styles/_mixins.scss +60 -0
- package/lib/admin-ui/styles/_variables.scss +11 -0
- package/lib/admin-ui/styles/component/prosemirror.scss +511 -0
- package/lib/admin-ui/styles/global/_buttons.scss +147 -0
- package/lib/admin-ui/styles/global/_clarity.scss +140 -0
- package/lib/admin-ui/styles/global/_forms.scss +187 -0
- package/lib/admin-ui/styles/global/_global.scss +41 -0
- package/lib/admin-ui/styles/global/_overrides.scss +165 -0
- package/lib/admin-ui/styles/global/_sass-overrides.scss +8 -0
- package/lib/admin-ui/styles/global/_utilities.scss +155 -0
- package/lib/admin-ui/styles/rtl.scss +143 -0
- package/lib/admin-ui/styles/styles.scss +19 -0
- package/lib/admin-ui/styles/theme/dark.scss +591 -0
- package/lib/admin-ui/styles/theme/default.scss +254 -0
- package/lib/admin-ui/styles/ui-extension-theme.scss +13 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css +3 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/src/api/metrics.resolver.d.ts +8 -0
- package/lib/src/api/metrics.resolver.js +41 -0
- package/lib/src/api/metrics.resolver.js.map +1 -0
- package/lib/src/config/metrics-strategies.d.ts +39 -0
- package/lib/src/config/metrics-strategies.js +92 -0
- package/lib/src/config/metrics-strategies.js.map +1 -0
- package/lib/src/constants.d.ts +7 -0
- package/lib/src/constants.js +286 -0
- package/lib/src/constants.js.map +1 -0
- package/lib/src/plugin.d.ts +129 -0
- package/lib/src/plugin.js +332 -0
- package/lib/src/plugin.js.map +1 -0
- package/lib/src/service/metrics.service.d.ts +16 -0
- package/lib/src/service/metrics.service.js +144 -0
- package/lib/src/service/metrics.service.js.map +1 -0
- package/lib/src/types.d.ts +23 -0
- package/lib/src/types.js +14 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"697.ff9c92dd4b564093.js","mappings":"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","names":["i0","CustomerStatusLabelComponent_vdr_chip_0_ng_container_1_Template","CustomerStatusLabelComponent_vdr_chip_0_ng_container_2_Template","ctx_r0","customer","user","verified","CustomerStatusLabelComponent","selectors","inputs","decls","vars","consts","template","rf","ctx","CustomerStatusLabelComponent_vdr_chip_0_Template","CustomerStatusLabelComponent_vdr_chip_1_Template","id","customerGroup_r1","customer_r2","createdAt","customer_r3","_c0","customer_r4","title","firstName","lastName","customer_r5","customer_r6","emailAddress","CustomerGroupMemberListComponent","constructor","router","dataService","this","selectedMemberIds","selectionChange","EventEmitter","fetchParamsChange","filterTermControl","FormControl","selectionManager","SelectionManager","multiSelect","itemsAreEqual","a","b","additiveMode","refresh$","BehaviorSubject","destroy$","Subject","ngOnInit","membersCurrentPage$","route","paramMap","pipe","map","qpm","get","page","startWith","distinctUntilChanged","membersItemsPerPage$","perPage","filterTerm$","valueChanges","debounceTime","tap","setContentsPageNumber","combineLatest","takeUntil","subscribe","currentPage","itemsPerPage","filterTerm","take","skip","emit","setCurrentItems","members","filter","m","includes","selectionChanges$","selection","s","ngOnDestroy","next","complete","setParam","setContentsItemsPerPage","refresh","key","value","navigate","snapshot","params","relativeTo","queryParamsHandling","i1","i2","locationId","totalItems","activeGroup","outputs","$event","CustomerGroupMemberListComponent_ng_template_8_Template","CustomerGroupMemberListComponent_ng_template_11_Template","CustomerGroupMemberListComponent_ng_template_14_Template","CustomerGroupMemberListComponent_ng_template_17_Template","CustomerGroupMemberListComponent_ng_template_20_Template","CustomerGroupMemberListComponent_ng_template_23_Template","group","name","_r2","cancel","add","selectedCustomerIds","length","_c1","AddCustomerToGroupDialogComponent","fetchGroupMembers$","customerResult$","switchMap","getCustomerList","mapStream","res","customers","customers$","items","customersTotal$","resolveWith","AddCustomerToGroupDialogComponent_ng_template_0_Template","AddCustomerToGroupDialogComponent_ng_template_4_Template","streetLine1_r1","countryCode_r2","AddressDetailDialogComponent_ng_template_0_span_0_Template","AddressDetailDialogComponent_ng_template_0_span_1_Template","tmp_1_0","ctx_r2","addressForm","tmp_2_0","_r4","save","valid","touched","AddressDetailDialogComponent","changeDetector","availableCountries","markForCheck","AddressDetailDialogComponent_ng_template_0_Template","AddressDetailDialogComponent_ng_template_2_Template","customFields","address_r1","streetLine1","editAddress","setAsDefaultShippingAddress","setAsDefaultBillingAddress","delete","isDefaultShipping","isDefaultBilling","AddressCardComponent_div_0_span_3_Template","AddressCardComponent_div_0_vdr_chip_6_Template","AddressCardComponent_div_0_vdr_chip_7_Template","AddressCardComponent_div_0_ng_container_14_Template","countryCode","editable","AddressCardComponent","modalService","setAsDefaultShipping","setAsDefaultBilling","deleteAddress","dataDependenciesPopulated","ngOnChanges","changes","getCountryName","match","find","c","code","markAsDirty","fromComponent","locals","size","closable","features","AddressCardComponent_div_0_Template","isArray","Array","merge","args","scheduler","popScheduler","concurrent","popNumber","Infinity","argsOrArgArray","operate","source","subscriber","mergeAll","from","ctx_r1","_r1","item_r3","item","clear_r4","clear","item_r5","_r6","ctx_r6","selectedGroupIds","SelectCustomerGroupDialogComponent","groups$","getCustomerGroupList","customerGroups","SelectCustomerGroupDialogComponent_ng_template_0_Template","SelectCustomerGroupDialogComponent_ng_template_3_Template","SelectCustomerGroupDialogComponent_ng_template_4_Template","SelectCustomerGroupDialogComponent_ng_template_5_Template","CustomerHistoryEntryHostComponent","historyEntryComponentService","expandClick","componentType","getComponent","entry","type","componentRef","portalRef","createComponent","instance","destroy","viewQuery","ViewContainerRef","getDisplayType","getIconShape","getName","isFeatured","expanded","note","addNoteToCustomer","_r3","entry_r4","data","strategy","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_2_ng_container_4_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_2_ng_template_5_Template","namedStrategy_r5","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_3_ng_container_4_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_3_ng_template_5_Template","namedStrategy_r6","input","groupName","address","oldEmailAddress","newEmailAddress","_r7","$implicit","updateNote","deleteNote","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_16_vdr_history_entry_detail_4_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_2_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_3_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_4_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_5_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_6_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_7_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_8_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_9_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_10_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_11_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_12_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_13_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_14_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_15_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_ng_container_16_Template","getTimelineIcon","CUSTOMER_REGISTERED","CUSTOMER_VERIFIED","CUSTOMER_DETAIL_UPDATED","CUSTOMER_ADDED_TO_GROUP","CUSTOMER_REMOVED_FROM_GROUP","CUSTOMER_ADDRESS_CREATED","CUSTOMER_ADDRESS_UPDATED","CUSTOMER_ADDRESS_DELETED","CUSTOMER_PASSWORD_UPDATED","CUSTOMER_PASSWORD_RESET_REQUESTED","CUSTOMER_PASSWORD_RESET_VERIFIED","CUSTOMER_EMAIL_UPDATE_REQUESTED","CUSTOMER_EMAIL_UPDATE_VERIFIED","CUSTOMER_NOTE","CustomerHistoryComponent_ng_container_2_vdr_customer_history_entry_host_1_Template","CustomerHistoryComponent_ng_container_2_ng_template_2_Template","hasCustomComponent","defaultComponents_r8","CustomerHistoryComponent","addNote","HistoryEntryType","administrator","history","CustomerHistoryComponent_vdr_timeline_entry_1_Template","CustomerHistoryComponent_ng_container_2_Template","create","addressDefaultsUpdated","detailForm","dirty","CustomerDetailComponent_ng_template_7_button_0_Template","lastLogin_r4","CustomerDetailComponent_vdr_card_12_vdr_labeled_data_2_Template","lastLogin","group_r7","removeFromGroup","CustomerDetailComponent_vdr_card_14_div_2_vdr_chip_1_Template","groups_r8","_r9","addToGroup","CustomerDetailComponent_vdr_card_14_div_2_Template","CustomerDetailComponent_vdr_card_14_ng_template_3_Template","CustomerDetailComponent_vdr_card_14_button_6_Template","noGroups_r10","entity_r11","_r13","setDefaultBillingAddressId","setDefaultShippingAddressId","toggleDeleteAddress","addressesToDeleteIds","has","addressForm_r14","availableCountries$","defaultBillingAddressId","defaultShippingAddressId","addressCustomFields","_r15","addAddress","order_r16","order_r17","order_r18","order_r19","order_r20","state","order_r21","totalWithTax","currencyCode","order_r22","updatedAt","order_r23","orderPlacedAt","customField_r24","CustomerDetailComponent_ng_container_48_vdr_address_card_4_Template","CustomerDetailComponent_ng_container_48_button_5_Template","_r12","setOrderItemsPerPage","setOrderCurrentPage","CustomerDetailComponent_ng_container_48_ng_template_14_Template","CustomerDetailComponent_ng_container_48_ng_template_17_Template","CustomerDetailComponent_ng_container_48_ng_template_20_Template","CustomerDetailComponent_ng_container_48_ng_template_23_Template","CustomerDetailComponent_ng_container_48_ng_template_26_Template","CustomerDetailComponent_ng_container_48_ng_template_29_Template","CustomerDetailComponent_ng_container_48_ng_template_32_Template","CustomerDetailComponent_ng_container_48_ng_template_35_Template","CustomerDetailComponent_ng_container_48_vdr_dt2_custom_field_column_36_Template","getAddressFormControls","orders$","ordersPerPage","ordersCount$","currentOrdersPage","entity$","history$","CUSTOMER_DETAIL_QUERY","gql","CUSTOMER_FRAGMENT","CustomerDetailComponent","TypedBaseDetailComponent","formBuilder","notificationService","super","getCustomFieldConfig","Validators","required","phoneNumber","email","password","getCustomFieldsDefaults","addresses","UntypedFormArray","fetchHistory","Set","orderListUpdates$","init","settings","getAvailableCountries","mapSingle","result","countries","shareReplay","customerWithUpdates$","orders","getCustomerHistory","sort","SortOrder","DESC","controls","addressFormArray","newAddress","fullName","company","streetLine2","city","province","postalCode","defaultShippingAddress","defaultBillingAddress","reduce","hash","field","push","fetchOrdersList","customerForm","createCustomer","__typename","success","_","entity","notify","message","translationVars","duration","markAsPristine","error","mergeMap","saveOperations","formValue","updateCustomer","addressControl","deleteCustomerAddress","updateCustomerAddress","createCustomerAddress","forkJoin","notified","refreshCustomer","err","groupIds","EMPTY","concatMap","groupId","addCustomersToGroup","customerCount","dialog","buttons","label","returnValue","response","removeCustomersFromGroup","EditNoteDialogComponent","displayPrivacyControls","updateCustomerNote","noteId","body","deleteCustomerNote","setFormValues","customerGroup","patchValue","addressesArray","rest","addressGroup","country","setControl","setCustomFieldFormValues","query","CustomerDetailQueryDocument","orderListOptions","single$","notNullOrUndefined","CustomerDetailComponent_button_5_Template","CustomerDetailComponent_ng_template_7_Template","CustomerDetailComponent_vdr_card_12_Template","CustomerDetailComponent_vdr_card_14_Template","CustomerDetailComponent_vdr_page_entity_info_17_Template","CustomerDetailComponent_vdr_form_field_44_Template","CustomerDetailComponent_vdr_card_46_Template","CustomerDetailComponent_ng_container_48_Template","isNew$","updateButton_r25","tmp_4_0","groups","CustomerGroupDetailComponent_ng_template_7_button_0_Template","entity_r4","CUSTOMER_GROUP_DETAIL_QUERY","CustomerGroupDetailComponent","formvalue","createCustomerGroup","customerIds","updateCustomerGroup","CustomerGroupDetailComponent_button_5_Template","CustomerGroupDetailComponent_ng_template_7_Template","CustomerGroupDetailComponent_vdr_card_13_Template","CustomerGroupDetailComponent_vdr_card_21_Template","updateButton_r5","CustomerGroupDetailDialogComponent_ng_template_0_span_0_Template","CustomerGroupDetailDialogComponent_ng_template_0_span_1_Template","form","CustomerGroupDetailDialogComponent_ng_template_7_span_4_Template","CustomerGroupDetailDialogComponent_ng_template_7_span_5_Template","CustomerGroupDetailDialogComponent","serverConfigService","getCustomFieldsFor","customFieldsGroup","fieldDef","control","CustomerGroupDetailDialogComponent_ng_template_0_Template","CustomerGroupDetailDialogComponent_section_6_Template","CustomerGroupDetailDialogComponent_ng_template_7_Template","deleteCustomerGroupsBulkAction","createBulkDeleteAction","location","requiresPermission","userPermissions","Permission","DeleteCustomerGroup","getItemName","bulkDelete","ids","deleteCustomerGroups","customerGroup_r3","customerGroup_r4","customerGroup_r5","customerGroup_r6","_c2","customerGroup_r7","setPageNumber","setItemsPerPage","CustomerGroupListComponent_ng_template_9_ng_template_11_Template","CustomerGroupListComponent_ng_template_9_ng_template_14_Template","CustomerGroupListComponent_ng_template_9_ng_template_17_Template","CustomerGroupListComponent_ng_template_9_ng_template_20_Template","CustomerGroupListComponent_ng_template_9_ng_template_23_Template","items$","itemsPerPage$","totalItems$","currentPage$","filters","activeIndex$","searchTermControl","sorts","activeGroup_r9","_r8","ngIf","_c3","members$","membersTotal$","activeGroup$","CustomerGroupListComponent_ng_template_10_ng_container_0_Template","GET_CUSTOMER_GROUP_LIST","CUSTOMER_GROUP_FRAGMENT","CustomerGroupListComponent","TypedBaseListComponent","createFilterCollection","addIdFilter","addDateFilters","addFilter","kind","filterField","connectToRoute","createSortCollection","defaultSort","addSort","refreshActiveGroupMembers$","undefined","configure","document","GetCustomerGroupListDocument","getItems","setVariables","options","contains","createFilterInput","createSortInput","refreshListOnChanges","activeGroupId$","pm","listIsEmpty$","activeGroupId","g","findIndex","membersResult$","getCustomerGroupWithCustomers","of","closeMembers","contents","verticalAlign","mapTo","CustomerGroupListComponent_a_5_Template","CustomerGroupListComponent_ng_template_9_Template","CustomerGroupListComponent_ng_template_10_Template","removeCustomerGroupMembersBulkAction","icon","iconClass","UpdateCustomerGroup","onClick","injector","hostComponent","clearSelection","ModalService","DataService","NotificationService","deleteCustomersBulkAction","DeleteCustomer","deleteCustomers","customer_r1","field_r7","ctx_r7","CUSTOMER_LIST_QUERY","CustomerListComponent","addCustomFieldFilters","addCustomFieldSorts","CustomerListQueryDocument","filterOperator","LogicalOperator","OR","AND","CustomerListComponent_a_5_Template","CustomerListComponent_ng_template_17_Template","CustomerListComponent_ng_template_20_Template","CustomerListComponent_ng_template_23_Template","CustomerListComponent_ng_template_26_Template","CustomerListComponent_ng_template_29_Template","CustomerListComponent_ng_template_32_Template","CustomerListComponent_vdr_dt2_custom_field_column_33_Template","createRoutes","pageService","path","component","PageComponent","breadcrumb","children","getPageTabRoutes","link","customerBreadcrumb","detailBreadcrumb","breadcrumbKey","CustomerModule","hasRegisteredTabsAndBulkActions","bulkActionRegistryService","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","entityKey","variables","getBreadcrumbs","GetCustomerGroupDetailDocument","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/lib/customer/src/components/customer-status-label/customer-status-label.component.html","./src/lib/customer/src/components/customer-status-label/customer-status-label.component.ts","./src/lib/customer/src/components/customer-group-member-list/customer-group-member-list.component.html","./src/lib/customer/src/components/customer-group-member-list/customer-group-member-list.component.ts","./src/lib/customer/src/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.html","./src/lib/customer/src/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.ts","./src/lib/customer/src/components/address-detail-dialog/address-detail-dialog.component.html","./src/lib/customer/src/components/address-detail-dialog/address-detail-dialog.component.ts","./src/lib/customer/src/components/address-card/address-card.component.html","./src/lib/customer/src/components/address-card/address-card.component.ts","../node_modules/.pnpm/rxjs@7.8.1/node_modules/rxjs/dist/esm/internal/util/argsOrArgArray.js","../node_modules/.pnpm/rxjs@7.8.1/node_modules/rxjs/dist/esm/internal/operators/merge.js","./src/lib/customer/src/components/select-customer-group-dialog/select-customer-group-dialog.component.html","./src/lib/customer/src/components/select-customer-group-dialog/select-customer-group-dialog.component.ts","./src/lib/customer/src/components/customer-history/customer-history-entry-host.component.ts","./src/lib/customer/src/components/customer-history/customer-history.component.html","./src/lib/customer/src/components/customer-history/customer-history.component.ts","./src/lib/customer/src/components/customer-detail/customer-detail.component.html","./src/lib/customer/src/components/customer-detail/customer-detail.component.ts","./src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.html","./src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.ts","./src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.html","./src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.ts","./src/lib/customer/src/components/customer-group-list/customer-group-list-bulk-actions.ts","./src/lib/customer/src/components/customer-group-list/customer-group-list.component.html","./src/lib/customer/src/components/customer-group-list/customer-group-list.component.ts","./src/lib/customer/src/components/customer-group-member-list/customer-group-member-list-bulk-actions.ts","./src/lib/customer/src/components/customer-list/customer-list-bulk-actions.ts","./src/lib/customer/src/components/customer-list/customer-list.component.html","./src/lib/customer/src/components/customer-list/customer-list.component.ts","./src/lib/customer/src/customer.routes.ts","./src/lib/customer/src/customer.module.ts"],"sourcesContent":["<vdr-chip *ngIf=\"customer.user?.id\">\n <ng-container *ngIf=\"customer.user?.verified\">\n <clr-icon shape=\"check-circle\" class=\"verified-user-icon\"></clr-icon>\n {{ 'customer.verified' | translate }}\n </ng-container>\n <ng-container *ngIf=\"!customer.user?.verified\">\n <clr-icon shape=\"check-circle\" class=\"registered-user-icon\"></clr-icon>\n {{ 'customer.registered' | translate }}\n </ng-container>\n</vdr-chip>\n<vdr-chip *ngIf=\"!customer.user?.id\">{{ 'customer.guest' | translate }}</vdr-chip>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CustomerFragment } from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-customer-status-label',\n templateUrl: './customer-status-label.component.html',\n styleUrls: ['./customer-status-label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerStatusLabelComponent {\n @Input() customer: CustomerFragment;\n}\n","<vdr-data-table-2\n [id]=\"locationId\"\n [items]=\"members\"\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\n [totalItems]=\"totalItems\"\n [currentPage]=\"membersCurrentPage$ | async\"\n (pageChange)=\"setContentsPageNumber($event)\"\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n [locationId]=\"locationId\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n ></vdr-bulk-action-menu>\n <vdr-dt2-search\n [searchTermControl]=\"filterTermControl\"\n [searchTermPlaceholder]=\"'customer.search-customers-by-email' | translate\"\n ></vdr-dt2-search>\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\n <ng-template let-customer=\"item\">\n {{ customer.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\n <ng-template let-customer=\"item\">\n {{ customer.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.name' | translate\" id=\"name\" [optional]=\"false\">\n <ng-template let-customer=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/customer/customers', customer.id]\"\n ><span> {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }} </span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.status' | translate\" id=\"status\" [hiddenByDefault]=\"true\">\n <ng-template let-customer=\"item\">\n <vdr-customer-status-label [customer]=\"customer\" />\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.email-address' | translate\" id=\"email-address\">\n <ng-template let-customer=\"item\">\n {{ customer.emailAddress }}\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n BulkActionLocationId,\n Customer,\n DataService,\n GetCustomerGroupsQuery,\n ItemOf,\n SelectionManager,\n} from '@deenruv/admin-ui/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport interface CustomerGroupMemberFetchParams {\n skip: number;\n take: number;\n filterTerm: string;\n}\n\nexport type CustomerGroupMember = Pick<\n Customer,\n 'id' | 'createdAt' | 'updatedAt' | 'title' | 'firstName' | 'lastName' | 'emailAddress'\n>;\n\n@Component({\n selector: 'vdr-customer-group-member-list',\n templateUrl: './customer-group-member-list.component.html',\n styleUrls: ['./customer-group-member-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerGroupMemberListComponent implements OnInit, OnDestroy {\n @Input() locationId: BulkActionLocationId;\n @Input() members: CustomerGroupMember[];\n @Input() totalItems: number;\n @Input() route: ActivatedRoute;\n @Input() selectedMemberIds: string[] = [];\n @Input() activeGroup: ItemOf<GetCustomerGroupsQuery, 'customerGroups'>;\n @Output() selectionChange = new EventEmitter<string[]>();\n @Output() fetchParamsChange = new EventEmitter<CustomerGroupMemberFetchParams>();\n\n membersItemsPerPage$: Observable<number>;\n membersCurrentPage$: Observable<number>;\n filterTermControl = new FormControl('');\n selectionManager = new SelectionManager<CustomerGroupMember>({\n multiSelect: true,\n itemsAreEqual: (a, b) => a.id === b.id,\n additiveMode: true,\n });\n private refresh$ = new BehaviorSubject<boolean>(true);\n private destroy$ = new Subject<void>();\n\n constructor(\n private router: Router,\n private dataService: DataService,\n ) {}\n\n ngOnInit() {\n this.membersCurrentPage$ = this.route.paramMap.pipe(\n map(qpm => qpm.get('membersPage')),\n map(page => (!page ? 1 : +page)),\n startWith(1),\n distinctUntilChanged(),\n );\n\n this.membersItemsPerPage$ = this.route.paramMap.pipe(\n map(qpm => qpm.get('membersPerPage')),\n map(perPage => (!perPage ? 10 : +perPage)),\n startWith(10),\n distinctUntilChanged(),\n );\n\n const filterTerm$ = this.filterTermControl.valueChanges.pipe(\n debounceTime(250),\n tap(() => this.setContentsPageNumber(1)),\n startWith(''),\n );\n\n combineLatest(this.membersCurrentPage$, this.membersItemsPerPage$, filterTerm$, this.refresh$)\n .pipe(takeUntil(this.destroy$))\n .subscribe(([currentPage, itemsPerPage, filterTerm]) => {\n const take = itemsPerPage;\n const skip = (currentPage - 1) * itemsPerPage;\n this.fetchParamsChange.emit({\n filterTerm: filterTerm ?? '',\n skip,\n take,\n });\n });\n this.selectionManager.setCurrentItems(\n this.members?.filter(m => this.selectedMemberIds.includes(m.id)) ?? [],\n );\n this.selectionManager.selectionChanges$.pipe(takeUntil(this.destroy$)).subscribe(selection => {\n this.selectionChange.emit(selection.map(s => s.id));\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n setContentsPageNumber(page: number) {\n this.setParam('membersPage', page);\n }\n\n setContentsItemsPerPage(perPage: number) {\n this.setParam('membersPerPage', perPage);\n }\n\n refresh() {\n this.refresh$.next(true);\n }\n\n private setParam(key: string, value: any) {\n this.router.navigate(['./', { ...this.route.snapshot.params, [key]: value }], {\n relativeTo: this.route,\n queryParamsHandling: 'merge',\n });\n }\n}\n","<ng-template vdrDialogTitle>\n {{ 'customer.add-customers-to-group-with-name' | translate: {groupName: group.name} }}\n</ng-template>\n\n<vdr-customer-group-member-list\n locationId=\"customer-group-members-picker-list\"\n [members]=\"customers$ | async\"\n [totalItems]=\"customersTotal$ | async\"\n [route]=\"route\"\n [selectedMemberIds]=\"selectedCustomerIds\"\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\n (selectionChange)=\"selectedCustomerIds = $event\"\n/>\n\n<ng-template vdrDialogButtons>\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedCustomerIds.length\" class=\"btn btn-primary\">\n {{ 'customer.add-customers-to-group-with-count' | translate: {count: selectedCustomerIds.length} }}\n </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n DataService,\n Dialog,\n GetCustomerGroupsQuery,\n GetCustomerListQuery,\n ItemOf,\n} from '@deenruv/admin-ui/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { CustomerGroupMemberFetchParams } from '../customer-group-member-list/customer-group-member-list.component';\n\n@Component({\n selector: 'vdr-add-customer-to-group-dialog',\n templateUrl: './add-customer-to-group-dialog.component.html',\n styleUrls: ['./add-customer-to-group-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddCustomerToGroupDialogComponent implements Dialog<string[]>, OnInit {\n resolveWith: (result?: string[]) => void;\n group: ItemOf<GetCustomerGroupsQuery, 'customerGroups'>;\n route: ActivatedRoute;\n selectedCustomerIds: string[] = [];\n customers$: Observable<GetCustomerListQuery['customers']['items']>;\n customersTotal$: Observable<number>;\n fetchGroupMembers$ = new BehaviorSubject<CustomerGroupMemberFetchParams>({\n skip: 0,\n take: 10,\n filterTerm: '',\n });\n\n constructor(private dataService: DataService) {}\n\n ngOnInit() {\n const customerResult$ = this.fetchGroupMembers$.pipe(\n switchMap(({ skip, take, filterTerm }) =>\n this.dataService.customer\n .getCustomerList(take, skip, filterTerm)\n .mapStream(res => res.customers),\n ),\n );\n\n this.customers$ = customerResult$.pipe(map(res => res.items));\n this.customersTotal$ = customerResult$.pipe(map(res => res.totalItems));\n }\n\n cancel() {\n this.resolveWith();\n }\n\n add() {\n this.resolveWith(this.selectedCustomerIds);\n }\n}\n","<ng-template vdrDialogTitle>\n <span *ngIf=\"addressForm.get('streetLine1')?.value as streetLine1\">{{ streetLine1 }},</span>\n <span *ngIf=\"addressForm.get('countryCode')?.value as countryCode\"> {{ countryCode }}</span>\n</ng-template>\n\n<vdr-address-form\n [formGroup]=\"addressForm\"\n [availableCountries]=\"availableCountries\"\n [customFields]=\"customFields\"\n></vdr-address-form>\n\n<ng-template vdrDialogButtons>\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n <button\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!addressForm.valid || !addressForm.touched\"\n class=\"btn btn-primary\"\n >\n {{ 'common.update' | translate }}\n </button>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { CustomFieldConfig, Dialog, GetAvailableCountriesQuery } from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-address-detail-dialog',\n templateUrl: './address-detail-dialog.component.html',\n styleUrls: ['./address-detail-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddressDetailDialogComponent implements Dialog<UntypedFormGroup>, OnInit {\n addressForm: UntypedFormGroup;\n customFields: CustomFieldConfig;\n availableCountries: GetAvailableCountriesQuery['countries']['items'] = [];\n resolveWith: (result?: UntypedFormGroup) => void;\n\n constructor(private changeDetector: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.addressForm.valueChanges.subscribe(() => this.changeDetector.markForCheck());\n }\n\n cancel() {\n this.resolveWith();\n }\n\n save() {\n this.resolveWith(this.addressForm);\n }\n}\n","<div class=\"card\" *ngIf=\"addressForm.value as address\">\n <div class=\"card-header\">\n <div class=\"address-title\">\n <span class=\"street-line\" *ngIf=\"address.streetLine1\">{{ address.streetLine1 }},</span>\n {{ address.countryCode }}\n </div>\n <div class=\"default-controls\">\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultShipping\">\n <clr-icon shape=\"truck\"></clr-icon>\n {{ 'customer.default-shipping-address' | translate }}\n </vdr-chip>\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultBilling\">\n <clr-icon shape=\"credit-card\"></clr-icon>\n {{ 'customer.default-billing-address' | translate }}\n </vdr-chip>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"card-text\">\n <vdr-formatted-address [address]=\"address\"></vdr-formatted-address>\n </div>\n </div>\n <div class=\"card-footer\">\n <div class=\"address-actions\">\n <vdr-entity-info [entity]=\"address\"></vdr-entity-info>\n <ng-container *ngIf=\"editable\">\n <button class=\"button-small\" (click)=\"editAddress()\">\n {{ 'common.edit' | translate }}\n </button>\n <vdr-dropdown>\n <button type=\"button\" class=\"button-small\" vdrDropdownTrigger>\n {{ 'common.more' | translate }}\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\n </button>\n <vdr-dropdown-menu>\n <button\n vdrDropdownItem\n [disabled]=\"isDefaultShipping\"\n (click)=\"setAsDefaultShippingAddress()\"\n >\n {{ 'customer.set-as-default-shipping-address' | translate }}\n </button>\n <button\n vdrDropdownItem\n [disabled]=\"isDefaultBilling\"\n (click)=\"setAsDefaultBillingAddress()\"\n >\n {{ 'customer.set-as-default-billing-address' | translate }}\n </button>\n <div class=\"dropdown-divider\"></div>\n <button type=\"button\" (click)=\"delete()\" vdrDropdownItem>\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'common.delete' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </ng-container>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { CustomFieldConfig, GetAvailableCountriesQuery, ModalService } from '@deenruv/admin-ui/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\nimport { AddressDetailDialogComponent } from '../address-detail-dialog/address-detail-dialog.component';\n\n@Component({\n selector: 'vdr-address-card',\n templateUrl: './address-card.component.html',\n styleUrls: ['./address-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddressCardComponent implements OnInit, OnChanges {\n @Input() addressForm: UntypedFormGroup;\n @Input() customFields: CustomFieldConfig;\n @Input() availableCountries: GetAvailableCountriesQuery['countries']['items'] = [];\n @Input() isDefaultBilling: string;\n @Input() isDefaultShipping: string;\n @Input() editable = true;\n @Output() setAsDefaultShipping = new EventEmitter<string>();\n @Output() setAsDefaultBilling = new EventEmitter<string>();\n @Output() deleteAddress = new EventEmitter<string>();\n private dataDependenciesPopulated = new BehaviorSubject<boolean>(false);\n\n constructor(\n private modalService: ModalService,\n private changeDetector: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n const streetLine1 = this.addressForm.get('streetLine1') as UntypedFormControl;\n // Make the address dialog display automatically if there is no address line\n // as is the case when adding a new address.\n if (!streetLine1.value) {\n this.dataDependenciesPopulated\n .pipe(\n filter(value => value),\n take(1),\n )\n .subscribe(() => {\n this.editAddress();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.customFields != null && this.availableCountries != null) {\n this.dataDependenciesPopulated.next(true);\n }\n }\n\n getCountryName(countryCode: string) {\n if (!this.availableCountries) {\n return '';\n }\n const match = this.availableCountries.find(c => c.code === countryCode);\n return match ? match.name : '';\n }\n\n setAsDefaultBillingAddress() {\n this.setAsDefaultBilling.emit(this.addressForm.value.id);\n this.addressForm.markAsDirty();\n }\n\n setAsDefaultShippingAddress() {\n this.setAsDefaultShipping.emit(this.addressForm.value.id);\n this.addressForm.markAsDirty();\n }\n\n delete() {\n this.deleteAddress.emit(this.addressForm.value.id);\n this.addressForm.markAsDirty();\n }\n\n editAddress() {\n this.modalService\n .fromComponent(AddressDetailDialogComponent, {\n locals: {\n addressForm: this.addressForm,\n customFields: this.customFields,\n availableCountries: this.availableCountries,\n },\n size: 'md',\n closable: true,\n })\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n}\n","const { isArray } = Array;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n","import { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mergeAll } from './mergeAll';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from '../observable/from';\nexport function merge(...args) {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n args = argsOrArgArray(args);\n return operate((source, subscriber) => {\n mergeAll(concurrent)(from([source, ...args], scheduler)).subscribe(subscriber);\n });\n}\n","<ng-template vdrDialogTitle>\n {{ 'customer.add-customer-to-group' | translate }}\n</ng-template>\n\n<ng-select\n [items]=\"groups$ | async\"\n appendTo=\"body\"\n [addTag]=\"false\"\n [multiple]=\"true\"\n bindValue=\"id\"\n [(ngModel)]=\"selectedGroupIds\"\n [clearable]=\"true\"\n [searchable]=\"false\"\n>\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\n <span aria-hidden=\"true\" class=\"ng-value-icon left\" (click)=\"clear(item)\"> × </span>\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\n </ng-template>\n <ng-template ng-option-tmp let-item=\"item\">\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\n </ng-template>\n</ng-select>\n\n\n<ng-template vdrDialogButtons>\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedGroupIds.length\" class=\"btn btn-primary\">\n {{ 'customer.add-customer-to-groups-with-count' | translate: {count: selectedGroupIds.length} }}\n </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { DataService, Dialog, GetCustomerGroupsQuery, ItemOf } from '@deenruv/admin-ui/core';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'vdr-select-customer-group-dialog',\n templateUrl: './select-customer-group-dialog.component.html',\n styleUrls: ['./select-customer-group-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectCustomerGroupDialogComponent implements Dialog<string[]>, OnInit {\n resolveWith: (result?: string[]) => void;\n groups$: Observable<Array<ItemOf<GetCustomerGroupsQuery, 'customerGroups'>>>;\n selectedGroupIds: string[] = [];\n\n constructor(private dataService: DataService) {}\n\n ngOnInit() {\n this.groups$ = this.dataService.customer\n .getCustomerGroupList()\n .mapStream(res => res.customerGroups.items);\n }\n\n cancel() {\n this.resolveWith();\n }\n\n add() {\n this.resolveWith(this.selectedGroupIds);\n }\n}\n","import {\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n CustomerFragment,\n CustomerHistoryEntryComponent,\n HistoryEntryComponentService,\n TimelineHistoryEntry,\n} from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-customer-history-entry-host',\n template: ` <vdr-timeline-entry\n [displayType]=\"instance.getDisplayType(entry)\"\n [iconShape]=\"instance.getIconShape && instance.getIconShape(entry)\"\n [createdAt]=\"entry.createdAt\"\n [name]=\"instance.getName && instance.getName(entry)\"\n [featured]=\"instance.isFeatured(entry)\"\n [collapsed]=\"!expanded && !instance.isFeatured(entry)\"\n (expandClick)=\"expandClick.emit()\"\n >\n <div #portal></div>\n </vdr-timeline-entry>`,\n exportAs: 'historyEntry',\n})\nexport class CustomerHistoryEntryHostComponent implements OnInit, OnDestroy {\n @Input() entry: TimelineHistoryEntry;\n @Input() customer: CustomerFragment;\n @Input() expanded: boolean;\n @Output() expandClick = new EventEmitter<void>();\n @ViewChild('portal', { static: true, read: ViewContainerRef }) portalRef: ViewContainerRef;\n instance: CustomerHistoryEntryComponent;\n private componentRef: ComponentRef<CustomerHistoryEntryComponent>;\n\n constructor(private historyEntryComponentService: HistoryEntryComponentService) {}\n\n ngOnInit(): void {\n const componentType = this.historyEntryComponentService.getComponent(\n this.entry.type,\n ) as Type<CustomerHistoryEntryComponent>;\n\n const componentRef = this.portalRef.createComponent(componentType);\n componentRef.instance.entry = this.entry;\n componentRef.instance.customer = this.customer;\n this.instance = componentRef.instance;\n this.componentRef = componentRef;\n }\n\n ngOnDestroy() {\n this.componentRef?.destroy();\n }\n}\n","<div class=\"entry-list\">\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\" *vdrIfPermissions=\"'UpdateCustomer'\"\n [isFirst]=\"true\">\n <div class=\"note-entry\">\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\n {{ 'order.add-note' | translate }}\n </button>\n </div>\n </vdr-timeline-entry>\n <ng-container *ngFor=\"let entry of history\">\n <vdr-customer-history-entry-host\n *ngIf=\"hasCustomComponent(entry.type); else defaultComponents\"\n [customer]=\"customer\"\n [entry]=\"entry\"\n [expanded]=\"expanded\"\n (expandClick)=\"expanded = !expanded\"\n ></vdr-customer-history-entry-host>\n <ng-template #defaultComponents>\n <vdr-timeline-entry\n [displayType]=\"getDisplayType(entry)\"\n [iconShape]=\"getTimelineIcon(entry)\"\n [createdAt]=\"entry.createdAt\"\n [name]=\"getName(entry)\"\n [featured]=\"isFeatured(entry)\"\n >\n <ng-container [ngSwitch]=\"entry.type\">\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\n <div class=\"title\">\n {{ 'customer.history-customer-registered' | translate }}\n </div>\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\n {{ 'customer.history-using-native-auth-strategy' | translate }}\n </ng-container>\n <ng-template #namedStrategy>\n {{\n 'customer.history-using-external-auth-strategy'\n | translate: { strategy: entry.data.strategy }\n }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\n <div class=\"title\">\n {{ 'customer.history-customer-verified' | translate }}\n </div>\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\n {{ 'customer.history-using-native-auth-strategy' | translate }}\n </ng-container>\n <ng-template #namedStrategy>\n {{\n 'customer.history-using-external-auth-strategy'\n | translate: { strategy: entry.data.strategy }\n }}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\n <div class=\"flex\">\n {{ 'customer.history-customer-detail-updated' | translate }}\n <vdr-history-entry-detail>\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\n </vdr-history-entry-detail>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\n {{\n 'customer.history-customer-added-to-group'\n | translate: { groupName: entry.data.groupName }\n }}\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\n {{\n 'customer.history-customer-removed-from-group'\n | translate: { groupName: entry.data.groupName }\n }}\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\n {{ 'customer.history-customer-address-created' | translate }}\n <div class=\"flex\">\n <div class=\"address-string\">{{ entry.data.address }}</div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\n {{ 'customer.history-customer-address-updated' | translate }}\n <div class=\"flex\">\n <div class=\"address-string\">{{ entry.data.address }}</div>\n <vdr-history-entry-detail>\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\n </vdr-history-entry-detail>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\n {{ 'customer.history-customer-address-deleted' | translate }}\n <div class=\"address-string\">{{ entry.data.address }}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\n {{ 'customer.history-customer-password-updated' | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\n {{ 'customer.history-customer-password-reset-requested' | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\n {{ 'customer.history-customer-password-reset-verified' | translate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\n <div class=\"flex\">\n {{ 'customer.history-customer-email-update-requested' | translate }}\n <vdr-history-entry-detail>\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\n entry.data.oldEmailAddress\n }}\n </vdr-labeled-data>\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\n entry.data.newEmailAddress\n }}\n </vdr-labeled-data>\n </vdr-history-entry-detail>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\n <div class=\"flex\">\n {{ 'customer.history-customer-email-update-verified' | translate }}\n <vdr-history-entry-detail>\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\n entry.data.oldEmailAddress\n }}\n </vdr-labeled-data>\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\n entry.data.newEmailAddress\n }}\n </vdr-labeled-data>\n </vdr-history-entry-detail>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\n <div class=\"flex\">\n <div class=\"note-text\">\n {{ entry.data.note }}\n </div>\n <div class=\"flex-spacer\"></div>\n <vdr-dropdown>\n <button class=\"button-small ml-1\" vdrDropdownTrigger>\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <button\n vdrDropdownItem\n (click)=\"updateNote.emit(entry)\"\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\n >\n <clr-icon shape=\"edit\"></clr-icon>\n {{ 'common.edit' | translate }}\n </button>\n <div class=\"dropdown-divider\"></div>\n <button\n vdrDropdownItem\n (click)=\"deleteNote.emit(entry)\"\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\n >\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'common.delete' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"title\">\n {{ entry.type | translate }}\n </div>\n <vdr-history-entry-detail *ngIf=\"entry.data\">\n <vdr-object-tree [value]=\"entry.data\"></vdr-object-tree>\n </vdr-history-entry-detail>\n </ng-container>\n </ng-container>\n </vdr-timeline-entry>\n </ng-template>\n </ng-container>\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n CustomerFragment,\n GetCustomerHistoryQuery,\n HistoryEntryComponentService,\n HistoryEntryType,\n TimelineDisplayType,\n TimelineHistoryEntry,\n} from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-customer-history',\n templateUrl: './customer-history.component.html',\n styleUrls: ['./customer-history.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerHistoryComponent {\n @Input() customer: CustomerFragment;\n @Input() history: TimelineHistoryEntry[];\n @Output() addNote = new EventEmitter<{ note: string }>();\n @Output() updateNote = new EventEmitter<TimelineHistoryEntry>();\n @Output() deleteNote = new EventEmitter<TimelineHistoryEntry>();\n note = '';\n expanded = false;\n readonly type = HistoryEntryType;\n\n constructor(private historyEntryComponentService: HistoryEntryComponentService) {}\n\n hasCustomComponent(type: string): boolean {\n return !!this.historyEntryComponentService.getComponent(type);\n }\n\n getDisplayType(entry: TimelineHistoryEntry): TimelineDisplayType {\n switch (entry.type) {\n case HistoryEntryType.CUSTOMER_VERIFIED:\n case HistoryEntryType.CUSTOMER_EMAIL_UPDATE_VERIFIED:\n case HistoryEntryType.CUSTOMER_PASSWORD_RESET_VERIFIED:\n return 'success';\n case HistoryEntryType.CUSTOMER_REGISTERED:\n return 'muted';\n case HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:\n return 'error';\n default:\n return 'default';\n }\n }\n\n getTimelineIcon(entry: TimelineHistoryEntry): string | [string, string] | undefined {\n switch (entry.type) {\n case HistoryEntryType.CUSTOMER_REGISTERED:\n return 'user';\n case HistoryEntryType.CUSTOMER_VERIFIED:\n return ['assign-user', 'is-solid'];\n case HistoryEntryType.CUSTOMER_NOTE:\n return 'note';\n case HistoryEntryType.CUSTOMER_ADDED_TO_GROUP:\n case HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:\n return 'users';\n }\n }\n\n isFeatured(entry: TimelineHistoryEntry): boolean {\n switch (entry.type) {\n case HistoryEntryType.CUSTOMER_REGISTERED:\n case HistoryEntryType.CUSTOMER_VERIFIED:\n return true;\n default:\n return false;\n }\n }\n\n getName(entry: TimelineHistoryEntry): string {\n const { administrator } = entry;\n if (administrator) {\n return `${administrator.firstName} ${administrator.lastName}`;\n } else {\n return `${this.customer.firstName} ${this.customer.lastName}`;\n }\n }\n\n addNoteToCustomer() {\n this.addNote.emit({ note: this.note });\n this.note = '';\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"customer-detail\"></vdr-action-bar-items>\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n *vdrIfPermissions=\"'UpdateCustomer'\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"customer-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as customer\">\n <vdr-customer-status-label [customer]=\"customer\"></vdr-customer-status-label>\n <vdr-labeled-data\n class=\"last-login\"\n *ngIf=\"customer.user?.lastLogin as lastLogin\"\n [label]=\"'customer.last-login' | translate\"\n >\n <time [dateTime]=\"lastLogin\">{{ lastLogin | timeAgo }}</time>\n </vdr-labeled-data>\n </vdr-card>\n <vdr-card\n [title]=\"'customer.customer-groups' | translate\"\n *ngIf=\"(entity$ | async)?.groups as groups\"\n >\n <div *ngIf=\"groups.length; else noGroups\">\n <vdr-chip\n *ngFor=\"let group of groups\"\n [colorFrom]=\"group.id\"\n icon=\"times\"\n (iconClick)=\"removeFromGroup(group)\"\n >{{ group.name }}</vdr-chip\n >\n </div>\n <ng-template #noGroups>\n <span class=\"color-weight-400\">\n {{ 'customer.not-a-member-of-any-groups' | translate }}\n </span>\n </ng-template>\n <div>\n <button\n class=\"button-small mt-1\"\n (click)=\"addToGroup()\"\n *vdrIfPermissions=\"'UpdateCustomerGroup'\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'customer.add-customer-to-group' | translate }}\n </button>\n </div>\n </vdr-card>\n <vdr-card>\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <form class=\"form\" [formGroup]=\"detailForm.get('customer')\">\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field\n [label]=\"'customer.title' | translate\"\n for=\"title\"\n [readOnlyToggle]=\"!(isNew$ | async)\"\n >\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\n </vdr-form-field>\n <div><!-- spacer --></div>\n <vdr-form-field\n [label]=\"'customer.first-name' | translate\"\n for=\"firstName\"\n [readOnlyToggle]=\"!(isNew$ | async)\"\n >\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'customer.last-name' | translate\"\n for=\"lastName\"\n [readOnlyToggle]=\"!(isNew$ | async)\"\n >\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'customer.email-address' | translate\"\n for=\"emailAddress\"\n [readOnlyToggle]=\"!(isNew$ | async)\"\n >\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'customer.phone-number' | translate\"\n for=\"phoneNumber\"\n [readOnlyToggle]=\"!(isNew$ | async)\"\n >\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'customer.password' | translate\"\n for=\"password\"\n *ngIf=\"isNew$ | async\"\n >\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Customer\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customer.customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n </form>\n <vdr-custom-detail-component-host\n locationId=\"customer-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n <ng-container *ngIf=\"!(isNew$ | async)\">\n <vdr-card [title]=\"'customer.addresses' | translate\">\n <div class=\"form-grid\">\n <vdr-address-card\n *ngFor=\"let addressForm of getAddressFormControls()\"\n [class.to-delete]=\"addressesToDeleteIds.has(addressForm.value.id)\"\n [availableCountries]=\"availableCountries$ | async\"\n [isDefaultBilling]=\"defaultBillingAddressId === addressForm.value.id\"\n [isDefaultShipping]=\"defaultShippingAddressId === addressForm.value.id\"\n [addressForm]=\"addressForm\"\n [customFields]=\"addressCustomFields\"\n [editable]=\"\n (['UpdateCustomer'] | hasPermission) &&\n !addressesToDeleteIds.has(addressForm.value.id)\n \"\n (setAsDefaultBilling)=\"setDefaultBillingAddressId($event)\"\n (setAsDefaultShipping)=\"setDefaultShippingAddressId($event)\"\n (deleteAddress)=\"toggleDeleteAddress($event)\"\n ></vdr-address-card>\n </div>\n <button\n class=\"btn btn-secondary mt-2\"\n (click)=\"addAddress()\"\n *vdrIfPermissions=\"'UpdateCustomer'\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'customer.create-new-address' | translate }}\n </button>\n </vdr-card>\n <vdr-card [title]=\"'customer.orders' | translate\" [paddingX]=\"false\">\n <vdr-data-table-2\n id=\"customer-order-list\"\n [items]=\"orders$ | async\"\n [itemsPerPage]=\"ordersPerPage\"\n [totalItems]=\"ordersCount$ | async\"\n [currentPage]=\"currentOrdersPage\"\n [emptyStateLabel]=\"'customer.no-orders-placed' | translate\"\n (itemsPerPageChange)=\"setOrderItemsPerPage($event)\"\n (pageChange)=\"setOrderCurrentPage($event)\"\n >\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n {{ order.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-order=\"item\">\n {{ order.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\">\n <ng-template let-order=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/orders', order.id]\"\n ><span>{{ order.code }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'order.order-type' | translate\"\n id=\"order-type\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-order=\"item\">\n <vdr-chip>{{ order.type }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.state' | translate\" id=\"state\">\n <ng-template let-order=\"item\">\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.total' | translate\" id=\"total\">\n <ng-template let-order=\"item\">\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\">\n <ng-template let-order=\"item\">\n {{ order.updatedAt | timeAgo }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" id=\"placed-at\">\n <ng-template let-order=\"item\">\n {{ order.orderPlacedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n />\n </vdr-data-table-2>\n </vdr-card>\n <vdr-card [title]=\"'customer.customer-history' | translate\">\n <vdr-customer-history\n [customer]=\"entity$ | async\"\n [history]=\"history$ | async\"\n (addNote)=\"addNoteToCustomer($event)\"\n (updateNote)=\"updateNote($event)\"\n (deleteNote)=\"deleteNote($event)\"\n ></vdr-customer-history>\n </vdr-card>\n </ng-container>\n </vdr-page-block>\n</vdr-page-detail-layout>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CreateAddressInput,\n CreateCustomerAddressMutation,\n CreateCustomerInput,\n CUSTOMER_FRAGMENT,\n CustomerDetailQueryDocument,\n CustomerDetailQueryQuery,\n DataService,\n DeleteCustomerAddressMutation,\n EditNoteDialogComponent,\n GetAvailableCountriesQuery,\n GetCustomerHistoryQuery,\n getCustomFieldsDefaults,\n ModalService,\n NotificationService,\n SortOrder,\n TimelineHistoryEntry,\n TypedBaseDetailComponent,\n UpdateCustomerAddressMutation,\n UpdateCustomerInput,\n UpdateCustomerMutation,\n} from '@deenruv/admin-ui/core';\nimport { notNullOrUndefined } from '@deenruv/common/lib/shared-utils';\nimport { gql } from 'apollo-angular';\nimport { EMPTY, forkJoin, from, Observable, Subject } from 'rxjs';\nimport {\n concatMap,\n filter,\n map,\n merge,\n mergeMap,\n shareReplay,\n startWith,\n switchMap,\n take,\n} from 'rxjs/operators';\n\nimport { SelectCustomerGroupDialogComponent } from '../select-customer-group-dialog/select-customer-group-dialog.component';\n\ntype CustomerWithOrders = NonNullable<CustomerDetailQueryQuery['customer']>;\n\nexport const CUSTOMER_DETAIL_QUERY = gql`\n query CustomerDetailQuery($id: ID!, $orderListOptions: OrderListOptions) {\n customer(id: $id) {\n ...Customer\n groups {\n id\n name\n }\n orders(options: $orderListOptions) {\n items {\n id\n code\n type\n state\n total\n totalWithTax\n currencyCode\n createdAt\n updatedAt\n orderPlacedAt\n }\n totalItems\n }\n }\n }\n ${CUSTOMER_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-customer-detail',\n templateUrl: './customer-detail.component.html',\n styleUrls: ['./customer-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerDetailComponent\n extends TypedBaseDetailComponent<typeof CustomerDetailQueryDocument, 'customer'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Customer');\n addressCustomFields = this.getCustomFieldConfig('Address');\n detailForm = this.formBuilder.group({\n customer: this.formBuilder.group({\n title: '',\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n phoneNumber: '',\n emailAddress: ['', [Validators.required, Validators.email]],\n password: '',\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n }),\n addresses: new UntypedFormArray([]),\n });\n availableCountries$: Observable<GetAvailableCountriesQuery['countries']['items']>;\n orders$: Observable<CustomerWithOrders['orders']['items']>;\n ordersCount$: Observable<number>;\n history$: Observable<NonNullable<GetCustomerHistoryQuery['customer']>['history']['items'] | undefined>;\n fetchHistory = new Subject<void>();\n defaultShippingAddressId: string;\n defaultBillingAddressId: string;\n addressesToDeleteIds = new Set<string>();\n addressDefaultsUpdated = false;\n ordersPerPage = 10;\n currentOrdersPage = 1;\n private orderListUpdates$ = new Subject<CustomerWithOrders>();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private formBuilder: FormBuilder,\n protected dataService: DataService,\n private modalService: ModalService,\n private notificationService: NotificationService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.init();\n this.availableCountries$ = this.dataService.settings\n .getAvailableCountries()\n .mapSingle(result => result.countries.items)\n .pipe(shareReplay(1));\n\n const customerWithUpdates$ = this.entity$.pipe(merge(this.orderListUpdates$));\n this.orders$ = customerWithUpdates$.pipe(map(customer => customer.orders.items));\n this.ordersCount$ = this.entity$.pipe(map(customer => customer.orders.totalItems));\n this.history$ = this.fetchHistory.pipe(\n startWith(null),\n switchMap(() =>\n this.dataService.customer\n .getCustomerHistory(this.id, {\n sort: {\n createdAt: SortOrder.DESC,\n },\n })\n .mapStream(data => data.customer?.history.items),\n ),\n );\n }\n\n ngOnDestroy() {\n this.destroy();\n this.orderListUpdates$.complete();\n }\n\n getAddressFormControls(): UntypedFormControl[] {\n const formArray = this.detailForm.get(['addresses']) as UntypedFormArray;\n return formArray.controls as UntypedFormControl[];\n }\n\n setDefaultBillingAddressId(id: string) {\n this.defaultBillingAddressId = id;\n this.addressDefaultsUpdated = true;\n }\n\n setDefaultShippingAddressId(id: string) {\n this.defaultShippingAddressId = id;\n this.addressDefaultsUpdated = true;\n }\n\n toggleDeleteAddress(id: string) {\n if (this.addressesToDeleteIds.has(id)) {\n this.addressesToDeleteIds.delete(id);\n } else {\n this.addressesToDeleteIds.add(id);\n }\n }\n\n addAddress() {\n const addressFormArray = this.detailForm.get('addresses') as UntypedFormArray;\n const newAddress = this.formBuilder.group({\n fullName: '',\n company: '',\n streetLine1: ['', Validators.required],\n streetLine2: '',\n city: '',\n province: '',\n postalCode: '',\n countryCode: ['', Validators.required],\n phoneNumber: '',\n defaultShippingAddress: false,\n defaultBillingAddress: false,\n customFields: this.formBuilder.group(\n this.addressCustomFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\n ),\n });\n addressFormArray.push(newAddress);\n }\n\n setOrderItemsPerPage(itemsPerPage: number) {\n this.ordersPerPage = +itemsPerPage;\n this.fetchOrdersList();\n }\n\n setOrderCurrentPage(page: number) {\n this.currentOrdersPage = +page;\n this.fetchOrdersList();\n }\n\n create() {\n const customerForm = this.detailForm.get('customer');\n if (!customerForm) {\n return;\n }\n const { title, emailAddress, firstName, lastName, phoneNumber, password } = customerForm.value;\n const customFields = customerForm.get('customFields')?.value;\n if (!emailAddress || !firstName || !lastName) {\n return;\n }\n const customer: CreateCustomerInput = {\n title,\n emailAddress,\n firstName,\n lastName,\n phoneNumber,\n customFields,\n };\n this.dataService.customer.createCustomer(customer, password).subscribe(({ createCustomer }) => {\n switch (createCustomer.__typename) {\n case 'Customer':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Customer',\n });\n if (createCustomer.emailAddress && !password) {\n this.notificationService.notify({\n message: _('customer.email-verification-sent'),\n translationVars: { emailAddress },\n type: 'info',\n duration: 10000,\n });\n }\n this.detailForm.markAsPristine();\n this.addressDefaultsUpdated = false;\n this.changeDetector.markForCheck();\n this.router.navigate(['../', createCustomer.id], { relativeTo: this.route });\n break;\n case 'EmailAddressConflictError':\n this.notificationService.error(createCustomer.message);\n }\n });\n }\n\n save() {\n this.entity$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const saveOperations: Array<\n Observable<\n | UpdateCustomerMutation['updateCustomer']\n | CreateCustomerAddressMutation['createCustomerAddress']\n | UpdateCustomerAddressMutation['updateCustomerAddress']\n | DeleteCustomerAddressMutation['deleteCustomerAddress']\n >\n > = [];\n const customerForm = this.detailForm.get('customer');\n if (customerForm && customerForm.dirty) {\n const formValue = customerForm.value;\n const customFields = customerForm.get('customFields')?.value;\n const customer: UpdateCustomerInput = {\n id,\n title: formValue.title,\n emailAddress: formValue.emailAddress,\n firstName: formValue.firstName,\n lastName: formValue.lastName,\n phoneNumber: formValue.phoneNumber,\n customFields,\n };\n saveOperations.push(\n this.dataService.customer\n .updateCustomer(customer)\n .pipe(map(res => res.updateCustomer)),\n );\n }\n const addressFormArray = this.detailForm.get('addresses') as UntypedFormArray;\n if ((addressFormArray && addressFormArray.dirty) || this.addressDefaultsUpdated) {\n for (const addressControl of addressFormArray.controls) {\n if (addressControl.dirty || this.addressDefaultsUpdated) {\n const address = addressControl.value;\n const input: CreateAddressInput = {\n fullName: address.fullName,\n company: address.company,\n streetLine1: address.streetLine1,\n streetLine2: address.streetLine2,\n city: address.city,\n province: address.province,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phoneNumber: address.phoneNumber,\n defaultShippingAddress: this.defaultShippingAddressId === address.id,\n defaultBillingAddress: this.defaultBillingAddressId === address.id,\n customFields: address.customFields,\n };\n if (!address.id) {\n saveOperations.push(\n this.dataService.customer\n .createCustomerAddress(id, input)\n .pipe(map(res => res.createCustomerAddress)),\n );\n } else {\n if (this.addressesToDeleteIds.has(address.id)) {\n saveOperations.push(\n this.dataService.customer\n .deleteCustomerAddress(address.id)\n .pipe(map(res => res.deleteCustomerAddress)),\n );\n } else {\n saveOperations.push(\n this.dataService.customer\n .updateCustomerAddress({\n ...input,\n id: address.id,\n })\n .pipe(map(res => res.updateCustomerAddress)),\n );\n }\n }\n }\n }\n }\n return forkJoin(saveOperations);\n }),\n )\n .subscribe(\n data => {\n let notified = false;\n for (const result of data) {\n switch (result.__typename) {\n case 'Customer':\n case 'Address':\n case 'Success':\n if (!notified) {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Customer',\n });\n notified = true;\n this.detailForm.markAsPristine();\n this.addressDefaultsUpdated = false;\n this.changeDetector.markForCheck();\n this.fetchHistory.next();\n this.refreshCustomer().subscribe();\n }\n break;\n case 'EmailAddressConflictError':\n this.notificationService.error(result.message);\n break;\n }\n }\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Customer',\n });\n },\n );\n }\n\n addToGroup() {\n this.modalService\n .fromComponent(SelectCustomerGroupDialogComponent, {\n size: 'md',\n })\n .pipe(\n switchMap(groupIds => (groupIds ? from(groupIds) : EMPTY)),\n concatMap(groupId => this.dataService.customer.addCustomersToGroup(groupId, [this.id])),\n )\n .subscribe({\n next: res => {\n this.notificationService.success(_(`customer.add-customers-to-group-success`), {\n customerCount: 1,\n groupName: res.addCustomersToGroup.name,\n });\n },\n complete: () => {\n this.refreshCustomer().subscribe();\n this.fetchHistory.next();\n },\n });\n }\n\n removeFromGroup(group: CustomerWithOrders['groups'][number]) {\n this.modalService\n .dialog({\n title: _('customer.confirm-remove-customer-from-group'),\n buttons: [\n { type: 'secondary', label: _('common.cancel') },\n { type: 'danger', label: _('common.delete'), returnValue: true },\n ],\n })\n .pipe(\n switchMap(response =>\n response\n ? this.dataService.customer.removeCustomersFromGroup(group.id, [this.id])\n : EMPTY,\n ),\n switchMap(() => this.refreshCustomer()),\n )\n .subscribe(result => {\n this.notificationService.success(_(`customer.remove-customers-from-group-success`), {\n customerCount: 1,\n groupName: group.name,\n });\n this.fetchHistory.next();\n });\n }\n\n addNoteToCustomer({ note }: { note: string }) {\n this.dataService.customer.addNoteToCustomer(this.id, note).subscribe(() => {\n this.fetchHistory.next();\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Note',\n });\n });\n }\n\n updateNote(entry: TimelineHistoryEntry) {\n this.modalService\n .fromComponent(EditNoteDialogComponent, {\n closable: true,\n locals: {\n displayPrivacyControls: false,\n note: entry.data.note,\n },\n })\n .pipe(\n switchMap(result => {\n if (result) {\n return this.dataService.customer.updateCustomerNote({\n noteId: entry.id,\n note: result.note,\n });\n } else {\n return EMPTY;\n }\n }),\n )\n .subscribe(result => {\n this.fetchHistory.next();\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Note',\n });\n });\n }\n\n deleteNote(entry: TimelineHistoryEntry) {\n return this.modalService\n .dialog({\n title: _('common.confirm-delete-note'),\n body: entry.data.note,\n buttons: [\n { type: 'secondary', label: _('common.cancel') },\n { type: 'danger', label: _('common.delete'), returnValue: true },\n ],\n })\n .pipe(switchMap(res => (res ? this.dataService.customer.deleteCustomerNote(entry.id) : EMPTY)))\n .subscribe(() => {\n this.fetchHistory.next();\n this.notificationService.success(_('common.notify-delete-success'), {\n entity: 'Note',\n });\n });\n }\n\n protected setFormValues(entity: CustomerWithOrders): void {\n const customerGroup = this.detailForm.get('customer');\n if (customerGroup) {\n customerGroup.patchValue({\n title: entity.title ?? null,\n firstName: entity.firstName,\n lastName: entity.lastName,\n phoneNumber: entity.phoneNumber ?? null,\n emailAddress: entity.emailAddress,\n password: '',\n customFields: {},\n });\n }\n\n if (entity.addresses) {\n const addressesArray = new UntypedFormArray([]);\n for (const address of entity.addresses) {\n const { customFields, ...rest } = address as typeof address & { customFields: any };\n const addressGroup = this.formBuilder.group({\n ...rest,\n countryCode: address.country.code,\n customFields: this.formBuilder.group(\n this.addressCustomFields.reduce(\n (hash, field) => ({\n ...hash,\n [field.name]: address['customFields'][field.name],\n }),\n {},\n ),\n ),\n });\n addressesArray.push(addressGroup);\n if (address.defaultShippingAddress) {\n this.defaultShippingAddressId = address.id;\n }\n if (address.defaultBillingAddress) {\n this.defaultBillingAddressId = address.id;\n }\n }\n this.detailForm.setControl('addresses', addressesArray);\n }\n\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get(['customer', 'customFields']),\n entity,\n );\n }\n this.changeDetector.markForCheck();\n }\n\n /**\n * Refetch the customer with the current order list settings.\n */\n private fetchOrdersList() {\n this.dataService\n .query(CustomerDetailQueryDocument, {\n id: this.id,\n orderListOptions: {\n take: this.ordersPerPage,\n skip: (this.currentOrdersPage - 1) * this.ordersPerPage,\n sort: { orderPlacedAt: SortOrder.DESC },\n },\n })\n .single$.pipe(\n map(data => data.customer),\n filter(notNullOrUndefined),\n )\n .subscribe(result => this.orderListUpdates$.next(result));\n }\n\n private refreshCustomer() {\n return this.dataService.query(CustomerDetailQueryDocument, {\n id: this.id,\n orderListOptions: { take: 0 },\n }).single$;\n }\n}\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"customer-group-detail\"></vdr-action-bar-items>\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!(detailForm.valid && detailForm.dirty)\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n *vdrIfPermissions=\"'UpdateCustomer'\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!(detailForm.valid && detailForm.dirty)\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"customer-group-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input id=\"name\" type=\"text\" formControlName=\"name\" />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n [title]=\"'common.custom-fields' | translate\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"CustomerGroup\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"customer-group-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { ResultOf } from '@graphql-typed-document-node/core';\nimport {\n DataService,\n GetCustomerGroupDetailDocument,\n getCustomFieldsDefaults,\n ModalService,\n NotificationService,\n TypedBaseDetailComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const CUSTOMER_GROUP_DETAIL_QUERY = gql`\n query GetCustomerGroupDetail($id: ID!) {\n customerGroup(id: $id) {\n ...CustomerGroupDetail\n }\n }\n fragment CustomerGroupDetail on CustomerGroup {\n id\n createdAt\n updatedAt\n name\n }\n`;\n\n@Component({\n selector: 'vdr-customer-group-detail',\n templateUrl: './customer-group-detail.component.html',\n styleUrls: ['./customer-group-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerGroupDetailComponent\n extends TypedBaseDetailComponent<typeof GetCustomerGroupDetailDocument, 'customerGroup'>\n implements OnInit\n{\n customFields = this.getCustomFieldConfig('CustomerGroup');\n detailForm = this.formBuilder.group({\n name: '',\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n\n constructor(\n private formBuilder: FormBuilder,\n protected dataService: DataService,\n private modalService: ModalService,\n private notificationService: NotificationService,\n ) {\n super();\n }\n\n ngOnInit() {\n super.init();\n }\n\n create() {\n const formvalue = this.detailForm.value;\n if (formvalue.name) {\n this.dataService.customer\n .createCustomerGroup({\n name: formvalue.name,\n customFields: formvalue.customFields,\n customerIds: [],\n })\n .subscribe(\n ({ createCustomerGroup }) => {\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'CustomerGroup',\n });\n this.detailForm.markAsPristine();\n this.router.navigate(['../', createCustomerGroup.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'CustomerGroup',\n });\n },\n );\n }\n }\n\n save() {\n const formValue = this.detailForm.value;\n this.dataService.customer.updateCustomerGroup({ id: this.id, ...formValue }).subscribe(\n () => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'CustomerGroup',\n });\n this.detailForm.markAsPristine();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'CustomerGroup',\n });\n },\n );\n }\n\n protected setFormValues(\n entity: NonNullable<ResultOf<typeof GetCustomerGroupDetailDocument>['customerGroup']>,\n ) {\n this.detailForm.patchValue({\n name: entity.name,\n });\n\n if (this.customFields.length) {\n const customFieldsGroup = this.detailForm.get(['customFields']) as UntypedFormGroup;\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\n }\n }\n}\n","<ng-template vdrDialogTitle>\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\n</ng-template>\n<form [formGroup]=\"form\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(['CreateCustomerGroup', 'UpdateCustomerGroup'] | hasPermission)\"\n />\n </vdr-form-field>\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\n <label>{{ 'common.custom-fields' | translate }}</label>\n <vdr-tabbed-custom-fields\n entityName=\"CustomerGroup\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"form.get('customFields')\"\n ></vdr-tabbed-custom-fields>\n </section>\n</form>\n<ng-template vdrDialogButtons>\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"!form.valid\" class=\"btn btn-primary\">\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\n </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n CreateCustomerGroupInput,\n CustomFieldConfig,\n Dialog,\n getCustomFieldsDefaults,\n ServerConfigService,\n} from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-customer-group-detail-dialog',\n templateUrl: './customer-group-detail-dialog.component.html',\n styleUrls: ['./customer-group-detail-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerGroupDetailDialogComponent implements Dialog<CreateCustomerGroupInput>, OnInit {\n group: { id?: string; name: string; customFields?: { [name: string]: any } };\n resolveWith: (result?: CreateCustomerGroupInput) => void;\n customFields: CustomFieldConfig[];\n form: UntypedFormGroup;\n\n constructor(\n private serverConfigService: ServerConfigService,\n private formBuilder: UntypedFormBuilder,\n ) {\n this.customFields = this.serverConfigService.getCustomFieldsFor('CustomerGroup');\n }\n\n ngOnInit() {\n this.form = this.formBuilder.group({\n name: [this.group.name, Validators.required],\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n if (this.customFields.length) {\n const customFieldsGroup = this.form.get('customFields') as UntypedFormGroup;\n\n for (const fieldDef of this.customFields) {\n const key = fieldDef.name;\n const value = this.group.customFields?.[key];\n const control = customFieldsGroup.get(key);\n if (control) {\n control.patchValue(value);\n }\n }\n }\n }\n\n cancel() {\n this.resolveWith();\n }\n\n save() {\n this.resolveWith(this.form.value);\n }\n}\n","import { createBulkDeleteAction, GetCustomerGroupsQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteCustomerGroupsBulkAction = createBulkDeleteAction<\n ItemOf<GetCustomerGroupsQuery, 'customerGroups'>\n>({\n location: 'customer-group-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteCustomerGroup),\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.customer.deleteCustomerGroups(ids).pipe(map(res => res.deleteCustomerGroups)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\n <a class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" [routerLink]=\"['./', 'create']\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'customer.create-new-customer-group' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"customer-group-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<vdr-split-view [rightPanelOpen]=\"activeGroup$ | async\" (closeClicked)=\"closeMembers()\">\n <ng-template vdrSplitViewLeft>\n <vdr-data-table-2\n class=\"mt-2\"\n id=\"customer-group-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n [activeIndex]=\"activeIndex$ | async\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n >\n <vdr-bulk-action-menu\n locationId=\"customer-group-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n ></vdr-bulk-action-menu>\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\n ></vdr-dt2-search>\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-customerGroup=\"item\">\n {{ customerGroup.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\" id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-customerGroup=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', customerGroup.id]\"\n ><span>{{ customerGroup.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.view-contents' | translate\" id=\"view-contents\"\n [optional]=\"false\"\n >\n <ng-template let-customerGroup=\"item\">\n <a\n class=\"button-small bg-weight-150\"\n [routerLink]=\"['./', { contents: customerGroup.id }]\"\n queryParamsHandling=\"preserve\"\n >\n <span>{{ 'customer.view-group-members' | translate }}</span>\n <clr-icon shape=\"file-group\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n </vdr-data-table-2>\n </ng-template>\n <ng-template vdrSplitViewRight [splitViewTitle]=\"(activeGroup$ | async)?.name\">\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\n <button class=\"button-ghost ml-4\" (click)=\"addToGroup(activeGroup)\">\n <clr-icon shape=\"plus\"></clr-icon>\n <span>{{\n 'customer.add-customers-to-group' | translate : { groupName: activeGroup.name }\n }}</span>\n </button>\n <vdr-customer-group-member-list\n locationId=\"customer-group-members-list\"\n [members]=\"members$ | async\"\n [route]=\"route\"\n [totalItems]=\"membersTotal$ | async\"\n [activeGroup]=\"activeGroup$ | async\"\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\n />\n </ng-container>\n </ng-template>\n</vdr-split-view>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CUSTOMER_GROUP_FRAGMENT,\n DataService,\n GetCustomerGroupListDocument,\n GetCustomerGroupsQuery,\n GetCustomerGroupWithCustomersQuery,\n ItemOf,\n ModalService,\n NotificationService,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { BehaviorSubject, combineLatest, EMPTY, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, switchMap } from 'rxjs/operators';\n\nimport { AddCustomerToGroupDialogComponent } from '../add-customer-to-group-dialog/add-customer-to-group-dialog.component';\nimport { CustomerGroupMemberFetchParams } from '../customer-group-member-list/customer-group-member-list.component';\n\nexport const GET_CUSTOMER_GROUP_LIST = gql`\n query GetCustomerGroupList($options: CustomerGroupListOptions) {\n customerGroups(options: $options) {\n items {\n ...CustomerGroup\n }\n totalItems\n }\n }\n ${CUSTOMER_GROUP_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-customer-group-list',\n templateUrl: './customer-group-list.component.html',\n styleUrls: ['./customer-group-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomerGroupListComponent\n extends TypedBaseListComponent<typeof GetCustomerGroupListDocument, 'customerGroups'>\n implements OnInit\n{\n activeGroup$: Observable<ItemOf<GetCustomerGroupsQuery, 'customerGroups'> | undefined>;\n activeIndex$: Observable<number>;\n listIsEmpty$: Observable<boolean>;\n members$: Observable<\n NonNullable<GetCustomerGroupWithCustomersQuery['customerGroup']>['customers']['items']\n >;\n membersTotal$: Observable<number>;\n fetchGroupMembers$ = new BehaviorSubject<CustomerGroupMemberFetchParams>({\n skip: 0,\n take: 0,\n filterTerm: '',\n });\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n })\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'name' })\n .connectToRoute(this.route);\n private refreshActiveGroupMembers$ = new BehaviorSubject<void>(undefined);\n\n constructor(\n protected dataService: DataService,\n private notificationService: NotificationService,\n private modalService: ModalService,\n public route: ActivatedRoute,\n protected router: Router,\n ) {\n super();\n super.configure({\n document: GetCustomerGroupListDocument,\n getItems: data => data.customerGroups,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n name: { contains: this.searchTermControl.value },\n ...this.filters.createFilterInput(),\n },\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n const activeGroupId$ = this.route.paramMap.pipe(\n map(pm => pm.get('contents')),\n distinctUntilChanged(),\n );\n this.listIsEmpty$ = this.items$.pipe(map(groups => groups.length === 0));\n this.activeGroup$ = combineLatest(this.items$, activeGroupId$).pipe(\n map(([groups, activeGroupId]) => {\n if (activeGroupId) {\n return groups.find(g => g.id === activeGroupId);\n }\n }),\n );\n this.activeIndex$ = combineLatest(this.items$, activeGroupId$).pipe(\n map(([groups, activeGroupId]) => {\n if (activeGroupId) {\n return groups.findIndex(g => g.id === activeGroupId);\n } else {\n return -1;\n }\n }),\n );\n const membersResult$ = combineLatest(\n this.activeGroup$,\n this.fetchGroupMembers$,\n this.refreshActiveGroupMembers$,\n ).pipe(\n switchMap(([activeGroup, { skip, take, filterTerm }]) => {\n if (activeGroup) {\n return this.dataService.customer\n .getCustomerGroupWithCustomers(activeGroup.id, {\n skip,\n take,\n filter: {\n emailAddress: {\n contains: filterTerm,\n },\n },\n })\n .mapStream(res => res.customerGroup?.customers);\n } else {\n return of(undefined);\n }\n }),\n );\n\n this.members$ = membersResult$.pipe(map(res => res?.items ?? []));\n this.membersTotal$ = membersResult$.pipe(map(res => res?.totalItems ?? 0));\n }\n\n closeMembers() {\n const params = { ...this.route.snapshot.params };\n delete params.contents;\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\n }\n\n addToGroup(group: NonNullable<GetCustomerGroupWithCustomersQuery['customerGroup']>) {\n this.modalService\n .fromComponent(AddCustomerToGroupDialogComponent, {\n locals: {\n group,\n route: this.route,\n },\n size: 'md',\n verticalAlign: 'top',\n })\n .pipe(\n switchMap(customerIds =>\n customerIds\n ? this.dataService.customer\n .addCustomersToGroup(group.id, customerIds)\n .pipe(mapTo(customerIds))\n : EMPTY,\n ),\n )\n .subscribe({\n next: result => {\n this.notificationService.success(_(`customer.add-customers-to-group-success`), {\n customerCount: result.length,\n groupName: group.name,\n });\n this.refreshActiveGroupMembers$.next();\n },\n });\n }\n}\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkAction,\n DataService,\n ModalService,\n NotificationService,\n Permission,\n} from '@deenruv/admin-ui/core';\nimport {\n CustomerGroupMember,\n CustomerGroupMemberListComponent,\n} from './customer-group-member-list.component';\n\nexport const removeCustomerGroupMembersBulkAction: BulkAction<\n CustomerGroupMember,\n CustomerGroupMemberListComponent\n> = {\n location: 'customer-group-members-list',\n label: _('customer.remove-from-group'),\n icon: 'trash',\n iconClass: 'is-danger',\n requiresPermission: Permission.UpdateCustomerGroup,\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n const modalService = injector.get(ModalService);\n const dataService = injector.get(DataService);\n const notificationService = injector.get(NotificationService);\n\n const group = hostComponent.activeGroup;\n const customerIds = selection.map(s => s.id);\n\n dataService.customer.removeCustomersFromGroup(group.id, customerIds).subscribe({\n complete: () => {\n notificationService.success(_(`customer.remove-customers-from-group-success`), {\n customerCount: customerIds.length,\n groupName: group.name,\n });\n clearSelection();\n hostComponent.refresh();\n },\n });\n },\n};\n","import { createBulkDeleteAction, GetCustomerListQuery, ItemOf, Permission } from '@deenruv/admin-ui/core';\nimport { map } from 'rxjs/operators';\n\nexport const deleteCustomersBulkAction = createBulkDeleteAction<ItemOf<GetCustomerListQuery, 'customers'>>({\n location: 'customer-list',\n requiresPermission: userPermissions => userPermissions.includes(Permission.DeleteCustomer),\n getItemName: item => item.firstName + ' ' + item.lastName,\n bulkDelete: (dataService, ids) =>\n dataService.customer.deleteCustomers(ids).pipe(map(res => res.deleteCustomers)),\n});\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left> </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"customer-list\"></vdr-action-bar-items>\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateCustomer'\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'customer.create-new-customer' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"customer-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<vdr-data-table-2\n class=\"mt-2\"\n id=\"customer-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"customer-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n ></vdr-bulk-action-menu>\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'customer.search-customers-by-email-last-name-postal-code' | translate\"\n ></vdr-dt2-search>\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-customer=\"item\">\n {{ customer.id }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-customer=\"item\">\n {{ customer.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-customer=\"item\">\n {{ customer.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('lastName')\">\n <ng-template let-customer=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', customer.id]\"\n ><span> {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }} </span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.status' | translate\" id=\"status\">\n <ng-template let-customer=\"item\">\n <vdr-customer-status-label [customer]=\"customer\" />\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.email-address' | translate\" id=\"email-address\" [sort]=\"sorts.get('emailAddress')\">\n <ng-template let-customer=\"item\">\n {{ customer.emailAddress }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column *ngFor=\"let field of customFields\" [customField]=\"field\" [sorts]=\"sorts\" />\n</vdr-data-table-2>\n","import { Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { CustomerListQueryDocument, LogicalOperator, TypedBaseListComponent } from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const CUSTOMER_LIST_QUERY = gql`\n query CustomerListQuery($options: CustomerListOptions) {\n customers(options: $options) {\n items {\n ...CustomerListItem\n }\n totalItems\n }\n }\n\n fragment CustomerListItem on Customer {\n id\n createdAt\n updatedAt\n title\n firstName\n lastName\n emailAddress\n user {\n id\n verified\n }\n }\n`;\n\n@Component({\n selector: 'vdr-customer-list',\n templateUrl: './customer-list.component.html',\n styleUrls: ['./customer-list.component.scss'],\n})\nexport class CustomerListComponent\n extends TypedBaseListComponent<typeof CustomerListQueryDocument, 'customers'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('Customer');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilter({\n name: 'firstName',\n type: { kind: 'text' },\n label: _('customer.first-name'),\n filterField: 'firstName',\n })\n .addFilter({\n name: 'lastName',\n type: { kind: 'text' },\n label: _('customer.last-name'),\n filterField: 'lastName',\n })\n .addFilter({\n name: 'emailAddress',\n type: { kind: 'text' },\n label: _('customer.email-address'),\n filterField: 'emailAddress',\n })\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSort({ name: 'createdAt' })\n .addSort({ name: 'updatedAt' })\n .addSort({ name: 'lastName' })\n .addSort({ name: 'emailAddress' })\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n this.configure({\n document: CustomerListQueryDocument,\n getItems: data => data.customers,\n setVariables: (skip, take) => ({\n options: {\n skip,\n take,\n filter: {\n ...(this.searchTermControl.value\n ? {\n emailAddress: {\n contains: this.searchTermControl.value,\n },\n lastName: {\n contains: this.searchTermControl.value,\n },\n postalCode: {\n contains: this.searchTermControl.value,\n },\n }\n : {}),\n ...this.filters.createFilterInput(),\n },\n filterOperator: this.searchTermControl.value ? LogicalOperator.OR : LogicalOperator.AND,\n sort: this.sorts.createSortInput(),\n },\n }),\n refreshListOnChanges: [this.sorts.valueChanges, this.filters.valueChanges],\n });\n }\n}\n","import { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { CustomerFragment, detailBreadcrumb, PageComponent, PageService } from '@deenruv/admin-ui/core';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n {\n path: 'customers',\n component: PageComponent,\n data: {\n locationId: 'customer-list',\n breadcrumb: _('breadcrumb.customers'),\n },\n children: pageService.getPageTabRoutes('customer-list'),\n },\n {\n path: 'customers/:id',\n component: PageComponent,\n data: {\n locationId: 'customer-detail',\n breadcrumb: { label: _('breadcrumb.customers'), link: ['../', 'customers'] },\n },\n children: pageService.getPageTabRoutes('customer-detail'),\n },\n {\n path: 'groups',\n component: PageComponent,\n data: {\n locationId: 'customer-group-list',\n breadcrumb: _('breadcrumb.customer-groups'),\n },\n children: pageService.getPageTabRoutes('customer-group-list'),\n },\n {\n path: 'groups/:id',\n component: PageComponent,\n data: {\n locationId: 'customer-group-detail',\n breadcrumb: { label: _('breadcrumb.customer-groups'), link: ['../', 'groups'] },\n },\n children: pageService.getPageTabRoutes('customer-group-detail'),\n },\n];\n\nexport function customerBreadcrumb(data: any, params: any) {\n return detailBreadcrumb<CustomerFragment>({\n entity: data.entity,\n id: params.id,\n breadcrumbKey: 'breadcrumb.customers',\n getName: customer => `${customer.firstName} ${customer.lastName}`,\n route: 'customers',\n });\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkActionRegistryService,\n CustomerDetailQueryDocument,\n detailComponentWithResolver,\n GetCustomerGroupDetailDocument,\n PageService,\n SharedModule,\n SortOrder,\n} from '@deenruv/admin-ui/core';\n\nimport { AddCustomerToGroupDialogComponent } from './components/add-customer-to-group-dialog/add-customer-to-group-dialog.component';\nimport { AddressCardComponent } from './components/address-card/address-card.component';\nimport { AddressDetailDialogComponent } from './components/address-detail-dialog/address-detail-dialog.component';\nimport { CustomerDetailComponent } from './components/customer-detail/customer-detail.component';\nimport { CustomerGroupDetailDialogComponent } from './components/customer-group-detail-dialog/customer-group-detail-dialog.component';\nimport { deleteCustomerGroupsBulkAction } from './components/customer-group-list/customer-group-list-bulk-actions';\nimport { CustomerGroupListComponent } from './components/customer-group-list/customer-group-list.component';\nimport { removeCustomerGroupMembersBulkAction } from './components/customer-group-member-list/customer-group-member-list-bulk-actions';\nimport { CustomerGroupMemberListComponent } from './components/customer-group-member-list/customer-group-member-list.component';\nimport { CustomerHistoryEntryHostComponent } from './components/customer-history/customer-history-entry-host.component';\nimport { CustomerHistoryComponent } from './components/customer-history/customer-history.component';\nimport { deleteCustomersBulkAction } from './components/customer-list/customer-list-bulk-actions';\nimport { CustomerListComponent } from './components/customer-list/customer-list.component';\nimport { CustomerStatusLabelComponent } from './components/customer-status-label/customer-status-label.component';\nimport { SelectCustomerGroupDialogComponent } from './components/select-customer-group-dialog/select-customer-group-dialog.component';\nimport { createRoutes } from './customer.routes';\nimport { CustomerGroupDetailComponent } from './components/customer-group-detail/customer-group-detail.component';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild([])],\n providers: [\n {\n provide: ROUTES,\n useFactory: (pageService: PageService) => createRoutes(pageService),\n multi: true,\n deps: [PageService],\n },\n ],\n declarations: [\n CustomerListComponent,\n CustomerDetailComponent,\n CustomerStatusLabelComponent,\n AddressCardComponent,\n CustomerGroupListComponent,\n CustomerGroupDetailDialogComponent,\n AddCustomerToGroupDialogComponent,\n CustomerGroupMemberListComponent,\n SelectCustomerGroupDialogComponent,\n CustomerHistoryComponent,\n AddressDetailDialogComponent,\n CustomerHistoryEntryHostComponent,\n CustomerGroupDetailComponent,\n ],\n exports: [AddressCardComponent],\n})\nexport class CustomerModule {\n private static hasRegisteredTabsAndBulkActions = false;\n\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n if (CustomerModule.hasRegisteredTabsAndBulkActions) {\n return;\n }\n bulkActionRegistryService.registerBulkAction(deleteCustomersBulkAction);\n bulkActionRegistryService.registerBulkAction(deleteCustomerGroupsBulkAction);\n bulkActionRegistryService.registerBulkAction(removeCustomerGroupMembersBulkAction);\n\n pageService.registerPageTab({\n priority: 0,\n location: 'customer-list',\n tab: _('customer.customers'),\n route: '',\n component: CustomerListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'customer-detail',\n tab: _('customer.customer'),\n route: '',\n component: detailComponentWithResolver({\n component: CustomerDetailComponent,\n query: CustomerDetailQueryDocument,\n entityKey: 'customer',\n variables: {\n orderListOptions: {\n sort: {\n orderPlacedAt: SortOrder.DESC,\n },\n },\n },\n getBreadcrumbs: entity => [\n {\n label: entity\n ? `${entity?.firstName} ${entity?.lastName}`\n : _('customer.create-new-customer'),\n link: [entity?.id],\n },\n ],\n }),\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'customer-group-list',\n tab: _('customer.customer-groups'),\n route: '',\n component: CustomerGroupListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'customer-group-detail',\n tab: _('customer.customer-group'),\n route: '',\n component: detailComponentWithResolver({\n component: CustomerGroupDetailComponent,\n query: GetCustomerGroupDetailDocument,\n entityKey: 'customerGroup',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('customer.create-new-customer-group'),\n link: [entity?.id],\n },\n ],\n }),\n });\n CustomerModule.hasRegisteredTabsAndBulkActions = true;\n }\n}\n"],"x_google_ignoreList":[10,11]}
|