@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([[316],{6316:(pt,_,s)=>{s.r(_),s.d(_,{HealthCheckComponent:()=>p,JobListComponent:()=>g,JobStateLabelComponent:()=>u,SystemModule:()=>h,systemRoutes:()=>C});var t=s(3184),a=s(8098),m=s(7346),l=s(6362),i=s(2748),y=s(8276),v=s(4447),x=s(7514),L=s(2651);function J(n,o){1&n&&(t.ynx(0),t._uU(1),t.ALo(2,"translate"),t.BQk()),2&n&&(t.xp6(1),t.hij(" ",t.lcZ(2,1,"system.health-all-systems-up")," "))}function j(n,o){1&n&&(t._uU(0),t.ALo(1,"translate")),2&n&&t.hij(" ",t.lcZ(1,1,"system.health-error")," ")}const U=function(n,o){return{"is-success":n,"is-danger":o}};function N(n,o){if(1&n&&(t.TgZ(0,"div",7)(1,"div",8),t._UZ(2,"clr-icon",9),t.qZA(),t.TgZ(3,"div",10),t.YNc(4,J,3,3,"ng-container",11),t.YNc(5,j,2,3,"ng-template",null,12,t.W1O),t.TgZ(7,"div",13),t._uU(8),t.ALo(9,"translate"),t.ALo(10,"localeDate"),t.ALo(11,"async"),t.qZA()()()),2&n){const e=o.ngIf,r=t.MAs(6),c=t.oxw();t.xp6(2),t.Q6J("ngClass",t.WLB(13,U,"ok"===e,"ok"!==e)),t.uIk("shape","ok"===e?"check-circle":"exclamation-circle"),t.xp6(2),t.Q6J("ngIf","ok"===e)("ngIfElse",r),t.xp6(4),t.AsE(" ",t.lcZ(9,6,"system.health-last-checked"),": ",t.xi3(10,8,t.lcZ(11,11,c.healthCheckService.lastCheck$),"mediumTime")," ")}}function I(n,o){1&n&&(t.ynx(0),t._UZ(1,"clr-icon",17),t._uU(2),t.ALo(3,"translate"),t.BQk()),2&n&&(t.xp6(2),t.hij(" ",t.lcZ(3,1,"system.health-status-up")," "))}function q(n,o){1&n&&(t._UZ(0,"clr-icon",18),t._uU(1),t.ALo(2,"translate")),2&n&&(t.xp6(1),t.hij(" ",t.lcZ(2,1,"system.health-status-down")," "))}function O(n,o){if(1&n&&(t.TgZ(0,"tr")(1,"td",14),t._uU(2),t.qZA(),t.TgZ(3,"td",14)(4,"vdr-chip",15),t.YNc(5,I,4,3,"ng-container",11),t.YNc(6,q,3,3,"ng-template",null,16,t.W1O),t.qZA()(),t.TgZ(8,"td",14),t._uU(9),t.qZA()()),2&n){const e=o.$implicit,r=t.MAs(7);t.xp6(2),t.Oqu(e.key),t.xp6(2),t.Q6J("colorType","up"===e.result.status?"success":"error"),t.xp6(1),t.Q6J("ngIf","up"===e.result.status)("ngIfElse",r),t.xp6(4),t.Oqu(e.result.message)}}class p{constructor(o){this.healthCheckService=o}}p.\u0275fac=function(o){return new(o||p)(t.Y36(a.Gpz))},p.\u0275cmp=t.Xpm({type:p,selectors:[["vdr-health-check"]],decls:25,vars:18,consts:[["class","system-status-header",4,"ngIf"],["locationId","system-status"],[1,"btn","btn-secondary",3,"click"],["shape","refresh"],[1,"table"],[1,"left"],[4,"ngFor","ngForOf"],[1,"system-status-header"],[1,"status-icon"],["size","48",3,"ngClass"],[1,"status-detail"],[4,"ngIf","ngIfElse"],["error",""],[1,"last-checked"],[1,"align-middle","left"],[3,"colorType"],["down",""],["shape","check-circle"],["shape","exclamation-circle"]],template:function(o,e){1&o&&(t.TgZ(0,"vdr-action-bar")(1,"vdr-ab-left"),t.YNc(2,N,12,16,"div",0),t.ALo(3,"async"),t.qZA(),t.TgZ(4,"vdr-ab-right"),t._UZ(5,"vdr-action-bar-items",1),t.TgZ(6,"button",2),t.NdJ("click",function(){return e.healthCheckService.refresh()}),t._UZ(7,"clr-icon",3),t._uU(8),t.ALo(9,"translate"),t.qZA()()(),t.TgZ(10,"table",4)(11,"thead")(12,"tr")(13,"th",5),t._uU(14),t.ALo(15,"translate"),t.qZA(),t.TgZ(16,"th",5),t._uU(17),t.ALo(18,"translate"),t.qZA(),t.TgZ(19,"th",5),t._uU(20),t.ALo(21,"translate"),t.qZA()()(),t.TgZ(22,"tbody"),t.YNc(23,O,10,5,"tr",6),t.ALo(24,"async"),t.qZA()()),2&o&&(t.xp6(2),t.Q6J("ngIf",t.lcZ(3,6,e.healthCheckService.status$)),t.xp6(6),t.hij(" ",t.lcZ(9,8,"system.health-refresh")," "),t.xp6(6),t.hij(" ",t.lcZ(15,10,"common.name")," "),t.xp6(3),t.hij(" ",t.lcZ(18,12,"system.health-status")," "),t.xp6(3),t.hij(" ",t.lcZ(21,14,"system.health-message")," "),t.xp6(3),t.Q6J("ngForOf",t.lcZ(24,16,e.healthCheckService.details$)))},directives:[m.Kk,m.BN,l.O5,i.qvL,l.mk,m.mz,y.W,l.sg,v.Y],pipes:[l.Ov,x.X$,L.H],styles:[".system-status-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start}.system-status-header[_ngcontent-%COMP%] .status-detail[_ngcontent-%COMP%]{font-weight:700;margin-right:6px}.system-status-header[_ngcontent-%COMP%] .last-checked[_ngcontent-%COMP%]{font-weight:400;color:var(--color-grey-500)}"],changeDetection:0});var d=s(587),S=s(5524),P=s(8951),Q=s(116),k=s(635),f=s(9720),Y=s(7890),b=s(8660),w=s(365),E=s(901),F=s(3146),D=s(735),M=s(1519),R=s(8854),H=s(2702);function $(n,o){if(1&n&&(t.TgZ(0,"span",3),t._uU(1),t.ALo(2,"percent"),t.qZA()),2&n){const e=t.oxw();t.xp6(1),t.hij(" ",t.lcZ(2,1,e.job.progress/100)," ")}}class u{get iconShape(){switch(this.job.state){case a.Zyh.COMPLETED:return"check-circle";case a.Zyh.FAILED:return"exclamation-circle";case a.Zyh.CANCELLED:return"ban";case a.Zyh.PENDING:case a.Zyh.RETRYING:return"hourglass";case a.Zyh.RUNNING:return"sync"}}get colorType(){switch(this.job.state){case a.Zyh.COMPLETED:return"success";case a.Zyh.FAILED:case a.Zyh.CANCELLED:return"error";case a.Zyh.PENDING:case a.Zyh.RETRYING:return"";case a.Zyh.RUNNING:return"warning"}}}u.\u0275fac=function(o){return new(o||u)},u.\u0275cmp=t.Xpm({type:u,selectors:[["vdr-job-state-label"]],inputs:{job:"job"},decls:5,vars:6,consts:[[3,"colorType"],[1,"mr1"],["class","progress",4,"ngIf"],[1,"progress"]],template:function(o,e){1&o&&(t.TgZ(0,"vdr-chip",0),t._UZ(1,"clr-icon",1),t._uU(2),t.ALo(3,"titlecase"),t.YNc(4,$,3,3,"span",2),t.qZA()),2&o&&(t.Q6J("colorType",e.colorType),t.xp6(1),t.uIk("shape",e.iconShape),t.xp6(1),t.hij(" ",t.lcZ(3,4,e.job.state)," "),t.xp6(2),t.Q6J("ngIf","RUNNING"===e.job.state))},directives:[v.Y,i.qvL,l.O5],pipes:[l.rS,l.Zx],styles:[".progress[_ngcontent-%COMP%]{margin-left:3px}clr-icon[_ngcontent-%COMP%]{min-width:12px}"],changeDetection:0});var G=s(5111),B=s(6826),W=s(1689),z=s(7388);function K(n,o){1&n&&(t.ynx(0),t._uU(1),t.ALo(2,"translate"),t.BQk()),2&n&&(t.xp6(1),t.hij(" ",t.lcZ(2,1,"system.all-job-queues")," "))}function X(n,o){if(1&n&&(t.TgZ(0,"vdr-chip",8),t._uU(1),t.qZA()),2&n){const e=t.oxw().item;t.Q6J("colorFrom",e.name),t.xp6(1),t.Oqu(e.name)}}function V(n,o){if(1&n&&(t.YNc(0,K,3,3,"ng-container",6),t.YNc(1,X,2,2,"ng-template",null,7,t.W1O)),2&n){const e=o.item,r=t.MAs(2);t.Q6J("ngIf","all"===e.name)("ngIfElse",r)}}function tt(n,o){if(1&n&&(t.TgZ(0,"vdr-dropdown")(1,"button",15),t.ALo(2,"translate"),t._UZ(3,"clr-icon",16),t.qZA(),t.TgZ(4,"vdr-dropdown-menu")(5,"div",17),t._UZ(6,"vdr-object-tree",18),t.qZA()()()),2&n){const e=t.oxw().item;t.xp6(1),t.Q6J("title",t.lcZ(2,2,"system.job-data")),t.xp6(5),t.Q6J("value",e.data)}}function et(n,o){if(1&n&&(t.TgZ(0,"div",19),t._uU(1),t.qZA()),2&n){const e=t.oxw().item;t.xp6(1),t.hij(" after ",e.attempts," attempts ")}}function nt(n,o){if(1&n&&(t.TgZ(0,"div",19),t._uU(1),t.qZA()),2&n){const e=t.oxw().item;t.xp6(1),t.AsE(" attempting ",e.attempts+1," of ",e.retries," ")}}function ot(n,o){if(1&n&&(t.TgZ(0,"vdr-dropdown")(1,"button",20),t._UZ(2,"clr-icon",16),t._uU(3),t.ALo(4,"translate"),t.qZA(),t.TgZ(5,"vdr-dropdown-menu")(6,"div",17),t._UZ(7,"vdr-object-tree",18),t.qZA()()()),2&n){const e=t.oxw().item;t.xp6(3),t.hij(" ",t.lcZ(4,2,"system.job-result")," "),t.xp6(4),t.Q6J("value",e.result)}}function st(n,o){if(1&n&&(t.TgZ(0,"vdr-dropdown")(1,"button",20),t._UZ(2,"clr-icon",21),t._uU(3),t.ALo(4,"translate"),t.qZA(),t.TgZ(5,"vdr-dropdown-menu")(6,"div",17),t._uU(7),t.qZA()()()),2&n){const e=t.oxw().item;t.xp6(3),t.hij(" ",t.lcZ(4,2,"system.job-error")," "),t.xp6(4),t.hij(" ",e.error," ")}}const at=function(){return["DeleteSettings","DeleteSystem"]};function rt(n,o){if(1&n){const e=t.EpF();t.TgZ(0,"vdr-dropdown")(1,"button",22),t._UZ(2,"clr-icon",23),t.qZA(),t.TgZ(3,"vdr-dropdown-menu",24)(4,"button",25),t.NdJ("click",function(){t.CHM(e);const c=t.oxw().item;return t.oxw().cancelJob(c.id)}),t.ALo(5,"hasPermission"),t._UZ(6,"clr-icon",26),t._uU(7),t.ALo(8,"translate"),t.qZA()()()}2&n&&(t.xp6(4),t.Q6J("disabled",!t.lcZ(5,2,t.DdM(6,at))),t.xp6(3),t.hij(" ",t.lcZ(8,4,"common.cancel")," "))}function lt(n,o){if(1&n&&(t.TgZ(0,"td",9),t._UZ(1,"vdr-entity-info",10),t.qZA(),t.TgZ(2,"td",9),t.YNc(3,tt,7,4,"vdr-dropdown",11),t.TgZ(4,"vdr-chip",8),t._uU(5),t.qZA()(),t.TgZ(6,"td",9),t._uU(7),t.ALo(8,"timeAgo"),t.qZA(),t.TgZ(9,"td",9),t._UZ(10,"vdr-job-state-label",12),t.YNc(11,et,2,1,"div",13),t.YNc(12,nt,2,2,"div",13),t.qZA(),t.TgZ(13,"td",9),t._uU(14),t.ALo(15,"duration"),t.qZA(),t.TgZ(16,"td",9),t.YNc(17,ot,8,4,"vdr-dropdown",11),t.YNc(18,st,8,4,"vdr-dropdown",11),t.qZA(),t.TgZ(19,"td",14),t.YNc(20,rt,9,7,"vdr-dropdown",11),t.qZA()),2&n){const e=o.item,r=t.oxw();t.xp6(1),t.Q6J("entity",e),t.xp6(2),t.Q6J("ngIf",e.data),t.xp6(1),t.Q6J("colorFrom",e.queueName),t.xp6(1),t.Oqu(e.queueName),t.xp6(2),t.Oqu(t.lcZ(8,12,e.createdAt)),t.xp6(3),t.Q6J("job",e),t.xp6(1),t.Q6J("ngIf","FAILED"===e.state),t.xp6(1),t.Q6J("ngIf","RUNNING"===e.state||"RETRYING"===e.state),t.xp6(2),t.Oqu(t.lcZ(15,14,e.duration)),t.xp6(3),t.Q6J("ngIf",r.hasResult(e)),t.xp6(1),t.Q6J("ngIf",e.error),t.xp6(2),t.Q6J("ngIf",!e.isSettled&&"FAILED"!==e.state)}}class g extends a.t7C{constructor(o,e,r,c,T){super(c,T),this.dataService=o,this.modalService=e,this.notificationService=r,this.liveUpdate=new d.NI(!0),this.hideSettled=new d.NI(!0),this.queueFilter=new d.NI("all"),super.setQueryFn((...Z)=>this.dataService.settings.getAllJobs(...Z),Z=>Z.jobs,(Z,ct)=>{const it="all"===this.queueFilter.value?null:{queueName:{eq:this.queueFilter.value}},mt=this.hideSettled.value;return{options:{skip:Z,take:ct,filter:Object.assign(Object.assign({},it),mt?{isSettled:{eq:!1}}:{}),sort:{createdAt:a.Asd.DESC}}}})}ngOnInit(){super.ngOnInit(),(0,S.H)(5e3,2e3).pipe((0,P.R)(this.destroy$),(0,Q.h)(()=>this.liveUpdate.value)).subscribe(()=>{this.refresh()}),this.queues$=this.dataService.settings.getJobQueues().mapStream(o=>o.jobQueues).pipe((0,k.U)(o=>[{name:"all",running:!0},...o]))}hasResult(o){const e=o.result;return null!=e&&("object"!=typeof e||Object.keys(e).length>0)}cancelJob(o){this.dataService.settings.cancelJob(o).subscribe(()=>this.refresh())}}g.\u0275fac=function(o){return new(o||g)(t.Y36(a.DoR),t.Y36(a.Z7U),t.Y36(a.gqp),t.Y36(f.F0),t.Y36(f.gz))},g.\u0275cmp=t.Xpm({type:g,selectors:[["vdr-job-list"]],features:[t.qOj],decls:41,vars:45,consts:[["type","checkbox","clrCheckbox","","name","live-update",3,"formControl"],["type","checkbox","clrCheckbox","","name","hide-settled",3,"formControl","change"],["bindValue","name",3,"addTag","items","hideSelected","multiple","markFirst","clearable","searchable","formControl","change"],["ng-label-tmp","","ng-option-tmp",""],["locationId","job-list"],[3,"items","itemsPerPage","totalItems","currentPage","pageChange","itemsPerPageChange"],[4,"ngIf","ngIfElse"],["others",""],[3,"colorFrom"],[1,"left","align-middle"],[3,"entity"],[4,"ngIf"],[3,"job"],["class","retry-info",4,"ngIf"],[1,"right","align-middle"],["vdrDropdownTrigger","",1,"btn","btn-link","btn-icon",3,"title"],["shape","details"],[1,"result-detail"],[3,"value"],[1,"retry-info"],["vdrDropdownTrigger","",1,"btn","btn-link","btn-sm","details-button"],["shape","exclamation-circle"],["vdrDropdownTrigger","",1,"icon-button"],["shape","ellipsis-vertical"],["vdrPosition","bottom-right"],["type","button","vdrDropdownItem","",1,"delete-button",3,"disabled","click"],["shape","ban",1,"is-danger"]],template:function(o,e){1&o&&(t.TgZ(0,"vdr-action-bar")(1,"vdr-ab-left")(2,"clr-checkbox-container")(3,"clr-checkbox-wrapper"),t._UZ(4,"input",0),t.TgZ(5,"label"),t._uU(6),t.ALo(7,"translate"),t.qZA()(),t.TgZ(8,"clr-checkbox-wrapper")(9,"input",1),t.NdJ("change",function(){return e.refresh()}),t.qZA(),t.TgZ(10,"label"),t._uU(11),t.ALo(12,"translate"),t.qZA()()()(),t.TgZ(13,"vdr-ab-right")(14,"ng-select",2),t.NdJ("change",function(){return e.refresh()}),t.ALo(15,"async"),t.YNc(16,V,3,2,"ng-template",3),t.qZA(),t._UZ(17,"vdr-action-bar-items",4),t.qZA()(),t.TgZ(18,"vdr-data-table",5),t.NdJ("pageChange",function(c){return e.setPageNumber(c)})("itemsPerPageChange",function(c){return e.setItemsPerPage(c)}),t.ALo(19,"async"),t.ALo(20,"async"),t.ALo(21,"async"),t.ALo(22,"async"),t._UZ(23,"vdr-dt-column"),t.TgZ(24,"vdr-dt-column"),t._uU(25),t.ALo(26,"translate"),t.qZA(),t.TgZ(27,"vdr-dt-column"),t._uU(28),t.ALo(29,"translate"),t.qZA(),t.TgZ(30,"vdr-dt-column"),t._uU(31),t.ALo(32,"translate"),t.qZA(),t.TgZ(33,"vdr-dt-column"),t._uU(34),t.ALo(35,"translate"),t.qZA(),t.TgZ(36,"vdr-dt-column"),t._uU(37),t.ALo(38,"translate"),t.qZA(),t._UZ(39,"vdr-dt-column"),t.YNc(40,lt,21,16,"ng-template"),t.qZA()),2&o&&(t.xp6(4),t.Q6J("formControl",e.liveUpdate),t.xp6(2),t.Oqu(t.lcZ(7,21,"common.live-update")),t.xp6(3),t.Q6J("formControl",e.hideSettled),t.xp6(2),t.Oqu(t.lcZ(12,23,"system.hide-settled-jobs")),t.xp6(3),t.Q6J("addTag",!1)("items",t.lcZ(15,25,e.queues$))("hideSelected",!0)("multiple",!1)("markFirst",!1)("clearable",!1)("searchable",!1)("formControl",e.queueFilter),t.xp6(4),t.Q6J("items",t.lcZ(19,27,e.items$))("itemsPerPage",t.lcZ(20,29,e.itemsPerPage$))("totalItems",t.lcZ(21,31,e.totalItems$))("currentPage",t.lcZ(22,33,e.currentPage$)),t.xp6(7),t.Oqu(t.lcZ(26,35,"system.job-queue-name")),t.xp6(3),t.Oqu(t.lcZ(29,37,"common.created-at")),t.xp6(3),t.Oqu(t.lcZ(32,39,"system.job-state")),t.xp6(3),t.Oqu(t.lcZ(35,41,"system.job-duration")),t.xp6(3),t.Oqu(t.lcZ(38,43,"system.job-result")))},directives:[m.Kk,m.BN,i.Y_4,i.PEh,Y.y,d.Wl,i.KKC,d.JJ,d.oH,i.MgK,m.mz,b.w9,b.mR,b.ir,l.O5,v.Y,y.W,w.Q,E.E,F.V,D.J,M.U,i.qvL,R.N,H._,u,G.H],pipes:[x.X$,l.Ov,B.e,W.u,z.j],styles:[".result-detail[_ngcontent-%COMP%]{margin:0 12px}.retry-info[_ngcontent-%COMP%]{margin-left:6px;color:var(--color-grey-400)}"],changeDetection:0});var A=s(8270);const C=[{path:"jobs",component:g,data:{breadcrumb:(0,A.J)("breadcrumb.job-queue")}},{path:"system-status",component:p,data:{breadcrumb:(0,A.J)("breadcrumb.system-status")}}];class h{}h.\u0275fac=function(o){return new(o||h)},h.\u0275mod=t.oAB({type:h}),h.\u0275inj=t.cJS({imports:[[a.m81,f.Bz.forChild(C)]]})}}]);
|
|
2
|
+
//# sourceMappingURL=316.265d65a6a9d1b4c0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["t","constructor","o","p","selectors","e","iconShape","this","job","state","a","colorType","u","oxw","cancelJob","r","c","T","super","d","setQueryFn","Z","dataService","settings","getAllJobs","jobs","ct","it","queueFilter","value","queueName","eq","mt","hideSettled","options","skip","take","filter","Object","isSettled","sort","createdAt","ngOnInit","S","pipe","destroy$","Q","liveUpdate","subscribe","refresh","queues$","getJobQueues","mapStream","jobQueues","k","name","running","hasResult","result","keys","length","g","C","path","component","data","breadcrumb","x","h","f"],"sources":["./src/lib/system/src/components/health-check/health-check.component.html","./src/lib/system/src/components/health-check/health-check.component.ts","./src/lib/system/src/components/job-state-label/job-state-label.component.html","./src/lib/system/src/components/job-state-label/job-state-label.component.ts","./src/lib/system/src/components/job-list/job-list.component.html","./src/lib/system/src/components/job-list/job-list.component.ts","./src/lib/system/src/system.routes.ts","./src/lib/system/src/system.module.ts"],"sourcesContent":["<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"system-status-header\" *ngIf=\"healthCheckService.status$ | async as status\">\r\n <div class=\"status-icon\">\r\n <clr-icon\r\n [attr.shape]=\"status === 'ok' ? 'check-circle' : 'exclamation-circle'\"\r\n [ngClass]=\"{ 'is-success': status === 'ok', 'is-danger': status !== 'ok' }\"\r\n size=\"48\"\r\n ></clr-icon>\r\n </div>\r\n <div class=\"status-detail\">\r\n <ng-container *ngIf=\"status === 'ok'; else error\">\r\n {{ 'system.health-all-systems-up' | translate }}\r\n </ng-container>\r\n <ng-template #error>\r\n {{ 'system.health-error' | translate }}\r\n </ng-template>\r\n <div class=\"last-checked\">\r\n {{ 'system.health-last-checked' | translate }}:\r\n {{ healthCheckService.lastCheck$ | async | localeDate: 'mediumTime' }}\r\n </div>\r\n </div>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"system-status\"></vdr-action-bar-items>\r\n <button class=\"btn btn-secondary\" (click)=\"healthCheckService.refresh()\">\r\n <clr-icon shape=\"refresh\"></clr-icon> {{ 'system.health-refresh' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th class=\"left\">\r\n {{ 'common.name' | translate }}\r\n </th>\r\n <th class=\"left\">\r\n {{ 'system.health-status' | translate }}\r\n </th>\r\n <th class=\"left\">\r\n {{ 'system.health-message' | translate }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of healthCheckService.details$ | async\">\r\n <td class=\"align-middle left\">{{ row.key }}</td>\r\n <td class=\"align-middle left\">\r\n <vdr-chip [colorType]=\"row.result.status === 'up' ? 'success' : 'error'\">\r\n <ng-container *ngIf=\"row.result.status === 'up'; else down\">\r\n <clr-icon shape=\"check-circle\"></clr-icon>\r\n {{ 'system.health-status-up' | translate }}\r\n </ng-container>\r\n <ng-template #down>\r\n <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n {{ 'system.health-status-down' | translate }}\r\n </ng-template>\r\n </vdr-chip>\r\n </td>\r\n <td class=\"align-middle left\">{{ row.result.message }}</td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { HealthCheckService } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-health-check',\r\n templateUrl: './health-check.component.html',\r\n styleUrls: ['./health-check.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class HealthCheckComponent {\r\n constructor(public healthCheckService: HealthCheckService) {}\r\n}\r\n","<vdr-chip [colorType]=\"colorType\">\r\n <clr-icon [attr.shape]=\"iconShape\" class=\"mr1\"></clr-icon>\r\n {{ job.state | titlecase }}\r\n <span *ngIf=\"job.state === 'RUNNING'\" class=\"progress\">\r\n {{ (job.progress / 100) | percent }}\r\n </span>\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { JobInfoFragment, JobState } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-job-state-label',\r\n templateUrl: './job-state-label.component.html',\r\n styleUrls: ['./job-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class JobStateLabelComponent {\r\n @Input()\r\n job: JobInfoFragment;\r\n\r\n get iconShape(): string {\r\n switch (this.job.state) {\r\n case JobState.COMPLETED:\r\n return 'check-circle';\r\n case JobState.FAILED:\r\n return 'exclamation-circle';\r\n case JobState.CANCELLED:\r\n return 'ban';\r\n case JobState.PENDING:\r\n case JobState.RETRYING:\r\n return 'hourglass';\r\n case JobState.RUNNING:\r\n return 'sync';\r\n }\r\n }\r\n\r\n get colorType(): string {\r\n switch (this.job.state) {\r\n case JobState.COMPLETED:\r\n return 'success';\r\n case JobState.FAILED:\r\n case JobState.CANCELLED:\r\n return 'error';\r\n case JobState.PENDING:\r\n case JobState.RETRYING:\r\n return '';\r\n case JobState.RUNNING:\r\n return 'warning';\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <clr-checkbox-container>\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [formControl]=\"liveUpdate\" name=\"live-update\"/>\r\n <label>{{ 'common.live-update' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [formControl]=\"hideSettled\"\r\n name=\"hide-settled\"\r\n (change)=\"refresh()\"\r\n />\r\n <label>{{ 'system.hide-settled-jobs' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </clr-checkbox-container>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <ng-select\r\n [addTag]=\"false\"\r\n [items]=\"queues$ | async\"\r\n [hideSelected]=\"true\"\r\n [multiple]=\"false\"\r\n [markFirst]=\"false\"\r\n [clearable]=\"false\"\r\n [searchable]=\"false\"\r\n bindValue=\"name\"\r\n [formControl]=\"queueFilter\"\r\n (change)=\"refresh()\"\r\n >\r\n <ng-template ng-label-tmp ng-option-tmp let-item=\"item\">\r\n <ng-container *ngIf=\"item.name === 'all'; else others\">\r\n {{ 'system.all-job-queues' | translate }}\r\n </ng-container>\r\n <ng-template #others>\r\n <vdr-chip [colorFrom]=\"item.name\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n <vdr-action-bar-items locationId=\"job-list\"></vdr-action-bar-items>\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></vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-queue-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.created-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-duration' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-result' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-job=\"item\">\r\n <td class=\"left align-middle\">\r\n <vdr-entity-info [entity]=\"job\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-dropdown *ngIf=\"job.data\">\r\n <button\r\n class=\"btn btn-link btn-icon\"\r\n vdrDropdownTrigger\r\n [title]=\"'system.job-data' | translate\"\r\n >\r\n <clr-icon shape=\"details\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n <vdr-object-tree [value]=\"job.data\"></vdr-object-tree>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <vdr-chip [colorFrom]=\"job.queueName\">{{ job.queueName }}</vdr-chip>\r\n </td>\r\n\r\n <td class=\"left align-middle\">{{ job.createdAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-job-state-label [job]=\"job\"></vdr-job-state-label>\r\n <div *ngIf=\"job.state === 'FAILED'\" class=\"retry-info\">\r\n after {{ job.attempts }} attempts\r\n </div>\r\n <div *ngIf=\"job.state === 'RUNNING' || job.state === 'RETRYING'\" class=\"retry-info\">\r\n attempting {{ job.attempts + 1 }} of {{ job.retries }}\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\">{{ job.duration | duration }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-dropdown *ngIf=\"hasResult(job)\">\r\n <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"details\"></clr-icon>\r\n {{ 'system.job-result' | translate }}\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n <vdr-object-tree [value]=\"job.result\"></vdr-object-tree>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <vdr-dropdown *ngIf=\"job.error\">\r\n <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n {{ 'system.job-error' | translate }}\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n {{ job.error }}\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown *ngIf=\"!job.isSettled && job.state !== 'FAILED'\">\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 type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"cancelJob(job.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteSystem'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"ban\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.cancel' | 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 { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetAllJobsQuery,\r\n GetJobQueueListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable, timer } from 'rxjs';\r\nimport { filter, map, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-job-list',\r\n templateUrl: './job-list.component.html',\r\n styleUrls: ['./job-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class JobListComponent\r\n extends BaseListComponent<GetAllJobsQuery, ItemOf<GetAllJobsQuery, 'jobs'>>\r\n implements OnInit\r\n{\r\n queues$: Observable<GetJobQueueListQuery['jobQueues']>;\r\n liveUpdate = new FormControl(true);\r\n hideSettled = new FormControl(true);\r\n queueFilter = new FormControl('all');\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getAllJobs(...args),\r\n data => data.jobs,\r\n (skip, take) => {\r\n const queueFilter =\r\n this.queueFilter.value === 'all' ? null : { queueName: { eq: this.queueFilter.value } };\r\n const hideSettled = this.hideSettled.value;\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...queueFilter,\r\n ...(hideSettled ? { isSettled: { eq: false } } : {}),\r\n },\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n },\r\n };\r\n },\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n timer(5000, 2000)\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n filter(() => this.liveUpdate.value),\r\n )\r\n .subscribe(() => {\r\n this.refresh();\r\n });\r\n this.queues$ = this.dataService.settings\r\n .getJobQueues()\r\n .mapStream(res => res.jobQueues)\r\n .pipe(\r\n map(queues => {\r\n return [{ name: 'all', running: true }, ...queues];\r\n }),\r\n );\r\n }\r\n\r\n hasResult(job: ItemOf<GetAllJobsQuery, 'jobs'>): boolean {\r\n const result = job.result;\r\n if (result == null) {\r\n return false;\r\n }\r\n if (typeof result === 'object') {\r\n return Object.keys(result).length > 0;\r\n }\r\n return true;\r\n }\r\n\r\n cancelJob(id: string) {\r\n this.dataService.settings.cancelJob(id).subscribe(() => this.refresh());\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\n\r\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\r\nimport { JobListComponent } from './components/job-list/job-list.component';\r\n\r\nexport const systemRoutes: Route[] = [\r\n {\r\n path: 'jobs',\r\n component: JobListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.job-queue'),\r\n },\r\n },\r\n {\r\n path: 'system-status',\r\n component: HealthCheckComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.system-status'),\r\n },\r\n },\r\n];\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\r\nimport { JobListComponent } from './components/job-list/job-list.component';\r\nimport { JobStateLabelComponent } from './components/job-state-label/job-state-label.component';\r\nimport { systemRoutes } from './system.routes';\r\n\r\n@NgModule({\r\n declarations: [HealthCheckComponent, JobListComponent, JobStateLabelComponent],\r\n imports: [SharedModule, RouterModule.forChild(systemRoutes)],\r\n})\r\nexport class SystemModule {}\r\n"],"sourceRoot":"webpack:///","file":"316.07f9c805e4c95dc8.js"}
|
|
1
|
+
{"version":3,"mappings":"uWAWgBA,SACIA,8BACJA,eADIA,yFAGAA,yKAbZA,iBAAuF,WAE/EA,sBAKJA,QACAA,kBACIA,iCAGAA,2CAGAA,kBACIA,uEAEJA,sDAdIA,wDADAA,4DAMWA,gCAAuB,cAOlCA,kKAiCAA,SACIA,uBACAA,8BACJA,eADIA,oFAGAA,uBACAA,8HAVhBA,cAA4D,WAC1BA,SAAaA,QAC3CA,iBAA8B,iBAEtBA,iCAIAA,2CAIJA,UAEJA,iBAA8BA,SAAwBA,+CAbxBA,sBAEhBA,qEACSA,8CAAkC,cAU3BA,kCCpDnC,QACHC,YAAmBC,oEADVC,GAAoBH,uCAApBG,EAAoBC,qgBDTjCJ,0BAAgB,iBAERA,0CAqBJA,QACAA,wBACIA,kCACAA,oBAAkCA,gCAASK,iCACvCL,sBAAsCA,8BAC1CA,YAIRA,oBAAqB,WAArBA,CAAqB,QAArBA,CAAqB,WAILA,gCACJA,QACAA,iBACIA,gCACJA,QACAA,iBACIA,gCACJA,YAGRA,kBACIA,0CAgBJA,iBA7DuCA,+DAyBOA,2DASlCA,mDAGAA,4DAGAA,6DAKYA,orBE5CxBA,kBACIA,4BACJA,8BADIA,uDCKD,QAICM,gBACA,OAAQC,KAAKC,IAAIC,YACRC,gBACD,MAAO,oBACNA,aACD,MAAO,0BACNA,gBACD,MAAO,WACNA,mBACAA,eACD,MAAO,iBACNA,cACD,MAAO,QAIfC,gBACA,OAAQJ,KAAKC,IAAIC,YACRC,gBACD,MAAO,eACNA,kBACAA,gBACD,MAAO,aACNA,mBACAA,eACD,MAAO,QACNA,cACD,MAAO,kDA/BVE,8BAAsBR,mLDTnCJ,sBACIA,sBACAA,8BACAA,wBAGJA,eANUA,+BACIA,oCACVA,+CACOA,yRE8BKA,SACIA,8BACJA,eADIA,qFAGAA,sBAAkCA,SAAeA,mCAAvCA,0BAAwBA,iDAJtCA,gCAGAA,0EAHeA,6BAA2B,yCAgC9CA,wBAA+B,oCAMvBA,uBACJA,QACAA,6BAAmB,YAEXA,8BACJA,uCAPAA,qDAMqBA,0DAU7BA,kBACIA,SACJA,mCADIA,6EAEJA,kBACIA,SACJA,mCADIA,4FAKJA,wBAAqC,eAE7BA,uBACAA,8BACJA,QACAA,6BAAmB,YAEXA,8BACJA,uCALAA,uDAIqBA,4DAI7BA,wBAAgC,eAExBA,uBACAA,8BACJA,QACAA,6BAAmB,YAEXA,SACJA,uCALAA,sDAIIA,uIAMZA,wBAA+D,eAEvDA,uBACJA,QACAA,gCAA8C,eAItCA,8DAASA,EAATa,MAASC,2CAITd,uBACAA,8BACJA,kBALIA,mDAIAA,8EAtEhBA,gBACIA,8BACJA,QACAA,gBACIA,kCAcAA,sBAAsCA,SAAmBA,UAG7DA,gBAA8BA,4BAA6BA,QAC3DA,gBACIA,mCACAA,0BAGAA,0BAGJA,QACAA,iBAA8BA,+BAA6BA,QAC3DA,iBACIA,mCAWAA,mCAWJA,QACAA,kBACIA,mCAiBJA,uCAzEqBA,2BAGFA,8BAcLA,wCAA4BA,4BAGZA,wCAELA,wBACfA,0CAGAA,iEAIoBA,wCAEXA,sCAWAA,+BAaAA,yDChGpB,gBACKU,MAQRT,YACYC,EACAG,EACAU,EACRC,EACAC,GAEAC,MAAMF,EAAQC,GANNV,mBACAA,oBACAA,2BAPZA,gBAAa,IAAIY,MAAY,GAC7BZ,iBAAc,IAAIY,MAAY,GAC9BZ,iBAAc,IAAIY,KAAY,OAU1BD,MAAME,WACF,IAAIC,IAAgBd,KAAKe,YAAYC,SAASC,cAAcH,GAC5DA,GAAQA,EAAKI,KACb,CAACJ,EAAMK,MACH,MAAMC,GACyB,QAA3BpB,KAAKqB,YAAYC,MAAkB,KAAO,CAAEC,UAAW,CAAEC,GAAIxB,KAAKqB,YAAYC,QAC5EG,GAAczB,KAAK0B,YAAYJ,MACrC,MAAO,CACHK,QAAS,CACLC,OACAC,QACAC,OAAMC,+BACCX,IACCK,GAAc,CAAEO,UAAW,CAAER,IAAI,IAAY,IAErDS,KAAM,CACFC,UAAW/B,gBAQnCgC,WACIxB,MAAMwB,cACNC,KAAM,IAAM,KACPC,MACG,OAAUrC,KAAKsC,aACfC,KAAO,IAAMvC,KAAKwC,WAAWlB,QAEhCmB,UAAU,KACPzC,KAAK0C,YAEb1C,KAAK2C,QAAU3C,KAAKe,YAAYC,SAC3B4B,eACAC,UAAUlD,GAAOA,EAAImD,WACrBT,QACGU,KAAIpD,GACO,CAAC,CAAEqD,KAAM,MAAOC,SAAS,MAAWtD,KAK3DuD,UAAUvD,GACN,MAAMG,EAASH,EAAIwD,OACnB,OAAc,MAAVrD,IAGkB,iBAAXA,GACAiC,OAAOqB,KAAKtD,GAAQuD,OAAS,GAK5C9C,UAAUZ,GACNK,KAAKe,YAAYC,SAAST,UAAUZ,GAAI8C,UAAU,IAAMzC,KAAK0C,kDAzExDY,GAAgB7D,yFAAhB6D,EAAgBzD,qoCDtB7BJ,0BAAgB,gBAAhBA,CAAgB,2BAAhBA,CAAgB,0BAIAA,mBACAA,iBAAOA,8BAAsCA,UAEjDA,gCAAsB,aAMdA,iCAAUK,cALdL,QAOAA,kBAAOA,gCAA4CA,cAI/DA,yBAAc,kBAWNA,iCAAUK,gCAEVL,gCAQJA,QACAA,mCACJA,UAGJA,6BAKIA,sCAAcK,oBAAdL,CAAoC,wCACdK,+FAEtBL,0BACAA,0BAAeA,gCAAyCA,QACxDA,0BAAeA,gCAAqCA,QACpDA,0BAAeA,gCAAoCA,QACnDA,0BAAeA,gCAAuCA,QACtDA,0BAAeA,gCAAqCA,QACpDA,0BACAA,iCA6EJA,eArImDA,2CAC5BA,iDAMHA,4CAIGA,wDAMXA,4BAAgB,+BAAhBA,CAAgB,kBAAhBA,CAAgB,cAAhBA,CAAgB,eAAhBA,CAAgB,eAAhBA,CAAgB,gBAAhBA,CAAgB,6BAyBxBA,8CAAwB,4CAAxBA,CAAwB,wCAAxBA,CAAwB,2CAQTA,qDACAA,iDACAA,gDACAA,mDACAA,qYEpDZ,MAAM8D,EAAwB,CACjC,CACIC,KAAM,OACNC,UAAWH,EACXI,KAAM,CACFC,cAAYC,KAAE,0BAGtB,CACIJ,KAAM,gBACNC,UAAW7D,EACX8D,KAAM,CACFC,cAAYC,KAAE,+BCJnB,+CAAMC,4DAFA,CAAC1D,MAAc2D,cAAsBP","names":["t","constructor","o","p","selectors","e","iconShape","this","job","state","a","colorType","u","oxw","cancelJob","r","c","T","super","d","setQueryFn","Z","dataService","settings","getAllJobs","jobs","ct","it","queueFilter","value","queueName","eq","mt","hideSettled","options","skip","take","filter","Object","isSettled","sort","createdAt","ngOnInit","S","pipe","destroy$","Q","liveUpdate","subscribe","refresh","queues$","getJobQueues","mapStream","jobQueues","k","name","running","hasResult","result","keys","length","g","C","path","component","data","breadcrumb","A","h","f"],"sources":["./src/lib/system/src/components/health-check/health-check.component.html","./src/lib/system/src/components/health-check/health-check.component.ts","./src/lib/system/src/components/job-state-label/job-state-label.component.html","./src/lib/system/src/components/job-state-label/job-state-label.component.ts","./src/lib/system/src/components/job-list/job-list.component.html","./src/lib/system/src/components/job-list/job-list.component.ts","./src/lib/system/src/system.routes.ts","./src/lib/system/src/system.module.ts"],"sourcesContent":["<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"system-status-header\" *ngIf=\"healthCheckService.status$ | async as status\">\r\n <div class=\"status-icon\">\r\n <clr-icon\r\n [attr.shape]=\"status === 'ok' ? 'check-circle' : 'exclamation-circle'\"\r\n [ngClass]=\"{ 'is-success': status === 'ok', 'is-danger': status !== 'ok' }\"\r\n size=\"48\"\r\n ></clr-icon>\r\n </div>\r\n <div class=\"status-detail\">\r\n <ng-container *ngIf=\"status === 'ok'; else error\">\r\n {{ 'system.health-all-systems-up' | translate }}\r\n </ng-container>\r\n <ng-template #error>\r\n {{ 'system.health-error' | translate }}\r\n </ng-template>\r\n <div class=\"last-checked\">\r\n {{ 'system.health-last-checked' | translate }}:\r\n {{ healthCheckService.lastCheck$ | async | localeDate: 'mediumTime' }}\r\n </div>\r\n </div>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"system-status\"></vdr-action-bar-items>\r\n <button class=\"btn btn-secondary\" (click)=\"healthCheckService.refresh()\">\r\n <clr-icon shape=\"refresh\"></clr-icon> {{ 'system.health-refresh' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th class=\"left\">\r\n {{ 'common.name' | translate }}\r\n </th>\r\n <th class=\"left\">\r\n {{ 'system.health-status' | translate }}\r\n </th>\r\n <th class=\"left\">\r\n {{ 'system.health-message' | translate }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of healthCheckService.details$ | async\">\r\n <td class=\"align-middle left\">{{ row.key }}</td>\r\n <td class=\"align-middle left\">\r\n <vdr-chip [colorType]=\"row.result.status === 'up' ? 'success' : 'error'\">\r\n <ng-container *ngIf=\"row.result.status === 'up'; else down\">\r\n <clr-icon shape=\"check-circle\"></clr-icon>\r\n {{ 'system.health-status-up' | translate }}\r\n </ng-container>\r\n <ng-template #down>\r\n <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n {{ 'system.health-status-down' | translate }}\r\n </ng-template>\r\n </vdr-chip>\r\n </td>\r\n <td class=\"align-middle left\">{{ row.result.message }}</td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { HealthCheckService } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-health-check',\r\n templateUrl: './health-check.component.html',\r\n styleUrls: ['./health-check.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class HealthCheckComponent {\r\n constructor(public healthCheckService: HealthCheckService) {}\r\n}\r\n","<vdr-chip [colorType]=\"colorType\">\r\n <clr-icon [attr.shape]=\"iconShape\" class=\"mr1\"></clr-icon>\r\n {{ job.state | titlecase }}\r\n <span *ngIf=\"job.state === 'RUNNING'\" class=\"progress\">\r\n {{ (job.progress / 100) | percent }}\r\n </span>\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { JobInfoFragment, JobState } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-job-state-label',\r\n templateUrl: './job-state-label.component.html',\r\n styleUrls: ['./job-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class JobStateLabelComponent {\r\n @Input()\r\n job: JobInfoFragment;\r\n\r\n get iconShape(): string {\r\n switch (this.job.state) {\r\n case JobState.COMPLETED:\r\n return 'check-circle';\r\n case JobState.FAILED:\r\n return 'exclamation-circle';\r\n case JobState.CANCELLED:\r\n return 'ban';\r\n case JobState.PENDING:\r\n case JobState.RETRYING:\r\n return 'hourglass';\r\n case JobState.RUNNING:\r\n return 'sync';\r\n }\r\n }\r\n\r\n get colorType(): string {\r\n switch (this.job.state) {\r\n case JobState.COMPLETED:\r\n return 'success';\r\n case JobState.FAILED:\r\n case JobState.CANCELLED:\r\n return 'error';\r\n case JobState.PENDING:\r\n case JobState.RETRYING:\r\n return '';\r\n case JobState.RUNNING:\r\n return 'warning';\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <clr-checkbox-container>\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [formControl]=\"liveUpdate\" name=\"live-update\"/>\r\n <label>{{ 'common.live-update' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [formControl]=\"hideSettled\"\r\n name=\"hide-settled\"\r\n (change)=\"refresh()\"\r\n />\r\n <label>{{ 'system.hide-settled-jobs' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </clr-checkbox-container>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <ng-select\r\n [addTag]=\"false\"\r\n [items]=\"queues$ | async\"\r\n [hideSelected]=\"true\"\r\n [multiple]=\"false\"\r\n [markFirst]=\"false\"\r\n [clearable]=\"false\"\r\n [searchable]=\"false\"\r\n bindValue=\"name\"\r\n [formControl]=\"queueFilter\"\r\n (change)=\"refresh()\"\r\n >\r\n <ng-template ng-label-tmp ng-option-tmp let-item=\"item\">\r\n <ng-container *ngIf=\"item.name === 'all'; else others\">\r\n {{ 'system.all-job-queues' | translate }}\r\n </ng-container>\r\n <ng-template #others>\r\n <vdr-chip [colorFrom]=\"item.name\">{{ item.name }}</vdr-chip>\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n <vdr-action-bar-items locationId=\"job-list\"></vdr-action-bar-items>\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></vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-queue-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.created-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-duration' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'system.job-result' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-job=\"item\">\r\n <td class=\"left align-middle\">\r\n <vdr-entity-info [entity]=\"job\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-dropdown *ngIf=\"job.data\">\r\n <button\r\n class=\"btn btn-link btn-icon\"\r\n vdrDropdownTrigger\r\n [title]=\"'system.job-data' | translate\"\r\n >\r\n <clr-icon shape=\"details\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n <vdr-object-tree [value]=\"job.data\"></vdr-object-tree>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <vdr-chip [colorFrom]=\"job.queueName\">{{ job.queueName }}</vdr-chip>\r\n </td>\r\n\r\n <td class=\"left align-middle\">{{ job.createdAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-job-state-label [job]=\"job\"></vdr-job-state-label>\r\n <div *ngIf=\"job.state === 'FAILED'\" class=\"retry-info\">\r\n after {{ job.attempts }} attempts\r\n </div>\r\n <div *ngIf=\"job.state === 'RUNNING' || job.state === 'RETRYING'\" class=\"retry-info\">\r\n attempting {{ job.attempts + 1 }} of {{ job.retries }}\r\n </div>\r\n </td>\r\n <td class=\"left align-middle\">{{ job.duration | duration }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-dropdown *ngIf=\"hasResult(job)\">\r\n <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"details\"></clr-icon>\r\n {{ 'system.job-result' | translate }}\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n <vdr-object-tree [value]=\"job.result\"></vdr-object-tree>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <vdr-dropdown *ngIf=\"job.error\">\r\n <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n {{ 'system.job-error' | translate }}\r\n </button>\r\n <vdr-dropdown-menu>\r\n <div class=\"result-detail\">\r\n {{ job.error }}\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown *ngIf=\"!job.isSettled && job.state !== 'FAILED'\">\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 type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"cancelJob(job.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteSystem'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"ban\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.cancel' | 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 { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetAllJobsQuery,\r\n GetJobQueueListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable, timer } from 'rxjs';\r\nimport { filter, map, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-job-list',\r\n templateUrl: './job-list.component.html',\r\n styleUrls: ['./job-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class JobListComponent\r\n extends BaseListComponent<GetAllJobsQuery, ItemOf<GetAllJobsQuery, 'jobs'>>\r\n implements OnInit\r\n{\r\n queues$: Observable<GetJobQueueListQuery['jobQueues']>;\r\n liveUpdate = new FormControl(true);\r\n hideSettled = new FormControl(true);\r\n queueFilter = new FormControl('all');\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getAllJobs(...args),\r\n data => data.jobs,\r\n (skip, take) => {\r\n const queueFilter =\r\n this.queueFilter.value === 'all' ? null : { queueName: { eq: this.queueFilter.value } };\r\n const hideSettled = this.hideSettled.value;\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...queueFilter,\r\n ...(hideSettled ? { isSettled: { eq: false } } : {}),\r\n },\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n },\r\n };\r\n },\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n timer(5000, 2000)\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n filter(() => this.liveUpdate.value),\r\n )\r\n .subscribe(() => {\r\n this.refresh();\r\n });\r\n this.queues$ = this.dataService.settings\r\n .getJobQueues()\r\n .mapStream(res => res.jobQueues)\r\n .pipe(\r\n map(queues => {\r\n return [{ name: 'all', running: true }, ...queues];\r\n }),\r\n );\r\n }\r\n\r\n hasResult(job: ItemOf<GetAllJobsQuery, 'jobs'>): boolean {\r\n const result = job.result;\r\n if (result == null) {\r\n return false;\r\n }\r\n if (typeof result === 'object') {\r\n return Object.keys(result).length > 0;\r\n }\r\n return true;\r\n }\r\n\r\n cancelJob(id: string) {\r\n this.dataService.settings.cancelJob(id).subscribe(() => this.refresh());\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\n\r\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\r\nimport { JobListComponent } from './components/job-list/job-list.component';\r\n\r\nexport const systemRoutes: Route[] = [\r\n {\r\n path: 'jobs',\r\n component: JobListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.job-queue'),\r\n },\r\n },\r\n {\r\n path: 'system-status',\r\n component: HealthCheckComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.system-status'),\r\n },\r\n },\r\n];\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { HealthCheckComponent } from './components/health-check/health-check.component';\r\nimport { JobListComponent } from './components/job-list/job-list.component';\r\nimport { JobStateLabelComponent } from './components/job-state-label/job-state-label.component';\r\nimport { systemRoutes } from './system.routes';\r\n\r\n@NgModule({\r\n declarations: [HealthCheckComponent, JobListComponent, JobStateLabelComponent],\r\n imports: [SharedModule, RouterModule.forChild(systemRoutes)],\r\n})\r\nexport class SystemModule {}\r\n"],"sourceRoot":"webpack:///","file":"316.265d65a6a9d1b4c0.js"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkvendure_admin=self.webpackChunkvendure_admin||[]).push([[356],{5356:(vt,D,a)=>{a.r(D),a.d(D,{DEFAULT_DASHBOARD_WIDGET_LAYOUT:()=>S,DEFAULT_WIDGETS:()=>k,DashboardComponent:()=>p,DashboardModule:()=>b,DashboardWidgetComponent:()=>g,LatestOrdersWidgetComponent:()=>m,LatestOrdersWidgetModule:()=>u,OrderSummaryWidgetComponent:()=>h,OrderSummaryWidgetModule:()=>f,TestWidgetComponent:()=>v,TestWidgetModule:()=>y,WelcomeWidgetComponent:()=>_,WelcomeWidgetModule:()=>C,dashboardRoutes:()=>A});var F=a(234),x=a(635),I=a(9337),t=a(3184),d=a(8098),$=a(735),P=a(1519),O=a(2748),R=a(8854),s=a(6362),j=a(5111),w=a(6998),J=a(9416),q=a(4929),Z=a(7514);const N=["portal"];function B(n,e){if(1&n&&(t.ynx(0),t._uU(1),t.ALo(2,"translate"),t.BQk()),2&n){const o=e.ngIf;t.xp6(1),t.Oqu(t.lcZ(2,1,o))}}function Q(n,e){}class g{constructor(e){this.componentFactoryResolver=e}ngAfterViewInit(){this.loadWidget()}loadWidget(){return(0,q.mG)(this,void 0,void 0,function*(){const e=this.widgetConfig.loadComponent(),o=e instanceof Promise?yield e:e;this.componentRef=this.portal.createComponent(this.componentFactoryResolver.resolveComponentFactory(o)),this.componentRef.changeDetectorRef.detectChanges()})}ngOnDestroy(){this.componentRef&&this.componentRef.destroy()}}function E(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"button",7),t.NdJ("click",function(){const c=t.CHM(o).$implicit;return t.oxw().addWidget(c)}),t._uU(1),t.qZA()}if(2&n){const o=e.$implicit;t.xp6(1),t.hij(" ",o," ")}}g.\u0275fac=function(e){return new(e||g)(t.Y36(t._Vd))},g.\u0275cmp=t.Xpm({type:g,selectors:[["vdr-dashboard-widget"]],viewQuery:function(e,o){if(1&e&&t.Gf(N,5,t.s_b),2&e){let r;t.iGM(r=t.CRH())&&(o.portal=r.first)}},inputs:{widgetConfig:"widgetConfig"},ngContentSelectors:["*"],decls:9,vars:1,consts:[[1,"card"],[1,"card-header"],[1,"title"],[4,"ngIf"],[1,"controls"],[1,"card-block"],["portal",""]],template:function(e,o){1&e&&(t.F$t(),t.TgZ(0,"div",0)(1,"div",1)(2,"div",2),t.YNc(3,B,3,3,"ng-container",3),t.qZA(),t.TgZ(4,"div",4),t.Hsn(5),t.qZA()(),t.TgZ(6,"div",5),t.YNc(7,Q,0,0,"ng-template",null,6,t.W1O),t.qZA()()),2&e&&(t.xp6(3),t.Q6J("ngIf",o.widgetConfig.title))},directives:[s.O5],pipes:[Z.X$],styles:["[_nghost-%COMP%]{display:block}.card[_ngcontent-%COMP%]{margin-top:0;min-height:200px}.card-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between}"],changeDetection:0});const H=function(n){return{width:n}};function V(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"button",22),t.NdJ("click",function(){const c=t.CHM(o).$implicit,l=t.oxw(2).$implicit;return t.oxw(2).setWidgetWidth(l,c)}),t._uU(1),t.ALo(2,"translate"),t.qZA()}if(2&n){const o=e.$implicit,r=t.oxw(2).$implicit;t.Q6J("disabled",o===r.width),t.xp6(1),t.hij(" ",t.xi3(2,2,"dashboard.widget-width",t.VKq(5,H,o))," ")}}function z(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"vdr-dashboard-widget",12)(1,"div",13)(2,"div",14),t._UZ(3,"clr-icon",15),t.qZA(),t.TgZ(4,"vdr-dropdown")(5,"button",16),t._UZ(6,"clr-icon",17),t.qZA(),t.TgZ(7,"vdr-dropdown-menu",3)(8,"h4",18),t._uU(9),t.ALo(10,"translate"),t.qZA(),t.YNc(11,V,3,7,"button",19),t._UZ(12,"div",20),t.TgZ(13,"button",7),t.NdJ("click",function(){t.CHM(o);const i=t.oxw().$implicit;return t.oxw(2).removeWidget(i)}),t._UZ(14,"clr-icon",21),t._uU(15),t.ALo(16,"translate"),t.qZA()()()()()}if(2&n){const o=t.oxw().$implicit,r=t.oxw(2);t.Q6J("widgetConfig",o.config),t.xp6(9),t.Oqu(t.lcZ(10,4,"dashboard.widget-resize")),t.xp6(2),t.Q6J("ngForOf",r.getSupportedWidths(o.config)),t.xp6(4),t.hij(" ",t.lcZ(16,6,"dashboard.remove-widget")," ")}}function X(n,e){if(1&n&&(t.TgZ(0,"div",10),t.YNc(1,z,17,8,"vdr-dashboard-widget",11),t.qZA()),2&n){const o=e.$implicit,r=t.oxw(2);t.Q6J("ngClass",r.getClassForWidth(o.width))("cdkDragData",o),t.xp6(1),t.Q6J("vdrIfPermissions",o.config.requiresPermissions||null)}}const G=function(n){return{index:n}};function K(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"div",8),t.NdJ("cdkDropListDropped",function(i){return t.CHM(o),t.oxw().drop(i)}),t.YNc(1,X,2,3,"div",9),t.qZA()}if(2&n){const o=e.$implicit,r=e.index,i=t.oxw();t.Q6J("cdkDropListData",t.VKq(3,G,r)),t.xp6(1),t.Q6J("ngForOf",o)("ngForTrackBy",i.trackRowItem)}}class p{constructor(e,o,r,i){this.dashboardWidgetService=e,this.localStorageService=o,this.changedDetectorRef=r,this.dataService=i,this.deletionMarker="__delete__"}ngOnInit(){this.availableWidgetIds$=this.dataService.client.userStatus().stream$.pipe((0,x.U)(({userStatus:e})=>e.permissions),(0,x.U)(e=>this.dashboardWidgetService.getAvailableIds(e)),(0,I.b)(e=>this.widgetLayout=this.initLayout(e)))}getClassForWidth(e){switch(e){case 3:return"clr-col-12 clr-col-sm-6 clr-col-lg-3";case 4:return"clr-col-12 clr-col-sm-6 clr-col-lg-4";case 6:return"clr-col-12 clr-col-lg-6";case 8:return"clr-col-12 clr-col-lg-8";case 12:return"clr-col-12";default:(0,F.assertNever)(e)}}getSupportedWidths(e){return e.supportedWidths||[3,4,6,8,12]}setWidgetWidth(e,o){e.width=o,this.recalculateLayout()}trackRow(e,o){return o.map(i=>`${i.id}:${i.width}`).join("|")}trackRowItem(e,o){return o.config}addWidget(e){var o;const r=this.dashboardWidgetService.getWidgetById(e);if(r){const c={id:e,config:r,width:this.getSupportedWidths(r)[0]};let l;this.widgetLayout&&this.widgetLayout.length?l=this.widgetLayout[this.widgetLayout.length-1]:(l=[],null===(o=this.widgetLayout)||void 0===o||o.push(l)),l.push(c),this.recalculateLayout()}}removeWidget(e){e.id=this.deletionMarker,this.recalculateLayout()}drop(e){const{currentIndex:o,previousIndex:r,previousContainer:i,container:c}=e;if((r!==o||i.data.index!==c.data.index)&&this.widgetLayout){const l=this.widgetLayout[i.data.index],U=this.widgetLayout[c.data.index];l.splice(r,1),U.splice(o,0,e.item.data),this.recalculateLayout()}}initLayout(e){const o=this.localStorageService.get("dashboardWidgetLayout");let r;return o&&(r=o.filter(i=>e.includes(i.id))),this.dashboardWidgetService.getWidgetLayout(r)}recalculateLayout(){if(this.widgetLayout){const o=this.widgetLayout.reduce((r,i)=>[...r,...i],[]).filter(r=>r.id!==this.deletionMarker).map(r=>({id:r.id,width:r.width}));this.widgetLayout=this.dashboardWidgetService.getWidgetLayout(o),this.localStorageService.set("dashboardWidgetLayout",o),setTimeout(()=>this.changedDetectorRef.markForCheck())}}}p.\u0275fac=function(e){return new(e||p)(t.Y36(d.ayj),t.Y36(d.n2A),t.Y36(t.sBO),t.Y36(d.DoR))},p.\u0275cmp=t.Xpm({type:p,selectors:[["vdr-dashboard"]],decls:11,vars:8,consts:[[1,"widget-header"],["vdrDropdownTrigger","",1,"btn","btn-secondary","btn-sm"],["shape","plus"],["vdrPosition","bottom-right"],["class","button","vdrDropdownItem","",3,"click",4,"ngFor","ngForOf"],["cdkDropListGroup",""],["class","clr-row dashboard-row","cdkDropList","","cdkDropListOrientation","horizontal",3,"cdkDropListData","cdkDropListDropped",4,"ngFor","ngForOf","ngForTrackBy"],["vdrDropdownItem","",1,"button",3,"click"],["cdkDropList","","cdkDropListOrientation","horizontal",1,"clr-row","dashboard-row",3,"cdkDropListData","cdkDropListDropped"],["class","dashboard-item","cdkDrag","",3,"ngClass","cdkDragData",4,"ngFor","ngForOf","ngForTrackBy"],["cdkDrag","",1,"dashboard-item",3,"ngClass","cdkDragData"],[3,"widgetConfig",4,"vdrIfPermissions"],[3,"widgetConfig"],[1,"flex"],["cdkDragHandle","",1,"drag-handle"],["shape","drag-handle","size","24"],["vdrDropdownTrigger","",1,"icon-button"],["shape","ellipsis-vertical"],[1,"dropdown-header"],["class","button","vdrDropdownItem","",3,"disabled","click",4,"ngFor","ngForOf"],["role","separator",1,"dropdown-divider"],["shape","trash",1,"is-danger"],["vdrDropdownItem","",1,"button",3,"disabled","click"]],template:function(e,o){1&e&&(t.TgZ(0,"div",0)(1,"vdr-dropdown")(2,"button",1),t._UZ(3,"clr-icon",2),t._uU(4),t.ALo(5,"translate"),t.qZA(),t.TgZ(6,"vdr-dropdown-menu",3),t.YNc(7,E,2,1,"button",4),t.ALo(8,"async"),t.qZA()()(),t.TgZ(9,"div",5),t.YNc(10,K,2,5,"div",6),t.qZA()),2&e&&(t.xp6(4),t.hij(" ",t.lcZ(5,4,"dashboard.add-widget")," "),t.xp6(3),t.Q6J("ngForOf",t.lcZ(8,6,o.availableWidgetIds$)),t.xp6(3),t.Q6J("ngForOf",o.widgetLayout)("ngForTrackBy",o.trackRow))},directives:[$.J,P.U,O.qvL,R.N,s.sg,j.H,w.Fd,O.q0d,w.Wj,w.Zt,s.mk,J.H,g,w.Bh],pipes:[Z.X$,s.Ov],styles:["[_nghost-%COMP%]{display:block;max-width:1200px;margin:auto}.widget-header[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.placeholder[_ngcontent-%COMP%]{color:var(--color-grey-300);text-align:center}.placeholder[_ngcontent-%COMP%] .version[_ngcontent-%COMP%]{font-size:3em;margin:24px;line-height:1em}.placeholder[_ngcontent-%COMP%] .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget[_ngcontent-%COMP%]{margin-bottom:24px}.cdk-drag-preview[_ngcontent-%COMP%]{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder[_ngcontent-%COMP%]{opacity:0}.cdk-drag-animating[_ngcontent-%COMP%]{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row[_ngcontent-%COMP%]{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging[_ngcontent-%COMP%], .dashboard-row.cdk-drop-list-receiving[_ngcontent-%COMP%]{border:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging[_ngcontent-%COMP%] .dashboard-item[_ngcontent-%COMP%]:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}"],changeDetection:0});var tt=a(9720);const A=[{path:"",component:p,pathMatch:"full"}];var W=a(8270),et=a(365),ot=a(5886),nt=a(458),rt=a(8899),it=a(4187),T=a(6826);const at=function(n){return["/orders/",n]};function dt(n,e){if(1&n&&(t.TgZ(0,"td",1),t._uU(1),t._UZ(2,"vdr-order-state-label",2),t.qZA(),t.TgZ(3,"td",1),t._UZ(4,"vdr-customer-label",3),t.qZA(),t.TgZ(5,"td",1),t._uU(6),t.ALo(7,"localeCurrency"),t.qZA(),t.TgZ(8,"td",1),t._uU(9),t.ALo(10,"timeAgo"),t.qZA(),t.TgZ(11,"td",4),t._UZ(12,"vdr-table-row-action",5),t.ALo(13,"translate"),t.qZA()),2&n){const o=e.item;t.xp6(1),t.hij(" ",o.code," "),t.xp6(1),t.Q6J("state",o.state),t.xp6(2),t.Q6J("customer",o.customer),t.xp6(2),t.Oqu(t.xi3(7,7,o.total,o.currencyCode)),t.xp6(3),t.Oqu(t.lcZ(10,10,o.orderPlacedAt)),t.xp6(3),t.Q6J("label",t.lcZ(13,12,"common.open"))("linkTo",t.VKq(14,at,o.id))}}class m{constructor(e){this.dataService=e}ngOnInit(){this.latestOrders$=this.dataService.order.getOrders({take:10,filter:{active:{eq:!1},state:{notEq:"Cancelled"}},sort:{orderPlacedAt:d.Asd.DESC}}).refetchOnChannelChange().mapStream(e=>e.orders.items)}}m.\u0275fac=function(e){return new(e||m)(t.Y36(d.DoR))},m.\u0275cmp=t.Xpm({type:m,selectors:[["vdr-latest-orders-widget"]],decls:3,vars:3,consts:[[3,"items"],[1,"left","align-middle"],[3,"state"],[3,"customer"],[1,"right","align-middle"],["iconShape","shopping-cart",3,"label","linkTo"]],template:function(e,o){1&e&&(t.TgZ(0,"vdr-data-table",0),t.ALo(1,"async"),t.YNc(2,dt,14,16,"ng-template"),t.qZA()),2&e&&t.Q6J("items",t.lcZ(1,1,o.latestOrders$))},directives:[et.Q,ot.G,nt.d,rt.v],pipes:[s.Ov,it.k,T.e,Z.X$],styles:["vdr-data-table[_ngcontent-%COMP%] table{margin-top:0}"],changeDetection:0});class u{}u.\u0275fac=function(e){return new(e||u)},u.\u0275mod=t.oAB({type:u}),u.\u0275inj=t.cJS({imports:[[d.IR2,d.m81]]});var st=a(704),L=a.n(st),ct=a(6317),lt=a(8977),M=a(9196),gt=a(2673),pt=a(2651);function mt(n,e){if(1&n){const o=t.EpF();t.TgZ(0,"div",7)(1,"button",8),t.NdJ("click",function(){t.CHM(o);const i=t.oxw();return i.selection$.next({timeframe:"day",date:i.today})}),t._uU(2),t.ALo(3,"translate"),t.qZA(),t.TgZ(4,"button",8),t.NdJ("click",function(){t.CHM(o);const i=t.oxw();return i.selection$.next({timeframe:"day",date:i.yesterday})}),t._uU(5),t.ALo(6,"translate"),t.qZA(),t.TgZ(7,"button",8),t.NdJ("click",function(){return t.CHM(o),t.oxw().selection$.next({timeframe:"week"})}),t._uU(8),t.ALo(9,"translate"),t.qZA(),t.TgZ(10,"button",8),t.NdJ("click",function(){return t.CHM(o),t.oxw().selection$.next({timeframe:"month"})}),t._uU(11),t.ALo(12,"translate"),t.qZA()()}if(2&n){const o=e.ngIf,r=t.oxw();t.xp6(1),t.ekj("btn-primary",o.date===r.today),t.xp6(1),t.hij(" ",t.lcZ(3,12,"dashboard.today")," "),t.xp6(2),t.ekj("btn-primary",o.date===r.yesterday),t.xp6(1),t.hij(" ",t.lcZ(6,14,"dashboard.yesterday")," "),t.xp6(2),t.ekj("btn-primary","week"===o.timeframe),t.xp6(1),t.hij(" ",t.lcZ(9,16,"dashboard.thisWeek")," "),t.xp6(2),t.ekj("btn-primary","month"===o.timeframe),t.xp6(1),t.hij(" ",t.lcZ(12,18,"dashboard.thisMonth")," ")}}function ut(n,e){if(1&n&&(t.TgZ(0,"div",9),t._uU(1),t.ALo(2,"localeDate"),t.ALo(3,"localeDate"),t.qZA()),2&n){const o=e.ngIf;t.xp6(1),t.AsE(" ",t.lcZ(2,2,o.start)," - ",t.lcZ(3,4,o.end)," ")}}class h{constructor(e){this.dataService=e,this.today=new Date,this.yesterday=new Date((new Date).setDate(this.today.getDate()-1)),this.selection$=new ct.X({timeframe:"day",date:this.today})}ngOnInit(){this.dateRange$=this.selection$.pipe((0,lt.x)(),(0,x.U)(o=>({start:L()(o.date).startOf(o.timeframe).toDate(),end:L()(o.date).endOf(o.timeframe).toDate()})),(0,M.d)(1));const e=this.dateRange$.pipe((0,gt.w)(({start:o,end:r})=>this.dataService.order.getOrderSummary(o,r).refetchOnChannelChange().mapStream(i=>i.orders)),(0,M.d)(1));this.totalOrderCount$=e.pipe((0,x.U)(o=>o.totalItems)),this.totalOrderValue$=e.pipe((0,x.U)(o=>o.items.reduce((r,i)=>r+i.total,0)/100)),this.currencyCode$=this.dataService.settings.getActiveChannel().refetchOnChannelChange().mapStream(o=>o.activeChannel.currencyCode||void 0)}}h.\u0275fac=function(e){return new(e||h)(t.Y36(d.DoR))},h.\u0275cmp=t.Xpm({type:h,selectors:[["vdr-order-summary-widget"]],decls:22,vars:23,consts:[[1,"stats"],[1,"stat"],[1,"stat-figure"],[1,"stat-label"],[1,"footer"],["class","btn-group btn-outline-primary btn-sm",4,"ngIf"],["class","date-range p5",4,"ngIf"],[1,"btn-group","btn-outline-primary","btn-sm"],[1,"btn",3,"click"],[1,"date-range","p5"]],template:function(e,o){1&e&&(t.TgZ(0,"div",0)(1,"div",1)(2,"div",2),t._uU(3),t.ALo(4,"async"),t.qZA(),t.TgZ(5,"div",3),t._uU(6),t.ALo(7,"translate"),t.qZA()(),t.TgZ(8,"div",1)(9,"div",2),t._uU(10),t.ALo(11,"currency"),t.ALo(12,"async"),t.ALo(13,"async"),t.qZA(),t.TgZ(14,"div",3),t._uU(15),t.ALo(16,"translate"),t.qZA()()(),t.TgZ(17,"div",4),t.YNc(18,mt,13,20,"div",5),t.ALo(19,"async"),t.YNc(20,ut,4,6,"div",6),t.ALo(21,"async"),t.qZA()),2&e&&(t.xp6(3),t.Oqu(t.lcZ(4,6,o.totalOrderCount$)),t.xp6(3),t.Oqu(t.lcZ(7,8,"dashboard.total-orders")),t.xp6(4),t.hij(" ",t.xi3(11,10,t.lcZ(12,13,o.totalOrderValue$),t.lcZ(13,15,o.currencyCode$)||void 0)," "),t.xp6(5),t.Oqu(t.lcZ(16,17,"dashboard.total-order-value")),t.xp6(3),t.Q6J("ngIf",t.lcZ(19,19,o.selection$)),t.xp6(2),t.Q6J("ngIf",t.lcZ(21,21,o.dateRange$)))},directives:[s.O5],pipes:[s.Ov,Z.X$,s.H9,pt.H],styles:[".stats[_ngcontent-%COMP%]{display:flex;justify-content:space-evenly}.stat[_ngcontent-%COMP%]{text-align:center}.stat-figure[_ngcontent-%COMP%]{font-size:2rem;line-height:3rem}.stat-label[_ngcontent-%COMP%]{text-transform:uppercase}.date-range[_ngcontent-%COMP%]{margin-top:0}.footer[_ngcontent-%COMP%]{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}"],changeDetection:0});class f{}f.\u0275fac=function(e){return new(e||f)},f.\u0275mod=t.oAB({type:f}),f.\u0275inj=t.cJS({imports:[[d.IR2]]});class v{}v.\u0275fac=function(e){return new(e||v)},v.\u0275cmp=t.Xpm({type:v,selectors:[["vdr-test-widget"]],decls:2,vars:0,template:function(e,o){1&e&&(t.TgZ(0,"p"),t._uU(1,"This is a test widget!"),t.qZA())},styles:[""],changeDetection:0});class y{}function ht(n,e){if(1&n&&(t.TgZ(0,"p",4),t._uU(1),t.qZA()),2&n){const o=t.oxw(2);t.xp6(1),t.AsE(" ",o.hideVendureBranding?"":"Vendure"," ",o.hideVersion?"":"Admin UI v"+o.version," ")}}function ft(n,e){if(1&n&&(t.TgZ(0,"div")(1,"h4",3),t._uU(2),t._UZ(3,"br"),t.TgZ(4,"small",4),t._uU(5),t.ALo(6,"timeAgo"),t.qZA()(),t.YNc(7,ht,2,2,"p",5),t.qZA()),2&n){const o=e.ngIf,r=t.oxw();t.xp6(2),t.AsE(" Welcome, ",o.firstName," ",o.lastName,""),t.xp6(3),t.hij("Last login: ",t.lcZ(6,4,o.user.lastLogin),""),t.xp6(2),t.Q6J("ngIf",!r.hideVendureBranding||!r.hideVersion)}}y.\u0275fac=function(e){return new(e||y)},y.\u0275mod=t.oAB({type:y}),y.\u0275inj=t.cJS({});class _{constructor(e){this.dataService=e,this.version=d.s5M,this.brand=(0,d.hq7)().brand,this.hideVendureBranding=(0,d.hq7)().hideVendureBranding,this.hideVersion=(0,d.hq7)().hideVersion}ngOnInit(){this.administrator$=this.dataService.administrator.getActiveAdministrator().mapStream(e=>e.activeAdministrator||null)}}_.\u0275fac=function(e){return new(e||_)(t.Y36(d.DoR))},_.\u0275cmp=t.Xpm({type:_,selectors:[["vdr-welcome-widget"]],decls:4,vars:3,consts:[[4,"ngIf"],[1,"placeholder"],["shape","line-chart","size","128"],[1,"h4"],[1,"p5"],["class","p5",4,"ngIf"]],template:function(e,o){1&e&&(t.YNc(0,ft,8,6,"div",0),t.ALo(1,"async"),t.TgZ(2,"div",1),t._UZ(3,"clr-icon",2),t.qZA()),2&e&&t.Q6J("ngIf",t.lcZ(1,1,o.administrator$))},directives:[s.O5,O.qvL],pipes:[s.Ov,T.e],styles:["[_nghost-%COMP%]{display:flex;justify-content:space-between}.placeholder[_ngcontent-%COMP%]{color:var(--color-grey-200)}"],changeDetection:0});class C{}C.\u0275fac=function(e){return new(e||C)},C.\u0275mod=t.oAB({type:C}),C.\u0275inj=t.cJS({imports:[[d.IR2]]});const S=[{id:"welcome",width:12},{id:"orderSummary",width:6},{id:"latestOrders",width:6}],k={welcome:{loadComponent:()=>_},orderSummary:{title:(0,W.J)("dashboard.orders-summary"),loadComponent:()=>h,requiresPermissions:[d.y3$.ReadOrder]},latestOrders:{title:(0,W.J)("dashboard.latest-orders"),loadComponent:()=>m,supportedWidths:[6,8,12],requiresPermissions:[d.y3$.ReadOrder]},testWidget:{title:"Test Widget",loadComponent:()=>v}};class b{constructor(e){Object.entries(k).map(([o,r])=>{e.getWidgetById(o)||e.registerWidget(o,r)}),0===e.getDefaultLayout().length&&e.setDefaultLayout(S)}}b.\u0275fac=function(e){return new(e||b)(t.LFG(d.ayj))},b.\u0275mod=t.oAB({type:b}),b.\u0275inj=t.cJS({imports:[[d.m81,tt.Bz.forChild(A)]]})}}]);
|
|
2
|
+
//# sourceMappingURL=356.975f7f2d201afda5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":["t","constructor","e","ngAfterViewInit","this","loadWidget","widgetConfig","loadComponent","o","Promise","componentRef","portal","createComponent","componentFactoryResolver","resolveComponentFactory","changeDetectorRef","detectChanges","ngOnDestroy","destroy","addWidget","g","selectors","oxw","setWidgetWidth","removeWidget","drop","r","i","ngOnInit","availableWidgetIds$","dataService","client","userStatus","stream$","pipe","x","permissions","dashboardWidgetService","getAvailableIds","I","widgetLayout","initLayout","getClassForWidth","F","getSupportedWidths","supportedWidths","width","recalculateLayout","trackRow","map","id","join","trackRowItem","config","getWidgetById","c","l","length","push","deletionMarker","currentIndex","previousIndex","previousContainer","container","data","index","U","splice","item","localStorageService","get","filter","includes","getWidgetLayout","reduce","set","setTimeout","changedDetectorRef","markForCheck","p","A","path","component","pathMatch","latestOrders$","order","getOrders","take","active","eq","state","notEq","sort","orderPlacedAt","d","refetchOnChannelChange","mapStream","orders","items","m","u","date","selection$","Date","setDate","today","getDate","ct","timeframe","dateRange$","lt","start","L","startOf","toDate","end","endOf","M","gt","getOrderSummary","totalOrderCount$","totalItems","totalOrderValue$","total","currencyCode$","settings","getActiveChannel","activeChannel","currencyCode","h","f","v","y","brand","hideVendureBranding","hideVersion","administrator$","administrator","getActiveAdministrator","activeAdministrator","_","C","S","k","welcome","orderSummary","title","W","requiresPermissions","latestOrders","testWidget","Object","entries","registerWidget","getDefaultLayout","setDefaultLayout","b","tt"],"sources":["./src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.html","./src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.ts","./src/lib/dashboard/src/components/dashboard/dashboard.component.html","./src/lib/dashboard/src/components/dashboard/dashboard.component.ts","./src/lib/dashboard/src/dashboard.routes.ts","./src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.html","./src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.ts","./src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.html","./src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.ts","./src/lib/dashboard/src/widgets/test-widget/test-widget.component.ts","./src/lib/dashboard/src/widgets/test-widget/test-widget.component.html","./src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.html","./src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.ts","./src/lib/dashboard/src/default-widgets.ts","./src/lib/dashboard/src/dashboard.module.ts"],"sourcesContent":["<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"title\">\r\n <ng-container *ngIf=\"widgetConfig.title as title\">{{ title | translate }}</ng-container>\r\n </div>\r\n <div class=\"controls\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <ng-template #portal></ng-template>\r\n </div>\r\n</div>\r\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DashboardWidgetConfig } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-dashboard-widget',\n templateUrl: './dashboard-widget.component.html',\n styleUrls: ['./dashboard-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardWidgetComponent implements AfterViewInit, OnDestroy {\n @Input() widgetConfig: DashboardWidgetConfig;\n\n @ViewChild('portal', { read: ViewContainerRef })\n private portal: ViewContainerRef;\n\n private componentRef: ComponentRef<any>;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {}\n\n ngAfterViewInit(): void {\n this.loadWidget();\n }\n\n private async loadWidget() {\n const loadComponentResult = this.widgetConfig.loadComponent();\n const componentType =\n loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;\n this.componentRef = this.portal.createComponent(\n this.componentFactoryResolver.resolveComponentFactory(componentType),\n );\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </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 <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport {\r\n DashboardWidgetConfig,\r\n DashboardWidgetService,\r\n DashboardWidgetWidth,\r\n DataService,\r\n LocalStorageService,\r\n WidgetLayout,\r\n WidgetLayoutDefinition,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever } from '@vendure/common/lib/shared-utils';\r\nimport { Observable } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n widgetLayout: WidgetLayout | undefined;\r\n availableWidgetIds$: Observable<string[]>;\r\n private readonly deletionMarker = '__delete__';\r\n\r\n constructor(\r\n private dashboardWidgetService: DashboardWidgetService,\r\n private localStorageService: LocalStorageService,\r\n private changedDetectorRef: ChangeDetectorRef,\r\n private dataService: DataService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableWidgetIds$ = this.dataService.client.userStatus().stream$.pipe(\r\n map(({ userStatus }) => userStatus.permissions),\r\n map(permissions => this.dashboardWidgetService.getAvailableIds(permissions)),\r\n tap(ids => (this.widgetLayout = this.initLayout(ids))),\r\n );\r\n }\r\n\r\n getClassForWidth(width: DashboardWidgetWidth): string {\r\n switch (width) {\r\n case 3:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-3`;\r\n case 4:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-4`;\r\n case 6:\r\n return `clr-col-12 clr-col-lg-6`;\r\n case 8:\r\n return `clr-col-12 clr-col-lg-8`;\r\n case 12:\r\n return `clr-col-12`;\r\n default:\r\n assertNever(width);\r\n }\r\n }\r\n\r\n getSupportedWidths(config: DashboardWidgetConfig): DashboardWidgetWidth[] {\r\n return config.supportedWidths || [3, 4, 6, 8, 12];\r\n }\r\n\r\n setWidgetWidth(widget: WidgetLayout[number][number], width: DashboardWidgetWidth) {\r\n widget.width = width;\r\n this.recalculateLayout();\r\n }\r\n\r\n trackRow(index: number, row: WidgetLayout[number]) {\r\n const id = row.map(item => `${item.id}:${item.width}`).join('|');\r\n return id;\r\n }\r\n\r\n trackRowItem(index: number, item: WidgetLayout[number][number]) {\r\n return item.config;\r\n }\r\n\r\n addWidget(id: string) {\r\n const config = this.dashboardWidgetService.getWidgetById(id);\r\n if (config) {\r\n const width = this.getSupportedWidths(config)[0];\r\n const widget: WidgetLayout[number][number] = {\r\n id,\r\n config,\r\n width,\r\n };\r\n let targetRow: WidgetLayout[number];\r\n if (this.widgetLayout && this.widgetLayout.length) {\r\n targetRow = this.widgetLayout[this.widgetLayout.length - 1];\r\n } else {\r\n targetRow = [];\r\n this.widgetLayout?.push(targetRow);\r\n }\r\n targetRow.push(widget);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n removeWidget(widget: WidgetLayout[number][number]) {\r\n widget.id = this.deletionMarker;\r\n this.recalculateLayout();\r\n }\r\n\r\n drop(event: CdkDragDrop<{ index: number }>) {\r\n const { currentIndex, previousIndex, previousContainer, container } = event;\r\n if (previousIndex === currentIndex && previousContainer.data.index === container.data.index) {\r\n // Nothing changed\r\n return;\r\n }\r\n if (this.widgetLayout) {\r\n const previousLayoutRow = this.widgetLayout[previousContainer.data.index];\r\n const newLayoutRow = this.widgetLayout[container.data.index];\r\n\r\n previousLayoutRow.splice(previousIndex, 1);\r\n newLayoutRow.splice(currentIndex, 0, event.item.data);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n private initLayout(availableIds: string[]): WidgetLayout {\r\n const savedLayoutDef = this.localStorageService.get('dashboardWidgetLayout');\r\n let layoutDef: WidgetLayoutDefinition | undefined;\r\n if (savedLayoutDef) {\r\n // validate all the IDs from the saved layout are still available\r\n layoutDef = savedLayoutDef.filter(item => availableIds.includes(item.id));\r\n }\r\n return this.dashboardWidgetService.getWidgetLayout(layoutDef);\r\n }\r\n\r\n private recalculateLayout() {\r\n if (this.widgetLayout) {\r\n const flattened = this.widgetLayout\r\n .reduce((flat, row) => [...flat, ...row], [])\r\n .filter(item => item.id !== this.deletionMarker);\r\n const newLayoutDef: WidgetLayoutDefinition = flattened.map(item => ({\r\n id: item.id,\r\n width: item.width,\r\n }));\r\n this.widgetLayout = this.dashboardWidgetService.getWidgetLayout(newLayoutDef);\r\n this.localStorageService.set('dashboardWidgetLayout', newLayoutDef);\r\n setTimeout(() => this.changedDetectorRef.markForCheck());\r\n }\r\n }\r\n}\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\n\r\nexport const dashboardRoutes: Routes = [\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n pathMatch: 'full',\r\n },\r\n];\r\n","<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\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","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n CoreModule,\r\n DataService,\r\n GetOrderListQuery,\r\n ItemOf,\r\n SharedModule,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-latest-orders-widget',\r\n templateUrl: './latest-orders-widget.component.html',\r\n styleUrls: ['./latest-orders-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LatestOrdersWidgetComponent implements OnInit {\r\n latestOrders$: Observable<Array<ItemOf<GetOrderListQuery, 'orders'>>>;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.latestOrders$ = this.dataService.order\r\n .getOrders({\r\n take: 10,\r\n filter: {\r\n active: { eq: false },\r\n state: { notEq: 'Cancelled' },\r\n },\r\n sort: {\r\n orderPlacedAt: SortOrder.DESC,\r\n },\r\n })\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders.items);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule, SharedModule],\r\n declarations: [LatestOrdersWidgetComponent],\r\n})\r\nexport class LatestOrdersWidgetModule {}\r\n","<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport { CoreModule, DataService } from '@vendure/admin-ui/core';\r\nimport dayjs from 'dayjs';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nexport type Timeframe = 'day' | 'week' | 'month';\r\n\r\n@Component({\r\n selector: 'vdr-order-summary-widget',\r\n templateUrl: './order-summary-widget.component.html',\r\n styleUrls: ['./order-summary-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderSummaryWidgetComponent implements OnInit {\r\n today = new Date();\r\n yesterday = new Date(new Date().setDate(this.today.getDate() - 1));\r\n totalOrderCount$: Observable<number>;\r\n totalOrderValue$: Observable<number>;\r\n currencyCode$: Observable<string | undefined>;\r\n selection$ = new BehaviorSubject<{ timeframe: Timeframe; date?: Date }>({\r\n timeframe: 'day',\r\n date: this.today,\r\n });\r\n dateRange$: Observable<{ start: Date; end: Date }>;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.dateRange$ = this.selection$.pipe(\r\n distinctUntilChanged(),\r\n map(selection => {\r\n return {\r\n start: dayjs(selection.date).startOf(selection.timeframe).toDate(),\r\n end: dayjs(selection.date).endOf(selection.timeframe).toDate(),\r\n };\r\n }),\r\n shareReplay(1),\r\n );\r\n const orderSummary$ = this.dateRange$.pipe(\r\n switchMap(({ start, end }) => {\r\n return this.dataService.order\r\n .getOrderSummary(start, end)\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders);\r\n }),\r\n shareReplay(1),\r\n );\r\n this.totalOrderCount$ = orderSummary$.pipe(map(res => res.totalItems));\r\n this.totalOrderValue$ = orderSummary$.pipe(\r\n map(res => res.items.reduce((total, order) => total + order.total, 0) / 100),\r\n );\r\n this.currencyCode$ = this.dataService.settings\r\n .getActiveChannel()\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel.currencyCode || undefined);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [OrderSummaryWidgetComponent],\r\n})\r\nexport class OrderSummaryWidgetModule {}\r\n","import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\n\n@Component({\n selector: 'vdr-test-widget',\n templateUrl: './test-widget.component.html',\n styleUrls: ['./test-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestWidgetComponent {}\n\n@NgModule({\n declarations: [TestWidgetComponent],\n})\nexport class TestWidgetModule {}\n","<p>This is a test widget!</p>\r\n","<div *ngIf=\"administrator$ | async as administrator\">\r\n <h4 class=\"h4\">\r\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\r\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\r\n </h4>\r\n\r\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\r\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\r\n </p>\r\n</div>\r\n<div class=\"placeholder\">\r\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n ADMIN_UI_VERSION,\r\n CoreModule,\r\n DataService,\r\n GetActiveAdministratorQuery,\r\n getAppConfig,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-welcome-widget',\r\n templateUrl: './welcome-widget.component.html',\r\n styleUrls: ['./welcome-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WelcomeWidgetComponent implements OnInit {\r\n version = ADMIN_UI_VERSION;\r\n administrator$: Observable<GetActiveAdministratorQuery['activeAdministrator']>;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.administrator$ = this.dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator || null);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [WelcomeWidgetComponent],\r\n})\r\nexport class WelcomeWidgetModule {}\r\n","import { APP_INITIALIZER, FactoryProvider } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DashboardWidgetConfig,\n DashboardWidgetService,\n Permission,\n WidgetLayoutDefinition,\n} from '@vendure/admin-ui/core';\n\nimport { LatestOrdersWidgetComponent } from './widgets/latest-orders-widget/latest-orders-widget.component';\nimport { OrderSummaryWidgetComponent } from './widgets/order-summary-widget/order-summary-widget.component';\nimport { TestWidgetComponent } from './widgets/test-widget/test-widget.component';\nimport { WelcomeWidgetComponent } from './widgets/welcome-widget/welcome-widget.component';\n\nexport const DEFAULT_DASHBOARD_WIDGET_LAYOUT: WidgetLayoutDefinition = [\n { id: 'welcome', width: 12 },\n { id: 'orderSummary', width: 6 },\n { id: 'latestOrders', width: 6 },\n];\n\nexport const DEFAULT_WIDGETS: { [id: string]: DashboardWidgetConfig } = {\n welcome: {\n loadComponent: () => WelcomeWidgetComponent,\n },\n orderSummary: {\n title: _('dashboard.orders-summary'),\n loadComponent: () => OrderSummaryWidgetComponent,\n requiresPermissions: [Permission.ReadOrder],\n },\n latestOrders: {\n title: _('dashboard.latest-orders'),\n loadComponent: () => LatestOrdersWidgetComponent,\n supportedWidths: [6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n testWidget: {\n title: 'Test Widget',\n loadComponent: () => TestWidgetComponent,\n },\n};\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { DashboardWidgetService, SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { DashboardWidgetComponent } from './components/dashboard-widget/dashboard-widget.component';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { dashboardRoutes } from './dashboard.routes';\r\nimport { DEFAULT_DASHBOARD_WIDGET_LAYOUT, DEFAULT_WIDGETS } from './default-widgets';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],\r\n declarations: [DashboardComponent, DashboardWidgetComponent],\r\n})\r\nexport class DashboardModule {\r\n constructor(dashboardWidgetService: DashboardWidgetService) {\r\n Object.entries(DEFAULT_WIDGETS).map(([id, config]) => {\r\n if (!dashboardWidgetService.getWidgetById(id)) {\r\n dashboardWidgetService.registerWidget(id, config);\r\n }\r\n });\r\n if (dashboardWidgetService.getDefaultLayout().length === 0) {\r\n dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);\r\n }\r\n }\r\n}\r\n"],"sourceRoot":"webpack:///","file":"356.975f7f2d201afda5.js"}
|
|
@@ -947,6 +947,29 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
947
947
|
THE SOFTWARE.
|
|
948
948
|
|
|
949
949
|
|
|
950
|
+
prosemirror-tables
|
|
951
|
+
MIT
|
|
952
|
+
Copyright (C) 2015-2016 by Marijn Haverbeke <marijnh@gmail.com> and others
|
|
953
|
+
|
|
954
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
955
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
956
|
+
in the Software without restriction, including without limitation the rights
|
|
957
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
958
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
959
|
+
furnished to do so, subject to the following conditions:
|
|
960
|
+
|
|
961
|
+
The above copyright notice and this permission notice shall be included in
|
|
962
|
+
all copies or substantial portions of the Software.
|
|
963
|
+
|
|
964
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
965
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
966
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
967
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
968
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
969
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
970
|
+
THE SOFTWARE.
|
|
971
|
+
|
|
972
|
+
|
|
950
973
|
prosemirror-transform
|
|
951
974
|
MIT
|
|
952
975
|
Copyright (C) 2015-2017 by Marijn Haverbeke <marijnh@gmail.com> and others
|