@deenruv/admin-ui-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js +33 -0
- package/lib/admin-ui/123.1d21e707f57ee3b4.js.map +1 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js +2 -0
- package/lib/admin-ui/132.9c69fc8bd3b0cec4.js.map +1 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js +321 -0
- package/lib/admin-ui/153.7eec6efd3edd54b4.js.map +1 -0
- package/lib/admin-ui/3rdpartylicenses.txt +1393 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js +2 -0
- package/lib/admin-ui/473.fc9f902d000ba044.js.map +1 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js +86 -0
- package/lib/admin-ui/53.7f3fee856943b03f.js.map +1 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js +46 -0
- package/lib/admin-ui/625.64b1900ed11327c1.js.map +1 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js +73 -0
- package/lib/admin-ui/697.ff9c92dd4b564093.js.map +1 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js +379 -0
- package/lib/admin-ui/99.b9d2442a2288abdb.js.map +1 -0
- package/lib/admin-ui/assets/.gitkeep +0 -0
- package/lib/admin-ui/assets/logo-login.webp +0 -0
- package/lib/admin-ui/assets/logo-top.webp +0 -0
- package/lib/admin-ui/common.868070cec3f2418e.js +2 -0
- package/lib/admin-ui/common.868070cec3f2418e.js.map +1 -0
- package/lib/admin-ui/deenruv-ui-config.json +290 -0
- package/lib/admin-ui/favicon.ico +0 -0
- package/lib/admin-ui/fonts/fonts.scss +253 -0
- package/lib/admin-ui/fonts/inter-cyrillic-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-cyrillic.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-greek.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin-ext.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-latin.woff2 +0 -0
- package/lib/admin-ui/fonts/inter-vietnamese.woff2 +0 -0
- package/lib/admin-ui/i18n-messages/ar.json +814 -0
- package/lib/admin-ui/i18n-messages/cs.json +814 -0
- package/lib/admin-ui/i18n-messages/de.json +814 -0
- package/lib/admin-ui/i18n-messages/en.json +814 -0
- package/lib/admin-ui/i18n-messages/es.json +814 -0
- package/lib/admin-ui/i18n-messages/fa.json +814 -0
- package/lib/admin-ui/i18n-messages/fr.json +814 -0
- package/lib/admin-ui/i18n-messages/he.json +814 -0
- package/lib/admin-ui/i18n-messages/hr.json +814 -0
- package/lib/admin-ui/i18n-messages/it.json +814 -0
- package/lib/admin-ui/i18n-messages/nb.json +812 -0
- package/lib/admin-ui/i18n-messages/ne.json +814 -0
- package/lib/admin-ui/i18n-messages/pl.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_BR.json +814 -0
- package/lib/admin-ui/i18n-messages/pt_PT.json +814 -0
- package/lib/admin-ui/i18n-messages/ru.json +814 -0
- package/lib/admin-ui/i18n-messages/sv.json +807 -0
- package/lib/admin-ui/i18n-messages/uk.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hans.json +814 -0
- package/lib/admin-ui/i18n-messages/zh_Hant.json +814 -0
- package/lib/admin-ui/index.html +14 -0
- package/lib/admin-ui/inter-cyrillic-ext.f62cc866835dd717.woff2 +0 -0
- package/lib/admin-ui/inter-cyrillic.fd42267cbb1bfdb0.woff2 +0 -0
- package/lib/admin-ui/inter-greek-ext.f876a5a3ea45d9a5.woff2 +0 -0
- package/lib/admin-ui/inter-greek.0455348926d6f41d.woff2 +0 -0
- package/lib/admin-ui/inter-latin-ext.7df16007e26681f5.woff2 +0 -0
- package/lib/admin-ui/inter-latin.40c45725dc5f525d.woff2 +0 -0
- package/lib/admin-ui/inter-vietnamese.530676b65c9e977f.woff2 +0 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js +3241 -0
- package/lib/admin-ui/main.a1f6ce60f6b53c40.js.map +1 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js +2 -0
- package/lib/admin-ui/polyfills.34e462102e9d0666.js.map +1 -0
- package/lib/admin-ui/polyfills.ts +66 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js +2 -0
- package/lib/admin-ui/runtime.12183b5e8f8cfd14.js.map +1 -0
- package/lib/admin-ui/styles/_mixins.scss +60 -0
- package/lib/admin-ui/styles/_variables.scss +11 -0
- package/lib/admin-ui/styles/component/prosemirror.scss +511 -0
- package/lib/admin-ui/styles/global/_buttons.scss +147 -0
- package/lib/admin-ui/styles/global/_clarity.scss +140 -0
- package/lib/admin-ui/styles/global/_forms.scss +187 -0
- package/lib/admin-ui/styles/global/_global.scss +41 -0
- package/lib/admin-ui/styles/global/_overrides.scss +165 -0
- package/lib/admin-ui/styles/global/_sass-overrides.scss +8 -0
- package/lib/admin-ui/styles/global/_utilities.scss +155 -0
- package/lib/admin-ui/styles/rtl.scss +143 -0
- package/lib/admin-ui/styles/styles.scss +19 -0
- package/lib/admin-ui/styles/theme/dark.scss +591 -0
- package/lib/admin-ui/styles/theme/default.scss +254 -0
- package/lib/admin-ui/styles/ui-extension-theme.scss +13 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css +3 -0
- package/lib/admin-ui/styles.2de83a2df5e76526.css.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/src/api/metrics.resolver.d.ts +8 -0
- package/lib/src/api/metrics.resolver.js +41 -0
- package/lib/src/api/metrics.resolver.js.map +1 -0
- package/lib/src/config/metrics-strategies.d.ts +39 -0
- package/lib/src/config/metrics-strategies.js +92 -0
- package/lib/src/config/metrics-strategies.js.map +1 -0
- package/lib/src/constants.d.ts +7 -0
- package/lib/src/constants.js +286 -0
- package/lib/src/constants.js.map +1 -0
- package/lib/src/plugin.d.ts +129 -0
- package/lib/src/plugin.js +332 -0
- package/lib/src/plugin.js.map +1 -0
- package/lib/src/service/metrics.service.d.ts +16 -0
- package/lib/src/service/metrics.service.js +144 -0
- package/lib/src/service/metrics.service.js.map +1 -0
- package/lib/src/types.d.ts +23 -0
- package/lib/src/types.js +14 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkdeenruv_admin=self.webpackChunkdeenruv_admin||[]).push([[123],{1123:(Yt,F,a)=>{a.r(F),a.d(F,{GET_PROMOTION_DETAIL:()=>pt,GET_PROMOTION_LIST:()=>Mt,MarketingModule:()=>g,PromotionDetailComponent:()=>h,PromotionListComponent:()=>v,assignPromotionsToChannelBulkAction:()=>G,createRoutes:()=>j,deletePromotionsBulkAction:()=>R,duplicatePromotionsBulkAction:()=>N,promotionBreadcrumb:()=>Ot,removePromotionsFromChannelBulkAction:()=>L});var l=a(1217),d=a(9595),s=a(9214),b=a(2985),E=a(4148),M=a(2913),O=a(2855),t=a(1410),f=a(4677),p=a(4806),u=a(273),_=a(3869),Y=a(5652),B=a(4763),S=a(5889),y=a(1767),U=a(4053),x=a(1787),V=a(2981),X=a(6336),J=a(5483),k=a(1534),D=a(7395),H=a(5563),w=a(4585),K=a(8097),A=a(8995),Z=a(8557),Q=a(8205),z=a(3849),W=a(3161),$=a(654),q=a(4612);function tt(e,o){if(1&e){const n=t.RV6();t.j41(0,"button",27),t.bIt("click",function(){t.eBV(n);const r=t.XpG();return t.Njj(r.create())}),t.EFF(1),t.nI1(2,"translate"),t.k0s()}if(2&e){const n=t.XpG();t.Y8G("disabled",!n.saveButtonEnabled()),t.R7$(),t.SpI(" ",t.bMT(2,2,"common.create")," ")}}function ot(e,o){if(1&e){const n=t.RV6();t.j41(0,"button",27),t.bIt("click",function(){t.eBV(n);const r=t.XpG(2);return t.Njj(r.save())}),t.EFF(1),t.nI1(2,"translate"),t.k0s()}if(2&e){const n=t.XpG(2);t.Y8G("disabled",!n.saveButtonEnabled()),t.R7$(),t.SpI(" ",t.bMT(2,2,"common.update")," ")}}function nt(e,o){1&e&&t.DNE(0,ot,3,4,"button",28),2&e&&t.Y8G("vdrIfPermissions","UpdatePromotion")}function et(e,o){1&e&&(t.j41(0,"vdr-card")(1,"clr-toggle-wrapper"),t.nrm(2,"input",29),t.j41(3,"label"),t.EFF(4),t.nI1(5,"translate"),t.k0s()()()),2&e&&(t.R7$(4),t.JRh(t.bMT(5,1,"common.enabled")))}function it(e,o){if(1&e&&(t.j41(0,"vdr-card"),t.nrm(1,"vdr-page-entity-info",30),t.k0s()),2&e){const n=o.ngIf;t.R7$(),t.Y8G("entity",n)}}function rt(e,o){if(1&e&&(t.j41(0,"vdr-card",31),t.nI1(1,"translate"),t.nrm(2,"vdr-tabbed-custom-fields",32),t.nI1(3,"hasPermission"),t.k0s()),2&e){const n=t.XpG();t.Y8G("title",t.bMT(1,4,"common.custom-fields")),t.R7$(2),t.Y8G("customFields",n.customFields)("customFieldsFormGroup",n.detailForm.get("customFields"))("readonly",!t.bMT(3,6,"UpdatePromotion"))}}function at(e,o){if(1&e){const n=t.RV6();t.j41(0,"div")(1,"vdr-configurable-input",33),t.nI1(2,"hasPermission"),t.bIt("remove",function(r){t.eBV(n);const m=t.XpG();return t.Njj(m.removeCondition(r))}),t.k0s()()}if(2&e){const n=o.$implicit,i=o.index,r=t.XpG();t.R7$(),t.Y8G("position",i)("readonly",!t.bMT(2,5,"UpdatePromotion"))("operation",n)("operationDefinition",r.getConditionDefinition(n))("formControlName",i)}}function st(e,o){if(1&e){const n=t.RV6();t.j41(0,"button",38),t.bIt("click",function(){const r=t.eBV(n).$implicit,m=t.XpG(2);return t.Njj(m.addCondition(r))}),t.EFF(1),t.k0s()}if(2&e){const n=o.$implicit;t.R7$(),t.SpI(" ",n.description," ")}}function mt(e,o){if(1&e&&(t.j41(0,"vdr-dropdown")(1,"button",34),t.nrm(2,"clr-icon",35),t.EFF(3),t.nI1(4,"translate"),t.k0s(),t.j41(5,"vdr-dropdown-menu",36),t.DNE(6,st,2,1,"button",37),t.k0s()()),2&e){const n=t.XpG();t.R7$(3),t.SpI(" ",t.bMT(4,2,"marketing.add-condition")," "),t.R7$(3),t.Y8G("ngForOf",n.getAvailableConditions())}}function dt(e,o){if(1&e){const n=t.RV6();t.j41(0,"div")(1,"vdr-configurable-input",39),t.nI1(2,"hasPermission"),t.bIt("remove",function(r){t.eBV(n);const m=t.XpG();return t.Njj(m.removeAction(r))}),t.k0s()()}if(2&e){const n=o.$implicit,i=o.index,r=t.XpG();t.R7$(),t.Y8G("position",i)("operation",n)("readonly",!t.bMT(2,5,"UpdatePromotion"))("operationDefinition",r.getActionDefinition(n))("formControlName",i)}}function lt(e,o){if(1&e){const n=t.RV6();t.j41(0,"button",38),t.bIt("click",function(){const r=t.eBV(n).$implicit,m=t.XpG(2);return t.Njj(m.addAction(r))}),t.EFF(1),t.k0s()}if(2&e){const n=o.$implicit;t.R7$(),t.SpI(" ",n.description," ")}}function ct(e,o){if(1&e&&(t.j41(0,"vdr-dropdown")(1,"button",34),t.nrm(2,"clr-icon",35),t.EFF(3),t.nI1(4,"translate"),t.k0s(),t.j41(5,"vdr-dropdown-menu",36),t.DNE(6,lt,2,1,"button",37),t.k0s()()),2&e){const n=t.XpG();t.R7$(3),t.SpI(" ",t.bMT(4,2,"marketing.add-action")," "),t.R7$(3),t.Y8G("ngForOf",n.getAvailableActions())}}const pt=b.J1`
|
|
2
|
+
query GetPromotionDetail($id: ID!) {
|
|
3
|
+
promotion(id: $id) {
|
|
4
|
+
...Promotion
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
${s.DOi}
|
|
8
|
+
`;class h extends s.wi7{constructor(o,n,i,r){super(),this.changeDetector=o,this.dataService=n,this.formBuilder=i,this.notificationService=r,this.customFields=this.getCustomFieldConfig("Promotion"),this.detailForm=this.formBuilder.group({name:["",l.k0.required],description:"",enabled:!0,couponCode:null,perCustomerUsageLimit:null,usageLimit:null,startsAt:null,endsAt:null,conditions:this.formBuilder.array([]),actions:this.formBuilder.array([]),customFields:this.formBuilder.group((0,s.HCD)(this.customFields))}),this.conditions=[],this.actions=[],this.allConditions=[],this.allActions=[],this.customFields=this.getCustomFieldConfig("Promotion")}ngOnInit(){this.init(),this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(o=>{this.allActions=o.promotionActions,this.allConditions=o.promotionConditions,this.changeDetector.markForCheck()})}ngOnDestroy(){this.destroy()}getAvailableConditions(){return this.allConditions.filter(o=>!this.conditions.find(n=>n.code===o.code))}getConditionDefinition(o){return this.allConditions.find(n=>n.code===o.code)}getAvailableActions(){return this.allActions.filter(o=>!this.actions.find(n=>n.code===o.code))}getActionDefinition(o){return this.allActions.find(n=>n.code===o.code)}saveButtonEnabled(){return!(!this.detailForm.dirty||!this.detailForm.valid||0===this.conditions.length&&!this.detailForm.value.couponCode||0===this.actions.length)}addCondition(o){this.addOperation("conditions",o),this.detailForm.markAsDirty()}addAction(o){this.addOperation("actions",o),this.detailForm.markAsDirty()}removeCondition(o){this.removeOperation("conditions",o),this.detailForm.markAsDirty()}removeAction(o){this.removeOperation("actions",o),this.detailForm.markAsDirty()}formArrayOf(o){return this.detailForm.get(o)}create(){if(!this.detailForm.dirty)return;const o=this.getUpdatedPromotion({id:"",createdAt:"",updatedAt:"",startsAt:"",endsAt:"",name:"",description:"",couponCode:null,perCustomerUsageLimit:null,usageLimit:null,enabled:!1,conditions:[],actions:[],translations:[]},this.detailForm,this.languageCode);this.dataService.promotion.createPromotion(o).subscribe(({createPromotion:n})=>{switch(n.__typename){case"Promotion":this.notificationService.success((0,d.x)("common.notify-create-success"),{entity:"Promotion"}),this.detailForm.markAsPristine(),this.changeDetector.markForCheck(),this.router.navigate(["../",n.id],{relativeTo:this.route});break;case"MissingConditionsError":this.notificationService.error(n.message)}},n=>{this.notificationService.error((0,d.x)("common.notify-create-error"),{entity:"Promotion"})})}save(){this.detailForm.dirty&&(0,E.z)(this.entity$,this.languageCode$).pipe((0,M.s)(1),(0,O.Z)(([o,n])=>{const i=this.getUpdatedPromotion(o,this.detailForm,n);return this.dataService.promotion.updatePromotion(i)})).subscribe(o=>{this.notificationService.success((0,d.x)("common.notify-update-success"),{entity:"Promotion"}),this.detailForm.markAsPristine(),this.changeDetector.markForCheck()},o=>{this.notificationService.error((0,d.x)("common.notify-update-error"),{entity:"Promotion"})})}getUpdatedPromotion(o,n,i){const r=n.value;return{...(0,s.vk6)({translatable:o,updatedFields:r,customFieldConfig:this.customFields,languageCode:i,defaultTranslation:{languageCode:i,name:o.name||"",description:o.description||""}}),conditions:this.mapOperationsToInputs(this.conditions,r.conditions),actions:this.mapOperationsToInputs(this.actions,r.actions)}}setFormValues(o,n){const i=(0,s.RMk)(o,n);this.detailForm.patchValue({name:i?.name,description:i?.description,enabled:o.enabled,couponCode:o.couponCode,perCustomerUsageLimit:o.perCustomerUsageLimit,usageLimit:o.usageLimit,startsAt:o.startsAt,endsAt:o.endsAt}),o.conditions.forEach(r=>{this.addOperation("conditions",r)}),o.actions.forEach(r=>this.addOperation("actions",r)),this.customFields.length&&this.setCustomFieldFormValues(this.customFields,this.detailForm.get("customFields"),o,i)}mapOperationsToInputs(o,n){return o.map((i,r)=>({code:i.code,arguments:Object.values(n[r].args).map((m,c)=>({name:i.args[c].name,value:(0,s.CS_)(m)}))}))}addOperation(o,n){const i=this.formArrayOf(o),r="conditions"===o?this.conditions:this.actions;if(-1===i.value.findIndex(c=>c.code===n.code)){const c=n.args.reduce((C,I)=>({...C,[I.name]:(0,s.gfn)(I.value)??this.getDefaultArgValue(o,n,I.name)}),{});i.push(this.formBuilder.control({code:n.code,args:c})),r.push({code:n.code,args:n.args.map(C=>({name:C.name,value:(0,s.gfn)(C.value)}))})}}getDefaultArgValue(o,n,i){const r="conditions"===o?this.allConditions.find(m=>m.code===n.code):this.allActions.find(m=>m.code===n.code);if(r){const m=r.args.find(c=>c.name===i);if(m)return(0,s.NPj)(m)}throw new Error('Could not determine default value for "argName"')}removeOperation(o,n){const i=this.formArrayOf(o),r="conditions"===o?this.conditions:this.actions,m=i.value.findIndex(c=>c.code===n.code);-1!==m&&(i.removeAt(m),r.splice(m,1))}static{this.\u0275fac=function(n){return new(n||h)(t.rXU(t.gRc),t.rXU(s.uSP),t.rXU(l.ok),t.rXU(s.JEu))}}static{this.\u0275cmp=t.VBU({type:h,selectors:[["vdr-promotion-detail"]],features:[t.Vt3],decls:63,vars:73,consts:[["updateButton",""],[1,"flex","clr-align-items-center"],[3,"languageCodeChange","disabled","availableLanguageCodes","currentLanguageCode"],["locationId","promotion-detail"],["class","btn btn-primary",3,"disabled","click",4,"ngIf","ngIfElse"],[1,"form",3,"formGroup"],[4,"vdrIfPermissions"],[4,"ngIf"],[1,"form-grid"],["for","name",3,"label"],["id","name","type","text","formControlName","name",3,"readonly"],["formControlName","description",1,"form-grid-span",3,"readonly","label"],["for","startsAt",3,"label"],["formControlName","startsAt"],["for","endsAt",3,"label"],["formControlName","endsAt"],["for","couponCode",3,"label"],["id","couponCode","type","text","formControlName","couponCode",3,"readonly"],["for","perCustomerUsageLimit",3,"label","tooltip"],["id","perCustomerUsageLimit","type","number","min","1","max","999","formControlName","perCustomerUsageLimit",3,"readonly"],["for","usageLimit",3,"label","tooltip"],["id","usageLimit","type","number","min","1","max","9999999","formControlName","usageLimit",3,"readonly"],["formGroupName","customFields",3,"title",4,"ngIf"],["locationId","promotion-detail",3,"entity$","detailForm"],["formArrayName","conditions",3,"title"],[4,"ngFor","ngForOf"],["formArrayName","actions",3,"title"],[1,"btn","btn-primary",3,"click","disabled"],["class","btn btn-primary",3,"disabled","click",4,"vdrIfPermissions"],["type","checkbox","clrToggle","","name","enabled","formControlName","enabled"],[3,"entity"],["formGroupName","customFields",3,"title"],["entityName","Promotion",3,"customFields","customFieldsFormGroup","readonly"],[3,"remove","position","readonly","operation","operationDefinition","formControlName"],["vdrDropdownTrigger","",1,"btn","btn-outline"],["shape","plus"],["vdrPosition","bottom-left"],["type","button","vdrDropdownItem","","class","item-wrap",3,"click",4,"ngFor","ngForOf"],["type","button","vdrDropdownItem","",1,"item-wrap",3,"click"],[3,"remove","position","operation","readonly","operationDefinition","formControlName"]],template:function(n,i){if(1&n){const r=t.RV6();t.j41(0,"vdr-page-block")(1,"vdr-action-bar")(2,"vdr-ab-left")(3,"div",1)(4,"vdr-language-selector",2),t.nI1(5,"async"),t.nI1(6,"async"),t.nI1(7,"async"),t.bIt("languageCodeChange",function(c){return t.eBV(r),t.Njj(i.setLanguage(c))}),t.k0s()()(),t.j41(8,"vdr-ab-right"),t.nrm(9,"vdr-action-bar-items",3),t.DNE(10,tt,3,4,"button",4),t.nI1(11,"async"),t.DNE(12,nt,1,1,"ng-template",null,0,t.C5r),t.nrm(14,"vdr-action-bar-dropdown-menu",3),t.k0s()()(),t.j41(15,"form",5)(16,"vdr-page-detail-layout")(17,"vdr-page-detail-sidebar"),t.DNE(18,et,6,3,"vdr-card",6)(19,it,2,1,"vdr-card",7),t.nI1(20,"async"),t.k0s(),t.j41(21,"vdr-page-block")(22,"vdr-card")(23,"div",8)(24,"vdr-form-field",9),t.nI1(25,"translate"),t.nrm(26,"input",10),t.nI1(27,"hasPermission"),t.k0s(),t.nrm(28,"vdr-rich-text-editor",11),t.nI1(29,"hasPermission"),t.nI1(30,"translate"),t.j41(31,"vdr-form-field",12),t.nI1(32,"translate"),t.nrm(33,"vdr-datetime-picker",13),t.k0s(),t.j41(34,"vdr-form-field",14),t.nI1(35,"translate"),t.nrm(36,"vdr-datetime-picker",15),t.k0s(),t.j41(37,"vdr-form-field",16),t.nI1(38,"translate"),t.nrm(39,"input",17),t.nI1(40,"hasPermission"),t.k0s(),t.j41(41,"vdr-form-field",18),t.nI1(42,"translate"),t.nI1(43,"translate"),t.nrm(44,"input",19),t.nI1(45,"hasPermission"),t.k0s(),t.j41(46,"vdr-form-field",20),t.nI1(47,"translate"),t.nI1(48,"translate"),t.nrm(49,"input",21),t.nI1(50,"hasPermission"),t.k0s()()(),t.DNE(51,rt,4,8,"vdr-card",22),t.nrm(52,"vdr-custom-detail-component-host",23),t.j41(53,"vdr-card",24),t.nI1(54,"translate"),t.DNE(55,at,3,7,"div",25),t.j41(56,"div"),t.DNE(57,mt,7,4,"vdr-dropdown",6),t.k0s()(),t.j41(58,"vdr-card",26),t.nI1(59,"translate"),t.DNE(60,dt,3,7,"div",25),t.j41(61,"div"),t.DNE(62,ct,7,4,"vdr-dropdown",6),t.k0s()()()()()}if(2&n){const r=t.sdS(13);t.R7$(4),t.Y8G("disabled",t.bMT(5,31,i.isNew$))("availableLanguageCodes",t.bMT(6,33,i.availableLanguages$))("currentLanguageCode",t.bMT(7,35,i.languageCode$)),t.R7$(6),t.Y8G("ngIf",t.bMT(11,37,i.isNew$))("ngIfElse",r),t.R7$(5),t.Y8G("formGroup",i.detailForm),t.R7$(3),t.Y8G("vdrIfPermissions","UpdatePromotion"),t.R7$(),t.Y8G("ngIf",t.bMT(20,39,i.entity$)),t.R7$(5),t.Y8G("label",t.bMT(25,41,"common.name")),t.R7$(2),t.Y8G("readonly",!t.bMT(27,43,"UpdatePromotion")),t.R7$(2),t.Y8G("readonly",!t.bMT(29,45,"UpdatePromotion"))("label",t.bMT(30,47,"common.description")),t.R7$(3),t.Y8G("label",t.bMT(32,49,"marketing.starts-at")),t.R7$(3),t.Y8G("label",t.bMT(35,51,"marketing.ends-at")),t.R7$(3),t.Y8G("label",t.bMT(38,53,"marketing.coupon-code")),t.R7$(2),t.Y8G("readonly",!t.bMT(40,55,"UpdatePromotion")),t.R7$(2),t.Y8G("label",t.bMT(42,57,"marketing.per-customer-limit"))("tooltip",t.bMT(43,59,"marketing.per-customer-limit-tooltip")),t.R7$(3),t.Y8G("readonly",!t.bMT(45,61,"UpdatePromotion")),t.R7$(2),t.Y8G("label",t.bMT(47,63,"marketing.usage-limit"))("tooltip",t.bMT(48,65,"marketing.usage-limit-tooltip")),t.R7$(3),t.Y8G("readonly",!t.bMT(50,67,"UpdatePromotion")),t.R7$(2),t.Y8G("ngIf",i.customFields.length),t.R7$(),t.Y8G("entity$",i.entity$)("detailForm",i.detailForm),t.R7$(),t.Y8G("title",t.bMT(54,69,"marketing.conditions")),t.R7$(2),t.Y8G("ngForOf",i.conditions),t.R7$(2),t.Y8G("vdrIfPermissions","UpdatePromotion"),t.R7$(),t.Y8G("title",t.bMT(59,71,"marketing.actions")),t.R7$(2),t.Y8G("ngForOf",i.actions),t.R7$(2),t.Y8G("vdrIfPermissions","UpdatePromotion")}},dependencies:[f.U4n,f.aZZ,f.Jej,f.eAx,p.Sq,p.bT,l.qT,l.me,l.Q0,l.Zm,l.BC,l.cb,l.VZ,l.zX,l.j4,l.JD,l.$R,l.v8,u.nG,u.wL,u.TX,_.l,Y.h,B.K,S.V,y.t,U.q,x.P,V.q,X.j,J.M,k.p,D.T,H.j,w.W,K.L,A.e,Z.E,Q.c,z.e,W.i,p.Jj,$.D9,q.E],styles:[".item-wrap[_ngcontent-%COMP%]{white-space:normal}"],changeDetection:0})}}var P=a(5626);b.J1`
|
|
9
|
+
mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {
|
|
10
|
+
assignPromotionsToChannel(input: $input) {
|
|
11
|
+
id
|
|
12
|
+
name
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`,b.J1`
|
|
16
|
+
mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {
|
|
17
|
+
removePromotionsFromChannel(input: $input) {
|
|
18
|
+
id
|
|
19
|
+
name
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`;const R=(0,s.AfA)({location:"promotion-list",requiresPermission:s.aXG.DeletePromotion,getItemName:e=>e.name,bulkDelete:(e,o)=>e.promotion.deletePromotions(o).pipe((0,P.T)(n=>n.deletePromotions))}),G=(0,s.oUe)({location:"promotion-list",requiresPermission:s.aXG.UpdatePromotion,getItemName:e=>e.name,bulkAssignToChannel:(e,o,n)=>n.map(i=>e.mutate(s.dbM,{input:{channelId:i,promotionIds:o}}).pipe((0,P.T)(r=>r.assignPromotionsToChannel)))}),L=(0,s.YSJ)({location:"promotion-list",requiresPermission:s.aXG.DeleteCatalog,getItemName:e=>e.name,bulkRemoveFromChannel:(e,o,n)=>e.mutate(s.Bn2,{input:{channelId:n,promotionIds:o}}).pipe((0,P.T)(i=>i.removePromotionsFromChannel))}),N={location:"promotion-list",label:(0,d.x)("common.duplicate"),icon:"copy",onClick:({injector:e,selection:o,hostComponent:n,clearSelection:i})=>{e.get(s.Bg8).fromComponent(s.MPR,{locals:{entities:o,entityName:"Promotion",title:(0,d.x)("marketing.duplicate-promotions"),getEntityName:m=>m.name}}).subscribe(m=>{m&&(i(),n.refresh())})}};var T=a(808),ut=a(7145),gt=a(4195),ft=a(5956),ht=a(7595),vt=a(6637),bt=a(2124),Ct=a(2953);const Pt=()=>["./create"],Tt=e=>["./",e];function It(e,o){1&e&&(t.j41(0,"a",17),t.nrm(1,"clr-icon",18),t.EFF(2),t.nI1(3,"translate"),t.k0s()),2&e&&(t.Y8G("routerLink",t.lJ4(4,Pt)),t.R7$(2),t.SpI(" ",t.bMT(3,2,"marketing.create-new-promotion")," "))}function Ft(e,o){if(1&e&&t.EFF(0),2&e){const n=o.item;t.JRh(n.id)}}function _t(e,o){if(1&e&&(t.EFF(0),t.nI1(1,"localeDate")),2&e){const n=o.item;t.SpI(" ",t.i5U(1,1,n.createdAt,"short")," ")}}function yt(e,o){if(1&e&&(t.EFF(0),t.nI1(1,"localeDate")),2&e){const n=o.item;t.SpI(" ",t.i5U(1,1,n.updatedAt,"short")," ")}}function kt(e,o){if(1&e&&(t.j41(0,"a",19)(1,"span"),t.EFF(2),t.k0s(),t.nrm(3,"clr-icon",20),t.k0s()),2&e){const n=o.item;t.Y8G("routerLink",t.eq3(2,Tt,n.id)),t.R7$(2),t.SpI(" ",n.name,"")}}function Dt(e,o){1&e&&(t.j41(0,"vdr-chip",23),t.EFF(1),t.nI1(2,"translate"),t.k0s()),2&e&&(t.R7$(),t.JRh(t.bMT(2,1,"common.enabled")))}function At(e,o){1&e&&(t.j41(0,"vdr-chip",24),t.EFF(1),t.nI1(2,"translate"),t.k0s()),2&e&&(t.R7$(),t.JRh(t.bMT(2,1,"common.disabled")))}function $t(e,o){if(1&e&&t.DNE(0,Dt,3,3,"vdr-chip",21)(1,At,3,3,"vdr-chip",22),2&e){const n=o.item;t.Y8G("ngIf",n.enabled),t.R7$(),t.Y8G("ngIf",!n.enabled)}}function Rt(e,o){if(1&e&&t.EFF(0),2&e){const n=o.item;t.SpI(" ",n.couponCode," ")}}function Gt(e,o){if(1&e&&(t.EFF(0),t.nI1(1,"localeDate")),2&e){const n=o.item;t.SpI(" ",t.i5U(1,1,n.startsAt,"short")," ")}}function Lt(e,o){if(1&e&&(t.EFF(0),t.nI1(1,"localeDate")),2&e){const n=o.item;t.SpI(" ",t.i5U(1,1,n.endsAt,"short")," ")}}function Nt(e,o){if(1&e&&t.EFF(0),2&e){const n=o.item;t.SpI(" ",n.perCustomerUsageLimit," ")}}function jt(e,o){if(1&e&&t.EFF(0),2&e){const n=o.item;t.SpI(" ",n.usageLimit," ")}}function Et(e,o){if(1&e&&t.nrm(0,"vdr-dt2-custom-field-column",25),2&e){const n=o.$implicit,i=t.XpG();t.Y8G("customField",n)("sorts",i.sorts)}}const Mt=b.J1`
|
|
23
|
+
query GetPromotionList($options: PromotionListOptions) {
|
|
24
|
+
promotions(options: $options) {
|
|
25
|
+
items {
|
|
26
|
+
...Promotion
|
|
27
|
+
}
|
|
28
|
+
totalItems
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
${s.DOi}
|
|
32
|
+
`;class v extends s.B8I{constructor(){super(),this.customFields=this.getCustomFieldConfig("Promotion"),this.filters=this.createFilterCollection().addIdFilter().addDateFilters().addFilters([{name:"startsAt",type:{kind:"dateRange"},label:(0,d.x)("marketing.starts-at"),filterField:"startsAt"},{name:"endsAt",type:{kind:"dateRange"},label:(0,d.x)("marketing.ends-at"),filterField:"endsAt"},{name:"enabled",type:{kind:"boolean"},label:(0,d.x)("common.enabled"),filterField:"enabled"},{name:"name",type:{kind:"text"},label:(0,d.x)("common.name"),filterField:"name"},{name:"couponCode",type:{kind:"text"},label:(0,d.x)("marketing.coupon-code"),filterField:"couponCode"},{name:"desc",type:{kind:"text"},label:(0,d.x)("common.description"),filterField:"description"},{name:"perCustomerUsageLimit",type:{kind:"number"},label:(0,d.x)("marketing.per-customer-limit"),filterField:"perCustomerUsageLimit"},{name:"usageLimit",type:{kind:"number"},label:(0,d.x)("marketing.usage-limit"),filterField:"usageLimit"}]).addCustomFieldFilters(this.customFields).connectToRoute(this.route),this.sorts=this.createSortCollection().defaultSort("createdAt","DESC").addSorts([{name:"createdAt"},{name:"updatedAt"},{name:"startsAt"},{name:"endsAt"},{name:"name"},{name:"couponCode"},{name:"perCustomerUsageLimit"},{name:"usageLimit"}]).addCustomFieldSorts(this.customFields).connectToRoute(this.route),super.configure({document:s.dcS,getItems:o=>o.promotions,setVariables:(o,n)=>this.createQueryOptions(o,n,this.searchTermControl.value),refreshListOnChanges:[this.filters.valueChanges,this.sorts.valueChanges]})}createQueryOptions(o,n,i){const r=this.filters.createFilterInput(),m=this.sorts.createSortInput();let c=s.umn.AND;return i&&(r.couponCode={contains:i},r.name={contains:i},c=s.umn.OR),{options:{skip:o,take:n,filter:r,filterOperator:c,sort:m}}}static{this.\u0275fac=function(n){return new(n||v)}}static{this.\u0275cmp=t.VBU({type:v,selectors:[["vdr-promotion-list"]],features:[t.Vt3],decls:49,vars:71,consts:[[3,"languageCodeChange","availableLanguageCodes","currentLanguageCode"],["locationId","promotion-list"],["class","btn btn-primary",3,"routerLink",4,"vdrIfPermissions"],["id","promotion-list",3,"pageChange","itemsPerPageChange","items","itemsPerPage","totalItems","currentPage","filters"],["locationId","promotion-list",3,"hostComponent","selectionManager"],[3,"searchTermControl","searchTermPlaceholder"],["id","id",3,"heading","hiddenByDefault"],["id","created-at",3,"heading","hiddenByDefault","sort"],["id","updated-at",3,"heading","hiddenByDefault","sort"],["id","name",3,"heading","optional","sort"],["id","enabled",3,"heading"],["id","coupon-code",3,"heading","sort"],["id","starts-at",3,"heading","sort"],["id","ends-at",3,"heading","sort"],["id","per-customer-limit",3,"heading","sort","hiddenByDefault"],["id","usage-limit",3,"heading","sort","hiddenByDefault"],[3,"customField","sorts",4,"ngFor","ngForOf"],[1,"btn","btn-primary",3,"routerLink"],["shape","plus"],[1,"button-ghost",3,"routerLink"],["shape","arrow right"],["colorType","success",4,"ngIf"],["colorType","warning",4,"ngIf"],["colorType","success"],["colorType","warning"],[3,"customField","sorts"]],template:function(n,i){1&n&&(t.j41(0,"vdr-page-block")(1,"vdr-action-bar")(2,"vdr-ab-left")(3,"vdr-language-selector",0),t.nI1(4,"async"),t.nI1(5,"async"),t.bIt("languageCodeChange",function(m){return i.setLanguage(m)}),t.k0s()(),t.j41(6,"vdr-ab-right"),t.nrm(7,"vdr-action-bar-items",1),t.DNE(8,It,4,5,"a",2),t.nrm(9,"vdr-action-bar-dropdown-menu",1),t.k0s()()(),t.j41(10,"vdr-data-table-2",3),t.nI1(11,"async"),t.nI1(12,"async"),t.nI1(13,"async"),t.nI1(14,"async"),t.bIt("pageChange",function(m){return i.setPageNumber(m)})("itemsPerPageChange",function(m){return i.setItemsPerPage(m)}),t.nrm(15,"vdr-bulk-action-menu",4)(16,"vdr-dt2-search",5),t.nI1(17,"translate"),t.j41(18,"vdr-dt2-column",6),t.nI1(19,"translate"),t.DNE(20,Ft,1,1,"ng-template"),t.k0s(),t.j41(21,"vdr-dt2-column",7),t.nI1(22,"translate"),t.DNE(23,_t,2,4,"ng-template"),t.k0s(),t.j41(24,"vdr-dt2-column",8),t.nI1(25,"translate"),t.DNE(26,yt,2,4,"ng-template"),t.k0s(),t.j41(27,"vdr-dt2-column",9),t.nI1(28,"translate"),t.DNE(29,kt,4,4,"ng-template"),t.k0s(),t.j41(30,"vdr-dt2-column",10),t.nI1(31,"translate"),t.DNE(32,$t,2,2,"ng-template"),t.k0s(),t.j41(33,"vdr-dt2-column",11),t.nI1(34,"translate"),t.DNE(35,Rt,1,1,"ng-template"),t.k0s(),t.j41(36,"vdr-dt2-column",12),t.nI1(37,"translate"),t.DNE(38,Gt,2,4,"ng-template"),t.k0s(),t.j41(39,"vdr-dt2-column",13),t.nI1(40,"translate"),t.DNE(41,Lt,2,4,"ng-template"),t.k0s(),t.j41(42,"vdr-dt2-column",14),t.nI1(43,"translate"),t.DNE(44,Nt,1,1,"ng-template"),t.k0s(),t.j41(45,"vdr-dt2-column",15),t.nI1(46,"translate"),t.DNE(47,jt,1,1,"ng-template"),t.k0s(),t.DNE(48,Et,1,2,"vdr-dt2-custom-field-column",16),t.k0s()),2&n&&(t.R7$(3),t.Y8G("availableLanguageCodes",t.bMT(4,37,i.availableLanguages$))("currentLanguageCode",t.bMT(5,39,i.contentLanguage$)),t.R7$(5),t.Y8G("vdrIfPermissions","CreatePromotion"),t.R7$(2),t.Y8G("items",t.bMT(11,41,i.items$))("itemsPerPage",t.bMT(12,43,i.itemsPerPage$))("totalItems",t.bMT(13,45,i.totalItems$))("currentPage",t.bMT(14,47,i.currentPage$))("filters",i.filters),t.R7$(5),t.Y8G("hostComponent",i)("selectionManager",i.selectionManager),t.R7$(),t.Y8G("searchTermControl",i.searchTermControl)("searchTermPlaceholder",t.bMT(17,49,"marketing.search-by-name-or-coupon-code")),t.R7$(2),t.Y8G("heading",t.bMT(19,51,"common.id"))("hiddenByDefault",!0),t.R7$(3),t.Y8G("heading",t.bMT(22,53,"common.created-at"))("hiddenByDefault",!0)("sort",i.sorts.get("createdAt")),t.R7$(3),t.Y8G("heading",t.bMT(25,55,"common.updated-at"))("hiddenByDefault",!0)("sort",i.sorts.get("updatedAt")),t.R7$(3),t.Y8G("heading",t.bMT(28,57,"common.name"))("optional",!1)("sort",i.sorts.get("name")),t.R7$(3),t.Y8G("heading",t.bMT(31,59,"common.enabled")),t.R7$(3),t.Y8G("heading",t.bMT(34,61,"marketing.coupon-code"))("sort",i.sorts.get("couponCode")),t.R7$(3),t.Y8G("heading",t.bMT(37,63,"marketing.starts-at"))("sort",i.sorts.get("startsAt")),t.R7$(3),t.Y8G("heading",t.bMT(40,65,"marketing.ends-at"))("sort",i.sorts.get("endsAt")),t.R7$(3),t.Y8G("heading",t.bMT(43,67,"marketing.per-customer-limit"))("sort",i.sorts.get("perCustomerUsageLimit"))("hiddenByDefault",!0),t.R7$(3),t.Y8G("heading",t.bMT(46,69,"marketing.usage-limit"))("sort",i.sorts.get("usageLimit"))("hiddenByDefault",!0),t.R7$(3),t.Y8G("ngForOf",i.customFields))},dependencies:[f.U4n,p.Sq,p.bT,T.Wk,u.nG,u.wL,u.TX,_.l,ut.w,y.t,k.p,D.T,gt.T,ft.I,ht.Y,vt.E,bt.T,A.e,p.Jj,$.D9,Ct.P],styles:[".search-form[_ngcontent-%COMP%]{padding:0}.search-input[_ngcontent-%COMP%]{margin:6px 8px 0 0;min-width:200px}"],changeDetection:0})}}const j=e=>[{path:"promotions",component:s.H1b,data:{locationId:"promotion-list",breadcrumb:(0,d.x)("breadcrumb.promotions")},children:e.getPageTabRoutes("promotion-list")},{path:"promotions/:id",component:s.H1b,data:{locationId:"promotion-detail",breadcrumb:{label:(0,d.x)("breadcrumb.promotions"),link:["../","promotions"]}},children:e.getPageTabRoutes("promotion-detail")}];function Ot(e,o){return(0,s.bv4)({entity:e.entity,id:o.id,breadcrumbKey:"breadcrumb.promotions",getName:n=>n.name,route:"promotions"})}class g{static{this.hasRegisteredTabsAndBulkActions=!1}constructor(o,n){g.hasRegisteredTabsAndBulkActions||(o.registerBulkAction(G),o.registerBulkAction(N),o.registerBulkAction(L),o.registerBulkAction(R),n.registerPageTab({priority:0,location:"promotion-list",tab:(0,d.x)("breadcrumb.promotions"),route:"",component:v}),n.registerPageTab({priority:0,location:"promotion-detail",tab:(0,d.x)("marketing.promotion"),route:"",component:(0,s.HL6)({component:h,query:s.CuV,entityKey:"promotion",getBreadcrumbs:i=>[{label:i?i.name:(0,d.x)("marketing.create-new-promotion"),link:[i?.id]}]})}),g.hasRegisteredTabsAndBulkActions=!0)}static{this.\u0275fac=function(n){return new(n||g)(t.KVO(s.HCh),t.KVO(s.bPm))}}static{this.\u0275mod=t.$C({type:g})}static{this.\u0275inj=t.G2t({providers:[{provide:T.bw,useFactory:o=>j(o),multi:!0,deps:[s.bPm]}],imports:[s.GgS,T.iI.forChild([]),s.GgS,s.GgS]})}}}}]);
|
|
33
|
+
//# sourceMappingURL=123.1d21e707f57ee3b4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"123.1d21e707f57ee3b4.js","mappings":"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","names":["i0","_r2","ctx_r2","create","saveButtonEnabled","_r4","save","PromotionDetailComponent_ng_template_12_button_0_Template","entity_r5","customFields","detailForm","get","$event","_r6","removeCondition","i_r8","condition_r7","getConditionDefinition","condition_r10","_r9","$implicit","addCondition","description","PromotionDetailComponent_vdr_dropdown_57_button_6_Template","getAvailableConditions","_r11","removeAction","i_r13","action_r12","getActionDefinition","action_r15","_r14","addAction","PromotionDetailComponent_vdr_dropdown_62_button_6_Template","getAvailableActions","GET_PROMOTION_DETAIL","gql","PROMOTION_FRAGMENT","PromotionDetailComponent","TypedBaseDetailComponent","constructor","changeDetector","dataService","formBuilder","notificationService","super","this","getCustomFieldConfig","group","name","Validators","required","enabled","couponCode","perCustomerUsageLimit","usageLimit","startsAt","endsAt","conditions","array","actions","getCustomFieldsDefaults","allConditions","allActions","ngOnInit","init","promotion","getPromotionActionsAndConditions","single$","subscribe","data","promotionActions","promotionConditions","markForCheck","ngOnDestroy","destroy","filter","o","find","c","code","condition","a","action","dirty","valid","length","value","addOperation","markAsDirty","removeOperation","formArrayOf","key","input","getUpdatedPromotion","id","createdAt","updatedAt","translations","languageCode","createPromotion","__typename","success","_","entity","markAsPristine","router","navigate","relativeTo","route","error","message","err","combineLatest","entity$","languageCode$","pipe","take","mergeMap","paymentMethod","updatePromotion","formGroup","formValue","createUpdatedTranslatable","translatable","updatedFields","customFieldConfig","defaultTranslation","mapOperationsToInputs","setFormValues","currentTranslation","findTranslation","patchValue","forEach","setCustomFieldFormValues","operations","formValueOperations","map","i","arguments","Object","values","args","j","encodeConfigArgValue","operation","operationsArray","collection","findIndex","argsHash","reduce","output","arg","getConfigArgValue","getDefaultArgValue","push","control","argName","def","argDef","getDefaultConfigArgValue","Error","index","removeAt","splice","i1","i2","selectors","features","decls","vars","consts","template","rf","ctx","_r1","setLanguage","PromotionDetailComponent_button_10_Template","PromotionDetailComponent_ng_template_12_Template","PromotionDetailComponent_vdr_card_18_Template","PromotionDetailComponent_vdr_card_19_Template","PromotionDetailComponent_vdr_card_51_Template","PromotionDetailComponent_div_55_Template","PromotionDetailComponent_vdr_dropdown_57_Template","PromotionDetailComponent_div_60_Template","PromotionDetailComponent_vdr_dropdown_62_Template","isNew$","availableLanguages$","updateButton_r16","deletePromotionsBulkAction","createBulkDeleteAction","location","requiresPermission","Permission","DeletePromotion","getItemName","item","bulkDelete","ids","deletePromotions","res","assignPromotionsToChannelBulkAction","createBulkAssignToChannelAction","UpdatePromotion","bulkAssignToChannel","promotionIds","channelIds","channelId","mutate","AssignPromotionsToChannelDocument","assignPromotionsToChannel","removePromotionsFromChannelBulkAction","createBulkRemoveFromChannelAction","DeleteCatalog","bulkRemoveFromChannel","RemovePromotionsFromChannelDocument","removePromotionsFromChannel","duplicatePromotionsBulkAction","label","icon","onClick","injector","selection","hostComponent","clearSelection","ModalService","fromComponent","DuplicateEntityDialogComponent","locals","entities","entityName","title","getEntityName","result","refresh","_c0","promotion_r1","promotion_r2","promotion_r3","_c1","promotion_r4","PromotionListComponent_ng_template_32_vdr_chip_0_Template","PromotionListComponent_ng_template_32_vdr_chip_1_Template","promotion_r5","promotion_r6","promotion_r7","promotion_r8","promotion_r9","promotion_r10","customField_r11","ctx_r11","sorts","GET_PROMOTION_LIST","PromotionListComponent","TypedBaseListComponent","filters","createFilterCollection","addIdFilter","addDateFilters","addFilters","type","kind","filterField","addCustomFieldFilters","connectToRoute","createSortCollection","defaultSort","addSorts","addCustomFieldSorts","configure","document","GetPromotionListDocument","getItems","promotions","setVariables","skip","createQueryOptions","searchTermControl","refreshListOnChanges","valueChanges","searchTerm","createFilterInput","sort","createSortInput","filterOperator","LogicalOperator","AND","contains","OR","options","PromotionListComponent_a_8_Template","setPageNumber","setItemsPerPage","PromotionListComponent_ng_template_20_Template","PromotionListComponent_ng_template_23_Template","PromotionListComponent_ng_template_26_Template","PromotionListComponent_ng_template_29_Template","PromotionListComponent_ng_template_32_Template","PromotionListComponent_ng_template_35_Template","PromotionListComponent_ng_template_38_Template","PromotionListComponent_ng_template_41_Template","PromotionListComponent_ng_template_44_Template","PromotionListComponent_ng_template_47_Template","PromotionListComponent_vdr_dt2_custom_field_column_48_Template","contentLanguage$","items$","itemsPerPage$","totalItems$","currentPage$","selectionManager","createRoutes","pageService","path","component","PageComponent","locationId","breadcrumb","children","getPageTabRoutes","link","promotionBreadcrumb","params","detailBreadcrumb","breadcrumbKey","getName","MarketingModule","hasRegisteredTabsAndBulkActions","bulkActionRegistryService","registerBulkAction","registerPageTab","priority","tab","detailComponentWithResolver","query","GetPromotionDetailDocument","entityKey","getBreadcrumbs","provide","ROUTES","useFactory","multi","deps","PageService","imports","SharedModule","RouterModule","forChild"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.html","./src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","./src/lib/marketing/src/components/promotion-list/promotion-list-bulk-actions.ts","./src/lib/marketing/src/components/promotion-list/promotion-list.component.html","./src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","./src/lib/marketing/src/marketing.routes.ts","./src/lib/marketing/src/marketing.module.ts"],"sourcesContent":["<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <div class=\"flex clr-align-items-center\">\n <vdr-language-selector\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n ></vdr-language-selector>\n </div>\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-detail\" />\n <button\n class=\"btn btn-primary\"\n *ngIf=\"isNew$ | async; else updateButton\"\n (click)=\"create()\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.create' | translate }}\n </button>\n <ng-template #updateButton>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n *vdrIfPermissions=\"'UpdatePromotion'\"\n [disabled]=\"!saveButtonEnabled()\"\n >\n {{ 'common.update' | translate }}\n </button>\n </ng-template>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-detail\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<form class=\"form\" [formGroup]=\"detailForm\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar>\n <vdr-card *vdrIfPermissions=\"'UpdatePromotion'\">\n <clr-toggle-wrapper>\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\n <label>{{ 'common.enabled' | translate }}</label>\n </clr-toggle-wrapper>\n </vdr-card>\n <vdr-card *ngIf=\"entity$ | async as entity\">\n <vdr-page-entity-info [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n <vdr-page-block>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"name\"\n />\n </vdr-form-field>\n <vdr-rich-text-editor\n class=\"form-grid-span\"\n formControlName=\"description\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [label]=\"'common.description' | translate\"\n ></vdr-rich-text-editor>\n <vdr-form-field [label]=\"'marketing.starts-at' | translate\" for=\"startsAt\">\n <vdr-datetime-picker formControlName=\"startsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.ends-at' | translate\" for=\"endsAt\">\n <vdr-datetime-picker formControlName=\"endsAt\"></vdr-datetime-picker>\n </vdr-form-field>\n <vdr-form-field [label]=\"'marketing.coupon-code' | translate\" for=\"couponCode\">\n <input\n id=\"couponCode\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"text\"\n formControlName=\"couponCode\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.per-customer-limit' | translate\"\n [tooltip]=\"'marketing.per-customer-limit-tooltip' | translate\"\n for=\"perCustomerUsageLimit\"\n >\n <input\n id=\"perCustomerUsageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"999\"\n formControlName=\"perCustomerUsageLimit\"\n />\n </vdr-form-field>\n <vdr-form-field\n [label]=\"'marketing.usage-limit' | translate\"\n [tooltip]=\"'marketing.usage-limit-tooltip' | translate\"\n for=\"usageLimit\"\n >\n <input\n id=\"usageLimit\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n type=\"number\"\n min=\"1\"\n max=\"9999999\"\n formControlName=\"usageLimit\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card\n [title]=\"'common.custom-fields' | translate\"\n formGroupName=\"customFields\"\n *ngIf=\"customFields.length\"\n >\n <vdr-tabbed-custom-fields\n entityName=\"Promotion\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n ></vdr-tabbed-custom-fields>\n </vdr-card>\n\n <vdr-custom-detail-component-host\n locationId=\"promotion-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n ></vdr-custom-detail-component-host>\n\n <vdr-card [title]=\"'marketing.conditions' | translate\" formArrayName=\"conditions\">\n <div *ngFor=\"let condition of conditions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeCondition($event)\"\n [position]=\"i\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operation]=\"condition\"\n [operationDefinition]=\"getConditionDefinition(condition)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-condition' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let condition of getAvailableConditions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addCondition(condition)\"\n >\n {{ condition.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'marketing.actions' | translate\" formArrayName=\"actions\">\n <div *ngFor=\"let action of actions; index as i\">\n <vdr-configurable-input\n (remove)=\"removeAction($event)\"\n [position]=\"i\"\n [operation]=\"action\"\n [readonly]=\"!('UpdatePromotion' | hasPermission)\"\n [operationDefinition]=\"getActionDefinition(action)\"\n [formControlName]=\"i\"\n ></vdr-configurable-input>\n </div>\n <div>\n <vdr-dropdown *vdrIfPermissions=\"'UpdatePromotion'\">\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.add-action' | translate }}\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\n <button\n *ngFor=\"let action of getAvailableActions()\"\n type=\"button\"\n vdrDropdownItem\n class=\"item-wrap\"\n (click)=\"addAction(action)\"\n >\n {{ action.description }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n ConfigurableOperationInput,\n CreatePromotionInput,\n createUpdatedTranslatable,\n DataService,\n encodeConfigArgValue,\n findTranslation,\n getConfigArgValue,\n getCustomFieldsDefaults,\n getDefaultConfigArgValue,\n GetPromotionDetailDocument,\n LanguageCode,\n NotificationService,\n PROMOTION_FRAGMENT,\n PromotionFragment,\n TypedBaseDetailComponent,\n UpdatePromotionInput,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { combineLatest } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport const GET_PROMOTION_DETAIL = gql`\n query GetPromotionDetail($id: ID!) {\n promotion(id: $id) {\n ...Promotion\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-detail',\n templateUrl: './promotion-detail.component.html',\n styleUrls: ['./promotion-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PromotionDetailComponent\n extends TypedBaseDetailComponent<typeof GetPromotionDetailDocument, 'promotion'>\n implements OnInit, OnDestroy\n{\n customFields = this.getCustomFieldConfig('Promotion');\n detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n description: '',\n enabled: true,\n couponCode: null as string | null,\n perCustomerUsageLimit: null as number | null,\n usageLimit: null as number | null,\n startsAt: null,\n endsAt: null,\n conditions: this.formBuilder.array([]),\n actions: this.formBuilder.array([]),\n customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),\n });\n conditions: ConfigurableOperation[] = [];\n actions: ConfigurableOperation[] = [];\n\n private allConditions: ConfigurableOperationDefinition[] = [];\n private allActions: ConfigurableOperationDefinition[] = [];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private formBuilder: FormBuilder,\n private notificationService: NotificationService,\n ) {\n super();\n this.customFields = this.getCustomFieldConfig('Promotion');\n }\n\n ngOnInit() {\n this.init();\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\n this.allActions = data.promotionActions;\n this.allConditions = data.promotionConditions;\n this.changeDetector.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n getAvailableConditions(): ConfigurableOperationDefinition[] {\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\n }\n\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allConditions.find(c => c.code === condition.code);\n }\n\n getAvailableActions(): ConfigurableOperationDefinition[] {\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\n }\n\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allActions.find(c => c.code === action.code);\n }\n\n saveButtonEnabled(): boolean {\n return !!(\n this.detailForm.dirty &&\n this.detailForm.valid &&\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\n this.actions.length !== 0\n );\n }\n\n addCondition(condition: ConfigurableOperation) {\n this.addOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n addAction(action: ConfigurableOperation) {\n this.addOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n removeCondition(condition: ConfigurableOperation) {\n this.removeOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n removeAction(action: ConfigurableOperation) {\n this.removeOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n formArrayOf(key: 'conditions' | 'actions'): UntypedFormArray {\n return this.detailForm.get(key) as UntypedFormArray;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n\n const input = this.getUpdatedPromotion(\n {\n id: '',\n createdAt: '',\n updatedAt: '',\n startsAt: '',\n endsAt: '',\n name: '',\n description: '',\n couponCode: null,\n perCustomerUsageLimit: null,\n usageLimit: null,\n enabled: false,\n conditions: [],\n actions: [],\n translations: [],\n },\n this.detailForm,\n this.languageCode,\n ) as CreatePromotionInput;\n this.dataService.promotion.createPromotion(input).subscribe(\n ({ createPromotion }) => {\n switch (createPromotion.__typename) {\n case 'Promotion':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\n break;\n case 'MissingConditionsError':\n this.notificationService.error(createPromotion.message);\n break;\n }\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n combineLatest(this.entity$, this.languageCode$)\n .pipe(\n take(1),\n mergeMap(([paymentMethod, languageCode]) => {\n const input = this.getUpdatedPromotion(\n paymentMethod,\n this.detailForm,\n languageCode,\n ) as UpdatePromotionInput;\n return this.dataService.promotion.updatePromotion(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n /**\n * Given a PaymentMethod and the value of the detailForm, this method creates an updated copy of it which\n * can then be persisted to the API.\n */\n private getUpdatedPromotion(\n promotion: PromotionFragment,\n formGroup: UntypedFormGroup,\n languageCode: LanguageCode,\n ): UpdatePromotionInput | CreatePromotionInput {\n const formValue = formGroup.value;\n const input = createUpdatedTranslatable({\n translatable: promotion,\n updatedFields: formValue,\n customFieldConfig: this.customFields,\n languageCode,\n defaultTranslation: {\n languageCode,\n name: promotion.name || '',\n description: promotion.description || '',\n },\n });\n\n return {\n ...input,\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\n };\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: PromotionFragment, languageCode: LanguageCode): void {\n const currentTranslation = findTranslation(entity, languageCode);\n this.detailForm.patchValue({\n name: currentTranslation?.name,\n description: currentTranslation?.description,\n enabled: entity.enabled,\n couponCode: entity.couponCode,\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\n usageLimit: entity.usageLimit,\n startsAt: entity.startsAt,\n endsAt: entity.endsAt,\n });\n entity.conditions.forEach(o => {\n this.addOperation('conditions', o);\n });\n entity.actions.forEach(o => this.addOperation('actions', o));\n if (this.customFields.length) {\n this.setCustomFieldFormValues(\n this.customFields,\n this.detailForm.get('customFields'),\n entity,\n currentTranslation,\n );\n }\n }\n\n /**\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\n */\n private mapOperationsToInputs(\n operations: ConfigurableOperation[],\n formValueOperations: any,\n ): ConfigurableOperationInput[] {\n return operations.map((o, i) => ({\n code: o.code,\n arguments: Object.values<any>(formValueOperations[i].args).map((value, j) => ({\n name: o.args[j].name,\n value: encodeConfigArgValue(value),\n })),\n }));\n }\n\n /**\n * Adds a new condition or action to the promotion.\n */\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index === -1) {\n const argsHash = operation.args.reduce(\n (output, arg) => ({\n ...output,\n [arg.name]:\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\n }),\n {},\n );\n operationsArray.push(\n this.formBuilder.control({\n code: operation.code,\n args: argsHash,\n }),\n );\n collection.push({\n code: operation.code,\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\n });\n }\n }\n\n private getDefaultArgValue(\n key: 'conditions' | 'actions',\n operation: ConfigurableOperation,\n argName: string,\n ) {\n const def =\n key === 'conditions'\n ? this.allConditions.find(c => c.code === operation.code)\n : this.allActions.find(a => a.code === operation.code);\n if (def) {\n const argDef = def.args.find(a => a.name === argName);\n if (argDef) {\n return getDefaultConfigArgValue(argDef);\n }\n }\n throw new Error(`Could not determine default value for \"argName\"`);\n }\n\n /**\n * Removes a condition or action from the promotion.\n */\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index !== -1) {\n operationsArray.removeAt(index);\n collection.splice(index, 1);\n }\n }\n}\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n AssignPromotionsToChannelDocument,\n BulkAction,\n createBulkAssignToChannelAction,\n createBulkDeleteAction,\n createBulkRemoveFromChannelAction,\n DuplicateEntityDialogComponent,\n GetPromotionListQuery,\n ItemOf,\n ModalService,\n Permission,\n RemovePromotionsFromChannelDocument,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { map } from 'rxjs/operators';\nimport { PromotionListComponent } from './promotion-list.component';\n\nconst ASSIGN_PROMOTIONS_TO_CHANNEL = gql`\n mutation AssignPromotionsToChannel($input: AssignPromotionsToChannelInput!) {\n assignPromotionsToChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nconst REMOVE_PROMOTIONS_FROM_CHANNEL = gql`\n mutation RemovePromotionsFromChannel($input: RemovePromotionsFromChannelInput!) {\n removePromotionsFromChannel(input: $input) {\n id\n name\n }\n }\n`;\n\nexport const deletePromotionsBulkAction = createBulkDeleteAction<ItemOf<GetPromotionListQuery, 'promotions'>>(\n {\n location: 'promotion-list',\n requiresPermission: Permission.DeletePromotion,\n getItemName: item => item.name,\n bulkDelete: (dataService, ids) =>\n dataService.promotion.deletePromotions(ids).pipe(map(res => res.deletePromotions)),\n },\n);\n\nexport const assignPromotionsToChannelBulkAction = createBulkAssignToChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.UpdatePromotion,\n getItemName: item => item.name,\n bulkAssignToChannel: (dataService, promotionIds, channelIds) => {\n return channelIds.map(channelId =>\n dataService\n .mutate(AssignPromotionsToChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.assignPromotionsToChannel)),\n );\n },\n});\n\nexport const removePromotionsFromChannelBulkAction = createBulkRemoveFromChannelAction<\n ItemOf<GetPromotionListQuery, 'promotions'>\n>({\n location: 'promotion-list',\n requiresPermission: Permission.DeleteCatalog,\n getItemName: item => item.name,\n bulkRemoveFromChannel: (dataService, promotionIds, channelId) =>\n dataService\n .mutate(RemovePromotionsFromChannelDocument, {\n input: {\n channelId,\n promotionIds,\n },\n })\n .pipe(map(res => res.removePromotionsFromChannel)),\n});\n\nexport const duplicatePromotionsBulkAction: BulkAction<\n ItemOf<GetPromotionListQuery, 'promotions'>,\n PromotionListComponent\n> = {\n location: 'promotion-list',\n label: _('common.duplicate'),\n icon: 'copy',\n onClick: ({ injector, selection, hostComponent, clearSelection }) => {\n const modalService = injector.get(ModalService);\n modalService\n .fromComponent(DuplicateEntityDialogComponent<ItemOf<GetPromotionListQuery, 'promotions'>>, {\n locals: {\n entities: selection,\n entityName: 'Promotion',\n title: _('marketing.duplicate-promotions'),\n getEntityName: entity => entity.name,\n },\n })\n .subscribe(result => {\n if (result) {\n clearSelection();\n hostComponent.refresh();\n }\n });\n },\n};\n","<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left>\n <vdr-language-selector\n [availableLanguageCodes]=\"availableLanguages$ | async\"\n [currentLanguageCode]=\"contentLanguage$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n />\n </vdr-ab-left>\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"promotion-list\" />\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreatePromotion'\">\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'marketing.create-new-promotion' | translate }}\n </a>\n <vdr-action-bar-dropdown-menu locationId=\"promotion-list\" />\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n\n<vdr-data-table-2\n id=\"promotion-list\"\n [items]=\"items$ | async\"\n [itemsPerPage]=\"itemsPerPage$ | async\"\n [totalItems]=\"totalItems$ | async\"\n [currentPage]=\"currentPage$ | async\"\n [filters]=\"filters\"\n (pageChange)=\"setPageNumber($event)\"\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\n>\n <vdr-bulk-action-menu\n locationId=\"promotion-list\"\n [hostComponent]=\"this\"\n [selectionManager]=\"selectionManager\"\n />\n <vdr-dt2-search\n [searchTermControl]=\"searchTermControl\"\n [searchTermPlaceholder]=\"'marketing.search-by-name-or-coupon-code' | translate\"\n />\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\n <ng-template let-promotion=\"item\">{{ promotion.id }}</ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.created-at' | translate\"\n id=\"created-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('createdAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.createdAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.updated-at' | translate\"\n id=\"updated-at\"\n [hiddenByDefault]=\"true\"\n [sort]=\"sorts.get('updatedAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.updatedAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'common.name' | translate\"\n id=\"name\"\n [optional]=\"false\"\n [sort]=\"sorts.get('name')\"\n >\n <ng-template let-promotion=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['./', promotion.id]\"\n ><span> {{ promotion.name }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\n <ng-template let-promotion=\"item\">\n <vdr-chip *ngIf=\"promotion.enabled\" colorType=\"success\">{{\n 'common.enabled' | translate\n }}</vdr-chip>\n <vdr-chip *ngIf=\"!promotion.enabled\" colorType=\"warning\">{{\n 'common.disabled' | translate\n }}</vdr-chip>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.coupon-code' | translate\"\n id=\"coupon-code\"\n [sort]=\"sorts.get('couponCode')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.couponCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.starts-at' | translate\"\n id=\"starts-at\"\n [sort]=\"sorts.get('startsAt')\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.startsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'marketing.ends-at' | translate\" id=\"ends-at\" [sort]=\"sorts.get('endsAt')\">\n <ng-template let-promotion=\"item\">\n {{ promotion.endsAt | localeDate : 'short' }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.per-customer-limit' | translate\"\n id=\"per-customer-limit\"\n [sort]=\"sorts.get('perCustomerUsageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.perCustomerUsageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column\n [heading]=\"'marketing.usage-limit' | translate\"\n id=\"usage-limit\"\n [sort]=\"sorts.get('usageLimit')\"\n [hiddenByDefault]=\"true\"\n >\n <ng-template let-promotion=\"item\">\n {{ promotion.usageLimit }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-custom-field-column\n *ngFor=\"let customField of customFields\"\n [customField]=\"customField\"\n [sorts]=\"sorts\"\n />\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n GetPromotionListDocument,\n LogicalOperator,\n PROMOTION_FRAGMENT,\n PromotionListOptions,\n PromotionSortParameter,\n TypedBaseListComponent,\n} from '@deenruv/admin-ui/core';\nimport { gql } from 'apollo-angular';\n\nexport const GET_PROMOTION_LIST = gql`\n query GetPromotionList($options: PromotionListOptions) {\n promotions(options: $options) {\n items {\n ...Promotion\n }\n totalItems\n }\n }\n ${PROMOTION_FRAGMENT}\n`;\n\n@Component({\n selector: 'vdr-promotion-list',\n templateUrl: './promotion-list.component.html',\n styleUrls: ['./promotion-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PromotionListComponent\n extends TypedBaseListComponent<typeof GetPromotionListDocument, 'promotions'>\n implements OnInit\n{\n readonly customFields = this.getCustomFieldConfig('Promotion');\n readonly filters = this.createFilterCollection()\n .addIdFilter()\n .addDateFilters()\n .addFilters([\n {\n name: 'startsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.starts-at'),\n filterField: 'startsAt',\n },\n {\n name: 'endsAt',\n type: { kind: 'dateRange' },\n label: _('marketing.ends-at'),\n filterField: 'endsAt',\n },\n {\n name: 'enabled',\n type: { kind: 'boolean' },\n label: _('common.enabled'),\n filterField: 'enabled',\n },\n {\n name: 'name',\n type: { kind: 'text' },\n label: _('common.name'),\n filterField: 'name',\n },\n {\n name: 'couponCode',\n type: { kind: 'text' },\n label: _('marketing.coupon-code'),\n filterField: 'couponCode',\n },\n {\n name: 'desc',\n type: { kind: 'text' },\n label: _('common.description'),\n filterField: 'description',\n },\n {\n name: 'perCustomerUsageLimit',\n type: { kind: 'number' },\n label: _('marketing.per-customer-limit'),\n filterField: 'perCustomerUsageLimit',\n },\n {\n name: 'usageLimit',\n type: { kind: 'number' },\n label: _('marketing.usage-limit'),\n filterField: 'usageLimit',\n },\n ])\n .addCustomFieldFilters(this.customFields)\n .connectToRoute(this.route);\n\n readonly sorts = this.createSortCollection()\n .defaultSort('createdAt', 'DESC')\n .addSorts([\n { name: 'createdAt' },\n { name: 'updatedAt' },\n { name: 'startsAt' },\n { name: 'endsAt' },\n { name: 'name' },\n { name: 'couponCode' },\n { name: 'perCustomerUsageLimit' },\n { name: 'usageLimit' },\n ])\n .addCustomFieldSorts(this.customFields)\n .connectToRoute(this.route);\n\n constructor() {\n super();\n super.configure({\n document: GetPromotionListDocument,\n getItems: data => data.promotions,\n setVariables: (skip, take) => this.createQueryOptions(skip, take, this.searchTermControl.value),\n refreshListOnChanges: [this.filters.valueChanges, this.sorts.valueChanges],\n });\n }\n\n private createQueryOptions(\n skip: number,\n take: number,\n searchTerm: string | null,\n ): { options: PromotionListOptions } {\n const filter = this.filters.createFilterInput();\n const sort = this.sorts.createSortInput();\n let filterOperator = LogicalOperator.AND;\n if (searchTerm) {\n filter.couponCode = { contains: searchTerm };\n filter.name = { contains: searchTerm };\n filterOperator = LogicalOperator.OR;\n }\n\n return {\n options: {\n skip,\n take,\n filter,\n filterOperator,\n sort,\n },\n };\n }\n}\n","import { Route } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { detailBreadcrumb, PageComponent, PageService, PromotionFragment } from '@deenruv/admin-ui/core';\n\nexport const createRoutes = (pageService: PageService): Route[] => [\n {\n path: 'promotions',\n component: PageComponent,\n data: {\n locationId: 'promotion-list',\n breadcrumb: _('breadcrumb.promotions'),\n },\n children: pageService.getPageTabRoutes('promotion-list'),\n },\n {\n path: 'promotions/:id',\n component: PageComponent,\n data: {\n locationId: 'promotion-detail',\n breadcrumb: { label: _('breadcrumb.promotions'), link: ['../', 'promotions'] },\n },\n children: pageService.getPageTabRoutes('promotion-detail'),\n },\n];\n\nexport function promotionBreadcrumb(data: any, params: any) {\n return detailBreadcrumb<PromotionFragment>({\n entity: data.entity,\n id: params.id,\n breadcrumbKey: 'breadcrumb.promotions',\n getName: promotion => promotion.name,\n route: 'promotions',\n });\n}\n","import { AsyncPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BulkActionRegistryService,\n detailComponentWithResolver,\n GetPromotionDetailDocument,\n PageService,\n SharedModule,\n} from '@deenruv/admin-ui/core';\n\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\nimport {\n assignPromotionsToChannelBulkAction,\n deletePromotionsBulkAction,\n duplicatePromotionsBulkAction,\n removePromotionsFromChannelBulkAction,\n} from './components/promotion-list/promotion-list-bulk-actions';\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\nimport { createRoutes } from './marketing.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild([]), SharedModule, AsyncPipe, SharedModule],\n providers: [\n {\n provide: ROUTES,\n useFactory: (pageService: PageService) => createRoutes(pageService),\n multi: true,\n deps: [PageService],\n },\n ],\n declarations: [PromotionListComponent, PromotionDetailComponent],\n})\nexport class MarketingModule {\n private static hasRegisteredTabsAndBulkActions = false;\n\n constructor(bulkActionRegistryService: BulkActionRegistryService, pageService: PageService) {\n if (MarketingModule.hasRegisteredTabsAndBulkActions) {\n return;\n }\n bulkActionRegistryService.registerBulkAction(assignPromotionsToChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(duplicatePromotionsBulkAction);\n bulkActionRegistryService.registerBulkAction(removePromotionsFromChannelBulkAction);\n bulkActionRegistryService.registerBulkAction(deletePromotionsBulkAction);\n\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-list',\n tab: _('breadcrumb.promotions'),\n route: '',\n component: PromotionListComponent,\n });\n pageService.registerPageTab({\n priority: 0,\n location: 'promotion-detail',\n tab: _('marketing.promotion'),\n route: '',\n component: detailComponentWithResolver({\n component: PromotionDetailComponent,\n query: GetPromotionDetailDocument,\n entityKey: 'promotion',\n getBreadcrumbs: entity => [\n {\n label: entity ? entity.name : _('marketing.create-new-promotion'),\n link: [entity?.id],\n },\n ],\n }),\n });\n MarketingModule.hasRegisteredTabsAndBulkActions = true;\n }\n}\n"],"x_google_ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkdeenruv_admin=self.webpackChunkdeenruv_admin||[]).push([[132],{9132:(k,C,r)=>{r.r(C),r.d(C,{LoginComponent:()=>s,LoginGuard:()=>c,LoginModule:()=>d,loginRoutes:()=>w});var g=r(9214),n=r(1410),h=r(808),u=r(9653),p=r(4677),M=r(4806),l=r(1217),f=r(1239),O=r(5889),P=r(654);const _=i=>({brand:i});function b(i,o){if(1&i&&(n.j41(0,"p",20),n.EFF(1," Photo by "),n.j41(2,"a",21),n.EFF(3),n.k0s(),n.EFF(4," on "),n.j41(5,"a",21),n.EFF(6,"Unsplash"),n.k0s()()),2&i){const e=n.XpG();n.R7$(2),n.Y8G("href",e.imageCreatorUrl,n.B4B),n.R7$(),n.JRh(e.imageCreator),n.R7$(2),n.Y8G("href",e.imageUnsplashUrl,n.B4B)}}function v(i,o){if(1&i&&(n.j41(0,"p",22),n.EFF(1),n.k0s()),2&i){const e=n.XpG();n.R7$(),n.JRh(e.imageLocation)}}function x(i,o){if(1&i&&n.nrm(0,"img",23),2&i){const e=n.XpG();n.Y8G("src",e.imageUrl,n.B4B)("alt",e.imageUrl)}}function y(i,o){1&i&&n.nrm(0,"img",24)}class s{constructor(o,e,t,m){this.authService=o,this.router=e,this.httpClient=t,this.localizationService=m,this.username="",this.password="",this.rememberMe=!1,this.version=g.cBU,this.brand=(0,g.WEc)().brand,this.hideDeenruvBranding=(0,g.WEc)().hideDeenruvBranding,this.customImageUrl=(0,g.WEc)().loginImageUrl,this.imageUrl="",this.imageUnsplashUrl="",this.imageLocation="",this.imageCreator="",this.imageCreatorUrl="",this.customImageUrl?this.imageUrl=this.customImageUrl:this.loadImage()}ngOnInit(){this.direction$=this.localizationService.direction$}logIn(){this.errorMessage=void 0,this.authService.logIn(this.username,this.password,this.rememberMe).subscribe(o=>{switch(o.__typename){case"CurrentUser":const e=this.getRedirectRoute();this.router.navigateByUrl(e||"/");break;case"InvalidCredentialsError":case"NativeAuthStrategyError":this.errorMessage=o.message}})}loadImage(){}updateImage(o){const e=o.user,t=o.location;this.imageUrl=o.urls.regular,this.imageCreator=e.name,this.imageLocation=t.name,this.imageCreatorUrl=e.links.html,this.imageUnsplashUrl=o.links.html}getRedirectRoute(){let o;const e=new RegExp(`${g.KdK}=(.*)`);try{const t=window.location.search.match(e);t&&1<t.length&&(o=atob(decodeURIComponent(t[1])))}catch{}return o}static{this.\u0275fac=function(e){return new(e||s)(n.rXU(g.uRZ),n.rXU(h.Ix),n.rXU(u.Qq),n.rXU(g.PiF))}}static{this.\u0275cmp=n.VBU({type:s,selectors:[["vdr-login"]],decls:36,vars:37,consts:[[1,"login-wrapper",3,"dir"],[1,"login-wrapper-inner"],[1,"login-wrapper-image"],[1,"login-wrapper-image-content"],[1,"login-wrapper-image-title"],[1,"login-wrapper-image-copyright"],["class","creator",4,"ngIf"],["class","location",4,"ngIf"],[3,"src","alt",4,"ngIf"],[1,"login-wrapper-form"],[1,"login-title"],[1,"login-form"],[1,"login-group"],["type","text","name","username","id","login_username",1,"username",3,"ngModelChange","ngModel","placeholder"],["name","password","type","password","id","login_password",1,"password",3,"ngModelChange","ngModel","placeholder"],[1,"login-error",3,"clrAlertType","clrAlertClosable"],[1,"alert-text"],["type","checkbox","clrCheckbox","","id","rememberme","name","rememberme",3,"ngModelChange","ngModel"],["type","submit",1,"button","primary","login-button",3,"click","disabled"],["class","login-wrapper-logo","src","assets/logo-login.webp",4,"ngIf"],[1,"creator"],["target","_blank",3,"href"],[1,"location"],[3,"src","alt"],["src","assets/logo-login.webp",1,"login-wrapper-logo"]],template:function(e,t){1&e&&(n.j41(0,"div",0),n.nI1(1,"async"),n.j41(2,"div",1)(3,"div",2)(4,"div",3)(5,"div",4),n.EFF(6),n.nI1(7,"translate"),n.k0s(),n.j41(8,"div",5),n.DNE(9,b,7,3,"p",6)(10,v,2,1,"p",7),n.k0s()(),n.DNE(11,x,1,2,"img",8),n.k0s(),n.j41(12,"div",9)(13,"p",10),n.EFF(14),n.nI1(15,"translate"),n.k0s(),n.j41(16,"form",11)(17,"div",12)(18,"input",13),n.nI1(19,"translate"),n.mxI("ngModelChange",function(a){return n.DH7(t.username,a)||(t.username=a),a}),n.k0s(),n.j41(20,"input",14),n.nI1(21,"translate"),n.mxI("ngModelChange",function(a){return n.DH7(t.password,a)||(t.password=a),a}),n.k0s(),n.j41(22,"clr-alert",15)(23,"clr-alert-item")(24,"span",16),n.EFF(25),n.k0s()()(),n.j41(26,"clr-checkbox-wrapper")(27,"input",17),n.mxI("ngModelChange",function(a){return n.DH7(t.rememberMe,a)||(t.rememberMe=a),a}),n.k0s(),n.j41(28,"label"),n.EFF(29),n.nI1(30,"translate"),n.k0s()(),n.j41(31,"div")(32,"button",18),n.bIt("click",function(){return t.logIn()}),n.EFF(33),n.nI1(34,"translate"),n.k0s()()()()(),n.DNE(35,y,1,0,"img",19),n.k0s()()),2&e&&(n.Y8G("dir",n.bMT(1,20,t.direction$)),n.R7$(6),n.SpI(" ",n.bMT(7,22,"common.login-image-title")," "),n.R7$(3),n.Y8G("ngIf",t.imageCreator),n.R7$(),n.Y8G("ngIf",t.imageLocation),n.R7$(),n.Y8G("ngIf",t.imageUrl),n.R7$(3),n.SpI(" ",n.i5U(15,24,"common.login-title",n.eq3(35,_,t.hideDeenruvBranding?t.brand:"Deenruv"))," "),n.R7$(4),n.R50("ngModel",t.username),n.Y8G("placeholder",n.bMT(19,27,"common.username")),n.R7$(2),n.R50("ngModel",t.password),n.Y8G("placeholder",n.bMT(21,29,"common.password")),n.R7$(2),n.AVh("visible",t.errorMessage),n.Y8G("clrAlertType","danger")("clrAlertClosable",!1),n.R7$(3),n.SpI(" ",t.errorMessage," "),n.R7$(2),n.R50("ngModel",t.rememberMe),n.R7$(2),n.JRh(n.bMT(30,31,"common.remember-me")),n.R7$(3),n.Y8G("disabled",!t.username||!t.password),n.R7$(),n.SpI(" ",n.bMT(34,33,"common.login")," "),n.R7$(2),n.Y8G("ngIf",!t.hideDeenruvBranding))},dependencies:[p.k8k,p.Bw1,p.tQl,p.aZZ,p.Jej,p.eAx,M.bT,l.qT,l.me,l.Zm,l.BC,l.cb,l.vS,l.cV,f.ig,O.V,M.Jj,P.D9],styles:[".login-wrapper[_ngcontent-%COMP%]{background:var(--color-weight-100);background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%]{background:var(--login-wrapper-inner-bg);width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:var(--border-radius);border:1px solid var(--color-weight-150);overflow:hidden}@media (max-width: 992px){.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%]{flex-direction:column;height:auto;width:100%}}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%]{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%]{height:300px}}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%]{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:#020024;background:linear-gradient(180deg,#02002400,#000000bf);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%] .login-wrapper-image-title[_ngcontent-%COMP%]{font-size:1.6rem;font-weight:700;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%] .login-wrapper-image-title[_ngcontent-%COMP%]{font-size:1.2rem}}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%] .login-wrapper-image-copyright[_ngcontent-%COMP%]{opacity:.8}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%] .login-wrapper-image-copyright[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%] .login-wrapper-image-copyright[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#fff;text-decoration:underline}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%]{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;flex-shrink:0}@media (max-width: 992px){.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%]{height:auto;width:100%;padding:20px}}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%] .login-title[_ngcontent-%COMP%]{font-weight:700;font-size:1.2rem;margin-bottom:20px;color:var(--color-weight-600)}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%] .login-group[_ngcontent-%COMP%] input.username[_ngcontent-%COMP%], .login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%] .login-group[_ngcontent-%COMP%] input.password[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-form[_ngcontent-%COMP%] .login-group[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{width:100%!important;margin-top:20px!important}.login-wrapper[_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-logo[_ngcontent-%COMP%]{width:60px;height:auto;position:absolute;right:20px;top:20px}.login-button[_ngcontent-%COMP%]{width:100%;margin-top:var(--space-unit);justify-content:center}.version[_ngcontent-%COMP%]{flex:1;flex-grow: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-inline-start:5px}.login-error[_ngcontent-%COMP%]{max-height:0;overflow:hidden;display:block}.login-error.visible[_ngcontent-%COMP%]{max-height:46px;transition:max-height .2s;animation:_ngcontent-%COMP%_shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translateZ(0);backface-visibility:hidden;perspective:1000px}@keyframes _ngcontent-%COMP%_shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.login-wrapper[dir=rtl][_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-logo[_ngcontent-%COMP%]{right:auto;left:20px}.login-wrapper[dir=rtl][_ngcontent-%COMP%] .login-wrapper-inner[_ngcontent-%COMP%] .login-wrapper-image[_ngcontent-%COMP%] .login-wrapper-image-content[_ngcontent-%COMP%]{left:auto;right:0}"]})}}var I=r(5626);class c{constructor(o,e){this.router=o,this.authService=e}canActivate(o){return this.authService.checkAuthenticatedStatus().pipe((0,I.T)(e=>(e&&this.router.navigate(["/"]),!e)))}static{this.\u0275fac=function(e){return new(e||c)(n.KVO(h.Ix),n.KVO(g.uRZ))}}static{this.\u0275prov=n.jDH({token:c,factory:c.\u0275fac,providedIn:"root"})}}const w=[{path:"",component:s,pathMatch:"full",canActivate:[c]}];class d{static{this.\u0275fac=function(e){return new(e||d)}}static{this.\u0275mod=n.$C({type:d})}static{this.\u0275inj=n.G2t({imports:[g.GgS,h.iI.forChild(w)]})}}}}]);
|
|
2
|
+
//# sourceMappingURL=132.9c69fc8bd3b0cec4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"132.9c69fc8bd3b0cec4.js","mappings":"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","names":["i0","ctx_r0","imageCreatorUrl","imageCreator","imageUnsplashUrl","imageLocation","imageUrl","LoginComponent","constructor","authService","router","httpClient","localizationService","this","username","password","rememberMe","version","ADMIN_UI_VERSION","brand","getAppConfig","hideDeenruvBranding","customImageUrl","loginImageUrl","loadImage","ngOnInit","direction$","logIn","errorMessage","undefined","subscribe","result","__typename","redirect","getRedirectRoute","navigateByUrl","message","updateImage","res","user","location","urls","regular","name","links","html","redirectTo","re","RegExp","AUTH_REDIRECT_PARAM","redirectToParam","window","search","match","length","atob","decodeURIComponent","i1","i2","i3","selectors","decls","vars","consts","template","rf","ctx","LoginComponent_p_9_Template","LoginComponent_p_10_Template","LoginComponent_img_11_Template","$event","LoginComponent_img_35_Template","_c0","LoginGuard","canActivate","route","checkAuthenticatedStatus","pipe","map","authenticated","navigate","factory","ɵfac","providedIn","loginRoutes","path","component","pathMatch","LoginModule","SharedModule","RouterModule","forChild"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/lib/login/src/components/login/login.component.html","./src/lib/login/src/components/login/login.component.ts","./src/lib/login/src/providers/login.guard.ts","./src/lib/login/src/login.routes.ts","./src/lib/login/src/login.module.ts"],"sourcesContent":["<div class=\"login-wrapper\" [dir]=\"direction$ | async\">\n <div class=\"login-wrapper-inner\">\n <div class=\"login-wrapper-image\">\n <div class=\"login-wrapper-image-content\">\n <div class=\"login-wrapper-image-title\">\n {{ 'common.login-image-title' | translate }}\n </div>\n <div class=\"login-wrapper-image-copyright\">\n <p *ngIf=\"imageCreator\" class=\"creator\">\n Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\n <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\n </p>\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\n </div>\n </div>\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\n </div>\n <div class=\"login-wrapper-form\">\n <p class=\"login-title\">\n {{ 'common.login-title' | translate: { brand: hideDeenruvBranding ? brand : 'Deenruv' } }}\n </p>\n <form class=\"login-form\">\n <div class=\"login-group\">\n <input\n class=\"username\"\n type=\"text\"\n name=\"username\"\n id=\"login_username\"\n [(ngModel)]=\"username\"\n [placeholder]=\"'common.username' | translate\"\n />\n <input\n class=\"password\"\n name=\"password\"\n type=\"password\"\n id=\"login_password\"\n [(ngModel)]=\"password\"\n [placeholder]=\"'common.password' | translate\"\n />\n <clr-alert\n [clrAlertType]=\"'danger'\"\n [clrAlertClosable]=\"false\"\n [class.visible]=\"errorMessage\"\n class=\"login-error\"\n >\n <clr-alert-item>\n <span class=\"alert-text\">\n {{ errorMessage }}\n </span>\n </clr-alert-item>\n </clr-alert>\n <clr-checkbox-wrapper>\n <input\n type=\"checkbox\"\n clrCheckbox\n id=\"rememberme\"\n name=\"rememberme\"\n [(ngModel)]=\"rememberMe\"\n />\n <label>{{ 'common.remember-me' | translate }}</label>\n </clr-checkbox-wrapper>\n <div>\n <button\n type=\"submit\"\n class=\"button primary login-button\"\n (click)=\"logIn()\"\n [disabled]=\"!username || !password\"\n >\n {{ 'common.login' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n <img class=\"login-wrapper-logo\" src=\"assets/logo-login.webp\" *ngIf=\"!hideDeenruvBranding\" />\n </div>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ADMIN_UI_VERSION,\n AuthService,\n AUTH_REDIRECT_PARAM,\n getAppConfig,\n LocalizationDirectionType,\n LocalizationService,\n} from '@deenruv/admin-ui/core';\n\n@Component({\n selector: 'vdr-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n})\nexport class LoginComponent implements OnInit {\n direction$: LocalizationDirectionType;\n\n username = '';\n password = '';\n rememberMe = false;\n version = ADMIN_UI_VERSION;\n errorMessage: string | undefined;\n brand = getAppConfig().brand;\n hideDeenruvBranding = getAppConfig().hideDeenruvBranding;\n customImageUrl = getAppConfig().loginImageUrl;\n imageUrl = '';\n imageUnsplashUrl = '';\n imageLocation = '';\n imageCreator = '';\n imageCreatorUrl = '';\n\n constructor(\n private authService: AuthService,\n private router: Router,\n private httpClient: HttpClient,\n private localizationService: LocalizationService,\n ) {\n if (this.customImageUrl) {\n this.imageUrl = this.customImageUrl;\n } else {\n this.loadImage();\n }\n }\n ngOnInit(): void {\n this.direction$ = this.localizationService.direction$;\n }\n\n logIn(): void {\n this.errorMessage = undefined;\n this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\n switch (result.__typename) {\n case 'CurrentUser':\n const redirect = this.getRedirectRoute();\n this.router.navigateByUrl(redirect ? redirect : '/');\n break;\n case 'InvalidCredentialsError':\n case 'NativeAuthStrategyError':\n this.errorMessage = result.message;\n break;\n }\n });\n }\n\n loadImage() {\n // this.httpClient\n // .get('https://login-image.deenruv.io')\n // .toPromise()\n // .then(res => {\n // this.updateImage(res);\n // });\n }\n\n updateImage(res: any) {\n const user: any = (res as any).user;\n const location: any = (res as any).location;\n\n this.imageUrl = res.urls.regular;\n this.imageCreator = user.name;\n this.imageLocation = location.name;\n this.imageCreatorUrl = user.links.html;\n this.imageUnsplashUrl = res.links.html;\n }\n\n /**\n * Attempts to read a redirect param from the current url and parse it into a\n * route from which the user was redirected after a 401 error.\n */\n private getRedirectRoute(): string | undefined {\n let redirectTo: string | undefined;\n const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\n try {\n const redirectToParam = window.location.search.match(re);\n if (redirectToParam && 1 < redirectToParam.length) {\n redirectTo = atob(decodeURIComponent(redirectToParam[1]));\n }\n } catch (e: any) {\n // ignore\n }\n return redirectTo;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { AuthService } from '@deenruv/admin-ui/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * This guard prevents loggen-in users from navigating to the login screen.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LoginGuard {\n constructor(\n private router: Router,\n private authService: AuthService,\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n return this.authService.checkAuthenticatedStatus().pipe(\n map(authenticated => {\n if (authenticated) {\n this.router.navigate(['/']);\n }\n return !authenticated;\n }),\n );\n }\n}\n","import { Routes } from '@angular/router';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginGuard } from './providers/login.guard';\n\nexport const loginRoutes: Routes = [\n {\n path: '',\n component: LoginComponent,\n pathMatch: 'full',\n canActivate: [LoginGuard],\n },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@deenruv/admin-ui/core';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { loginRoutes } from './login.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild(loginRoutes)],\n exports: [],\n declarations: [LoginComponent],\n})\nexport class LoginModule {}\n"],"x_google_ignoreList":[]}
|