@vendure/admin-ui-plugin 2.0.0-next.2 → 2.0.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/admin-ui/165.6aeb6ecf722558ee.js.map +1 -1
- package/lib/admin-ui/239.e2e63f2ccd517604.js +2 -0
- package/lib/admin-ui/239.e2e63f2ccd517604.js.map +1 -0
- package/lib/admin-ui/26.5cc3bfffe8943e16.js +2 -0
- package/lib/admin-ui/26.5cc3bfffe8943e16.js.map +1 -0
- package/lib/admin-ui/316.265d65a6a9d1b4c0.js +2 -0
- package/lib/admin-ui/{316.07f9c805e4c95dc8.js.map → 316.265d65a6a9d1b4c0.js.map} +1 -1
- package/lib/admin-ui/356.975f7f2d201afda5.js +2 -0
- package/lib/admin-ui/356.975f7f2d201afda5.js.map +1 -0
- package/lib/admin-ui/3rdpartylicenses.txt +23 -0
- package/lib/admin-ui/407.a3fde1da25c0935c.js +12 -0
- package/lib/admin-ui/407.a3fde1da25c0935c.js.map +1 -0
- package/lib/admin-ui/451.a7fd4069c4f4c687.js +65 -0
- package/lib/admin-ui/451.a7fd4069c4f4c687.js.map +1 -0
- package/lib/admin-ui/600.17470a2c90aa79d8.js +2 -0
- package/lib/admin-ui/600.17470a2c90aa79d8.js.map +1 -0
- package/lib/admin-ui/625.3c0c5821b952b58e.js +2 -0
- package/lib/admin-ui/{625.adebc6a7222bde82.js.map → 625.3c0c5821b952b58e.js.map} +1 -1
- package/lib/admin-ui/i18n-messages/cs.json +50 -3
- package/lib/admin-ui/i18n-messages/de.json +53 -3
- package/lib/admin-ui/i18n-messages/en.json +55 -8
- package/lib/admin-ui/i18n-messages/es.json +50 -3
- package/lib/admin-ui/i18n-messages/fr.json +50 -3
- package/lib/admin-ui/i18n-messages/it.json +50 -3
- package/lib/admin-ui/i18n-messages/pl.json +50 -3
- package/lib/admin-ui/i18n-messages/pt_BR.json +50 -3
- package/lib/admin-ui/i18n-messages/pt_PT.json +50 -3
- package/lib/admin-ui/i18n-messages/ru.json +50 -3
- package/lib/admin-ui/i18n-messages/uk.json +50 -3
- package/lib/admin-ui/i18n-messages/zh_Hans.json +50 -3
- package/lib/admin-ui/i18n-messages/zh_Hant.json +50 -3
- package/lib/admin-ui/index.html +2 -2
- package/lib/admin-ui/main.65109179713dd228.js +2944 -0
- package/lib/admin-ui/main.65109179713dd228.js.map +1 -0
- package/lib/admin-ui/runtime.28bd5da02a9b1f7b.js +2 -0
- package/lib/admin-ui/{runtime.1dd1cbaf09547dd2.js.map → runtime.28bd5da02a9b1f7b.js.map} +1 -1
- package/lib/admin-ui/styles/_variables.scss +4 -0
- package/lib/admin-ui/styles/global/_forms.scss +8 -7
- package/lib/admin-ui/styles/global/_overrides.scss +11 -1
- package/lib/admin-ui/styles/global/_sass-overrides.scss +3 -0
- package/lib/admin-ui/styles/global/_utilities.scss +14 -0
- package/lib/admin-ui/styles/styles.scss +1 -0
- package/lib/admin-ui/styles/theme/default.scss +13 -1
- package/lib/admin-ui/styles/ui-extension-theme.scss +1 -0
- package/lib/admin-ui/{styles.fb1aaa9a9baed129.css → styles.88d3f0120bfc894a.css} +2 -2
- package/lib/admin-ui/styles.88d3f0120bfc894a.css.map +1 -0
- package/package.json +4 -4
- package/lib/admin-ui/239.a68e402e10b798f1.js +0 -2
- package/lib/admin-ui/239.a68e402e10b798f1.js.map +0 -1
- package/lib/admin-ui/26.477d6446134d960e.js +0 -2
- package/lib/admin-ui/26.477d6446134d960e.js.map +0 -1
- package/lib/admin-ui/316.07f9c805e4c95dc8.js +0 -2
- package/lib/admin-ui/349.abe4847f7fe9b3da.js +0 -2
- package/lib/admin-ui/349.abe4847f7fe9b3da.js.map +0 -1
- package/lib/admin-ui/356.3a6951fe80b5a001.js +0 -2
- package/lib/admin-ui/356.3a6951fe80b5a001.js.map +0 -1
- package/lib/admin-ui/600.8f0165a8d1255cd0.js +0 -2
- package/lib/admin-ui/600.8f0165a8d1255cd0.js.map +0 -1
- package/lib/admin-ui/625.adebc6a7222bde82.js +0 -2
- package/lib/admin-ui/849.cc032ddf77c67cc3.js +0 -2
- package/lib/admin-ui/849.cc032ddf77c67cc3.js.map +0 -1
- package/lib/admin-ui/main.0b0d9a8ae6759254.js +0 -2740
- package/lib/admin-ui/main.0b0d9a8ae6759254.js.map +0 -1
- package/lib/admin-ui/runtime.1dd1cbaf09547dd2.js +0 -2
- package/lib/admin-ui/styles.fb1aaa9a9baed129.css.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkvendure_admin=self.webpackChunkvendure_admin||[]).push([[600],{4847:(Ao,ce,i)=>{i.r(ce),i.d(ce,{AddCustomerToGroupDialogComponent:()=>L,AddressCardComponent:()=>I,AddressDetailDialogComponent:()=>S,CustomerDetailComponent:()=>F,CustomerGroupDetailDialogComponent:()=>T,CustomerGroupListComponent:()=>P,CustomerGroupMemberListComponent:()=>A,CustomerHistoryComponent:()=>J,CustomerListComponent:()=>w,CustomerModule:()=>M,CustomerResolver:()=>D,CustomerStatusLabelComponent:()=>Z,SelectCustomerGroupDialogComponent:()=>O,customerBreadcrumb:()=>Ce,customerRoutes:()=>fe});var G=i(6317),g=i(2673),p=i(635),e=i(3184),d=i(8098),q=i(309),l=i(587),W=i(253),K=i(6562),E=i(4874),z=i(8977),ee=i(1989),te=i(9337),oe=i(8951),C=i(9720),U=i(7890),$=i(365),se=i(901),re=i(8899),v=i(7514),_=i(6362),N=i(7388);const xe=function(s){return["/customer","customers",s]};function be(s,o){if(1&s&&(e.TgZ(0,"td",3),e._uU(1),e.qZA(),e.TgZ(2,"td",3),e._uU(3),e.qZA(),e.TgZ(4,"td",4),e._UZ(5,"vdr-table-row-action",5),e.ALo(6,"translate"),e.qZA()),2&s){const t=o.item;e.xp6(1),e.lnq(" ",t.title," ",t.firstName," ",t.lastName," "),e.xp6(2),e.Oqu(t.emailAddress),e.xp6(2),e.Q6J("label",e.lcZ(6,6,"common.edit"))("linkTo",e.VKq(8,xe,t.id))}}class A{constructor(o,t){this.router=o,this.dataService=t,this.selectedMemberIds=[],this.selectionChange=new e.vpe,this.fetchParamsChange=new e.vpe,this.filterTermControl=new l.NI(""),this.refresh$=new G.X(!0),this.destroy$=new W.x,this.isMemberSelected=r=>-1<this.selectedMemberIds.indexOf(r.id)}ngOnInit(){this.membersCurrentPage$=this.route.paramMap.pipe((0,p.U)(t=>t.get("membersPage")),(0,p.U)(t=>t?+t:1),(0,E.O)(1),(0,z.x)()),this.membersItemsPerPage$=this.route.paramMap.pipe((0,p.U)(t=>t.get("membersPerPage")),(0,p.U)(t=>t?+t:10),(0,E.O)(10),(0,z.x)());const o=this.filterTermControl.valueChanges.pipe((0,ee.b)(250),(0,te.b)(()=>this.setContentsPageNumber(1)),(0,E.O)(""));(0,K.a)(this.membersCurrentPage$,this.membersItemsPerPage$,o,this.refresh$).pipe((0,oe.R)(this.destroy$)).subscribe(([t,r,n])=>{const a=r,c=(t-1)*r;this.fetchParamsChange.emit({filterTerm:n,skip:c,take:a})})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}setContentsPageNumber(o){this.setParam("membersPage",o)}setContentsItemsPerPage(o){this.setParam("membersPerPage",o)}refresh(){this.refresh$.next(!0)}setParam(o,t){this.router.navigate(["./",Object.assign(Object.assign({},this.route.snapshot.params),{[o]:t})],{relativeTo:this.route,queryParamsHandling:"merge"})}areAllSelected(){return!!this.members&&this.selectedMemberIds.length===this.members.length}toggleSelectAll(){this.areAllSelected()?this.selectionChange.emit([]):this.selectionChange.emit(this.members.map(o=>o.id))}toggleSelectMember({item:o}){this.selectedMemberIds.includes(o.id)?this.selectionChange.emit(this.selectedMemberIds.filter(t=>t!==o.id)):this.selectionChange.emit([...this.selectedMemberIds,o.id])}}A.\u0275fac=function(o){return new(o||A)(e.Y36(C.F0),e.Y36(d.DoR))},A.\u0275cmp=e.Xpm({type:A,selectors:[["vdr-customer-group-member-list"]],inputs:{members:"members",totalItems:"totalItems",route:"route",selectedMemberIds:"selectedMemberIds"},outputs:{selectionChange:"selectionChange",fetchParamsChange:"fetchParamsChange"},decls:14,vars:24,consts:[["type","text","name","searchTerm",1,"search-input",3,"formControl","placeholder"],[3,"items","itemsPerPage","totalItems","currentPage","allSelected","isRowSelectedFn","pageChange","itemsPerPageChange","rowSelectChange","allSelectChange"],[3,"expand"],[1,"left","align-middle"],[1,"right","align-middle"],["iconShape","edit",3,"label","linkTo"]],template:function(o,t){1&o&&(e._UZ(0,"input",0),e.ALo(1,"translate"),e.TgZ(2,"vdr-data-table",1),e.NdJ("pageChange",function(n){return t.setContentsPageNumber(n)})("itemsPerPageChange",function(n){return t.setContentsItemsPerPage(n)})("rowSelectChange",function(n){return t.toggleSelectMember(n)})("allSelectChange",function(){return t.toggleSelectAll()}),e.ALo(3,"async"),e.ALo(4,"async"),e.ALo(5,"hasPermission"),e.TgZ(6,"vdr-dt-column",2),e._uU(7),e.ALo(8,"translate"),e.qZA(),e.TgZ(9,"vdr-dt-column",2),e._uU(10),e.ALo(11,"translate"),e.qZA(),e._UZ(12,"vdr-dt-column"),e.YNc(13,be,7,10,"ng-template"),e.qZA()),2&o&&(e.Q6J("formControl",t.filterTermControl)("placeholder",e.lcZ(1,12,"customer.search-customers-by-email")),e.xp6(2),e.Q6J("items",t.members)("itemsPerPage",e.lcZ(3,14,t.membersItemsPerPage$))("totalItems",t.totalItems)("currentPage",e.lcZ(4,16,t.membersCurrentPage$))("allSelected",t.areAllSelected())("isRowSelectedFn",e.lcZ(5,18,"UpdateCustomerGroup")&&t.isMemberSelected),e.xp6(4),e.Q6J("expand",!0),e.xp6(1),e.Oqu(e.lcZ(8,20,"customer.name")),e.xp6(2),e.Q6J("expand",!0),e.xp6(1),e.Oqu(e.lcZ(11,22,"customer.email-address")))},directives:[U.y,l.Fj,l.JJ,l.oH,$.Q,se.E,re.v],pipes:[v.X$,_.Ov,N.j],styles:[""],changeDetection:0});var k=i(8318);const ye=function(s){return{groupName:s}};function Ae(s,o){if(1&s&&(e._uU(0),e.ALo(1,"translate")),2&s){const t=e.oxw();e.hij(" ",e.xi3(1,1,"customer.add-customers-to-group-with-name",e.VKq(4,ye,t.group.name)),"\n")}}const Ze=function(s){return{count:s}};function Te(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",3),e.NdJ("click",function(){return e.CHM(t),e.oxw().cancel()}),e._uU(1),e.ALo(2,"translate"),e.qZA(),e.TgZ(3,"button",4),e.NdJ("click",function(){return e.CHM(t),e.oxw().add()}),e._uU(4),e.ALo(5,"translate"),e.qZA()}if(2&s){const t=e.oxw();e.xp6(1),e.Oqu(e.lcZ(2,3,"common.cancel")),e.xp6(2),e.Q6J("disabled",!t.selectedCustomerIds.length),e.xp6(1),e.hij(" ",e.xi3(5,5,"customer.add-customers-to-group-with-count",e.VKq(8,Ze,t.selectedCustomerIds.length))," ")}}class L{constructor(o){this.dataService=o,this.selectedCustomerIds=[],this.fetchGroupMembers$=new G.X({skip:0,take:10,filterTerm:""})}ngOnInit(){const o=this.fetchGroupMembers$.pipe((0,g.w)(({skip:t,take:r,filterTerm:n})=>this.dataService.customer.getCustomerList(r,t,n).mapStream(a=>a.customers)));this.customers$=o.pipe((0,p.U)(t=>t.items)),this.customersTotal$=o.pipe((0,p.U)(t=>t.totalItems))}cancel(){this.resolveWith()}add(){this.resolveWith(this.selectedCustomerIds)}}L.\u0275fac=function(o){return new(o||L)(e.Y36(d.DoR))},L.\u0275cmp=e.Xpm({type:L,selectors:[["vdr-add-customer-to-group-dialog"]],decls:5,vars:8,consts:[["vdrDialogTitle",""],[3,"members","totalItems","route","selectedMemberIds","fetchParamsChange","selectionChange"],["vdrDialogButtons",""],["type","button",1,"btn",3,"click"],["type","submit",1,"btn","btn-primary",3,"disabled","click"]],template:function(o,t){1&o&&(e.YNc(0,Ae,2,6,"ng-template",0),e.TgZ(1,"vdr-customer-group-member-list",1),e.NdJ("fetchParamsChange",function(n){return t.fetchGroupMembers$.next(n)})("selectionChange",function(n){return t.selectedCustomerIds=n}),e.ALo(2,"async"),e.ALo(3,"async"),e.qZA(),e.YNc(4,Te,6,10,"ng-template",2)),2&o&&(e.xp6(1),e.Q6J("members",e.lcZ(2,4,t.customers$))("totalItems",e.lcZ(3,6,t.customersTotal$))("route",t.route)("selectedMemberIds",t.selectedCustomerIds))},directives:[q.q,A,k.n],pipes:[v.X$,_.Ov],styles:[""],changeDetection:0});var Y=i(116),le=i(9295),De=i(1480);function Ue(s,o){if(1&s&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&s){const t=o.ngIf;e.xp6(1),e.hij("",t,",")}}function Ne(s,o){if(1&s&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&s){const t=o.ngIf;e.xp6(1),e.hij(" ",t,"")}}function Le(s,o){if(1&s&&(e.YNc(0,Ue,2,1,"span",3),e.YNc(1,Ne,2,1,"span",3)),2&s){const t=e.oxw();let r,n;e.Q6J("ngIf",null==(r=t.addressForm.get("streetLine1"))?null:r.value),e.xp6(1),e.Q6J("ngIf",null==(n=t.addressForm.get("countryCode"))?null:n.value)}}function Se(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",4),e.NdJ("click",function(){return e.CHM(t),e.oxw().cancel()}),e._uU(1),e.ALo(2,"translate"),e.qZA(),e.TgZ(3,"button",5),e.NdJ("click",function(){return e.CHM(t),e.oxw().save()}),e._uU(4),e.ALo(5,"translate"),e.qZA()}if(2&s){const t=e.oxw();e.xp6(1),e.Oqu(e.lcZ(2,3,"common.cancel")),e.xp6(2),e.Q6J("disabled",!t.addressForm.valid||!t.addressForm.touched),e.xp6(1),e.hij(" ",e.lcZ(5,5,"common.update")," ")}}class S{constructor(o){this.changeDetector=o,this.availableCountries=[]}ngOnInit(){this.addressForm.valueChanges.subscribe(()=>this.changeDetector.markForCheck())}cancel(){this.resolveWith()}save(){this.resolveWith(this.addressForm)}}S.\u0275fac=function(o){return new(o||S)(e.Y36(e.sBO))},S.\u0275cmp=e.Xpm({type:S,selectors:[["vdr-address-detail-dialog"]],decls:3,vars:3,consts:[["vdrDialogTitle",""],[3,"formGroup","availableCountries","customFields"],["vdrDialogButtons",""],[4,"ngIf"],["type","button",1,"btn",3,"click"],["type","submit",1,"btn","btn-primary",3,"disabled","click"]],template:function(o,t){1&o&&(e.YNc(0,Le,2,2,"ng-template",0),e._UZ(1,"vdr-address-form",1),e.YNc(2,Se,6,7,"ng-template",2)),2&o&&(e.xp6(1),e.Q6J("formGroup",t.addressForm)("availableCountries",t.availableCountries)("customFields",t.customFields))},directives:[q.q,_.O5,De.C,l.JL,l.sg,k.n],pipes:[v.X$],styles:["clr-input-container[_ngcontent-%COMP%]{margin-bottom:12px}"],changeDetection:0});var Q=i(4447),y=i(2748),Ie=i(9667),ne=i(3146),j=i(735),H=i(1519),R=i(8854),B=i(5111);function Oe(s,o){if(1&s&&(e.TgZ(0,"span",13),e._uU(1),e.qZA()),2&s){const t=e.oxw().ngIf;e.xp6(1),e.hij("",t.streetLine1,",")}}function Je(s,o){1&s&&(e.TgZ(0,"vdr-chip",14),e._UZ(1,"clr-icon",15),e._uU(2),e.ALo(3,"translate"),e.qZA()),2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.default-shipping-address")," "))}function Fe(s,o){1&s&&(e.TgZ(0,"vdr-chip",14),e._UZ(1,"clr-icon",16),e._uU(2),e.ALo(3,"translate"),e.qZA()),2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.default-billing-address")," "))}function Pe(s,o){if(1&s){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",17),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).editAddress()}),e._uU(2),e.ALo(3,"translate"),e.qZA(),e.TgZ(4,"vdr-dropdown")(5,"button",18),e._uU(6),e.ALo(7,"translate"),e._UZ(8,"clr-icon",19),e.qZA(),e.TgZ(9,"vdr-dropdown-menu")(10,"button",20),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).setAsDefaultShippingAddress()}),e._uU(11),e.ALo(12,"translate"),e.qZA(),e.TgZ(13,"button",20),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).setAsDefaultBillingAddress()}),e._uU(14),e.ALo(15,"translate"),e.qZA(),e._UZ(16,"div",21),e.TgZ(17,"button",22),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).delete()}),e._UZ(18,"clr-icon",23),e._uU(19),e.ALo(20,"translate"),e.qZA()()(),e.BQk()}if(2&s){const t=e.oxw(2);e.xp6(2),e.hij(" ",e.lcZ(3,7,"common.edit")," "),e.xp6(4),e.hij(" ",e.lcZ(7,9,"common.more")," "),e.xp6(4),e.Q6J("disabled",t.isDefaultShipping),e.xp6(1),e.hij(" ",e.lcZ(12,11,"customer.set-as-default-shipping-address")," "),e.xp6(2),e.Q6J("disabled",t.isDefaultBilling),e.xp6(1),e.hij(" ",e.lcZ(15,13,"customer.set-as-default-billing-address")," "),e.xp6(5),e.hij(" ",e.lcZ(20,15,"common.delete")," ")}}function we(s,o){if(1&s&&(e.TgZ(0,"div",1)(1,"div",2)(2,"div",3),e.YNc(3,Oe,2,1,"span",4),e._uU(4),e.qZA(),e.TgZ(5,"div",5),e.YNc(6,Je,4,3,"vdr-chip",6),e.YNc(7,Fe,4,3,"vdr-chip",6),e.qZA()(),e.TgZ(8,"div",7)(9,"div",8),e._UZ(10,"vdr-formatted-address",9),e.qZA()(),e.TgZ(11,"div",10),e._UZ(12,"vdr-entity-info",11),e.YNc(13,Pe,21,17,"ng-container",12),e.qZA()()),2&s){const t=o.ngIf,r=e.oxw();e.xp6(3),e.Q6J("ngIf",t.streetLine1),e.xp6(1),e.hij(" ",t.countryCode," "),e.xp6(2),e.Q6J("ngIf",r.isDefaultShipping),e.xp6(1),e.Q6J("ngIf",r.isDefaultBilling),e.xp6(3),e.Q6J("address",t),e.xp6(2),e.Q6J("entity",t),e.xp6(1),e.Q6J("ngIf",r.editable)}}class I{constructor(o,t){this.modalService=o,this.changeDetector=t,this.availableCountries=[],this.editable=!0,this.setAsDefaultShipping=new e.vpe,this.setAsDefaultBilling=new e.vpe,this.deleteAddress=new e.vpe,this.dataDependenciesPopulated=new G.X(!1)}ngOnInit(){this.addressForm.get("streetLine1").value||this.dataDependenciesPopulated.pipe((0,Y.h)(t=>t),(0,le.q)(1)).subscribe(()=>{this.editAddress()})}ngOnChanges(o){null!=this.customFields&&null!=this.availableCountries&&this.dataDependenciesPopulated.next(!0)}getCountryName(o){if(!this.availableCountries)return"";const t=this.availableCountries.find(r=>r.code===o);return t?t.name:""}setAsDefaultBillingAddress(){this.setAsDefaultBilling.emit(this.addressForm.value.id),this.addressForm.markAsDirty()}setAsDefaultShippingAddress(){this.setAsDefaultShipping.emit(this.addressForm.value.id),this.addressForm.markAsDirty()}delete(){this.deleteAddress.emit(this.addressForm.value.id),this.addressForm.markAsDirty()}editAddress(){this.modalService.fromComponent(S,{locals:{addressForm:this.addressForm,customFields:this.customFields,availableCountries:this.availableCountries},size:"md",closable:!0}).subscribe(()=>{this.changeDetector.markForCheck()})}}I.\u0275fac=function(o){return new(o||I)(e.Y36(d.Z7U),e.Y36(e.sBO))},I.\u0275cmp=e.Xpm({type:I,selectors:[["vdr-address-card"]],inputs:{addressForm:"addressForm",customFields:"customFields",availableCountries:"availableCountries",isDefaultBilling:"isDefaultBilling",isDefaultShipping:"isDefaultShipping",editable:"editable"},outputs:{setAsDefaultShipping:"setAsDefaultShipping",setAsDefaultBilling:"setAsDefaultBilling",deleteAddress:"deleteAddress"},features:[e.TTD],decls:1,vars:1,consts:[["class","card",4,"ngIf"],[1,"card"],[1,"card-header"],[1,"address-title"],["class","street-line",4,"ngIf"],[1,"default-controls"],["class","is-default p8",4,"ngIf"],[1,"card-block"],[1,"card-text"],[3,"address"],[1,"card-footer"],[3,"entity"],[4,"ngIf"],[1,"street-line"],[1,"is-default","p8"],["shape","truck"],["shape","credit-card"],[1,"btn","btn-sm","btn-link",3,"click"],["type","button","vdrDropdownTrigger","",1,"btn","btn-sm","btn-link"],["shape","caret down"],["vdrDropdownItem","",1,"button",3,"disabled","click"],[1,"dropdown-divider"],["type","button","vdrDropdownItem","",1,"delete-button",3,"click"],["shape","trash",1,"is-danger"]],template:function(o,t){1&o&&e.YNc(0,we,14,7,"div",0),2&o&&e.Q6J("ngIf",t.addressForm.value)},directives:[_.O5,Q.Y,y.qvL,Ie.b,ne.V,j.J,H.U,R.N,B.H],pipes:[v.X$],styles:["[_nghost-%COMP%]{display:block;max-width:360px}clr-input-container[_ngcontent-%COMP%]{margin-bottom:12px}.defaul-controls[_ngcontent-%COMP%]{display:flex}.is-default[_ngcontent-%COMP%]{margin:0;color:var(--color-success-500)}"],changeDetection:0});var Me=i(4929),m=i(8270),Ge=i(234),Qe=i(1640),de=i(7400),x=i(591),qe=i(9196),Ee=i(1944);const{isArray:$e}=Array;var Ye=i(1308),me=i(420);function je(...s){const o=(0,me.yG)(s),t=(0,me._6)(s,1/0);return s=function ke(s){return 1===s.length&&$e(s[0])?s[0]:s}(s),(0,Ee.e)((r,n)=>{(0,Ye.J)(t)((0,de.D)([r,...s],o)).subscribe(n)})}var He=i(9525),Re=i(3853),ie=i(8660);function Be(s,o){1&s&&(e._uU(0),e.ALo(1,"translate")),2&s&&e.hij(" ",e.lcZ(1,1,"customer.add-customer-to-group"),"\n")}function Ve(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"span",5),e.NdJ("click",function(){const n=e.CHM(t),a=n.item;return n.clear(a)}),e._uU(1," \xd7 "),e.qZA(),e.TgZ(2,"vdr-chip",6),e._uU(3),e.qZA()}if(2&s){const t=o.item;e.xp6(2),e.Q6J("colorFrom",t.id),e.xp6(1),e.Oqu(t.name)}}function Xe(s,o){if(1&s&&(e.TgZ(0,"vdr-chip",6),e._uU(1),e.qZA()),2&s){const t=o.item;e.Q6J("colorFrom",t.id),e.xp6(1),e.Oqu(t.name)}}const We=function(s){return{count:s}};function Ke(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",7),e.NdJ("click",function(){return e.CHM(t),e.oxw().cancel()}),e._uU(1),e.ALo(2,"translate"),e.qZA(),e.TgZ(3,"button",8),e.NdJ("click",function(){return e.CHM(t),e.oxw().add()}),e._uU(4),e.ALo(5,"translate"),e.qZA()}if(2&s){const t=e.oxw();e.xp6(1),e.Oqu(e.lcZ(2,3,"common.cancel")),e.xp6(2),e.Q6J("disabled",!t.selectedGroupIds.length),e.xp6(1),e.hij(" ",e.xi3(5,5,"customer.add-customer-to-groups-with-count",e.VKq(8,We,t.selectedGroupIds.length))," ")}}class O{constructor(o){this.dataService=o,this.selectedGroupIds=[]}ngOnInit(){this.groups$=this.dataService.customer.getCustomerGroupList().mapStream(o=>o.customerGroups.items)}cancel(){this.resolveWith()}add(){this.resolveWith(this.selectedGroupIds)}}O.\u0275fac=function(o){return new(o||O)(e.Y36(d.DoR))},O.\u0275cmp=e.Xpm({type:O,selectors:[["vdr-select-customer-group-dialog"]],decls:6,vars:8,consts:[["vdrDialogTitle",""],["appendTo","body","bindValue","id",3,"items","addTag","multiple","ngModel","clearable","searchable","ngModelChange"],["ng-label-tmp",""],["ng-option-tmp",""],["vdrDialogButtons",""],["aria-hidden","true",1,"ng-value-icon","left",3,"click"],[3,"colorFrom"],["type","button",1,"btn",3,"click"],["type","submit",1,"btn","btn-primary",3,"disabled","click"]],template:function(o,t){1&o&&(e.YNc(0,Be,2,3,"ng-template",0),e.TgZ(1,"ng-select",1),e.NdJ("ngModelChange",function(n){return t.selectedGroupIds=n}),e.ALo(2,"async"),e.YNc(3,Ve,4,2,"ng-template",2),e.YNc(4,Xe,2,2,"ng-template",3),e.qZA(),e.YNc(5,Ke,6,10,"ng-template",4)),2&o&&(e.xp6(1),e.Q6J("items",e.lcZ(2,6,t.groups$))("addTag",!1)("multiple",!0)("ngModel",t.selectedGroupIds)("clearable",!0)("searchable",!1))},directives:[q.q,ie.w9,l.JJ,l.On,ie.mR,Q.Y,ie.ir,k.n],pipes:[v.X$,_.Ov],styles:[""],changeDetection:0});var b=i(7346);function ze(s,o){1&s&&(e.ynx(0),e._UZ(1,"clr-icon",1),e._uU(2),e.ALo(3,"translate"),e.BQk()),2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.verified")," "))}function et(s,o){1&s&&(e.ynx(0),e._UZ(1,"clr-icon",2),e._uU(2),e.ALo(3,"translate"),e.BQk()),2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.registered")," "))}function tt(s,o){if(1&s&&(e.TgZ(0,"vdr-chip"),e.YNc(1,ze,4,3,"ng-container",0),e.YNc(2,et,4,3,"ng-container",0),e.qZA()),2&s){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",null==t.customer.user?null:t.customer.user.verified),e.xp6(1),e.Q6J("ngIf",!(null!=t.customer.user&&t.customer.user.verified))}}function ot(s,o){1&s&&(e.TgZ(0,"vdr-chip"),e._uU(1),e.ALo(2,"translate"),e.qZA()),2&s&&(e.xp6(1),e.Oqu(e.lcZ(2,1,"customer.guest")))}class Z{}Z.\u0275fac=function(o){return new(o||Z)},Z.\u0275cmp=e.Xpm({type:Z,selectors:[["vdr-customer-status-label"]],inputs:{customer:"customer"},decls:2,vars:2,consts:[[4,"ngIf"],["shape","check-circle",1,"verified-user-icon"],["shape","check-circle",1,"registered-user-icon"]],template:function(o,t){1&o&&(e.YNc(0,tt,3,2,"vdr-chip",0),e.YNc(1,ot,3,3,"vdr-chip",0)),2&o&&(e.Q6J("ngIf",null==t.customer.user?null:t.customer.user.id),e.xp6(1),e.Q6J("ngIf",!(null!=t.customer.user&&t.customer.user.id)))},directives:[_.O5,Q.Y,y.qvL],pipes:[v.X$],styles:[".registered-user-icon[_ngcontent-%COMP%]{color:var(--color-grey-300)}.verified-user-icon[_ngcontent-%COMP%]{color:var(--color-success-500)}"],changeDetection:0});var ae=i(8276),V=i(9416),ue=i(4652),pe=i(837),st=i(2505),rt=i(2355),nt=i(4664),it=i(2702),at=i(7368);function ct(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"vdr-timeline-entry",4)(1,"div",5)(2,"textarea",6),e.NdJ("ngModelChange",function(n){e.CHM(t);return e.oxw().note=n}),e.qZA(),e.TgZ(3,"button",7),e.NdJ("click",function(){return e.CHM(t),e.oxw().addNoteToCustomer()}),e._uU(4),e.ALo(5,"translate"),e.qZA()()()}if(2&s){const t=e.oxw();e.xp6(2),e.Q6J("ngModel",t.note),e.xp6(1),e.Q6J("disabled",!t.note),e.xp6(1),e.hij(" ",e.lcZ(5,3,"order.add-note")," ")}}function lt(s,o){1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s&&(e.xp6(1),e.hij(" ",e.lcZ(2,1,"customer.history-using-native-auth-strategy")," "))}const _e=function(s){return{strategy:s}};function dt(s,o){if(1&s&&(e._uU(0),e.ALo(1,"translate")),2&s){const t=e.oxw(2).$implicit;e.hij(" ",e.xi3(1,1,"customer.history-using-external-auth-strategy",e.VKq(4,_e,t.data.strategy))," ")}}function mt(s,o){if(1&s&&(e.ynx(0),e.TgZ(1,"div",11),e._uU(2),e.ALo(3,"translate"),e.qZA(),e.YNc(4,lt,3,3,"ng-container",12),e.YNc(5,dt,2,6,"ng-template",null,13,e.W1O),e.BQk()),2&s){const t=e.MAs(6),r=e.oxw().$implicit;e.xp6(2),e.hij(" ",e.lcZ(3,3,"customer.history-customer-registered")," "),e.xp6(2),e.Q6J("ngIf","native"===r.data.strategy)("ngIfElse",t)}}function ut(s,o){1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s&&(e.xp6(1),e.hij(" ",e.lcZ(2,1,"customer.history-using-native-auth-strategy")," "))}function pt(s,o){if(1&s&&(e._uU(0),e.ALo(1,"translate")),2&s){const t=e.oxw(2).$implicit;e.hij(" ",e.xi3(1,1,"customer.history-using-external-auth-strategy",e.VKq(4,_e,t.data.strategy))," ")}}function _t(s,o){if(1&s&&(e.ynx(0),e.TgZ(1,"div",11),e._uU(2),e.ALo(3,"translate"),e.qZA(),e.YNc(4,ut,3,3,"ng-container",12),e.YNc(5,pt,2,6,"ng-template",null,13,e.W1O),e.BQk()),2&s){const t=e.MAs(6),r=e.oxw().$implicit;e.xp6(2),e.hij(" ",e.lcZ(3,3,"customer.history-customer-verified")," "),e.xp6(2),e.Q6J("ngIf","native"===r.data.strategy)("ngIfElse",t)}}function gt(s,o){if(1&s&&(e.ynx(0),e.TgZ(1,"div",14),e._uU(2),e.ALo(3,"translate"),e.TgZ(4,"vdr-history-entry-detail"),e._UZ(5,"vdr-object-tree",15),e.qZA()(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(2),e.hij(" ",e.lcZ(3,2,"customer.history-customer-detail-updated")," "),e.xp6(3),e.Q6J("value",t.data.input)}}const ge=function(s){return{groupName:s}};function ht(s,o){if(1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.xi3(2,1,"customer.history-customer-added-to-group",e.VKq(4,ge,t.data.groupName))," ")}}function ft(s,o){if(1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.xi3(2,1,"customer.history-customer-removed-from-group",e.VKq(4,ge,t.data.groupName))," ")}}function Ct(s,o){if(1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.TgZ(3,"div",14)(4,"div",16),e._uU(5),e.qZA()(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,2,"customer.history-customer-address-created")," "),e.xp6(4),e.Oqu(t.data.address)}}function vt(s,o){if(1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.TgZ(3,"div",14)(4,"div",16),e._uU(5),e.qZA(),e.TgZ(6,"vdr-history-entry-detail"),e._UZ(7,"vdr-object-tree",15),e.qZA()(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,3,"customer.history-customer-address-updated")," "),e.xp6(4),e.Oqu(t.data.address),e.xp6(2),e.Q6J("value",t.data.input)}}function xt(s,o){if(1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.TgZ(3,"div",16),e._uU(4),e.qZA(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,2,"customer.history-customer-address-deleted")," "),e.xp6(3),e.Oqu(t.data.address)}}function bt(s,o){1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s&&(e.xp6(1),e.hij(" ",e.lcZ(2,1,"customer.history-customer-password-updated")," "))}function yt(s,o){1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s&&(e.xp6(1),e.hij(" ",e.lcZ(2,1,"customer.history-customer-password-reset-requested")," "))}function At(s,o){1&s&&(e.ynx(0),e._uU(1),e.ALo(2,"translate"),e.BQk()),2&s&&(e.xp6(1),e.hij(" ",e.lcZ(2,1,"customer.history-customer-password-reset-verified")," "))}function Zt(s,o){if(1&s&&(e.ynx(0),e.TgZ(1,"div",14),e._uU(2),e.ALo(3,"translate"),e.TgZ(4,"vdr-history-entry-detail")(5,"vdr-labeled-data",17),e.ALo(6,"translate"),e._uU(7),e.qZA(),e.TgZ(8,"vdr-labeled-data",17),e.ALo(9,"translate"),e._uU(10),e.qZA()()(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(2),e.hij(" ",e.lcZ(3,5,"customer.history-customer-email-update-requested")," "),e.xp6(3),e.Q6J("label",e.lcZ(6,7,"customer.old-email-address")),e.xp6(2),e.Oqu(t.data.oldEmailAddress),e.xp6(1),e.Q6J("label",e.lcZ(9,9,"customer.new-email-address")),e.xp6(2),e.Oqu(t.data.newEmailAddress)}}function Tt(s,o){if(1&s&&(e.ynx(0),e.TgZ(1,"div",14),e._uU(2),e.ALo(3,"translate"),e.TgZ(4,"vdr-history-entry-detail")(5,"vdr-labeled-data",17),e.ALo(6,"translate"),e._uU(7),e.qZA(),e.TgZ(8,"vdr-labeled-data",17),e.ALo(9,"translate"),e._uU(10),e.qZA()()(),e.BQk()),2&s){const t=e.oxw().$implicit;e.xp6(2),e.hij(" ",e.lcZ(3,5,"customer.history-customer-email-update-verified")," "),e.xp6(3),e.Q6J("label",e.lcZ(6,7,"customer.old-email-address")),e.xp6(2),e.Oqu(t.data.oldEmailAddress),e.xp6(1),e.Q6J("label",e.lcZ(9,9,"customer.new-email-address")),e.xp6(2),e.Oqu(t.data.newEmailAddress)}}function Dt(s,o){if(1&s){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",14)(2,"div",18),e._uU(3),e.qZA(),e._UZ(4,"div",19),e.TgZ(5,"vdr-dropdown")(6,"button",20),e._UZ(7,"clr-icon",21),e.qZA(),e.TgZ(8,"vdr-dropdown-menu",22)(9,"button",23),e.NdJ("click",function(){e.CHM(t);const n=e.oxw().$implicit;return e.oxw().updateNote.emit(n)}),e.ALo(10,"hasPermission"),e._UZ(11,"clr-icon",24),e._uU(12),e.ALo(13,"translate"),e.qZA(),e._UZ(14,"div",25),e.TgZ(15,"button",23),e.NdJ("click",function(){e.CHM(t);const n=e.oxw().$implicit;return e.oxw().deleteNote.emit(n)}),e.ALo(16,"hasPermission"),e._UZ(17,"clr-icon",26),e._uU(18),e.ALo(19,"translate"),e.qZA()()()(),e.BQk()}if(2&s){const t=e.oxw().$implicit;e.xp6(3),e.hij(" ",t.data.note," "),e.xp6(6),e.Q6J("disabled",!e.lcZ(10,5,"UpdateCustomer")),e.xp6(3),e.hij(" ",e.lcZ(13,7,"common.edit")," "),e.xp6(3),e.Q6J("disabled",!e.lcZ(16,9,"UpdateCustomer")),e.xp6(3),e.hij(" ",e.lcZ(19,11,"common.delete")," ")}}function Ut(s,o){if(1&s&&(e.TgZ(0,"vdr-timeline-entry",8),e.ynx(1,9),e.YNc(2,mt,7,5,"ng-container",10),e.YNc(3,_t,7,5,"ng-container",10),e.YNc(4,gt,6,4,"ng-container",10),e.YNc(5,ht,3,6,"ng-container",10),e.YNc(6,ft,3,6,"ng-container",10),e.YNc(7,Ct,6,4,"ng-container",10),e.YNc(8,vt,8,5,"ng-container",10),e.YNc(9,xt,5,4,"ng-container",10),e.YNc(10,bt,3,3,"ng-container",10),e.YNc(11,yt,3,3,"ng-container",10),e.YNc(12,At,3,3,"ng-container",10),e.YNc(13,Zt,11,11,"ng-container",10),e.YNc(14,Tt,11,11,"ng-container",10),e.YNc(15,Dt,20,13,"ng-container",10),e.BQk(),e.qZA()),2&s){const t=o.$implicit,r=e.oxw();e.Q6J("displayType",r.getDisplayType(t))("iconShape",r.getTimelineIcon(t))("createdAt",t.createdAt)("name",r.getName(t))("featured",r.isFeatured(t)),e.xp6(1),e.Q6J("ngSwitch",t.type),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_REGISTERED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_VERIFIED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_DETAIL_UPDATED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_ADDED_TO_GROUP),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_REMOVED_FROM_GROUP),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_ADDRESS_CREATED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_ADDRESS_UPDATED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_ADDRESS_DELETED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_PASSWORD_UPDATED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_PASSWORD_RESET_REQUESTED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_PASSWORD_RESET_VERIFIED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_EMAIL_UPDATE_REQUESTED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_EMAIL_UPDATE_VERIFIED),e.xp6(1),e.Q6J("ngSwitchCase",r.type.CUSTOMER_NOTE)}}class J{constructor(){this.addNote=new e.vpe,this.updateNote=new e.vpe,this.deleteNote=new e.vpe,this.note="",this.type=d.iYD}getDisplayType(o){switch(o.type){case d.iYD.CUSTOMER_VERIFIED:case d.iYD.CUSTOMER_EMAIL_UPDATE_VERIFIED:case d.iYD.CUSTOMER_PASSWORD_RESET_VERIFIED:return"success";case d.iYD.CUSTOMER_REGISTERED:return"muted";case d.iYD.CUSTOMER_REMOVED_FROM_GROUP:return"error";default:return"default"}}getTimelineIcon(o){switch(o.type){case d.iYD.CUSTOMER_REGISTERED:return"user";case d.iYD.CUSTOMER_VERIFIED:return["assign-user","is-solid"];case d.iYD.CUSTOMER_NOTE:return"note";case d.iYD.CUSTOMER_ADDED_TO_GROUP:case d.iYD.CUSTOMER_REMOVED_FROM_GROUP:return"users"}}isFeatured(o){switch(o.type){case d.iYD.CUSTOMER_REGISTERED:case d.iYD.CUSTOMER_VERIFIED:return!0;default:return!1}}getName(o){const{administrator:t}=o;return t?`${t.firstName} ${t.lastName}`:`${this.customer.firstName} ${this.customer.lastName}`}addNoteToCustomer(){this.addNote.emit({note:this.note}),this.note=""}}J.\u0275fac=function(o){return new(o||J)},J.\u0275cmp=e.Xpm({type:J,selectors:[["vdr-customer-history"]],inputs:{customer:"customer",history:"history"},outputs:{addNote:"addNote",updateNote:"updateNote",deleteNote:"deleteNote"},decls:7,vars:6,consts:[[1,"entry-list"],["iconShape","note","displayType","muted",4,"vdrIfPermissions"],[3,"displayType","iconShape","createdAt","name","featured",4,"ngFor","ngForOf"],[3,"isLast"],["iconShape","note","displayType","muted"],[1,"note-entry"],["name","note",1,"note",3,"ngModel","ngModelChange"],[1,"btn","btn-secondary",3,"disabled","click"],[3,"displayType","iconShape","createdAt","name","featured"],[3,"ngSwitch"],[4,"ngSwitchCase"],[1,"title"],[4,"ngIf","ngIfElse"],["namedStrategy",""],[1,"flex"],[3,"value"],[1,"address-string"],[3,"label"],[1,"note-text"],[1,"flex-spacer"],["vdrDropdownTrigger","",1,"icon-button"],["shape","ellipsis-vertical"],["vdrPosition","bottom-right"],["vdrDropdownItem","",1,"button",3,"disabled","click"],["shape","edit"],[1,"dropdown-divider"],["shape","trash",1,"is-danger"]],template:function(o,t){1&o&&(e.TgZ(0,"h4"),e._uU(1),e.ALo(2,"translate"),e.qZA(),e.TgZ(3,"div",0),e.YNc(4,ct,6,5,"vdr-timeline-entry",1),e.YNc(5,Ut,16,20,"vdr-timeline-entry",2),e._UZ(6,"vdr-timeline-entry",3),e.qZA()),2&o&&(e.xp6(1),e.Oqu(e.lcZ(2,4,"customer.customer-history")),e.xp6(3),e.Q6J("vdrIfPermissions","UpdateCustomer"),e.xp6(1),e.Q6J("ngForOf",t.history),e.xp6(1),e.Q6J("isLast",!0))},directives:[V.H,rt._,U.y,l.Fj,l.JJ,l.On,_.sg,_.RF,_.n9,_.O5,nt.C,it._,at.W,j.J,H.U,y.qvL,R.N,B.H],pipes:[v.X$,N.j],styles:[".entry-list[_ngcontent-%COMP%]{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry[_ngcontent-%COMP%]{display:flex;align-items:center}.note-entry[_ngcontent-%COMP%] .note[_ngcontent-%COMP%]{flex:1}.note-entry[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:0}textarea.note[_ngcontent-%COMP%]{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text[_ngcontent-%COMP%]{color:var(--color-text-100);white-space:pre-wrap}.address-string[_ngcontent-%COMP%]{font-size:smaller;color:var(--color-text-200)}"],changeDetection:0});var Nt=i(2651),Lt=i(6826),St=i(4187);function It(s,o){if(1&s&&(e.TgZ(0,"div",23),e.ALo(1,"localeDate"),e._uU(2),e.ALo(3,"translate"),e.ALo(4,"timeAgo"),e.qZA()),2&s){const t=o.ngIf;e.Q6J("title",e.xi3(1,3,t,"medium")),e.xp6(2),e.AsE(" ",e.lcZ(3,6,"customer.last-login"),": ",e.lcZ(4,8,t)," ")}}function Ot(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",24),e.NdJ("click",function(){return e.CHM(t),e.oxw().create()}),e._uU(1),e.ALo(2,"translate"),e.qZA()}if(2&s){const t=e.oxw();e.Q6J("disabled",!(t.addressDefaultsUpdated||t.detailForm.valid&&t.detailForm.dirty)),e.xp6(1),e.hij(" ",e.lcZ(2,2,"common.create")," ")}}function Jt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",24),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).save()}),e._uU(1),e.ALo(2,"translate"),e.qZA()}if(2&s){const t=e.oxw(2);e.Q6J("disabled",!(t.addressDefaultsUpdated||t.detailForm.valid&&t.detailForm.dirty)),e.xp6(1),e.hij(" ",e.lcZ(2,2,"common.update")," ")}}function Ft(s,o){1&s&&e.YNc(0,Jt,3,4,"button",25),2&s&&e.Q6J("vdrIfPermissions","UpdateCustomer")}function Pt(s,o){1&s&&(e.TgZ(0,"vdr-form-field",26),e.ALo(1,"translate"),e._UZ(2,"input",27),e.qZA()),2&s&&e.Q6J("label",e.lcZ(1,1,"customer.password"))}const wt=function(){return["customer","customFields"]};function Mt(s,o){if(1&s&&(e.TgZ(0,"section",28)(1,"label"),e._uU(2),e.ALo(3,"translate"),e.qZA(),e._UZ(4,"vdr-tabbed-custom-fields",29),e.qZA()),2&s){const t=e.oxw();e.xp6(2),e.Oqu(e.lcZ(3,3,"common.custom-fields")),e.xp6(2),e.Q6J("customFields",t.customFields)("customFieldsFormGroup",t.detailForm.get(e.DdM(5,wt)))}}function Gt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"vdr-chip",36),e.NdJ("iconClick",function(){const a=e.CHM(t).$implicit;return e.oxw(3).removeFromGroup(a)}),e._uU(1),e.qZA()}if(2&s){const t=o.$implicit;e.Q6J("colorFrom",t.id),e.xp6(1),e.Oqu(t.name)}}function Qt(s,o){if(1&s&&(e.ynx(0),e.YNc(1,Gt,2,2,"vdr-chip",35),e.BQk()),2&s){const t=e.oxw().ngIf;e.xp6(1),e.Q6J("ngForOf",t)}}function qt(s,o){1&s&&(e._uU(0),e.ALo(1,"translate")),2&s&&e.hij(" ",e.lcZ(1,1,"customer.not-a-member-of-any-groups")," ")}function Et(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",37),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addToGroup()}),e._UZ(1,"clr-icon",38),e._uU(2),e.ALo(3,"translate"),e.qZA()}2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.add-customer-to-group")," "))}function $t(s,o){if(1&s&&(e.TgZ(0,"div",30)(1,"label",31),e._uU(2),e.ALo(3,"translate"),e.qZA(),e.YNc(4,Qt,2,1,"ng-container",32),e.YNc(5,qt,2,3,"ng-template",null,33,e.W1O),e.TgZ(7,"div"),e.YNc(8,Et,4,3,"button",34),e.qZA()()),2&s){const t=o.ngIf,r=e.MAs(6);e.xp6(2),e.Oqu(e.lcZ(3,4,"customer.customer-groups")),e.xp6(2),e.Q6J("ngIf",t.length)("ngIfElse",r),e.xp6(4),e.Q6J("vdrIfPermissions","UpdateCustomerGroup")}}const kt=function(){return["UpdateCustomer"]};function Yt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"vdr-address-card",45),e.NdJ("setAsDefaultBilling",function(n){return e.CHM(t),e.oxw(2).setDefaultBillingAddressId(n)})("setAsDefaultShipping",function(n){return e.CHM(t),e.oxw(2).setDefaultShippingAddressId(n)})("deleteAddress",function(n){return e.CHM(t),e.oxw(2).toggleDeleteAddress(n)}),e.ALo(1,"async"),e.ALo(2,"hasPermission"),e.qZA()}if(2&s){const t=o.$implicit,r=e.oxw(2);e.ekj("to-delete",r.addressesToDeleteIds.has(t.value.id)),e.Q6J("availableCountries",e.lcZ(1,8,r.availableCountries$))("isDefaultBilling",r.defaultBillingAddressId===t.value.id)("isDefaultShipping",r.defaultShippingAddressId===t.value.id)("addressForm",t)("customFields",r.addressCustomFields)("editable",e.lcZ(2,10,e.DdM(12,kt))&&!r.addressesToDeleteIds.has(t.value.id))}}function jt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",46),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addAddress()}),e._UZ(1,"clr-icon",38),e._uU(2),e.ALo(3,"translate"),e.qZA()}2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.create-new-address")," "))}const Ht=function(s){return["/orders/",s]};function Rt(s,o){if(1&s&&(e.TgZ(0,"td",47),e._uU(1),e.qZA(),e.TgZ(2,"td",47),e._uU(3),e.qZA(),e.TgZ(4,"td",47),e._uU(5),e.ALo(6,"localeCurrency"),e.qZA(),e.TgZ(7,"td",47),e._uU(8),e.ALo(9,"localeDate"),e.qZA(),e.TgZ(10,"td",48),e._UZ(11,"vdr-table-row-action",49),e.ALo(12,"translate"),e.qZA()),2&s){const t=o.item;e.xp6(1),e.Oqu(t.code),e.xp6(2),e.Oqu(t.state),e.xp6(2),e.Oqu(e.xi3(6,6,t.totalWithTax,t.currencyCode)),e.xp6(3),e.Oqu(e.xi3(9,9,t.updatedAt,"medium")),e.xp6(3),e.Q6J("label",e.lcZ(12,12,"common.open"))("linkTo",e.VKq(14,Ht,t.id))}}function Bt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"div",39)(1,"div",40)(2,"h3"),e._uU(3),e.ALo(4,"translate"),e.qZA(),e.YNc(5,Yt,3,13,"vdr-address-card",41),e.YNc(6,jt,4,3,"button",42),e.qZA(),e.TgZ(7,"div",43)(8,"h3"),e._uU(9),e.ALo(10,"translate"),e.qZA(),e.TgZ(11,"vdr-data-table",44),e.NdJ("itemsPerPageChange",function(n){return e.CHM(t),e.oxw().setOrderItemsPerPage(n)})("pageChange",function(n){return e.CHM(t),e.oxw().setOrderCurrentPage(n)}),e.ALo(12,"async"),e.ALo(13,"async"),e.ALo(14,"translate"),e.TgZ(15,"vdr-dt-column"),e._uU(16),e.ALo(17,"translate"),e.qZA(),e.TgZ(18,"vdr-dt-column"),e._uU(19),e.ALo(20,"translate"),e.qZA(),e.TgZ(21,"vdr-dt-column"),e._uU(22),e.ALo(23,"translate"),e.qZA(),e.TgZ(24,"vdr-dt-column"),e._uU(25),e.ALo(26,"translate"),e.qZA(),e._UZ(27,"vdr-dt-column"),e.YNc(28,Rt,13,16,"ng-template"),e.qZA()()()}if(2&s){const t=e.oxw();e.xp6(3),e.Oqu(e.lcZ(4,13,"customer.addresses")),e.xp6(2),e.Q6J("ngForOf",t.getAddressFormControls()),e.xp6(1),e.Q6J("vdrIfPermissions","UpdateCustomer"),e.xp6(3),e.Oqu(e.lcZ(10,15,"customer.orders")),e.xp6(2),e.Q6J("items",e.lcZ(12,17,t.orders$))("itemsPerPage",t.ordersPerPage)("totalItems",e.lcZ(13,19,t.ordersCount$))("currentPage",t.currentOrdersPage)("emptyStateLabel",e.lcZ(14,21,"customer.no-orders-placed")),e.xp6(5),e.Oqu(e.lcZ(17,23,"common.code")),e.xp6(3),e.Oqu(e.lcZ(20,25,"order.state")),e.xp6(3),e.Oqu(e.lcZ(23,27,"order.total")),e.xp6(3),e.Oqu(e.lcZ(26,29,"common.updated-at"))}}function Vt(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"div",39)(1,"div",50)(2,"vdr-customer-history",51),e.NdJ("addNote",function(n){return e.CHM(t),e.oxw().addNoteToCustomer(n)})("updateNote",function(n){return e.CHM(t),e.oxw().updateNote(n)})("deleteNote",function(n){return e.CHM(t),e.oxw().deleteNote(n)}),e.ALo(3,"async"),e.ALo(4,"async"),e.qZA()()()}if(2&s){const t=e.oxw();e.xp6(2),e.Q6J("customer",e.lcZ(3,2,t.entity$))("history",e.lcZ(4,4,t.history$))}}class F extends d.UT_{constructor(o,t,r,n,a,c,u,h){super(o,t,r,c),this.changeDetector=n,this.formBuilder=a,this.dataService=c,this.modalService=u,this.notificationService=h,this.fetchHistory=new W.x,this.addressesToDeleteIds=new Set,this.addressDefaultsUpdated=!1,this.ordersPerPage=10,this.currentOrdersPage=1,this.orderListUpdates$=new W.x,this.customFields=this.getCustomFieldConfig("Customer"),this.addressCustomFields=this.getCustomFieldConfig("Address"),this.detailForm=this.formBuilder.group({customer:this.formBuilder.group({title:"",firstName:["",l.kI.required],lastName:["",l.kI.required],phoneNumber:"",emailAddress:["",[l.kI.required,l.kI.email]],password:"",customFields:this.formBuilder.group(this.customFields.reduce((f,X)=>Object.assign(Object.assign({},f),{[X.name]:""}),{}))}),addresses:new l.Oe([])})}ngOnInit(){this.init(),this.availableCountries$=this.dataService.settings.getAvailableCountries().mapSingle(t=>t.countries.items).pipe((0,qe.d)(1));const o=this.entity$.pipe(je(this.orderListUpdates$));this.orders$=o.pipe((0,p.U)(t=>t.orders.items)),this.ordersCount$=this.entity$.pipe((0,p.U)(t=>t.orders.totalItems)),this.history$=this.fetchHistory.pipe((0,E.O)(null),(0,g.w)(()=>this.dataService.customer.getCustomerHistory(this.id,{sort:{createdAt:d.Asd.DESC}}).mapStream(t=>{var r;return null===(r=t.customer)||void 0===r?void 0:r.history.items})))}ngOnDestroy(){this.destroy(),this.orderListUpdates$.complete()}getAddressFormControls(){return this.detailForm.get(["addresses"]).controls}setDefaultBillingAddressId(o){this.defaultBillingAddressId=o,this.addressDefaultsUpdated=!0}setDefaultShippingAddressId(o){this.defaultShippingAddressId=o,this.addressDefaultsUpdated=!0}toggleDeleteAddress(o){this.addressesToDeleteIds.has(o)?this.addressesToDeleteIds.delete(o):this.addressesToDeleteIds.add(o)}addAddress(){const o=this.detailForm.get("addresses"),t=this.formBuilder.group({fullName:"",company:"",streetLine1:["",l.kI.required],streetLine2:"",city:"",province:"",postalCode:"",countryCode:["",l.kI.required],phoneNumber:"",defaultShippingAddress:!1,defaultBillingAddress:!1});if(this.addressCustomFields.length){const r=this.formBuilder.group({});for(const n of this.addressCustomFields)r.addControl(n.name,new l.NI(""));t.addControl("customFields",r)}o.push(t)}setOrderItemsPerPage(o){this.ordersPerPage=+o,this.fetchOrdersList()}setOrderCurrentPage(o){this.currentOrdersPage=+o,this.fetchOrdersList()}create(){var o;const t=this.detailForm.get("customer");if(!t)return;const r=t.value,n=null===(o=t.get("customFields"))||void 0===o?void 0:o.value,a={title:r.title,emailAddress:r.emailAddress,firstName:r.firstName,lastName:r.lastName,phoneNumber:r.phoneNumber,customFields:n};this.dataService.customer.createCustomer(a,r.password).subscribe(({createCustomer:c})=>{switch(c.__typename){case"Customer":this.notificationService.success((0,m.J)("common.notify-create-success"),{entity:"Customer"}),c.emailAddress&&!r.password&&this.notificationService.notify({message:(0,m.J)("customer.email-verification-sent"),translationVars:{emailAddress:r.emailAddress},type:"info",duration:1e4}),this.detailForm.markAsPristine(),this.addressDefaultsUpdated=!1,this.changeDetector.markForCheck(),this.router.navigate(["../",c.id],{relativeTo:this.route});break;case"EmailAddressConflictError":this.notificationService.error(c.message)}})}save(){this.entity$.pipe((0,le.q)(1),(0,He.z)(({id:o})=>{var t;const r=[],n=this.detailForm.get("customer");if(n&&n.dirty){const c=n.value,u=null===(t=n.get("customFields"))||void 0===t?void 0:t.value,h={id:o,title:c.title,emailAddress:c.emailAddress,firstName:c.firstName,lastName:c.lastName,phoneNumber:c.phoneNumber,customFields:u};r.push(this.dataService.customer.updateCustomer(h).pipe((0,p.U)(f=>f.updateCustomer)))}const a=this.detailForm.get("addresses");if(a&&a.dirty||this.addressDefaultsUpdated)for(const c of a.controls)if(c.dirty||this.addressDefaultsUpdated){const u=c.value,h={fullName:u.fullName,company:u.company,streetLine1:u.streetLine1,streetLine2:u.streetLine2,city:u.city,province:u.province,postalCode:u.postalCode,countryCode:u.countryCode,phoneNumber:u.phoneNumber,defaultShippingAddress:this.defaultShippingAddressId===u.id,defaultBillingAddress:this.defaultBillingAddressId===u.id,customFields:u.customFields};u.id?this.addressesToDeleteIds.has(u.id)?r.push(this.dataService.customer.deleteCustomerAddress(u.id).pipe((0,p.U)(f=>f.deleteCustomerAddress))):r.push(this.dataService.customer.updateCustomerAddress(Object.assign(Object.assign({},h),{id:u.id})).pipe((0,p.U)(f=>f.updateCustomerAddress))):r.push(this.dataService.customer.createCustomerAddress(o,h).pipe((0,p.U)(f=>f.createCustomerAddress)))}return(0,Qe.D)(r)})).subscribe(o=>{let t=!1;for(const r of o)switch(r.__typename){case"Customer":case"Address":case"Success":t||(this.notificationService.success((0,m.J)("common.notify-update-success"),{entity:"Customer"}),t=!0,this.detailForm.markAsPristine(),this.addressDefaultsUpdated=!1,this.changeDetector.markForCheck(),this.fetchHistory.next(),this.dataService.customer.getCustomer(this.id).single$.subscribe());break;case"EmailAddressConflictError":this.notificationService.error(r.message)}},o=>{this.notificationService.error((0,m.J)("common.notify-update-error"),{entity:"Customer"})})}addToGroup(){this.modalService.fromComponent(O,{size:"md"}).pipe((0,g.w)(o=>o?(0,de.D)(o):x.E),(0,Re.b)(o=>this.dataService.customer.addCustomersToGroup(o,[this.id]))).subscribe({next:o=>{this.notificationService.success((0,m.J)("customer.add-customers-to-group-success"),{customerCount:1,groupName:o.addCustomersToGroup.name})},complete:()=>{this.dataService.customer.getCustomer(this.id,{take:0}).single$.subscribe(),this.fetchHistory.next()}})}removeFromGroup(o){this.modalService.dialog({title:(0,m.J)("customer.confirm-remove-customer-from-group"),buttons:[{type:"secondary",label:(0,m.J)("common.cancel")},{type:"danger",label:(0,m.J)("common.delete"),returnValue:!0}]}).pipe((0,g.w)(t=>t?this.dataService.customer.removeCustomersFromGroup(o.id,[this.id]):x.E),(0,g.w)(()=>this.dataService.customer.getCustomer(this.id,{take:0}).single$)).subscribe(t=>{this.notificationService.success((0,m.J)("customer.remove-customers-from-group-success"),{customerCount:1,groupName:o.name}),this.fetchHistory.next()})}addNoteToCustomer({note:o}){this.dataService.customer.addNoteToCustomer(this.id,o).subscribe(()=>{this.fetchHistory.next(),this.notificationService.success((0,m.J)("common.notify-create-success"),{entity:"Note"})})}updateNote(o){this.modalService.fromComponent(d.UlA,{closable:!0,locals:{displayPrivacyControls:!1,note:o.data.note}}).pipe((0,g.w)(t=>t?this.dataService.customer.updateCustomerNote({noteId:o.id,note:t.note}):x.E)).subscribe(t=>{this.fetchHistory.next(),this.notificationService.success((0,m.J)("common.notify-update-success"),{entity:"Note"})})}deleteNote(o){return this.modalService.dialog({title:(0,m.J)("common.confirm-delete-note"),body:o.data.note,buttons:[{type:"secondary",label:(0,m.J)("common.cancel")},{type:"danger",label:(0,m.J)("common.delete"),returnValue:!0}]}).pipe((0,g.w)(t=>t?this.dataService.customer.deleteCustomerNote(o.id):x.E)).subscribe(()=>{this.fetchHistory.next(),this.notificationService.success((0,m.J)("common.notify-delete-success"),{entity:"Note"})})}setFormValues(o){var t;const r=this.detailForm.get("customer");if(r&&r.patchValue({title:o.title,firstName:o.firstName,lastName:o.lastName,phoneNumber:o.phoneNumber,emailAddress:o.emailAddress}),o.addresses){const n=new l.Oe([]);for(const a of o.addresses){const c=a,{customFields:u}=c,h=(0,Me._T)(c,["customFields"]),f=this.formBuilder.group(Object.assign(Object.assign({},h),{countryCode:a.country.code}));if(n.push(f),a.defaultShippingAddress&&(this.defaultShippingAddressId=a.id),a.defaultBillingAddress&&(this.defaultBillingAddressId=a.id),this.addressCustomFields.length){const X=this.formBuilder.group({});for(const xo of this.addressCustomFields){const ve=xo.name,bo=null===(t=a.customFields)||void 0===t?void 0:t[ve],yo=new l.NI(bo);X.addControl(ve,yo)}f.addControl("customFields",X)}}this.detailForm.setControl("addresses",n)}this.customFields.length&&this.setCustomFieldFormValues(this.customFields,this.detailForm.get(["customer","customFields"]),o),this.changeDetector.markForCheck()}fetchOrdersList(){this.dataService.customer.getCustomer(this.id,{take:this.ordersPerPage,skip:(this.currentOrdersPage-1)*this.ordersPerPage}).single$.pipe((0,p.U)(o=>o.customer),(0,Y.h)(Ge.notNullOrUndefined)).subscribe(o=>this.orderListUpdates$.next(o))}}function Xt(s,o){1&s&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"translate"),e.qZA()),2&s&&(e.xp6(1),e.Oqu(e.lcZ(2,1,"customer.update-customer-group")))}function Wt(s,o){1&s&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"translate"),e.qZA()),2&s&&(e.xp6(1),e.Oqu(e.lcZ(2,1,"customer.create-customer-group")))}function Kt(s,o){if(1&s&&(e.YNc(0,Xt,3,3,"span",6),e.YNc(1,Wt,3,3,"span",6)),2&s){const t=e.oxw();e.Q6J("ngIf",t.group.id),e.xp6(1),e.Q6J("ngIf",!t.group.id)}}function zt(s,o){if(1&s&&(e.TgZ(0,"section",7)(1,"label"),e._uU(2),e.ALo(3,"translate"),e.qZA(),e._UZ(4,"vdr-tabbed-custom-fields",8),e.qZA()),2&s){const t=e.oxw();e.xp6(2),e.Oqu(e.lcZ(3,3,"common.custom-fields")),e.xp6(2),e.Q6J("customFields",t.customFields)("customFieldsFormGroup",t.form.get("customFields"))}}function eo(s,o){1&s&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"translate"),e.qZA()),2&s&&(e.xp6(1),e.Oqu(e.lcZ(2,1,"customer.update-customer-group")))}function to(s,o){1&s&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"translate"),e.qZA()),2&s&&(e.xp6(1),e.Oqu(e.lcZ(2,1,"customer.create-customer-group")))}function oo(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",9),e.NdJ("click",function(){return e.CHM(t),e.oxw().cancel()}),e._uU(1),e.ALo(2,"translate"),e.qZA(),e.TgZ(3,"button",10),e.NdJ("click",function(){return e.CHM(t),e.oxw().save()}),e.YNc(4,eo,3,3,"span",6),e.YNc(5,to,3,3,"span",6),e.qZA()}if(2&s){const t=e.oxw();e.xp6(1),e.Oqu(e.lcZ(2,4,"common.cancel")),e.xp6(2),e.Q6J("disabled",!t.form.valid),e.xp6(1),e.Q6J("ngIf",t.group.id),e.xp6(1),e.Q6J("ngIf",!t.group.id)}}F.\u0275fac=function(o){return new(o||F)(e.Y36(C.gz),e.Y36(C.F0),e.Y36(d.iHG),e.Y36(e.sBO),e.Y36(l.qu),e.Y36(d.DoR),e.Y36(d.Z7U),e.Y36(d.gqp))},F.\u0275cmp=e.Xpm({type:F,selectors:[["vdr-customer-detail"]],features:[e.qOj],decls:46,vars:59,consts:[[1,"flex","clr-align-items-center"],[3,"entity"],[3,"customer"],["class","last-login",3,"title",4,"ngIf"],["locationId","customer-detail"],["class","btn btn-primary",3,"disabled","click",4,"ngIf","ngIfElse"],["updateButton",""],[1,"form",3,"formGroup"],["for","title",3,"label","readOnlyToggle"],["id","title","type","text","formControlName","title"],["for","firstName",3,"label","readOnlyToggle"],["id","firstName","type","text","formControlName","firstName"],["for","lastName",3,"label","readOnlyToggle"],["id","lastName","type","text","formControlName","lastName"],["for","emailAddress",3,"label","readOnlyToggle"],["id","emailAddress","type","text","formControlName","emailAddress"],["for","phoneNumber",3,"label","readOnlyToggle"],["id","phoneNumber","type","text","formControlName","phoneNumber"],["for","password",3,"label",4,"ngIf"],["formGroupName","customFields",4,"ngIf"],["locationId","customer-detail",3,"entity$","detailForm"],["class","groups",4,"ngIf"],["class","clr-row",4,"ngIf"],[1,"last-login",3,"title"],[1,"btn","btn-primary",3,"disabled","click"],["class","btn btn-primary",3,"disabled","click",4,"vdrIfPermissions"],["for","password",3,"label"],["id","password","type","password","formControlName","password"],["formGroupName","customFields"],["entityName","Customer",3,"customFields","customFieldsFormGroup"],[1,"groups"],[1,"clr-control-label"],[4,"ngIf","ngIfElse"],["noGroups",""],["class","btn btn-sm btn-secondary",3,"click",4,"vdrIfPermissions"],["icon","times",3,"colorFrom","iconClick",4,"ngFor","ngForOf"],["icon","times",3,"colorFrom","iconClick"],[1,"btn","btn-sm","btn-secondary",3,"click"],["shape","plus"],[1,"clr-row"],[1,"clr-col-md-4"],[3,"to-delete","availableCountries","isDefaultBilling","isDefaultShipping","addressForm","customFields","editable","setAsDefaultBilling","setAsDefaultShipping","deleteAddress",4,"ngFor","ngForOf"],["class","btn btn-secondary",3,"click",4,"vdrIfPermissions"],[1,"clr-col-md-8"],[3,"items","itemsPerPage","totalItems","currentPage","emptyStateLabel","itemsPerPageChange","pageChange"],[3,"availableCountries","isDefaultBilling","isDefaultShipping","addressForm","customFields","editable","setAsDefaultBilling","setAsDefaultShipping","deleteAddress"],[1,"btn","btn-secondary",3,"click"],[1,"left"],[1,"right"],["iconShape","shopping-cart",3,"label","linkTo"],[1,"clr-col-md-6"],[3,"customer","history","addNote","updateNote","deleteNote"]],template:function(o,t){if(1&o&&(e.TgZ(0,"vdr-action-bar")(1,"vdr-ab-left")(2,"div",0),e._UZ(3,"vdr-entity-info",1),e.ALo(4,"async"),e._UZ(5,"vdr-customer-status-label",2),e.ALo(6,"async"),e.YNc(7,It,5,10,"div",3),e.ALo(8,"async"),e.qZA()(),e.TgZ(9,"vdr-ab-right"),e._UZ(10,"vdr-action-bar-items",4),e.YNc(11,Ot,3,4,"button",5),e.ALo(12,"async"),e.YNc(13,Ft,1,1,"ng-template",null,6,e.W1O),e.qZA()(),e.TgZ(15,"form",7)(16,"vdr-form-field",8),e.ALo(17,"translate"),e.ALo(18,"async"),e._UZ(19,"input",9),e.qZA(),e.TgZ(20,"vdr-form-field",10),e.ALo(21,"translate"),e.ALo(22,"async"),e._UZ(23,"input",11),e.qZA(),e.TgZ(24,"vdr-form-field",12),e.ALo(25,"translate"),e.ALo(26,"async"),e._UZ(27,"input",13),e.qZA(),e.TgZ(28,"vdr-form-field",14),e.ALo(29,"translate"),e.ALo(30,"async"),e._UZ(31,"input",15),e.qZA(),e.TgZ(32,"vdr-form-field",16),e.ALo(33,"translate"),e.ALo(34,"async"),e._UZ(35,"input",17),e.qZA(),e.YNc(36,Pt,3,3,"vdr-form-field",18),e.ALo(37,"async"),e.YNc(38,Mt,5,6,"section",19),e._UZ(39,"vdr-custom-detail-component-host",20),e.qZA(),e.YNc(40,$t,9,6,"div",21),e.ALo(41,"async"),e.YNc(42,Bt,29,31,"div",22),e.ALo(43,"async"),e.YNc(44,Vt,5,6,"div",22),e.ALo(45,"async")),2&o){const r=e.MAs(14);let n,a;e.xp6(3),e.Q6J("entity",e.lcZ(4,23,t.entity$)),e.xp6(2),e.Q6J("customer",e.lcZ(6,25,t.entity$)),e.xp6(2),e.Q6J("ngIf",null==(n=e.lcZ(8,27,t.entity$))||null==n.user?null:n.user.lastLogin),e.xp6(4),e.Q6J("ngIf",e.lcZ(12,29,t.isNew$))("ngIfElse",r),e.xp6(4),e.Q6J("formGroup",t.detailForm.get("customer")),e.xp6(1),e.Q6J("label",e.lcZ(17,31,"customer.title"))("readOnlyToggle",!e.lcZ(18,33,t.isNew$)),e.xp6(4),e.Q6J("label",e.lcZ(21,35,"customer.first-name"))("readOnlyToggle",!e.lcZ(22,37,t.isNew$)),e.xp6(4),e.Q6J("label",e.lcZ(25,39,"customer.last-name"))("readOnlyToggle",!e.lcZ(26,41,t.isNew$)),e.xp6(4),e.Q6J("label",e.lcZ(29,43,"customer.email-address"))("readOnlyToggle",!e.lcZ(30,45,t.isNew$)),e.xp6(4),e.Q6J("label",e.lcZ(33,47,"customer.phone-number"))("readOnlyToggle",!e.lcZ(34,49,t.isNew$)),e.xp6(4),e.Q6J("ngIf",e.lcZ(37,51,t.isNew$)),e.xp6(2),e.Q6J("ngIf",t.customFields.length),e.xp6(1),e.Q6J("entity$",t.entity$)("detailForm",t.detailForm),e.xp6(1),e.Q6J("ngIf",null==(a=e.lcZ(41,53,t.entity$))?null:a.groups),e.xp6(2),e.Q6J("ngIf",!e.lcZ(43,55,t.isNew$)),e.xp6(2),e.Q6J("ngIf",!e.lcZ(45,57,t.isNew$))}},directives:[b.Kk,b.BN,ne.V,Z,_.O5,b.mz,ae.W,V.H,l._Y,l.JL,l.sg,ue.h,U.y,l.Fj,l.JJ,l.u,l.x0,y.MgK,pe.y,st.C,_.sg,Q.Y,y.qvL,I,$.Q,se.E,re.v,J],pipes:[_.Ov,Nt.H,v.X$,Lt.e,N.j,St.k],styles:[".last-login[_ngcontent-%COMP%]{margin-left:6px;color:var(--color-grey-500)}.to-delete[_ngcontent-%COMP%]{opacity:.5}"],changeDetection:0});const so=function(){return["CreateCustomerGroup","UpdateCustomerGroup"]};class T{constructor(o,t){this.serverConfigService=o,this.formBuilder=t,this.customFields=this.serverConfigService.getCustomFieldsFor("CustomerGroup")}ngOnInit(){var o;if(this.form=this.formBuilder.group({name:[this.group.name,l.kI.required],customFields:this.formBuilder.group(this.customFields.reduce((t,r)=>Object.assign(Object.assign({},t),{[r.name]:""}),{}))}),this.customFields.length){const t=this.form.get("customFields");for(const r of this.customFields){const n=r.name,a=null===(o=this.group.customFields)||void 0===o?void 0:o[n],c=t.get(n);c&&c.patchValue(a)}}}cancel(){this.resolveWith()}save(){this.resolveWith(this.form.value)}}T.\u0275fac=function(o){return new(o||T)(e.Y36(d.iHG),e.Y36(l.qu))},T.\u0275cmp=e.Xpm({type:T,selectors:[["vdr-customer-group-detail-dialog"]],decls:8,vars:9,consts:[["vdrDialogTitle",""],[3,"formGroup"],["for","name",3,"label"],["id","name","type","text","formControlName","name",3,"readonly"],["formGroupName","customFields",4,"ngIf"],["vdrDialogButtons",""],[4,"ngIf"],["formGroupName","customFields"],["entityName","CustomerGroup",3,"customFields","customFieldsFormGroup"],["type","button",1,"btn",3,"click"],["type","submit",1,"btn","btn-primary",3,"disabled","click"]],template:function(o,t){1&o&&(e.YNc(0,Kt,2,2,"ng-template",0),e.TgZ(1,"form",1)(2,"vdr-form-field",2),e.ALo(3,"translate"),e._UZ(4,"input",3),e.ALo(5,"hasPermission"),e.qZA(),e.YNc(6,zt,5,5,"section",4),e.qZA(),e.YNc(7,oo,6,6,"ng-template",5)),2&o&&(e.xp6(1),e.Q6J("formGroup",t.form),e.xp6(1),e.Q6J("label",e.lcZ(3,4,"common.name")),e.xp6(2),e.Q6J("readonly",!e.lcZ(5,6,e.DdM(8,so))),e.xp6(2),e.Q6J("ngIf",t.customFields.length))},directives:[q.q,_.O5,l._Y,l.JL,l.sg,ue.h,U.y,l.Fj,l.JJ,l.u,l.x0,y.MgK,pe.y,k.n],pipes:[v.X$,N.j],styles:[""],changeDetection:0});var he=i(745),ro=i(73),no=i(5181);function io(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"button",9),e.NdJ("click",function(){return e.CHM(t),e.oxw().create()}),e._UZ(1,"clr-icon",10),e._uU(2),e.ALo(3,"translate"),e.qZA()}2&s&&(e.xp6(2),e.hij(" ",e.lcZ(3,1,"customer.create-new-customer-group")," "))}const ao=function(s){return{contents:s}},co=function(s){return["./",s]};function lo(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"td",11),e._UZ(1,"vdr-entity-info",12),e.qZA(),e.TgZ(2,"td",11)(3,"vdr-chip",13),e._uU(4),e.qZA()(),e.TgZ(5,"td",11)(6,"a",14),e._UZ(7,"clr-icon",15),e._uU(8),e.ALo(9,"translate"),e.qZA()(),e.TgZ(10,"td",16)(11,"button",17),e.NdJ("click",function(){const a=e.CHM(t).item;return e.oxw().update(a)}),e._UZ(12,"clr-icon",18),e._uU(13),e.ALo(14,"translate"),e.qZA()(),e.TgZ(15,"td",19)(16,"vdr-dropdown")(17,"button",20),e._uU(18),e.ALo(19,"translate"),e._UZ(20,"clr-icon",21),e.qZA(),e.TgZ(21,"vdr-dropdown-menu",22)(22,"button",23),e.NdJ("click",function(){const a=e.CHM(t).item;return e.oxw().delete(a.id)}),e.ALo(23,"hasPermission"),e._UZ(24,"clr-icon",24),e._uU(25),e.ALo(26,"translate"),e.qZA()()()()}if(2&s){const t=o.item,r=e.oxw();e.ekj("active",t.id===r.activeGroupId),e.xp6(1),e.Q6J("entity",t),e.xp6(1),e.ekj("active",t.id===r.activeGroupId),e.xp6(1),e.Q6J("colorFrom",t.id),e.xp6(1),e.Oqu(t.name),e.xp6(1),e.ekj("active",t.id===r.activeGroupId),e.xp6(1),e.Q6J("routerLink",e.VKq(31,co,e.VKq(29,ao,t.id))),e.xp6(2),e.hij(" ",e.lcZ(9,19,"customer.view-group-members")," "),e.xp6(2),e.ekj("active",t.id===r.activeGroupId),e.xp6(3),e.hij(" ",e.lcZ(14,21,"common.edit")," "),e.xp6(2),e.ekj("active",t.id===r.activeGroupId),e.xp6(3),e.hij(" ",e.lcZ(19,23,"common.actions")," "),e.xp6(4),e.Q6J("disabled",!e.lcZ(23,25,"DeleteCustomerGroup")),e.xp6(3),e.hij(" ",e.lcZ(26,27,"common.delete")," ")}}function mo(s,o){1&s&&e._UZ(0,"vdr-empty-placeholder")}const uo=function(s){return{count:s}},po=function(s){return{groupName:s}};function _o(s,o){if(1&s){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",25)(2,"div",26),e._uU(3),e.ALo(4,"async"),e.qZA(),e._UZ(5,"div",27),e.TgZ(6,"button",28),e.NdJ("click",function(){return e.CHM(t),e.oxw().closeMembers()}),e._UZ(7,"clr-icon",29),e.qZA()(),e.TgZ(8,"div",30)(9,"vdr-dropdown")(10,"button",31),e._uU(11),e.ALo(12,"translate"),e._UZ(13,"clr-icon",21),e.qZA(),e.TgZ(14,"vdr-dropdown-menu",22)(15,"button",32),e.NdJ("click",function(){const a=e.CHM(t).ngIf,c=e.oxw();return c.removeFromGroup(a,c.selectedCustomerIds)}),e.ALo(16,"hasPermission"),e._UZ(17,"clr-icon",24),e._uU(18),e.ALo(19,"translate"),e.qZA()()(),e.TgZ(20,"button",33),e.NdJ("click",function(){const a=e.CHM(t).ngIf;return e.oxw().addToGroup(a)}),e._uU(21),e.ALo(22,"translate"),e.qZA()(),e.TgZ(23,"vdr-customer-group-member-list",34),e.NdJ("selectionChange",function(n){e.CHM(t);return e.oxw().selectedCustomerIds=n})("fetchParamsChange",function(n){return e.CHM(t),e.oxw().fetchGroupMembers$.next(n)}),e.ALo(24,"async"),e.ALo(25,"async"),e.qZA(),e.BQk()}if(2&s){const t=o.ngIf,r=e.oxw();e.xp6(3),e.AsE("",t.name," (",e.lcZ(4,11,r.membersTotal$),")"),e.xp6(7),e.Q6J("disabled",0===r.selectedCustomerIds.length),e.xp6(1),e.hij(" ",e.xi3(12,13,"common.with-selected",e.VKq(27,uo,r.selectedCustomerIds.length))," "),e.xp6(4),e.Q6J("disabled",!e.lcZ(16,16,"UpdateCustomerGroup")),e.xp6(3),e.hij(" ",e.lcZ(19,18,"customer.remove-from-group")," "),e.xp6(3),e.hij(" ",e.xi3(22,20,"customer.add-customers-to-group",e.VKq(29,po,t.name))," "),e.xp6(2),e.Q6J("members",e.lcZ(24,23,r.members$))("route",r.route)("totalItems",e.lcZ(25,25,r.membersTotal$))("selectedMemberIds",r.selectedCustomerIds)}}class P extends d.t7C{constructor(o,t,r,n,a){super(a,n),this.dataService=o,this.notificationService=t,this.modalService=r,this.route=n,this.router=a,this.searchTerm=new l.NI(""),this.selectedCustomerIds=[],this.fetchGroupMembers$=new G.X({skip:0,take:0,filterTerm:""}),this.refreshActiveGroupMembers$=new G.X(void 0),super.setQueryFn((...c)=>this.dataService.customer.getCustomerGroupList(...c).refetchOnChannelChange(),c=>c.customerGroups,(c,u)=>({options:{skip:c,take:u,filter:{name:{contains:this.searchTerm.value}}}}))}ngOnInit(){super.ngOnInit(),this.searchTerm.valueChanges.pipe((0,Y.h)(r=>2<r.length||0===r.length),(0,ee.b)(250),(0,oe.R)(this.destroy$)).subscribe(()=>this.refresh());const o=this.route.paramMap.pipe((0,p.U)(r=>r.get("contents")),(0,z.x)(),(0,te.b)(()=>this.selectedCustomerIds=[]));this.listIsEmpty$=this.items$.pipe((0,p.U)(r=>0===r.length)),this.activeGroup$=(0,K.a)(this.items$,o).pipe((0,p.U)(([r,n])=>{if(n)return r.find(a=>a.id===n)}),(0,te.b)(r=>this.activeGroupId=null==r?void 0:r.id));const t=(0,K.a)(this.activeGroup$,this.fetchGroupMembers$,this.refreshActiveGroupMembers$).pipe((0,g.w)(([r,{skip:n,take:a,filterTerm:c}])=>r?this.dataService.customer.getCustomerGroupWithCustomers(r.id,{skip:n,take:a,filter:{emailAddress:{contains:c}}}).mapStream(u=>{var h;return null===(h=u.customerGroup)||void 0===h?void 0:h.customers}):(0,he.of)(void 0)));this.members$=t.pipe((0,p.U)(r=>{var n;return null!==(n=null==r?void 0:r.items)&&void 0!==n?n:[]})),this.membersTotal$=t.pipe((0,p.U)(r=>{var n;return null!==(n=null==r?void 0:r.totalItems)&&void 0!==n?n:0}))}create(){this.modalService.fromComponent(T,{locals:{group:{name:""}}}).pipe((0,g.w)(o=>o?this.dataService.customer.createCustomerGroup(Object.assign(Object.assign({},o),{customerIds:[]})):x.E)).subscribe(()=>{this.refresh(),this.notificationService.success((0,m.J)("common.notify-create-success"),{entity:"CustomerGroup"})},o=>{this.notificationService.error((0,m.J)("common.notify-create-error"),{entity:"CustomerGroup"})})}delete(o){this.modalService.dialog({title:(0,m.J)("customer.confirm-delete-customer-group"),buttons:[{type:"secondary",label:(0,m.J)("common.cancel")},{type:"danger",label:(0,m.J)("common.delete"),returnValue:!0}]}).pipe((0,g.w)(t=>t?this.dataService.customer.deleteCustomerGroup(o):x.E),(0,g.w)(t=>t.deleteCustomerGroup.result===d.PcR.DELETED?this.dataService.customer.getCustomerGroupList().mapSingle(()=>({errorMessage:!1})):(0,he.of)({errorMessage:t.deleteCustomerGroup.message}))).subscribe(t=>{"string"==typeof t.errorMessage?this.notificationService.error(t.errorMessage):(this.refresh(),this.notificationService.success((0,m.J)("common.notify-delete-success"),{entity:"CustomerGroup"}))},t=>{this.notificationService.error((0,m.J)("common.notify-delete-error"),{entity:"CustomerGroup"})})}update(o){this.modalService.fromComponent(T,{locals:{group:o}}).pipe((0,g.w)(t=>t?this.dataService.customer.updateCustomerGroup(Object.assign({id:o.id},t)):x.E)).subscribe(()=>{this.refresh(),this.notificationService.success((0,m.J)("common.notify-update-success"),{entity:"CustomerGroup"})},t=>{this.notificationService.error((0,m.J)("common.notify-update-error"),{entity:"CustomerGroup"})})}closeMembers(){const o=Object.assign({},this.route.snapshot.params);delete o.contents,this.router.navigate(["./",o],{relativeTo:this.route,queryParamsHandling:"preserve"})}addToGroup(o){this.modalService.fromComponent(L,{locals:{group:o,route:this.route},size:"md",verticalAlign:"top"}).pipe((0,g.w)(t=>t?this.dataService.customer.addCustomersToGroup(o.id,t).pipe((0,ro.h)(t)):x.E)).subscribe({next:t=>{this.notificationService.success((0,m.J)("customer.add-customers-to-group-success"),{customerCount:t.length,groupName:o.name}),this.refreshActiveGroupMembers$.next(),this.selectedCustomerIds=[]}})}removeFromGroup(o,t){this.dataService.customer.removeCustomersFromGroup(o.id,t).subscribe({complete:()=>{this.notificationService.success((0,m.J)("customer.remove-customers-from-group-success"),{customerCount:t.length,groupName:o.name}),this.refreshActiveGroupMembers$.next(),this.selectedCustomerIds=[]}})}}P.\u0275fac=function(o){return new(o||P)(e.Y36(d.DoR),e.Y36(d.gqp),e.Y36(d.Z7U),e.Y36(C.gz),e.Y36(C.F0))},P.\u0275cmp=e.Xpm({type:P,selectors:[["vdr-customer-group-list"]],features:[e.qOj],decls:22,vars:28,consts:[["type","text","name","emailSearchTerm",1,"search-input",3,"formControl","placeholder"],["locationId","customer-group-list"],["class","btn btn-primary",3,"click",4,"vdrIfPermissions"],[1,"group-wrapper"],[1,"group-list"],[3,"items","itemsPerPage","totalItems","currentPage","pageChange","itemsPerPageChange"],["emptyPlaceholder",""],[1,"group-members"],[4,"ngIf"],[1,"btn","btn-primary",3,"click"],["shape","plus"],[1,"left","align-middle"],[3,"entity"],[3,"colorFrom"],["queryParamsHandling","preserve",1,"btn","btn-link","btn-sm",3,"routerLink"],["shape","view-list"],[1,"right","align-middle"],[1,"btn","btn-link","btn-sm",3,"click"],["shape","edit"],[1,"align-middle"],["type","button","vdrDropdownTrigger","",1,"btn","btn-link","btn-sm"],["shape","caret down"],["vdrPosition","bottom-right"],["vdrDropdownItem","",1,"button",3,"disabled","click"],["shape","trash",1,"is-danger"],[1,"flex"],[1,"header-title-row"],[1,"flex-spacer"],["type","button",1,"close-button",3,"click"],["shape","close"],[1,"controls"],["type","button","vdrDropdownTrigger","",1,"btn","btn-secondary","btn-sm",3,"disabled"],["type","button","vdrDropdownItem","",1,"delete-button",3,"disabled","click"],[1,"btn","btn-secondary","btn-sm",3,"click"],[3,"members","route","totalItems","selectedMemberIds","selectionChange","fetchParamsChange"]],template:function(o,t){1&o&&(e.TgZ(0,"vdr-action-bar")(1,"vdr-ab-left"),e._UZ(2,"input",0),e.ALo(3,"translate"),e.qZA(),e.TgZ(4,"vdr-ab-right"),e._UZ(5,"vdr-action-bar-items",1),e.YNc(6,io,4,3,"button",2),e.qZA()(),e.TgZ(7,"div",3)(8,"div",4)(9,"vdr-data-table",5),e.NdJ("pageChange",function(n){return t.setPageNumber(n)})("itemsPerPageChange",function(n){return t.setItemsPerPage(n)}),e.ALo(10,"async"),e.ALo(11,"async"),e.ALo(12,"async"),e.ALo(13,"async"),e.ALo(14,"async"),e.YNc(15,lo,27,33,"ng-template"),e.qZA()(),e.YNc(16,mo,1,0,"ng-template",null,6,e.W1O),e.TgZ(18,"div",7),e.ALo(19,"async"),e.YNc(20,_o,26,31,"ng-container",8),e.ALo(21,"async"),e.qZA()()),2&o&&(e.xp6(2),e.Q6J("formControl",t.searchTerm)("placeholder",e.lcZ(3,12,"customer.search-by-group-name")),e.xp6(4),e.Q6J("vdrIfPermissions","CreateCustomerGroup"),e.xp6(3),e.ekj("expanded",e.lcZ(10,14,t.activeGroup$)),e.Q6J("items",e.lcZ(11,16,t.items$))("itemsPerPage",e.lcZ(12,18,t.itemsPerPage$))("totalItems",e.lcZ(13,20,t.totalItems$))("currentPage",e.lcZ(14,22,t.currentPage$)),e.xp6(9),e.ekj("expanded",e.lcZ(19,24,t.activeGroup$)),e.xp6(2),e.Q6J("ngIf",e.lcZ(21,26,t.activeGroup$)))},directives:[b.Kk,b.BN,U.y,l.Fj,l.JJ,l.oH,b.mz,ae.W,V.H,y.qvL,$.Q,ne.V,Q.Y,C.yS,j.J,H.U,R.N,B.H,no.j,_.O5,A],pipes:[v.X$,_.Ov,N.j],styles:[".group-wrapper[_ngcontent-%COMP%]{display:flex;height:calc(100% - 50px)}.group-wrapper[_ngcontent-%COMP%] .group-list[_ngcontent-%COMP%]{flex:1;overflow:auto;margin-top:0}.group-wrapper[_ngcontent-%COMP%] .group-list[_ngcontent-%COMP%] .active[_ngcontent-%COMP%]{background-color:var(--clr-global-selection-color)}.group-wrapper[_ngcontent-%COMP%] .group-list.expanded[_ngcontent-%COMP%]{width:calc(100% - 40vw)}vdr-data-table[_ngcontent-%COMP%] table{margin-top:0}.group-members[_ngcontent-%COMP%]{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded[_ngcontent-%COMP%]{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{margin:0;background:none;border:none;cursor:pointer}.group-members[_ngcontent-%COMP%] table.table{margin-top:0}.group-members[_ngcontent-%COMP%] table.table th{top:0}.group-members[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%]{display:flex;justify-content:space-between}vdr-empty-placeholder[_ngcontent-%COMP%]{flex:1}"],changeDetection:0});var go=i(8165);const ho=function(){return["./create"]};function fo(s,o){1&s&&(e.TgZ(0,"a",5),e._UZ(1,"clr-icon",6),e._uU(2),e.ALo(3,"translate"),e.qZA()),2&s&&(e.Q6J("routerLink",e.DdM(4,ho)),e.xp6(2),e.hij(" ",e.lcZ(3,2,"customer.create-new-customer")," "))}const Co=function(s){return["./",s]};function vo(s,o){if(1&s){const t=e.EpF();e.TgZ(0,"td",7),e._uU(1),e.qZA(),e.TgZ(2,"td",7),e._uU(3),e.qZA(),e.TgZ(4,"td",7),e._UZ(5,"vdr-customer-status-label",8),e.qZA(),e.TgZ(6,"td",9),e._UZ(7,"vdr-table-row-action",10),e.ALo(8,"translate"),e.qZA(),e.TgZ(9,"td")(10,"vdr-dropdown")(11,"button",11),e._uU(12),e.ALo(13,"translate"),e._UZ(14,"clr-icon",12),e.qZA(),e.TgZ(15,"vdr-dropdown-menu",13)(16,"button",14),e.NdJ("click",function(){const a=e.CHM(t).item;return e.oxw().deleteCustomer(a)}),e.ALo(17,"hasPermission"),e._UZ(18,"clr-icon",15),e._uU(19),e.ALo(20,"translate"),e.qZA()()()()}if(2&s){const t=o.item;e.xp6(1),e.lnq(" ",t.title," ",t.firstName," ",t.lastName," "),e.xp6(2),e.Oqu(t.emailAddress),e.xp6(2),e.Q6J("customer",t),e.xp6(2),e.Q6J("label",e.lcZ(8,10,"common.edit"))("linkTo",e.VKq(18,Co,t.id)),e.xp6(5),e.hij(" ",e.lcZ(13,12,"common.actions")," "),e.xp6(4),e.Q6J("disabled",!e.lcZ(17,14,"DeleteCustomer")),e.xp6(3),e.hij(" ",e.lcZ(20,16,"common.delete")," ")}}class w extends d.t7C{constructor(o,t,r,n,a){super(t,r),this.dataService=o,this.modalService=n,this.notificationService=a,this.searchTerm=new l.NI(""),super.setQueryFn((...c)=>this.dataService.customer.getCustomerList(...c).refetchOnChannelChange(),c=>c.customers,(c,u)=>({options:{skip:c,take:u,filter:{emailAddress:{contains:this.searchTerm.value},lastName:{contains:this.searchTerm.value},postalCode:{contains:this.searchTerm.value}},filterOperator:d.FnJ.OR,sort:{createdAt:go.As.DESC}}}))}ngOnInit(){super.ngOnInit(),this.searchTerm.valueChanges.pipe((0,Y.h)(o=>2<o.length||0===o.length),(0,ee.b)(250),(0,oe.R)(this.destroy$)).subscribe(()=>this.refresh())}deleteCustomer(o){return this.modalService.dialog({title:(0,m.J)("catalog.confirm-delete-customer"),body:`${o.firstName} ${o.lastName}`,buttons:[{type:"secondary",label:(0,m.J)("common.cancel")},{type:"danger",label:(0,m.J)("common.delete"),returnValue:!0}]}).pipe((0,g.w)(t=>t?this.dataService.customer.deleteCustomer(o.id):x.E)).subscribe(()=>{this.notificationService.success((0,m.J)("common.notify-delete-success"),{entity:"Customer"}),this.refresh()},t=>{this.notificationService.error((0,m.J)("common.notify-delete-error"),{entity:"Customer"})})}}w.\u0275fac=function(o){return new(o||w)(e.Y36(d.DoR),e.Y36(C.F0),e.Y36(C.gz),e.Y36(d.Z7U),e.Y36(d.gqp))},w.\u0275cmp=e.Xpm({type:w,selectors:[["vdr-customer-list"]],features:[e.qOj],decls:24,vars:28,consts:[["type","text","name","emailSearchTerm",1,"search-input",3,"formControl","placeholder"],["locationId","customer-list"],["class","btn btn-primary",3,"routerLink",4,"vdrIfPermissions"],[3,"items","itemsPerPage","totalItems","currentPage","pageChange","itemsPerPageChange"],[3,"expand"],[1,"btn","btn-primary",3,"routerLink"],["shape","plus"],[1,"left","align-middle"],[3,"customer"],[1,"right","align-middle"],["iconShape","edit",3,"label","linkTo"],["type","button","vdrDropdownTrigger","",1,"btn","btn-link","btn-sm"],["shape","caret down"],["vdrPosition","bottom-right"],["type","button","vdrDropdownItem","",1,"delete-button",3,"disabled","click"],["shape","trash",1,"is-danger"]],template:function(o,t){1&o&&(e.TgZ(0,"vdr-action-bar")(1,"vdr-ab-left"),e._UZ(2,"input",0),e.ALo(3,"translate"),e.qZA(),e.TgZ(4,"vdr-ab-right"),e._UZ(5,"vdr-action-bar-items",1),e.YNc(6,fo,4,5,"a",2),e.qZA()(),e.TgZ(7,"vdr-data-table",3),e.NdJ("pageChange",function(n){return t.setPageNumber(n)})("itemsPerPageChange",function(n){return t.setItemsPerPage(n)}),e.ALo(8,"async"),e.ALo(9,"async"),e.ALo(10,"async"),e.ALo(11,"async"),e.TgZ(12,"vdr-dt-column",4),e._uU(13),e.ALo(14,"translate"),e.qZA(),e.TgZ(15,"vdr-dt-column",4),e._uU(16),e.ALo(17,"translate"),e.qZA(),e.TgZ(18,"vdr-dt-column"),e._uU(19),e.ALo(20,"translate"),e.qZA(),e._UZ(21,"vdr-dt-column")(22,"vdr-dt-column"),e.YNc(23,vo,21,20,"ng-template"),e.qZA()),2&o&&(e.xp6(2),e.Q6J("formControl",t.searchTerm)("placeholder",e.lcZ(3,12,"customer.search-customers-by-email-last-name-postal-code")),e.xp6(4),e.Q6J("vdrIfPermissions","CreateCustomer"),e.xp6(1),e.Q6J("items",e.lcZ(8,14,t.items$))("itemsPerPage",e.lcZ(9,16,t.itemsPerPage$))("totalItems",e.lcZ(10,18,t.totalItems$))("currentPage",e.lcZ(11,20,t.currentPage$)),e.xp6(5),e.Q6J("expand",!0),e.xp6(1),e.Oqu(e.lcZ(14,22,"customer.name")),e.xp6(2),e.Q6J("expand",!0),e.xp6(1),e.Oqu(e.lcZ(17,24,"customer.email-address")),e.xp6(3),e.Oqu(e.lcZ(20,26,"customer.customer-type")))},directives:[b.Kk,b.BN,U.y,l.Fj,l.JJ,l.oH,b.mz,ae.W,V.H,C.yS,y.qvL,$.Q,se.E,Z,re.v,j.J,H.U,R.N,B.H],pipes:[v.X$,_.Ov,N.j],styles:[".search-input[_ngcontent-%COMP%]{margin-top:6px;min-width:300px}"]});class D extends d.p_9{constructor(o,t){super(o,{__typename:"Customer",id:"",createdAt:"",updatedAt:"",title:"",firstName:"",lastName:"",emailAddress:"",phoneNumber:null,addresses:null,user:null},r=>t.customer.getCustomer(r).mapStream(n=>n.customer))}}D.\u0275fac=function(o){return new(o||D)(e.LFG(C.F0),e.LFG(d.DoR))},D.\u0275prov=e.Yz7({token:D,factory:D.\u0275fac,providedIn:"root"});const fe=[{path:"customers",component:w,pathMatch:"",data:{breadcrumb:(0,m.J)("breadcrumb.customers")}},{path:"customers/:id",component:F,resolve:(0,d.Po4)(D),canDeactivate:[d.TSp],data:{breadcrumb:Ce}},{path:"groups",component:P,data:{breadcrumb:(0,m.J)("breadcrumb.customer-groups")}}];function Ce(s,o){return(0,d.YWC)({entity:s.entity,id:o.id,breadcrumbKey:"breadcrumb.customers",getName:t=>`${t.firstName} ${t.lastName}`,route:"customers"})}class M{}M.\u0275fac=function(o){return new(o||M)},M.\u0275mod=e.oAB({type:M}),M.\u0275inj=e.cJS({imports:[[d.m81,C.Bz.forChild(fe)]]})}}]);
|
|
2
|
+
//# sourceMappingURL=600.17470a2c90aa79d8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":["e","constructor","o","t","this","l","G","W","r","selectedMemberIds","indexOf","id","ngOnInit","membersCurrentPage$","route","paramMap","pipe","p","get","membersItemsPerPage$","z","filterTermControl","valueChanges","te","setContentsPageNumber","E","K","refresh$","oe","destroy$","subscribe","n","a","c","fetchParamsChange","emit","filterTerm","skip","take","ngOnDestroy","next","complete","setParam","setContentsItemsPerPage","refresh","router","navigate","Object","snapshot","params","relativeTo","queryParamsHandling","areAllSelected","members","length","toggleSelectAll","selectionChange","map","toggleSelectMember","item","includes","filter","A","selectors","cancel","add","fetchGroupMembers$","dataService","customer","getCustomerList","mapStream","customers","customers$","items","customersTotal$","totalItems","resolveWith","selectedCustomerIds","L","save","addressForm","changeDetector","markForCheck","S","editAddress","setAsDefaultShippingAddress","setAsDefaultBillingAddress","delete","value","dataDependenciesPopulated","ngOnChanges","customFields","availableCountries","getCountryName","find","code","name","setAsDefaultBilling","markAsDirty","setAsDefaultShipping","deleteAddress","modalService","fromComponent","locals","size","closable","I","isArray","Array","me","s","ke","de","groups$","getCustomerGroupList","customerGroups","selectedGroupIds","O","Z","addNoteToCustomer","oxw","updateNote","deleteNote","d","getDisplayType","type","getTimelineIcon","isFeatured","getName","administrator","firstName","lastName","addNote","note","J","create","removeFromGroup","addToGroup","setDefaultBillingAddressId","setDefaultShippingAddressId","toggleDeleteAddress","addAddress","setOrderItemsPerPage","setOrderCurrentPage","u","h","super","Set","getCustomFieldConfig","addressCustomFields","detailForm","formBuilder","group","title","phoneNumber","emailAddress","password","reduce","f","X","addresses","init","availableCountries$","settings","getAvailableCountries","mapSingle","countries","qe","entity$","je","orderListUpdates$","orders$","orders","ordersCount$","history$","fetchHistory","g","getCustomerHistory","sort","createdAt","history","destroy","getAddressFormControls","controls","defaultBillingAddressId","addressDefaultsUpdated","defaultShippingAddressId","addressesToDeleteIds","has","fullName","company","streetLine1","streetLine2","city","province","postalCode","countryCode","defaultShippingAddress","defaultBillingAddress","addControl","push","ordersPerPage","fetchOrdersList","currentOrdersPage","createCustomer","__typename","notificationService","success","entity","notify","message","m","translationVars","duration","markAsPristine","error","le","dirty","updateCustomer","deleteCustomerAddress","updateCustomerAddress","createCustomerAddress","Qe","getCustomer","single$","x","addCustomersToGroup","customerCount","groupName","dialog","buttons","label","returnValue","removeCustomersFromGroup","displayPrivacyControls","data","updateCustomerNote","noteId","body","deleteCustomerNote","setFormValues","patchValue","Me","country","xo","ve","bo","yo","setControl","setCustomFieldFormValues","Y","Ge","F","serverConfigService","getCustomFieldsFor","form","T","update","closeMembers","setQueryFn","refetchOnChannelChange","options","contains","searchTerm","ee","listIsEmpty$","items$","activeGroup$","activeGroupId","refreshActiveGroupMembers$","getCustomerGroupWithCustomers","customerGroup","he","members$","membersTotal$","createCustomerGroup","customerIds","deleteCustomerGroup","result","errorMessage","updateCustomerGroup","contents","verticalAlign","P","deleteCustomer","filterOperator","go","w","updatedAt","user","D","factory","fe","path","component","pathMatch","breadcrumb","resolve","canDeactivate","Ce","breadcrumbKey","M","C"],"sources":["./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/@angular-devkit/build-angular/src/babel/webpack-loader.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-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-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-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.component.html","./src/lib/customer/src/components/customer-group-list/customer-group-list.component.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/providers/routing/customer-resolver.ts","./src/lib/customer/src/customer.routes.ts","./src/lib/customer/src/customer.module.ts"],"sourcesContent":["<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Customer, DataService } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith, takeUntil, tap } from 'rxjs/operators';\r\n\r\nexport interface CustomerGroupMemberFetchParams {\r\n skip: number;\r\n take: number;\r\n filterTerm: string;\r\n}\r\n\r\ntype CustomerGroupMember = Pick<\r\n Customer,\r\n 'id' | 'createdAt' | 'updatedAt' | 'title' | 'firstName' | 'lastName' | 'emailAddress'\r\n>;\r\n\r\n@Component({\r\n selector: 'vdr-customer-group-member-list',\r\n templateUrl: './customer-group-member-list.component.html',\r\n styleUrls: ['./customer-group-member-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerGroupMemberListComponent implements OnInit, OnDestroy {\r\n @Input() members: CustomerGroupMember[];\r\n @Input() totalItems: number;\r\n @Input() route: ActivatedRoute;\r\n @Input() selectedMemberIds: string[] = [];\r\n @Output() selectionChange = new EventEmitter<string[]>();\r\n @Output() fetchParamsChange = new EventEmitter<CustomerGroupMemberFetchParams>();\r\n\r\n membersItemsPerPage$: Observable<number>;\r\n membersCurrentPage$: Observable<number>;\r\n filterTermControl = new FormControl('');\r\n private refresh$ = new BehaviorSubject<boolean>(true);\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(private router: Router, private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.membersCurrentPage$ = this.route.paramMap.pipe(\r\n map(qpm => qpm.get('membersPage')),\r\n map(page => (!page ? 1 : +page)),\r\n startWith(1),\r\n distinctUntilChanged(),\r\n );\r\n\r\n this.membersItemsPerPage$ = this.route.paramMap.pipe(\r\n map(qpm => qpm.get('membersPerPage')),\r\n map(perPage => (!perPage ? 10 : +perPage)),\r\n startWith(10),\r\n distinctUntilChanged(),\r\n );\r\n\r\n const filterTerm$ = this.filterTermControl.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.setContentsPageNumber(1)),\r\n startWith(''),\r\n );\r\n\r\n combineLatest(this.membersCurrentPage$, this.membersItemsPerPage$, filterTerm$, this.refresh$)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(([currentPage, itemsPerPage, filterTerm]) => {\r\n const take = itemsPerPage;\r\n const skip = (currentPage - 1) * itemsPerPage;\r\n this.fetchParamsChange.emit({\r\n filterTerm,\r\n skip,\r\n take,\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n setContentsPageNumber(page: number) {\r\n this.setParam('membersPage', page);\r\n }\r\n\r\n setContentsItemsPerPage(perPage: number) {\r\n this.setParam('membersPerPage', perPage);\r\n }\r\n\r\n refresh() {\r\n this.refresh$.next(true);\r\n }\r\n\r\n private setParam(key: string, value: any) {\r\n this.router.navigate(['./', { ...this.route.snapshot.params, [key]: value }], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'merge',\r\n });\r\n }\r\n\r\n areAllSelected(): boolean {\r\n if (this.members) {\r\n return this.selectedMemberIds.length === this.members.length;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleSelectAll() {\r\n if (this.areAllSelected()) {\r\n this.selectionChange.emit([]);\r\n } else {\r\n this.selectionChange.emit(this.members.map(v => v.id));\r\n }\r\n }\r\n\r\n toggleSelectMember({ item: member }: { item: { id: string } }) {\r\n if (this.selectedMemberIds.includes(member.id)) {\r\n this.selectionChange.emit(this.selectedMemberIds.filter(id => id !== member.id));\r\n } else {\r\n this.selectionChange.emit([...this.selectedMemberIds, member.id]);\r\n }\r\n }\r\n\r\n isMemberSelected = (member: { id: string }): boolean => {\r\n return -1 < this.selectedMemberIds.indexOf(member.id);\r\n };\r\n}\r\n","<ng-template vdrDialogTitle>\r\n {{ 'customer.add-customers-to-group-with-name' | translate: {groupName: group.name} }}\r\n</ng-template>\r\n\r\n<vdr-customer-group-member-list\r\n [members]=\"customers$ | async\"\r\n [totalItems]=\"customersTotal$ | async\"\r\n [route]=\"route\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n>\r\n\r\n</vdr-customer-group-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedCustomerIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customers-to-group-with-count' | translate: {count: selectedCustomerIds.length} }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport {\r\n DataService,\r\n Dialog,\r\n GetCustomerGroupsQuery,\r\n GetCustomerListQuery,\r\n ItemOf,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\nimport { CustomerGroupMemberFetchParams } from '../customer-group-member-list/customer-group-member-list.component';\r\n\r\n@Component({\r\n selector: 'vdr-add-customer-to-group-dialog',\r\n templateUrl: './add-customer-to-group-dialog.component.html',\r\n styleUrls: ['./add-customer-to-group-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddCustomerToGroupDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n group: ItemOf<GetCustomerGroupsQuery, 'customerGroups'>;\r\n route: ActivatedRoute;\r\n selectedCustomerIds: string[] = [];\r\n customers$: Observable<GetCustomerListQuery['customers']['items']>;\r\n customersTotal$: Observable<number>;\r\n fetchGroupMembers$ = new BehaviorSubject<CustomerGroupMemberFetchParams>({\r\n skip: 0,\r\n take: 10,\r\n filterTerm: '',\r\n });\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n const customerResult$ = this.fetchGroupMembers$.pipe(\r\n switchMap(({ skip, take, filterTerm }) => {\r\n return this.dataService.customer\r\n .getCustomerList(take, skip, filterTerm)\r\n .mapStream(res => res.customers);\r\n }),\r\n );\r\n\r\n this.customers$ = customerResult$.pipe(map(res => res.items));\r\n this.customersTotal$ = customerResult$.pipe(map(res => res.totalItems));\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedCustomerIds);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <span *ngIf=\"addressForm.get('streetLine1')?.value as streetLine1\">{{ streetLine1 }},</span>\r\n <span *ngIf=\"addressForm.get('countryCode')?.value as countryCode\"> {{ countryCode }}</span>\r\n</ng-template>\r\n\r\n<vdr-address-form\r\n [formGroup]=\"addressForm\"\r\n [availableCountries]=\"availableCountries\"\r\n [customFields]=\"customFields\"\r\n></vdr-address-form>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"save()\"\r\n [disabled]=\"!addressForm.valid || !addressForm.touched\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { CustomFieldConfig, Dialog, GetAvailableCountriesQuery } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-address-detail-dialog',\r\n templateUrl: './address-detail-dialog.component.html',\r\n styleUrls: ['./address-detail-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddressDetailDialogComponent implements Dialog<FormGroup>, OnInit {\r\n addressForm: FormGroup;\r\n customFields: CustomFieldConfig;\r\n availableCountries: GetAvailableCountriesQuery['countries']['items'] = [];\r\n resolveWith: (result?: FormGroup) => void;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.addressForm.valueChanges.subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n save() {\r\n this.resolveWith(this.addressForm);\r\n }\r\n}\r\n","<div class=\"card\" *ngIf=\"addressForm.value as address\">\r\n <div class=\"card-header\">\r\n <div class=\"address-title\">\r\n <span class=\"street-line\" *ngIf=\"address.streetLine1\">{{ address.streetLine1 }},</span>\r\n {{ address.countryCode }}\r\n </div>\r\n <div class=\"default-controls\">\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultShipping\">\r\n <clr-icon shape=\"truck\"></clr-icon>\r\n {{ 'customer.default-shipping-address' | translate }}\r\n </vdr-chip>\r\n <vdr-chip class=\"is-default p8\" *ngIf=\"isDefaultBilling\">\r\n <clr-icon shape=\"credit-card\"></clr-icon>\r\n {{ 'customer.default-billing-address' | translate }}\r\n </vdr-chip>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-formatted-address [address]=\"address\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <vdr-entity-info [entity]=\"address\"></vdr-entity-info>\r\n <ng-container *ngIf=\"editable\">\r\n <button class=\"btn btn-sm btn-link\" (click)=\"editAddress()\">\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-sm btn-link\" vdrDropdownTrigger>\r\n {{ 'common.more' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultShipping\"\r\n (click)=\"setAsDefaultShippingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-shipping-address' | translate }}\r\n </button>\r\n <button\r\n vdrDropdownItem\r\n class=\"button\"\r\n [disabled]=\"isDefaultBilling\"\r\n (click)=\"setAsDefaultBillingAddress()\"\r\n >\r\n {{ 'customer.set-as-default-billing-address' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"delete()\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { CustomFieldConfig, GetAvailableCountriesQuery, ModalService } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { filter, take } from 'rxjs/operators';\r\n\r\nimport { AddressDetailDialogComponent } from '../address-detail-dialog/address-detail-dialog.component';\r\n\r\n@Component({\r\n selector: 'vdr-address-card',\r\n templateUrl: './address-card.component.html',\r\n styleUrls: ['./address-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddressCardComponent implements OnInit, OnChanges {\r\n @Input() addressForm: FormGroup;\r\n @Input() customFields: CustomFieldConfig;\r\n @Input() availableCountries: GetAvailableCountriesQuery['countries']['items'] = [];\r\n @Input() isDefaultBilling: string;\r\n @Input() isDefaultShipping: string;\r\n @Input() editable = true;\r\n @Output() setAsDefaultShipping = new EventEmitter<string>();\r\n @Output() setAsDefaultBilling = new EventEmitter<string>();\r\n @Output() deleteAddress = new EventEmitter<string>();\r\n private dataDependenciesPopulated = new BehaviorSubject<boolean>(false);\r\n\r\n constructor(private modalService: ModalService, private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n const streetLine1 = this.addressForm.get('streetLine1') as FormControl;\r\n // Make the address dialog display automatically if there is no address line\r\n // as is the case when adding a new address.\r\n if (!streetLine1.value) {\r\n this.dataDependenciesPopulated\r\n .pipe(\r\n filter(value => value),\r\n take(1),\r\n )\r\n .subscribe(() => {\r\n this.editAddress();\r\n });\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.customFields != null && this.availableCountries != null) {\r\n this.dataDependenciesPopulated.next(true);\r\n }\r\n }\r\n\r\n getCountryName(countryCode: string) {\r\n if (!this.availableCountries) {\r\n return '';\r\n }\r\n const match = this.availableCountries.find(c => c.code === countryCode);\r\n return match ? match.name : '';\r\n }\r\n\r\n setAsDefaultBillingAddress() {\r\n this.setAsDefaultBilling.emit(this.addressForm.value.id);\r\n this.addressForm.markAsDirty();\r\n }\r\n\r\n setAsDefaultShippingAddress() {\r\n this.setAsDefaultShipping.emit(this.addressForm.value.id);\r\n this.addressForm.markAsDirty();\r\n }\r\n\r\n delete() {\r\n this.deleteAddress.emit(this.addressForm.value.id);\r\n this.addressForm.markAsDirty();\r\n }\r\n\r\n editAddress() {\r\n this.modalService\r\n .fromComponent(AddressDetailDialogComponent, {\r\n locals: {\r\n addressForm: this.addressForm,\r\n customFields: this.customFields,\r\n availableCountries: this.availableCountries,\r\n },\r\n size: 'md',\r\n closable: true,\r\n })\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n}\r\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>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n</ng-template>\r\n\r\n<ng-select\r\n [items]=\"groups$ | async\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n bindValue=\"id\"\r\n [(ngModel)]=\"selectedGroupIds\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span aria-hidden=\"true\" class=\"ng-value-icon left\" (click)=\"clear(item)\"> × </span>\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip [colorFrom]=\"item.id\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n</ng-select>\r\n\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedGroupIds.length\" class=\"btn btn-primary\">\r\n {{ 'customer.add-customer-to-groups-with-count' | translate: {count: selectedGroupIds.length} }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { DataService, Dialog, GetCustomerGroupsQuery, ItemOf } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-select-customer-group-dialog',\r\n templateUrl: './select-customer-group-dialog.component.html',\r\n styleUrls: ['./select-customer-group-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectCustomerGroupDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n groups$: Observable<Array<ItemOf<GetCustomerGroupsQuery, 'customerGroups'>>>;\r\n selectedGroupIds: string[] = [];\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit() {\r\n this.groups$ = this.dataService.customer\r\n .getCustomerGroupList()\r\n .mapStream(res => res.customerGroups.items);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedGroupIds);\r\n }\r\n}\r\n","<vdr-chip *ngIf=\"customer.user?.id\">\r\n <ng-container *ngIf=\"customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"verified-user-icon\"></clr-icon>\r\n {{ 'customer.verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!customer.user?.verified\">\r\n <clr-icon shape=\"check-circle\" class=\"registered-user-icon\"></clr-icon>\r\n {{ 'customer.registered' | translate }}\r\n </ng-container>\r\n</vdr-chip>\r\n<vdr-chip *ngIf=\"!customer.user?.id\">{{ 'customer.guest' | translate }}</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { CustomerFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-customer-status-label',\r\n templateUrl: './customer-status-label.component.html',\r\n styleUrls: ['./customer-status-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerStatusLabelComponent {\r\n @Input() customer: CustomerFragment;\r\n}\r\n","<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n CustomerFragment,\r\n GetCustomerHistoryQuery,\r\n HistoryEntry,\r\n HistoryEntryType,\r\n TimelineDisplayType,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype HistoryItem = NonNullable<GetCustomerHistoryQuery['customer']>['history']['items'][number];\r\n\r\n@Component({\r\n selector: 'vdr-customer-history',\r\n templateUrl: './customer-history.component.html',\r\n styleUrls: ['./customer-history.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerHistoryComponent {\r\n @Input() customer: CustomerFragment;\r\n @Input() history: HistoryItem[];\r\n @Output() addNote = new EventEmitter<{ note: string }>();\r\n @Output() updateNote = new EventEmitter<HistoryEntry>();\r\n @Output() deleteNote = new EventEmitter<HistoryEntry>();\r\n note = '';\r\n readonly type = HistoryEntryType;\r\n\r\n getDisplayType(entry: HistoryItem): TimelineDisplayType {\r\n switch (entry.type) {\r\n case HistoryEntryType.CUSTOMER_VERIFIED:\r\n case HistoryEntryType.CUSTOMER_EMAIL_UPDATE_VERIFIED:\r\n case HistoryEntryType.CUSTOMER_PASSWORD_RESET_VERIFIED:\r\n return 'success';\r\n case HistoryEntryType.CUSTOMER_REGISTERED:\r\n return 'muted';\r\n case HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:\r\n return 'error';\r\n default:\r\n return 'default';\r\n }\r\n }\r\n\r\n getTimelineIcon(entry: HistoryItem): string | [string, string] | undefined {\r\n switch (entry.type) {\r\n case HistoryEntryType.CUSTOMER_REGISTERED:\r\n return 'user';\r\n case HistoryEntryType.CUSTOMER_VERIFIED:\r\n return ['assign-user', 'is-solid'];\r\n case HistoryEntryType.CUSTOMER_NOTE:\r\n return 'note';\r\n case HistoryEntryType.CUSTOMER_ADDED_TO_GROUP:\r\n case HistoryEntryType.CUSTOMER_REMOVED_FROM_GROUP:\r\n return 'users';\r\n }\r\n }\r\n\r\n isFeatured(entry: HistoryItem): boolean {\r\n switch (entry.type) {\r\n case HistoryEntryType.CUSTOMER_REGISTERED:\r\n case HistoryEntryType.CUSTOMER_VERIFIED:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n getName(entry: HistoryItem): string {\r\n const { administrator } = entry;\r\n if (administrator) {\r\n return `${administrator.firstName} ${administrator.lastName}`;\r\n } else {\r\n return `${this.customer.firstName} ${this.customer.lastName}`;\r\n }\r\n }\r\n\r\n addNoteToCustomer() {\r\n this.addNote.emit({ note: this.note });\r\n this.note = '';\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-customer-status-label [customer]=\"entity$ | async\"></vdr-customer-status-label>\r\n <div\r\n class=\"last-login\"\r\n *ngIf=\"(entity$ | async)?.user?.lastLogin as lastLogin\"\r\n [title]=\"lastLogin | localeDate: 'medium'\"\r\n >\r\n {{ 'customer.last-login' | translate }}: {{ lastLogin | timeAgo }}\r\n </div>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"'UpdateCustomer'\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm.get('customer')\">\r\n <vdr-form-field [label]=\"'customer.title' | translate\" for=\"title\" [readOnlyToggle]=\"!(isNew$ | async)\">\r\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.first-name' | translate\"\r\n for=\"firstName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.last-name' | translate\"\r\n for=\"lastName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.email-address' | translate\"\r\n for=\"emailAddress\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.phone-number' | translate\"\r\n for=\"phoneNumber\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.password' | translate\" for=\"password\" *ngIf=\"isNew$ | async\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Customer\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['customer', 'customFields'])\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"customer-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n\r\n<div class=\"groups\" *ngIf=\"(entity$ | async)?.groups as groups\">\r\n <label class=\"clr-control-label\">{{ 'customer.customer-groups' | translate }}</label>\r\n <ng-container *ngIf=\"groups.length; else noGroups\">\r\n <vdr-chip\r\n *ngFor=\"let group of groups\"\r\n [colorFrom]=\"group.id\"\r\n icon=\"times\"\r\n (iconClick)=\"removeFromGroup(group)\"\r\n >{{ group.name }}</vdr-chip\r\n >\r\n </ng-container>\r\n <ng-template #noGroups>\r\n {{ 'customer.not-a-member-of-any-groups' | translate }}\r\n </ng-template>\r\n <div>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"addToGroup()\"\r\n *vdrIfPermissions=\"'UpdateCustomerGroup'\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-4\">\r\n <h3>{{ 'customer.addresses' | translate }}</h3>\r\n <vdr-address-card\r\n *ngFor=\"let addressForm of getAddressFormControls()\"\r\n [class.to-delete]=\"addressesToDeleteIds.has(addressForm.value.id)\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [isDefaultBilling]=\"defaultBillingAddressId === addressForm.value.id\"\r\n [isDefaultShipping]=\"defaultShippingAddressId === addressForm.value.id\"\r\n [addressForm]=\"addressForm\"\r\n [customFields]=\"addressCustomFields\"\r\n [editable]=\"(['UpdateCustomer'] | hasPermission) && !addressesToDeleteIds.has(addressForm.value.id)\"\r\n (setAsDefaultBilling)=\"setDefaultBillingAddressId($event)\"\r\n (setAsDefaultShipping)=\"setDefaultShippingAddressId($event)\"\r\n (deleteAddress)=\"toggleDeleteAddress($event)\"\r\n ></vdr-address-card>\r\n <button class=\"btn btn-secondary\" (click)=\"addAddress()\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-address' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"clr-col-md-8\">\r\n <h3>{{ 'customer.orders' | translate }}</h3>\r\n <vdr-data-table\r\n [items]=\"orders$ | async\"\r\n [itemsPerPage]=\"ordersPerPage\"\r\n [totalItems]=\"ordersCount$ | async\"\r\n [currentPage]=\"currentOrdersPage\"\r\n [emptyStateLabel]=\"'customer.no-orders-placed' | translate\"\r\n (itemsPerPageChange)=\"setOrderItemsPerPage($event)\"\r\n (pageChange)=\"setOrderCurrentPage($event)\"\r\n >\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left\">{{ order.code }}</td>\r\n <td class=\"left\">{{ order.state }}</td>\r\n <td class=\"left\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left\">{{ order.updatedAt | localeDate: 'medium' }}</td>\r\n <td class=\"right\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n</div>\r\n<div class=\"clr-row\" *ngIf=\"!(isNew$ | async)\">\r\n <div class=\"clr-col-md-6\">\r\n <vdr-customer-history\r\n [customer]=\"entity$ | async\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNoteToCustomer($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-customer-history>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n CreateAddressInput,\r\n CreateCustomerAddressMutation,\r\n CreateCustomerInput,\r\n Customer,\r\n CustomFieldConfig,\r\n DataService,\r\n DeleteCustomerAddressMutation,\r\n EditNoteDialogComponent,\r\n GetAvailableCountriesQuery,\r\n GetCustomerHistoryQuery,\r\n GetCustomerQuery,\r\n HistoryEntry,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n SortOrder,\r\n UpdateCustomerAddressMutation,\r\n UpdateCustomerInput,\r\n UpdateCustomerMutation,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever, notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { EMPTY, forkJoin, from, Observable, Subject } from 'rxjs';\r\nimport {\r\n concatMap,\r\n filter,\r\n map,\r\n merge,\r\n mergeMap,\r\n shareReplay,\r\n startWith,\r\n switchMap,\r\n take,\r\n} from 'rxjs/operators';\r\n\r\nimport { SelectCustomerGroupDialogComponent } from '../select-customer-group-dialog/select-customer-group-dialog.component';\r\n\r\ntype CustomerWithOrders = NonNullable<GetCustomerQuery['customer']>;\r\n\r\n@Component({\r\n selector: 'vdr-customer-detail',\r\n templateUrl: './customer-detail.component.html',\r\n styleUrls: ['./customer-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerDetailComponent\r\n extends BaseDetailComponent<CustomerWithOrders>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n addressCustomFields: CustomFieldConfig[];\r\n availableCountries$: Observable<GetAvailableCountriesQuery['countries']['items']>;\r\n orders$: Observable<NonNullable<GetCustomerQuery['customer']>['orders']['items']>;\r\n ordersCount$: Observable<number>;\r\n history$: Observable<NonNullable<GetCustomerHistoryQuery['customer']>['history']['items'] | undefined>;\r\n fetchHistory = new Subject<void>();\r\n defaultShippingAddressId: string;\r\n defaultBillingAddressId: string;\r\n addressesToDeleteIds = new Set<string>();\r\n addressDefaultsUpdated = false;\r\n ordersPerPage = 10;\r\n currentOrdersPage = 1;\r\n private orderListUpdates$ = new Subject<CustomerWithOrders>();\r\n\r\n constructor(\r\n route: ActivatedRoute,\r\n router: Router,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n private formBuilder: FormBuilder,\r\n protected dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n\r\n this.customFields = this.getCustomFieldConfig('Customer');\r\n this.addressCustomFields = this.getCustomFieldConfig('Address');\r\n this.detailForm = this.formBuilder.group({\r\n customer: this.formBuilder.group({\r\n title: '',\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n phoneNumber: '',\r\n emailAddress: ['', [Validators.required, Validators.email]],\r\n password: '',\r\n customFields: this.formBuilder.group(\r\n this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n ),\r\n }),\r\n addresses: new FormArray([]),\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items)\r\n .pipe(shareReplay(1));\r\n\r\n const customerWithUpdates$ = this.entity$.pipe(merge(this.orderListUpdates$));\r\n this.orders$ = customerWithUpdates$.pipe(map(customer => customer.orders.items));\r\n this.ordersCount$ = this.entity$.pipe(map(customer => customer.orders.totalItems));\r\n this.history$ = this.fetchHistory.pipe(\r\n startWith(null),\r\n switchMap(() => {\r\n return this.dataService.customer\r\n .getCustomerHistory(this.id, {\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n })\r\n .mapStream(data => data.customer?.history.items);\r\n }),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n this.orderListUpdates$.complete();\r\n }\r\n\r\n getAddressFormControls(): FormControl[] {\r\n const formArray = this.detailForm.get(['addresses']) as FormArray;\r\n return formArray.controls as FormControl[];\r\n }\r\n\r\n setDefaultBillingAddressId(id: string) {\r\n this.defaultBillingAddressId = id;\r\n this.addressDefaultsUpdated = true;\r\n }\r\n\r\n setDefaultShippingAddressId(id: string) {\r\n this.defaultShippingAddressId = id;\r\n this.addressDefaultsUpdated = true;\r\n }\r\n\r\n toggleDeleteAddress(id: string) {\r\n if (this.addressesToDeleteIds.has(id)) {\r\n this.addressesToDeleteIds.delete(id);\r\n } else {\r\n this.addressesToDeleteIds.add(id);\r\n }\r\n }\r\n\r\n addAddress() {\r\n const addressFormArray = this.detailForm.get('addresses') as FormArray;\r\n const newAddress = this.formBuilder.group({\r\n fullName: '',\r\n company: '',\r\n streetLine1: ['', Validators.required],\r\n streetLine2: '',\r\n city: '',\r\n province: '',\r\n postalCode: '',\r\n countryCode: ['', Validators.required],\r\n phoneNumber: '',\r\n defaultShippingAddress: false,\r\n defaultBillingAddress: false,\r\n });\r\n if (this.addressCustomFields.length) {\r\n const customFieldsGroup = this.formBuilder.group({});\r\n for (const fieldDef of this.addressCustomFields) {\r\n customFieldsGroup.addControl(fieldDef.name, new FormControl(''));\r\n }\r\n newAddress.addControl('customFields', customFieldsGroup);\r\n }\r\n addressFormArray.push(newAddress);\r\n }\r\n\r\n setOrderItemsPerPage(itemsPerPage: number) {\r\n this.ordersPerPage = +itemsPerPage;\r\n this.fetchOrdersList();\r\n }\r\n\r\n setOrderCurrentPage(page: number) {\r\n this.currentOrdersPage = +page;\r\n this.fetchOrdersList();\r\n }\r\n\r\n create() {\r\n const customerForm = this.detailForm.get('customer');\r\n if (!customerForm) {\r\n return;\r\n }\r\n const formValue = customerForm.value;\r\n const customFields = customerForm.get('customFields')?.value;\r\n const customer: CreateCustomerInput = {\r\n title: formValue.title,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n phoneNumber: formValue.phoneNumber,\r\n customFields,\r\n };\r\n this.dataService.customer\r\n .createCustomer(customer, formValue.password)\r\n .subscribe(({ createCustomer }) => {\r\n switch (createCustomer.__typename) {\r\n case 'Customer':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Customer',\r\n });\r\n if (createCustomer.emailAddress && !formValue.password) {\r\n this.notificationService.notify({\r\n message: _('customer.email-verification-sent'),\r\n translationVars: { emailAddress: formValue.emailAddress },\r\n type: 'info',\r\n duration: 10000,\r\n });\r\n }\r\n this.detailForm.markAsPristine();\r\n this.addressDefaultsUpdated = false;\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', createCustomer.id], { relativeTo: this.route });\r\n break;\r\n case 'EmailAddressConflictError':\r\n this.notificationService.error(createCustomer.message);\r\n }\r\n });\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const saveOperations: Array<\r\n Observable<\r\n | UpdateCustomerMutation['updateCustomer']\r\n | CreateCustomerAddressMutation['createCustomerAddress']\r\n | UpdateCustomerAddressMutation['updateCustomerAddress']\r\n | DeleteCustomerAddressMutation['deleteCustomerAddress']\r\n >\r\n > = [];\r\n const customerForm = this.detailForm.get('customer');\r\n if (customerForm && customerForm.dirty) {\r\n const formValue = customerForm.value;\r\n const customFields = customerForm.get('customFields')?.value;\r\n const customer: UpdateCustomerInput = {\r\n id,\r\n title: formValue.title,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n phoneNumber: formValue.phoneNumber,\r\n customFields,\r\n };\r\n saveOperations.push(\r\n this.dataService.customer\r\n .updateCustomer(customer)\r\n .pipe(map(res => res.updateCustomer)),\r\n );\r\n }\r\n const addressFormArray = this.detailForm.get('addresses') as FormArray;\r\n if ((addressFormArray && addressFormArray.dirty) || this.addressDefaultsUpdated) {\r\n for (const addressControl of addressFormArray.controls) {\r\n if (addressControl.dirty || this.addressDefaultsUpdated) {\r\n const address = addressControl.value;\r\n const input: CreateAddressInput = {\r\n fullName: address.fullName,\r\n company: address.company,\r\n streetLine1: address.streetLine1,\r\n streetLine2: address.streetLine2,\r\n city: address.city,\r\n province: address.province,\r\n postalCode: address.postalCode,\r\n countryCode: address.countryCode,\r\n phoneNumber: address.phoneNumber,\r\n defaultShippingAddress: this.defaultShippingAddressId === address.id,\r\n defaultBillingAddress: this.defaultBillingAddressId === address.id,\r\n customFields: address.customFields,\r\n };\r\n if (!address.id) {\r\n saveOperations.push(\r\n this.dataService.customer\r\n .createCustomerAddress(id, input)\r\n .pipe(map(res => res.createCustomerAddress)),\r\n );\r\n } else {\r\n if (this.addressesToDeleteIds.has(address.id)) {\r\n saveOperations.push(\r\n this.dataService.customer\r\n .deleteCustomerAddress(address.id)\r\n .pipe(map(res => res.deleteCustomerAddress)),\r\n );\r\n } else {\r\n saveOperations.push(\r\n this.dataService.customer\r\n .updateCustomerAddress({\r\n ...input,\r\n id: address.id,\r\n })\r\n .pipe(map(res => res.updateCustomerAddress)),\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return forkJoin(saveOperations);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n let notified = false;\r\n for (const result of data) {\r\n switch (result.__typename) {\r\n case 'Customer':\r\n case 'Address':\r\n case 'Success':\r\n if (!notified) {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Customer',\r\n });\r\n notified = true;\r\n this.detailForm.markAsPristine();\r\n this.addressDefaultsUpdated = false;\r\n this.changeDetector.markForCheck();\r\n this.fetchHistory.next();\r\n this.dataService.customer.getCustomer(this.id).single$.subscribe();\r\n }\r\n break;\r\n case 'EmailAddressConflictError':\r\n this.notificationService.error(result.message);\r\n break;\r\n }\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Customer',\r\n });\r\n },\r\n );\r\n }\r\n\r\n addToGroup() {\r\n this.modalService\r\n .fromComponent(SelectCustomerGroupDialogComponent, {\r\n size: 'md',\r\n })\r\n .pipe(\r\n switchMap(groupIds => (groupIds ? from(groupIds) : EMPTY)),\r\n concatMap(groupId => this.dataService.customer.addCustomersToGroup(groupId, [this.id])),\r\n )\r\n .subscribe({\r\n next: res => {\r\n this.notificationService.success(_(`customer.add-customers-to-group-success`), {\r\n customerCount: 1,\r\n groupName: res.addCustomersToGroup.name,\r\n });\r\n },\r\n complete: () => {\r\n this.dataService.customer.getCustomer(this.id, { take: 0 }).single$.subscribe();\r\n this.fetchHistory.next();\r\n },\r\n });\r\n }\r\n\r\n removeFromGroup(group: NonNullable<GetCustomerQuery['customer']>['groups'][number]) {\r\n this.modalService\r\n .dialog({\r\n title: _('customer.confirm-remove-customer-from-group'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response\r\n ? this.dataService.customer.removeCustomersFromGroup(group.id, [this.id])\r\n : EMPTY,\r\n ),\r\n switchMap(() => this.dataService.customer.getCustomer(this.id, { take: 0 }).single$),\r\n )\r\n .subscribe(result => {\r\n this.notificationService.success(_(`customer.remove-customers-from-group-success`), {\r\n customerCount: 1,\r\n groupName: group.name,\r\n });\r\n this.fetchHistory.next();\r\n });\r\n }\r\n\r\n addNoteToCustomer({ note }: { note: string }) {\r\n this.dataService.customer.addNoteToCustomer(this.id, note).subscribe(() => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n updateNote(entry: HistoryEntry) {\r\n this.modalService\r\n .fromComponent(EditNoteDialogComponent, {\r\n closable: true,\r\n locals: {\r\n displayPrivacyControls: false,\r\n note: entry.data.note,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.customer.updateCustomerNote({\r\n noteId: entry.id,\r\n note: result.note,\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n deleteNote(entry: HistoryEntry) {\r\n return this.modalService\r\n .dialog({\r\n title: _('common.confirm-delete-note'),\r\n body: entry.data.note,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(switchMap(res => (res ? this.dataService.customer.deleteCustomerNote(entry.id) : EMPTY)))\r\n .subscribe(() => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n protected setFormValues(entity: CustomerWithOrders): void {\r\n const customerGroup = this.detailForm.get('customer');\r\n if (customerGroup) {\r\n customerGroup.patchValue({\r\n title: entity.title,\r\n firstName: entity.firstName,\r\n lastName: entity.lastName,\r\n phoneNumber: entity.phoneNumber,\r\n emailAddress: entity.emailAddress,\r\n });\r\n }\r\n\r\n if (entity.addresses) {\r\n const addressesArray = new FormArray([]);\r\n for (const address of entity.addresses) {\r\n const { customFields, ...rest } = address as any;\r\n const addressGroup = this.formBuilder.group({\r\n ...rest,\r\n countryCode: address.country.code,\r\n });\r\n addressesArray.push(addressGroup);\r\n if (address.defaultShippingAddress) {\r\n this.defaultShippingAddressId = address.id;\r\n }\r\n if (address.defaultBillingAddress) {\r\n this.defaultBillingAddressId = address.id;\r\n }\r\n\r\n if (this.addressCustomFields.length) {\r\n const customFieldsGroup = this.formBuilder.group({});\r\n for (const fieldDef of this.addressCustomFields) {\r\n const key = fieldDef.name;\r\n const value = (address as any).customFields?.[key];\r\n const control = new FormControl(value);\r\n customFieldsGroup.addControl(key, control);\r\n }\r\n addressGroup.addControl('customFields', customFieldsGroup);\r\n }\r\n }\r\n this.detailForm.setControl('addresses', addressesArray);\r\n }\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customer', 'customFields']),\r\n entity,\r\n );\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Refetch the customer with the current order list settings.\r\n */\r\n private fetchOrdersList() {\r\n this.dataService.customer\r\n .getCustomer(this.id, {\r\n take: this.ordersPerPage,\r\n skip: (this.currentOrdersPage - 1) * this.ordersPerPage,\r\n })\r\n .single$.pipe(\r\n map(data => data.customer),\r\n filter(notNullOrUndefined),\r\n )\r\n .subscribe(result => this.orderListUpdates$.next(result));\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['CreateCustomerGroup', 'UpdateCustomerGroup'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"CustomerGroup\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"form.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"!form.valid\" class=\"btn btn-primary\">\r\n <span *ngIf=\"group.id\">{{ 'customer.update-customer-group' | translate }}</span>\r\n <span *ngIf=\"!group.id\">{{ 'customer.create-customer-group' | translate }}</span>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n CreateCustomerGroupInput,\r\n CustomFieldConfig,\r\n Dialog,\r\n ServerConfigService,\r\n UpdateCustomerGroupInput,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-customer-group-detail-dialog',\r\n templateUrl: './customer-group-detail-dialog.component.html',\r\n styleUrls: ['./customer-group-detail-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerGroupDetailDialogComponent implements Dialog<CreateCustomerGroupInput>, OnInit {\r\n group: { id?: string; name: string; customFields?: { [name: string]: any } };\r\n resolveWith: (result?: CreateCustomerGroupInput) => void;\r\n customFields: CustomFieldConfig[];\r\n form: FormGroup;\r\n\r\n constructor(private serverConfigService: ServerConfigService, private formBuilder: FormBuilder) {\r\n this.customFields = this.serverConfigService.getCustomFieldsFor('CustomerGroup');\r\n }\r\n\r\n ngOnInit() {\r\n this.form = this.formBuilder.group({\r\n name: [this.group.name, Validators.required],\r\n customFields: this.formBuilder.group(\r\n this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n ),\r\n });\r\n if (this.customFields.length) {\r\n const customFieldsGroup = this.form.get('customFields') as FormGroup;\r\n\r\n for (const fieldDef of this.customFields) {\r\n const key = fieldDef.name;\r\n const value = this.group.customFields?.[key];\r\n const control = customFieldsGroup.get(key);\r\n if (control) {\r\n control.patchValue(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n save() {\r\n this.resolveWith(this.form.value);\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-by-group-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <vdr-data-table\r\n [class.expanded]=\"activeGroup$ | async\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <ng-template let-group=\"item\">\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-entity-info [entity]=\"group\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"right align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td [class.active]=\"group.id === activeGroupId\" class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate: { count: selectedCustomerIds.length } }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetCustomerGroupsQuery,\r\n GetCustomerGroupWithCustomersQuery,\r\n ItemOf,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, combineLatest, EMPTY, Observable, of } from 'rxjs';\r\nimport {\r\n debounceTime,\r\n distinctUntilChanged,\r\n filter,\r\n map,\r\n mapTo,\r\n switchMap,\r\n takeUntil,\r\n tap,\r\n} from 'rxjs/operators';\r\n\r\nimport { AddCustomerToGroupDialogComponent } from '../add-customer-to-group-dialog/add-customer-to-group-dialog.component';\r\nimport { CustomerGroupDetailDialogComponent } from '../customer-group-detail-dialog/customer-group-detail-dialog.component';\r\nimport { CustomerGroupMemberFetchParams } from '../customer-group-member-list/customer-group-member-list.component';\r\n\r\n@Component({\r\n selector: 'vdr-customer-group-list',\r\n templateUrl: './customer-group-list.component.html',\r\n styleUrls: ['./customer-group-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomerGroupListComponent\r\n extends BaseListComponent<\r\n GetCustomerGroupsQuery,\r\n GetCustomerGroupsQuery['customerGroups']['items'][number]\r\n >\r\n implements OnInit\r\n{\r\n searchTerm = new FormControl('');\r\n activeGroup$: Observable<ItemOf<GetCustomerGroupsQuery, 'customerGroups'> | undefined>;\r\n activeGroupId: string | undefined;\r\n listIsEmpty$: Observable<boolean>;\r\n members$: Observable<\r\n NonNullable<GetCustomerGroupWithCustomersQuery['customerGroup']>['customers']['items']\r\n >;\r\n membersTotal$: Observable<number>;\r\n selectedCustomerIds: string[] = [];\r\n fetchGroupMembers$ = new BehaviorSubject<CustomerGroupMemberFetchParams>({\r\n skip: 0,\r\n take: 0,\r\n filterTerm: '',\r\n });\r\n private refreshActiveGroupMembers$ = new BehaviorSubject<void>(undefined);\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n public route: ActivatedRoute,\r\n protected router: Router,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) =>\r\n this.dataService.customer.getCustomerGroupList(...args).refetchOnChannelChange(),\r\n data => data.customerGroups,\r\n (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n name: { contains: this.searchTerm.value },\r\n },\r\n },\r\n }),\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.searchTerm.valueChanges\r\n .pipe(\r\n filter(value => 2 < value.length || value.length === 0),\r\n debounceTime(250),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe(() => this.refresh());\r\n const activeGroupId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n tap(() => (this.selectedCustomerIds = [])),\r\n );\r\n this.listIsEmpty$ = this.items$.pipe(map(groups => groups.length === 0));\r\n this.activeGroup$ = combineLatest(this.items$, activeGroupId$).pipe(\r\n map(([groups, activeGroupId]) => {\r\n if (activeGroupId) {\r\n return groups.find(g => g.id === activeGroupId);\r\n }\r\n }),\r\n tap(val => (this.activeGroupId = val?.id)),\r\n );\r\n const membersResult$ = combineLatest(\r\n this.activeGroup$,\r\n this.fetchGroupMembers$,\r\n this.refreshActiveGroupMembers$,\r\n ).pipe(\r\n switchMap(([activeGroup, { skip, take, filterTerm }]) => {\r\n if (activeGroup) {\r\n return this.dataService.customer\r\n .getCustomerGroupWithCustomers(activeGroup.id, {\r\n skip,\r\n take,\r\n filter: {\r\n emailAddress: {\r\n contains: filterTerm,\r\n },\r\n },\r\n })\r\n .mapStream(res => res.customerGroup?.customers);\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n );\r\n\r\n this.members$ = membersResult$.pipe(map(res => res?.items ?? []));\r\n this.membersTotal$ = membersResult$.pipe(map(res => res?.totalItems ?? 0));\r\n }\r\n\r\n create() {\r\n this.modalService\r\n .fromComponent(CustomerGroupDetailDialogComponent, { locals: { group: { name: '' } } })\r\n .pipe(\r\n switchMap(result =>\r\n result\r\n ? this.dataService.customer.createCustomerGroup({ ...result, customerIds: [] })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.refresh();\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'CustomerGroup',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'CustomerGroup',\r\n });\r\n },\r\n );\r\n }\r\n\r\n delete(groupId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('customer.confirm-delete-customer-group'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response ? this.dataService.customer.deleteCustomerGroup(groupId) : EMPTY,\r\n ),\r\n\r\n switchMap(result => {\r\n if (result.deleteCustomerGroup.result === DeletionResult.DELETED) {\r\n // refresh list\r\n return this.dataService.customer\r\n .getCustomerGroupList()\r\n .mapSingle(() => ({ errorMessage: false }));\r\n } else {\r\n return of({ errorMessage: result.deleteCustomerGroup.message });\r\n }\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n if (typeof result.errorMessage === 'string') {\r\n this.notificationService.error(result.errorMessage);\r\n } else {\r\n this.refresh();\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'CustomerGroup',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'CustomerGroup',\r\n });\r\n },\r\n );\r\n }\r\n\r\n update(group: ItemOf<GetCustomerGroupsQuery, 'customerGroups'>) {\r\n this.modalService\r\n .fromComponent(CustomerGroupDetailDialogComponent, { locals: { group } })\r\n .pipe(\r\n switchMap(result =>\r\n result\r\n ? this.dataService.customer.updateCustomerGroup({ id: group.id, ...result })\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.refresh();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'CustomerGroup',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'CustomerGroup',\r\n });\r\n },\r\n );\r\n }\r\n\r\n closeMembers() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n addToGroup(group: NonNullable<GetCustomerGroupWithCustomersQuery['customerGroup']>) {\r\n this.modalService\r\n .fromComponent(AddCustomerToGroupDialogComponent, {\r\n locals: {\r\n group,\r\n route: this.route,\r\n },\r\n size: 'md',\r\n verticalAlign: 'top',\r\n })\r\n .pipe(\r\n switchMap(customerIds =>\r\n customerIds\r\n ? this.dataService.customer\r\n .addCustomersToGroup(group.id, customerIds)\r\n .pipe(mapTo(customerIds))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe({\r\n next: result => {\r\n this.notificationService.success(_(`customer.add-customers-to-group-success`), {\r\n customerCount: result.length,\r\n groupName: group.name,\r\n });\r\n this.refreshActiveGroupMembers$.next();\r\n this.selectedCustomerIds = [];\r\n },\r\n });\r\n }\r\n\r\n removeFromGroup(\r\n group: NonNullable<GetCustomerGroupWithCustomersQuery['customerGroup']>,\r\n customerIds: string[],\r\n ) {\r\n this.dataService.customer.removeCustomersFromGroup(group.id, customerIds).subscribe({\r\n complete: () => {\r\n this.notificationService.success(_(`customer.remove-customers-from-group-success`), {\r\n customerCount: customerIds.length,\r\n groupName: group.name,\r\n });\r\n this.refreshActiveGroupMembers$.next();\r\n this.selectedCustomerIds = [];\r\n },\r\n });\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-customers-by-email-last-name-postal-code' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'customer.customer-type' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-status-label [customer]=\"customer\"></vdr-customer-status-label>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteCustomer(customer)\"\r\n [disabled]=\"!('DeleteCustomer' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetCustomerListQuery,\r\n ItemOf,\r\n LogicalOperator,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { SortOrder } from '@vendure/common/lib/generated-shop-types';\r\nimport { EMPTY } from 'rxjs';\r\nimport { debounceTime, filter, switchMap, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-customer-list',\r\n templateUrl: './customer-list.component.html',\r\n styleUrls: ['./customer-list.component.scss'],\r\n})\r\nexport class CustomerListComponent\r\n extends BaseListComponent<GetCustomerListQuery, ItemOf<GetCustomerListQuery, 'customers'>>\r\n implements OnInit\r\n{\r\n searchTerm = new FormControl('');\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.customer.getCustomerList(...args).refetchOnChannelChange(),\r\n data => data.customers,\r\n (skip, take) => ({\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n emailAddress: {\r\n contains: this.searchTerm.value,\r\n },\r\n lastName: {\r\n contains: this.searchTerm.value,\r\n },\r\n postalCode: {\r\n contains: this.searchTerm.value,\r\n },\r\n },\r\n filterOperator: LogicalOperator.OR,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n },\r\n }),\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.searchTerm.valueChanges\r\n .pipe(\r\n filter(value => 2 < value.length || value.length === 0),\r\n debounceTime(250),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe(() => this.refresh());\r\n }\r\n\r\n deleteCustomer(customer: ItemOf<GetCustomerListQuery, 'customers'>) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-customer'),\r\n body: `${customer.firstName} ${customer.lastName}`,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(switchMap(res => (res ? this.dataService.customer.deleteCustomer(customer.id) : EMPTY)))\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Customer',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Customer',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, CustomerFragment, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CustomerResolver extends BaseEntityResolver<CustomerFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Customer',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n title: '',\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: '',\r\n phoneNumber: null,\r\n addresses: null,\r\n user: null,\r\n },\r\n id => dataService.customer.getCustomer(id).mapStream(data => data.customer),\r\n );\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CanDeactivateDetailGuard,\r\n createResolveData,\r\n CustomerFragment,\r\n detailBreadcrumb,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { CustomerDetailComponent } from './components/customer-detail/customer-detail.component';\r\nimport { CustomerGroupListComponent } from './components/customer-group-list/customer-group-list.component';\r\nimport { CustomerListComponent } from './components/customer-list/customer-list.component';\r\nimport { CustomerResolver } from './providers/routing/customer-resolver';\r\n\r\nexport const customerRoutes: Route[] = [\r\n {\r\n path: 'customers',\r\n component: CustomerListComponent,\r\n pathMatch: '',\r\n data: {\r\n breadcrumb: _('breadcrumb.customers'),\r\n },\r\n },\r\n {\r\n path: 'customers/:id',\r\n component: CustomerDetailComponent,\r\n resolve: createResolveData(CustomerResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: customerBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'groups',\r\n component: CustomerGroupListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.customer-groups'),\r\n },\r\n },\r\n];\r\n\r\nexport function customerBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<CustomerFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.customers',\r\n getName: customer => `${customer.firstName} ${customer.lastName}`,\r\n route: 'customers',\r\n });\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { AddCustomerToGroupDialogComponent } from './components/add-customer-to-group-dialog/add-customer-to-group-dialog.component';\r\nimport { AddressCardComponent } from './components/address-card/address-card.component';\r\nimport { AddressDetailDialogComponent } from './components/address-detail-dialog/address-detail-dialog.component';\r\nimport { CustomerDetailComponent } from './components/customer-detail/customer-detail.component';\r\nimport { CustomerGroupDetailDialogComponent } from './components/customer-group-detail-dialog/customer-group-detail-dialog.component';\r\nimport { CustomerGroupListComponent } from './components/customer-group-list/customer-group-list.component';\r\nimport { CustomerGroupMemberListComponent } from './components/customer-group-member-list/customer-group-member-list.component';\r\nimport { CustomerHistoryComponent } from './components/customer-history/customer-history.component';\r\nimport { CustomerListComponent } from './components/customer-list/customer-list.component';\r\nimport { CustomerStatusLabelComponent } from './components/customer-status-label/customer-status-label.component';\r\nimport { SelectCustomerGroupDialogComponent } from './components/select-customer-group-dialog/select-customer-group-dialog.component';\r\nimport { customerRoutes } from './customer.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(customerRoutes)],\r\n declarations: [\r\n CustomerListComponent,\r\n CustomerDetailComponent,\r\n CustomerStatusLabelComponent,\r\n AddressCardComponent,\r\n CustomerGroupListComponent,\r\n CustomerGroupDetailDialogComponent,\r\n AddCustomerToGroupDialogComponent,\r\n CustomerGroupMemberListComponent,\r\n SelectCustomerGroupDialogComponent,\r\n CustomerHistoryComponent,\r\n AddressDetailDialogComponent,\r\n ],\r\n exports: [AddressCardComponent],\r\n})\r\nexport class CustomerModule {}\r\n"],"sourceRoot":"webpack:///","file":"600.17470a2c90aa79d8.js"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkvendure_admin=self.webpackChunkvendure_admin||[]).push([[625],{2625:(T,u,r)=>{r.r(u),r.d(u,{LoginComponent:()=>c,LoginGuard:()=>l,LoginModule:()=>p,loginRoutes:()=>h});var i=r(8098),e=r(3184),m=r(9720),s=r(587),g=r(2748),f=r(6362),v=r(7890),C=r(7514);function M(o,t){1&o&&(e.TgZ(0,"span"),e._uU(1,"vendure"),e.qZA())}function x(o,t){1&o&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function b(o,t){if(1&o&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,x,2,0,"span",4),e.qZA()),2&o){const n=e.oxw();e.xp6(1),e.hij("",n.brand," "),e.xp6(1),e.Q6J("ngIf",!n.hideVendureBranding||!n.hideVersion)}}function _(o,t){1&o&&(e.TgZ(0,"span"),e._uU(1,"vendure"),e.qZA())}function y(o,t){if(1&o&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&o){const n=e.oxw();e.xp6(1),e.hij("v",n.version,"")}}class c{constructor(t,n){this.authService=t,this.router=n,this.username="",this.password="",this.rememberMe=!1,this.version=i.s5M,this.brand=(0,i.hq7)().brand,this.hideVendureBranding=(0,i.hq7)().hideVendureBranding,this.hideVersion=(0,i.hq7)().hideVersion}logIn(){this.errorMessage=void 0,this.authService.logIn(this.username,this.password,this.rememberMe).subscribe(t=>{switch(t.__typename){case"CurrentUser":const n=this.getRedirectRoute();this.router.navigateByUrl(n||"/");break;case"InvalidCredentialsError":case"NativeAuthStrategyError":this.errorMessage=t.message}})}getRedirectRoute(){let t;const n=new RegExp(`${i.ONw}=(.*)`);try{const a=window.location.search.match(n);a&&1<a.length&&(t=atob(decodeURIComponent(a[1])))}catch(a){}return t}}c.\u0275fac=function(t){return new(t||c)(e.Y36(i.e80),e.Y36(m.F0))},c.\u0275cmp=e.Xpm({type:c,selectors:[["vdr-login"]],decls:26,vars:25,consts:[[1,"login-wrapper"],[1,"login"],[1,"title"],["src","assets/logo-300px.png"],[4,"ngIf"],[1,"login-group"],["type","text","name","username","id","login_username",1,"username",3,"ngModel","placeholder","ngModelChange"],["name","password","type","password","id","login_password",1,"password",3,"ngModel","placeholder","ngModelChange"],[1,"login-error",3,"clrAlertType","clrAlertClosable"],[1,"alert-text"],["type","checkbox","clrCheckbox","","id","rememberme","name","rememberme",3,"ngModel","ngModelChange"],["type","submit",1,"btn","btn-primary",3,"disabled","click"],[1,"version"]],template:function(t,n){1&t&&(e.TgZ(0,"div",0)(1,"form",1)(2,"label",2),e._UZ(3,"img",3),e.YNc(4,M,2,0,"span",4),e.qZA(),e.TgZ(5,"div",5)(6,"input",6),e.NdJ("ngModelChange",function(d){return n.username=d}),e.ALo(7,"translate"),e.qZA(),e.TgZ(8,"input",7),e.NdJ("ngModelChange",function(d){return n.password=d}),e.ALo(9,"translate"),e.qZA(),e.TgZ(10,"clr-alert",8)(11,"clr-alert-item")(12,"span",9),e._uU(13),e.qZA()()(),e.TgZ(14,"clr-checkbox-wrapper")(15,"input",10),e.NdJ("ngModelChange",function(d){return n.rememberMe=d}),e.qZA(),e.TgZ(16,"label"),e._uU(17),e.ALo(18,"translate"),e.qZA()(),e.TgZ(19,"button",11),e.NdJ("click",function(){return n.logIn()}),e._uU(20),e.ALo(21,"translate"),e.qZA()(),e.TgZ(22,"div",12),e.YNc(23,b,3,2,"span",4),e.YNc(24,_,2,0,"span",4),e.YNc(25,y,2,1,"span",4),e.qZA()()()),2&t&&(e.xp6(4),e.Q6J("ngIf",!n.hideVendureBranding),e.xp6(2),e.Q6J("ngModel",n.username)("placeholder",e.lcZ(7,17,"common.username")),e.xp6(2),e.Q6J("ngModel",n.password)("placeholder",e.lcZ(9,19,"common.password")),e.xp6(2),e.ekj("visible",n.errorMessage),e.Q6J("clrAlertType","danger")("clrAlertClosable",!1),e.xp6(3),e.hij(" ",n.errorMessage," "),e.xp6(2),e.Q6J("ngModel",n.rememberMe),e.xp6(2),e.Oqu(e.lcZ(18,21,"common.remember-me")),e.xp6(2),e.Q6J("disabled",!n.username||!n.password),e.xp6(1),e.hij(" ",e.lcZ(21,23,"common.login")," "),e.xp6(3),e.Q6J("ngIf",n.brand),e.xp6(1),e.Q6J("ngIf",!n.hideVendureBranding),e.xp6(1),e.Q6J("ngIf",!n.hideVersion))},directives:[s._Y,s.JL,s.F,g.MgK,f.O5,v.y,s.Fj,s.JJ,s.On,g.TIm,g.CyW,g.I9z,g.PEh,s.Wl,g.KKC],pipes:[C.X$],styles:[".login-wrapper[_ngcontent-%COMP%]{background-image:linear-gradient(135deg,var(--color-login-gradient-top),var(--color-login-gradient-bottom)),var(--login-page-bg);background-blend-mode:screen;background-repeat:repeat;background-size:auto;background-position:initial;justify-content:center}@media screen and (max-width: 768px){.login-wrapper[_ngcontent-%COMP%]{justify-content:center;background-color:transparent}.login-wrapper[_ngcontent-%COMP%] .login[_ngcontent-%COMP%]{margin:20px;padding:24px}}.login[_ngcontent-%COMP%]{margin:5vh 0;border-radius:6px;min-height:90vh;max-height:800px}.title[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:8vh}.title[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-width:100%;width:150px}.title[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{padding-top:12px;font-weight:700;color:var(--color-primary-500);font-size:38px}.version[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version[_ngcontent-%COMP%] span[_ngcontent-%COMP%] + span[_ngcontent-%COMP%]{margin-left:5px}.login-error[_ngcontent-%COMP%]{max-height:0;overflow:hidden}.login-error.visible[_ngcontent-%COMP%]{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translate(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}"]});var Z=r(635);class l{constructor(t,n){this.router=t,this.authService=n}canActivate(t){return this.authService.checkAuthenticatedStatus().pipe((0,Z.U)(n=>(n&&this.router.navigate(["/"]),!n)))}}l.\u0275fac=function(t){return new(t||l)(e.LFG(m.F0),e.LFG(i.e80))},l.\u0275prov=e.Yz7({token:l,factory:l.\u0275fac,providedIn:"root"});const h=[{path:"",component:c,pathMatch:"full",canActivate:[l]}];class p{}p.\u0275fac=function(t){return new(t||p)},p.\u0275mod=e.oAB({type:p}),p.\u0275inj=e.cJS({imports:[[i.m81,m.Bz.forChild(h)]]})}}]);
|
|
2
|
+
//# sourceMappingURL=625.3c0c5821b952b58e.js.map
|