1"use strict";(self.webpackChunkclient=self.webpackChunkclient||[]).push([[3582],{13582:(X,_,a)=>{a.r(_),a.d(_,{UsersModule:()=>d});var l=a(69808),c=a(93075),u=a(82349),w=a(57261),P=a(43261),Z=a(71353),x=a(99826),C=a(54983),y=a(76514),h=a(4128),T=a(39646),U=a(70262);function b(o){if(!o)return"";const n=o.replace(/^ROLE_/,"").replace(/_/g," ").toLowerCase().replace(/\b\w/g,t=>t.toUpperCase());return"("+o+") "+n}var e=a(5e3),v=a(24376),O=a(12528);function k(o,n){1&o&&(e.TgZ(0,"div",7),e._uU(1,"Loading\u2026"),e.qZA())}function A(o,n){1&o&&(e.TgZ(0,"div",8),e._uU(1,"Could not load this user's access."),e.qZA())}function N(o,n){if(1&o){const t=e.EpF();e.TgZ(0,"button",27),e.NdJ("click",function(){e.CHM(t);const s=e.oxw().$implicit,i=e.oxw(2);return e.KtG(i.toggleRole(s))}),e._uU(1),e.qZA()}if(2&o){const t=e.oxw().$implicit,r=e.oxw(2);e.Q6J("disabled",!r.hasReason||r.roleBusy),e.xp6(1),e.hij(" ",t.active?"Deactivate":"Activate"," ")}}function R(o,n){1&o&&(e.TgZ(0,"span",28),e._uU(1," Managed elsewhere "),e.qZA())}function j(o,n){if(1&o&&(e.TgZ(0,"div",21)(1,"span",22),e._uU(2),e.qZA(),e.TgZ(3,"span",23),e._uU(4),e.qZA(),e.TgZ(5,"span",24),e._uU(6),e.qZA(),e.YNc(7,N,2,2,"button",25),e.YNc(8,R,2,0,"span",26),e.qZA()),2&o){const t=n.$implicit,r=e.oxw(2);e.xp6(1),e.Q6J("ngClass",t.active?"fi-badge-sent":"fi-badge-failed"),e.xp6(1),e.hij(" ",t.active?"Active":"Inactive"," "),e.xp6(2),e.Oqu(r.roleLabel(t.roleName)),e.xp6(2),e.Oqu(t.roleType),e.xp6(1),e.Q6J("ngIf",t.manageable),e.xp6(1),e.Q6J("ngIf",!t.manageable)}}function J(o,n){1&o&&(e.TgZ(0,"div",29),e._uU(1,"No roles assigned."),e.qZA())}function L(o,n){if(1&o){const t=e.EpF();e.TgZ(0,"label",35)(1,"input",36),e.NdJ("change",function(){const i=e.CHM(t).$implicit,f=e.oxw(4);return e.KtG(f.toggle(i.code))}),e.qZA(),e.TgZ(2,"span",37),e._uU(3),e.qZA(),e.TgZ(4,"span",38),e._uU(5),e.qZA()()}if(2&o){const t=n.$implicit,r=e.oxw(4);e.xp6(1),e.Q6J("checked",r.isChecked(t.code)),e.xp6(2),e.Oqu(t.code),e.xp6(2),e.Oqu(t.description)}}function I(o,n){if(1&o&&(e.TgZ(0,"div",32)(1,"div",33),e._uU(2),e.qZA(),e.YNc(3,L,6,3,"label",34),e.qZA()),2&o){const t=n.$implicit;e.xp6(2),e.Oqu(t.domain),e.xp6(1),e.Q6J("ngForOf",t.items)}}function E(o,n){if(1&o){const t=e.EpF();e.TgZ(0,"div",12)(1,"div",13),e._uU(2,"Console permissions"),e.qZA(),e.YNc(3,I,4,2,"div",30),e.TgZ(4,"div",31)(5,"button",18),e.NdJ("click",function(){e.CHM(t);const s=e.oxw(2);return e.KtG(s.savePermissions())}),e._uU(6),e.qZA()()()}if(2&o){const t=e.oxw(2);e.xp6(3),e.Q6J("ngForOf",t.sections),e.xp6(2),e.Q6J("disabled",!t.canSavePerms),e.xp6(1),e.hij(" ",t.permSaving?"Saving\u2026":"Save permissions"," ")}}function q(o,n){1&o&&(e.TgZ(0,"p",39),e._uU(1," Add and activate "),e.TgZ(2,"b"),e._uU(3,"ROLE_INTERNAL_CONSOLE"),e.qZA(),e._uU(4," above to assign console permissions. "),e.qZA())}function B(o,n){if(1&o){const t=e.EpF();e.ynx(0),e.TgZ(1,"p",9),e._uU(2),e.qZA(),e.TgZ(3,"div",10)(4,"label"),e._uU(5,"Reason (required for any change)"),e.qZA(),e.TgZ(6,"input",11),e.NdJ("ngModelChange",function(s){e.CHM(t);const i=e.oxw();return e.KtG(i.reason=s)}),e.qZA()(),e.TgZ(7,"div",12)(8,"div",13),e._uU(9,"Roles"),e.qZA(),e.YNc(10,j,9,6,"div",14),e.YNc(11,J,2,0,"div",15),e.TgZ(12,"div",16)(13,"ng-select",17),e.NdJ("ngModelChange",function(s){e.CHM(t);const i=e.oxw();return e.KtG(i.addRoleValue=s)}),e.qZA(),e.TgZ(14,"button",18),e.NdJ("click",function(){e.CHM(t);const s=e.oxw();return e.KtG(s.addRole())}),e._uU(15," Add "),e.qZA()()(),e.YNc(16,E,7,3,"div",19),e.YNc(17,q,5,0,"p",20),e.BQk()}if(2&o){const t=e.oxw();e.xp6(2),e.Oqu(t.data.displayName),e.xp6(4),e.Q6J("ngModel",t.reason),e.xp6(4),e.Q6J("ngForOf",t.userRoles),e.xp6(1),e.Q6J("ngIf",0===t.userRoles.length),e.xp6(2),e.Q6J("items",t.addableRoles)("ngModel",t.addRoleValue)("clearable",!0),e.xp6(1),e.Q6J("disabled",!t.addRoleValue||!t.hasReason||t.roleBusy),e.xp6(2),e.Q6J("ngIf",t.consoleActive),e.xp6(1),e.Q6J("ngIf",!t.consoleActive)}}class p{constructor(n,t,r,s){Object.defineProperty(this,"accessControl",{enumerable:!0,configurable:!0,writable:!0,value:n}),Object.defineProperty(this,"notify",{enumerable:!0,configurable:!0,writable:!0,value:t}
1),Object.defineProperty(this,"dialogRef",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:s}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"loadError",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"reason",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"changed",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"userRoles",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"allRoleOptions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"addableRoles",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"roleLabel",{enumerable:!0,configurable:!0,writable:!0,value:b}),Object.defineProperty(this,"addRoleValue",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"roleBusy",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"sections",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"checked",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"original",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"permSaving",{enumerable:!0,configurable:!0,writable:!0,value:!1})}ngOnInit(){(0,h.D)([this.accessControl.getUserRoles(this.data.entityId),this.accessControl.getManageableRoles().pipe((0,U.K)(()=>(0,T.of)([]))),this.accessControl.getCatalog(),this.accessControl.getUserAccess(this.data.entityId)]).subscribe(([n,t,r,s])=>{this.userRoles=n||[],this.allRoleOptions=(t||[]).map(i=>({label:b(i),value:i})),this.recomputeAddableRoles(),this.sections=this.groupByDomain(r),this.setPermissions(s?s.permissions:[]),this.loading=!1},()=>{this.loadError=!0,this.loading=!1})}refresh(){(0,h.D)([this.accessControl.getUserRoles(this.data.entityId),this.accessControl.getUserAccess(this.data.entityId)]).subscribe(([n,t])=>{this.userRoles=n||[],this.recomputeAddableRoles(),this.setPermissions(t?t.permissions:[])})}setPermissions(n){this.checked=new Set,this.original=new Set,(n||[]).forEach(t=>{t.code&&(this.checked.add(t.code),this.original.add(t.code))})}get hasReason(){return this.reason.trim().length>0}get consoleActive(){return this.userRoles.some(n=>"ROLE_INTERNAL_CONSOLE"===n.roleName&&n.active)}recomputeAddableRoles(){const n=new Set(this.userRoles.filter(t=>t.active).map(t=>t.roleName));this.addableRoles=this.allRoleOptions.filter(t=>!n.has(t.value))}addRole(){if(!this.addRoleValue||!this.hasReason||this.roleBusy)return;const n=this.addRoleValue;this.roleBusy=!0,this.accessControl.assignRole(this.data.entityId,n,this.reason.trim()).subscribe(()=>{this.roleBusy=!1,this.changed=!0,this.addRoleValue=null,this.notify.success("Role "+n+" assigned."),this.refresh()},()=>{this.roleBusy=!1,this.notify.error("Could not assign "+n+".")})}toggleRole(n){if(!n.manageable||!this.hasReason||this.roleBusy)return;const t=!n.active;this.roleBusy=!0,this.accessControl.setRoleActive(this.data.entityId,n.roleName,t,this.reason.trim()).subscribe(()=>{this.roleBusy=!1,this.changed=!0,this.notify.success("Role "+n.roleName+(t?" activated.":" deactivated.")),this.refresh()},()=>{this.roleBusy=!1,this.notify.error("Could not update "+n.roleName+".")})}isChecked(n){return this.checked.has(n)}toggle(n){this.checked.has(n)?this.checked.delete(n):this.checked.add(n)}get permDirty(){if(this.checked.size!==this.original.size)return!0;let n=!0;return this.checked.forEach(t=>{this.original.has(t)||(n=!1)}),!n}get canSavePerms(){return!this.permSaving&&this.permDirty&&this.hasReason}savePermissions(){const n=this.reason.trim(),t=this.data.entityId,r=[];this.sections.forEach(s=>{s.items.forEach(i=>{const f=this.checked.has(i.code),M=this.original.has(i.code);f&&!M?r.push(this.accessControl.grantPermission(t,i.code,n)):!f&&M&&r.push(this.accessControl.revokePermission(t,i.code,n))})}),0!==r.length&&(this.permSaving=!0,(0,h.D)(r).subscribe(()=>{this.permSaving=!1,this.changed=!0,this.notify.success("Permissions updated for "+this.data.username+"."),this.refresh()},()=>{this.permSaving=!1,this.notify.error("Some permission changes could not be applied \u2014 reopen to check.")}))}close(){this.dialogRef.close(this.changed)}groupByDomain(n){const t=[],r={};
1return(n||[]).forEach(s=>{r[s.domain]||(r[s.domain]=[],t.push(s.domain)),r[s.domain].push(s)}),t.map(s=>({domain:this.domainLabel(s),items:r[s]}))}domainLabel(n){return n?n.replace(/_/g," ").toLowerCase().replace(/\b\w/g,t=>t.toUpperCase()):"Other"}}Object.defineProperty(p,"\u0275fac",{enumerable:!0,configurable:!0,writable:!0,value:function(n){return new(n||p)(e.Y36(C.G),e.Y36(y.F),e.Y36(u.so),e.Y36(u.WI))}}),Object.defineProperty(p,"\u0275cmp",{enumerable:!0,configurable:!0,writable:!0,value:e.Xpm({type:p,selectors:[["app-manage-user-dialog"]],decls:9,vars:4,consts:[["mat-dialog-title",""],["mat-dialog-content","",1,"mu-content"],["class","muted",4,"ngIf"],["class","mu-error",4,"ngIf"],[4,"ngIf"],["mat-dialog-actions","","align","end"],["type","button",1,"btn","btn-outline-secondary",3,"click"],[1,"muted"],[1,"mu-error"],[1,"mu-sub","muted"],[1,"mu-reason"],["type","text","placeholder","Ticket / justification",1,"form-control",3,"ngModel","ngModelChange"],[1,"mu-block"],[1,"mu-block-title"],["class","mu-role-row",4,"ngFor","ngForOf"],["class","muted mu-empty",4,"ngIf"],[1,"mu-add-role"],["bindLabel","label","bindValue","value","placeholder","Add a role\u2026",1,"mu-add-select",3,"items","ngModel","clearable","ngModelChange"],["type","button",1,"btn","btn-sm","btn-azure",3,"disabled","click"],["class","mu-block",4,"ngIf"],["class","muted mu-hint",4,"ngIf"],[1,"mu-role-row"],[1,"fi-badge",3,"ngClass"],[1,"mu-role-name"],[1,"mu-role-type","muted"],["type","button","class","btn btn-sm btn-outline-secondary mu-role-toggle",3,"disabled","click",4,"ngIf"],["class","muted mu-role-locked","title","This role is managed outside the console",4,"ngIf"],["type","button",1,"btn","btn-sm","btn-outline-secondary","mu-role-toggle",3,"disabled","click"],["title","This role is managed outside the console",1,"muted","mu-role-locked"],[1,"muted","mu-empty"],["class","mu-section",4,"ngFor","ngForOf"],[1,"mu-perm-actions"],[1,"mu-section"],[1,"mu-section-title"],["class","mu-perm",4,"ngFor","ngForOf"],[1,"mu-perm"],["type","checkbox",3,"checked","change"],[1,"mu-perm-code"],[1,"mu-perm-desc","muted"],[1,"muted","mu-hint"]],template:function(n,t){1&n&&(e.TgZ(0,"h2",0),e._uU(1),e.qZA(),e.TgZ(2,"div",1),e.YNc(3,k,2,0,"div",2),e.YNc(4,A,2,0,"div",3),e.YNc(5,B,18,10,"ng-container",4),e.qZA(),e.TgZ(6,"div",5)(7,"button",6),e.NdJ("click",function(){return t.close()}),e._uU(8,"Close"),e.qZA()()),2&n&&(e.xp6(1),e.hij("Manage access \xb7 ",t.data.username,""),e.xp6(2),e.Q6J("ngIf",t.loading),e.xp6(1),e.Q6J("ngIf",t.loadError),e.xp6(1),e.Q6J("ngIf",!t.loading&&!t.loadError))},dependencies:[l.mk,l.sg,l.O5,c.Fj,c.JJ,c.On,u.uh,u.xY,u.H8,v.w9,O.mh],styles:[".mu-content[_ngcontent-%COMP%]{min-width:520px;max-width:620px}.mu-block[_ngcontent-%COMP%]{margin-top:18px;padding-top:12px;border-top:1px solid #e3e9f0}.mu-block-title[_ngcontent-%COMP%]{font-size:13px;font-weight:800;color:#1b2a3a;margin-bottom:10px}.mu-role-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:7px 0}.mu-role-name[_ngcontent-%COMP%]{font-weight:700;font-size:13px}.mu-role-type[_ngcontent-%COMP%]{font-size:11.5px}.mu-role-toggle[_ngcontent-%COMP%]{margin-left:auto}.mu-role-locked[_ngcontent-%COMP%]{margin-left:auto;font-size:12px;font-style:italic}.mu-empty[_ngcontent-%COMP%]{padding:6px 0;font-size:12.5px}.mu-add-role[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-top:10px}.mu-add-select[_ngcontent-%COMP%]{flex:1}.mu-perm-actions[_ngcontent-%COMP%]{margin-top:10px;display:flex;justify-content:flex-end}.fi-badge[_ngcontent-%COMP%]{display:inline-block;padding:2px 9px;border-radius:10px;font-size:10.5px;font-weight:700;line-height:1.5;border:1px solid transparent}.fi-badge-failed[_ngcontent-%COMP%]{background:#fdecea;color:#b4231f;border-color:#f3c2be}.fi-badge-sent[_ngcontent-%COMP%]{background:#e7f6ec;color:#1c7a3f;border-color:#bfe4cc}.mu-sub[_ngcontent-%COMP%]{margin:0 0 12px}.mu-role[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;font-weight:700;padding:10px 0;border-bottom:1px solid #e3e9f0;cursor:pointer}.mu-section[_ngcontent-%COMP%]{padding:12px 0 4px}.mu-section-title[_ngcontent-%COMP%]{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:#9aa8b6;margin-bottom:6px}.mu-perm[_ngcontent-%COMP%]{display:grid;grid-template-columns:18px 190px 1fr;align-items:baseline;grid-gap:8px;gap:8px;padding:5px 0;cursor:pointer}.mu-perm-code[_ngcontent-%COMP%]{font-weight:700;font-size:13px}.mu-perm-desc[_ngcontent-%COMP%]{font-size:12.5px}.mu-hint[_ngcontent-%COMP%]{margin:8px 0 0;font-size:12.5px}.mu-reason[_ngcontent-%COMP%]{margin-top:16px}.mu-reason[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-weight:600;font-size:12.5px;margin-bottom:4px}.mu-error[_ngcontent-%COMP%]{padding:10px 12px;background:#fdecea;border:1px solid #f3c2be;border-radius:6px;color:#b4231f}.muted[_ngcontent-%COMP%]{color:#6b7a8a}"]})});var F=a(81247),Q=a(60066);function D(o,n){1&o&&(e.TgZ(0,"div",13),e._uU(1,"Search by username (and optionally filter by role or status)."),e.qZA())}function z(o,n){if(1&o){const t=e.EpF();e.TgZ(0,"button",25),e.NdJ("click",function(){e.CHM(t);const s=e.oxw().$implicit,i=e.oxw(2);return e.KtG(i.manage(s))}),e._uU(1," Manage "),e.qZA()}}function Y(o,n){if(1&o){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",26),e.NdJ("click",function(){e.CHM(t);const s=e.oxw().$implicit,i=e.oxw(2);return e.KtG(i.forceReset(s))}),e._uU(2),e.qZA(),e.TgZ(3,"button",27),e.NdJ("click",function(){e.CHM(t);const s=e.oxw().$implicit,i=e.oxw(2);return e.KtG(i.unlock(s))}),e._uU(4),e.qZA(),e.BQk()}if(2&o){const t=e.oxw().$implicit,r=e.oxw(2);e.xp6(1),e.Q6J("disabled",!!r.lockBusy),e.xp6(1),e.hij(" ",r.isLockBusy(t,"lock")?"\u2026":"Force reset"," "),e.xp6(1),e.Q6J("disabled",!!r.lockBusy),e.xp6(1),e.hij(" ",r.isLockBusy(t,"unlock")?"\u2026":"Unlock"," ")}}function G(o,n){if(1&o&&(e.TgZ(0,"tr")(1,"td",19),e._uU(2),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.qZA(),e.TgZ(5,"td",20),e._uU(6),e.qZA(),e.TgZ(7,"td")(8,"span",21),e._uU(9),e.qZA()(),e.TgZ(10,"td",22),e.YNc(11,z,2,0,"button",23),e.YNc(12,Y,5,4,"ng-container",24),e.qZA()()),2&o){const t=n.$implicit,r=e.oxw(2);e.xp6(2),e.Oqu(t.username),e.xp6(2),e.Oqu(t.displayName||"\u2014"),e.xp6(1),e.Q6J("title",t.roles),e.xp6(1),e.AsE(" ",r.roleCount(t)," ",1===r.roleCount(t)?"role":"roles"," "),e.xp6(2),e.Q6J("ngClass",r.isActive(t.accountStatus)?"fi-badge-sent":"fi-badge-failed"),e.xp6(1),e.hij(" ",t.accountStatus||"\u2014"," "),e.xp6(2),e.Q6J("hasPermission","USER_MANAGE"),e.xp6(1),e.Q6J("hasPermission","ACCOUNT_LOCK_MANAGE")}}function V(o,n){1&o&&(e.TgZ(0,"tr")(1,"td",28),e._uU(2,"No users match your search."),e.qZA()())}
1function K(o,n){1&o&&(e.TgZ(0,"tr")(1,"td",29),e._uU(2,"Loading\u2026"),e.qZA()())}function $(o,n){if(1&o){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",14)(2,"table",15)(3,"thead")(4,"tr")(5,"th"),e._uU(6,"Username"),e.qZA(),e.TgZ(7,"th"),e._uU(8,"Name"),e.qZA(),e.TgZ(9,"th"),e._uU(10,"Roles"),e.qZA(),e.TgZ(11,"th"),e._uU(12,"Account"),e.qZA(),e.TgZ(13,"th",16),e._uU(14,"Actions"),e.qZA()()(),e.TgZ(15,"tbody"),e.YNc(16,G,13,9,"tr",17),e.YNc(17,V,3,0,"tr",12),e.YNc(18,K,3,0,"tr",12),e.qZA()()(),e.TgZ(19,"app-custom-table-pagination",18),e.NdJ("pageContentEvent",function(s){e.CHM(t);const i=e.oxw();return e.KtG(i.onPageChange(s))}),e.qZA(),e.BQk()}if(2&o){const t=e.oxw();e.xp6(16),e.Q6J("ngForOf",t.rows)("ngForTrackBy",t.trackByEntityId),e.xp6(1),e.Q6J("ngIf",!t.loading&&0===t.rows.length),e.xp6(1),e.Q6J("ngIf",t.loading),e.xp6(1),e.Q6J("totalItems",t.totalCount)("pageSize",t.pageSize)}}class m{constructor(n,t,r){Object.defineProperty(this,"accessControl",{enumerable:!0,configurable:!0,writable:!0,value:n}),Object.defineProperty(this,"dialog",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"notify",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"search",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"roleFilter",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"statusFilter",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"roleOptions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"statusOptions",{enumerable:!0,configurable:!0,writable:!0,value:[{label:"Active",value:"ACTIVE"},{label:"Inactive",value:"INACTIVE"}]}),Object.defineProperty(this,"rows",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"totalCount",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"pageSize",{enumerable:!0,configurable:!0,writable:!0,value:20}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"searched",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"lockBusy",{enumerable:!0,configurable:!0,writable:!0,value:null})}ngOnInit(){this.accessControl.getRoles().subscribe(n=>{this.roleOptions=(n||[]).map(t=>({label:b(t),value:t}))},()=>{this.roleOptions=[{label:b("ROLE_INTERNAL_CONSOLE"),value:"ROLE_INTERNAL_CONSOLE"}]})}onSearch(){this.page=1,this.load()}load(){this.searched=!0,this.loading=!0,this.accessControl.searchUsers({search:this.search.trim()||void 0,role:this.roleFilter||void 0,status:this.statusFilter||void 0,page:this.page,limit:this.pageSize}).subscribe(n=>{this.rows=n.rows,this.totalCount=n.totalCount,this.loading=!1},()=>{this.rows=[],this.totalCount=0,this.loading=!1,this.notify.error("Could not load users.")})}onPageChange(n){!n||!n.page||n.page===this.page||(this.page=n.page,this.load())}manage(n){this.dialog.open(p,{width:"560px",data:{entityId:n.entityId,username:n.username,displayName:n.displayName}}).afterClosed().subscribe(r=>{r&&this.load()})}isActive(n){return!!n&&"ACTIVE"===n.toUpperCase()}forceReset(n){this.lockBusy||!window.confirm(`Force a password reset for ${n.username}?\n\nThis locks the account (leaked credentials) and sends the user a password-reset link. They can't sign in until they reset.`)||(this.lockBusy=n.username+":lock",this.accessControl.forceResetLeakedCredentials(n.username).subscribe(()=>{this.lockBusy=null,this.notify.success("Account locked \u2014 a password-reset link was sent to the user.")},r=>{this.lockBusy=null,this.notify.error(this.serverError(r)||"Could not force the password reset.")}))}unlock(n){this.lockBusy||(this.lockBusy=n.username+":unlock",this.accessControl.unlockAccount(n.username).subscribe(()=>{this.lockBusy=null,this.notify.success("Account unlocked.")},t=>{this.lockBusy=null,this.notify.error(this.serverError(t)||"Could not unlock the account.")}))}isLockBusy(n,t){return this.lockBusy===n.username+":"+t}serverError(n){const t=n&&n.error;return t&&t.message?t.message:t&&t.messages&&t.messages.length?t.messages[0]:null}roleCount(n){return n.roles?n.roles.split(",").map(t=>t.trim()).filter(t=>!!t).length:0}trackByEntityId(n,t){return t.entityId}}Object.defineProperty(m,"\u0275fac",{enumerable:!0,configurable:!0,writable:!0,value:function(n){return new(n||m)(e.Y36(C.G),e.Y36(u.uw),e.Y36(y.F))}}),Object.defineProperty(m,"\u0275cmp",{enumerable:!0,configurable:!0,writable:!0,value:e.Xpm({type:m,selectors:[["app-users-l
1ist"]],decls:24,vars:9,consts:[[1,"users-page"],[1,"users-header"],[1,"muted"],[1,"users-filters"],[1,"uf-field","uf-search"],[1,"uf-search-row"],["type","text","placeholder","Username",1,"form-control",3,"ngModel","ngModelChange","keyup.enter"],["type","button",1,"btn","btn-azure",3,"click"],[1,"uf-field"],["bindLabel","label","bindValue","value","placeholder","Any role",3,"items","ngModel","clearable","ngModelChange","change"],["bindLabel","label","bindValue","value","placeholder","Any status",3,"items","ngModel","clearable","ngModelChange","change"],["class","users-empty muted",4,"ngIf"],[4,"ngIf"],[1,"users-empty","muted"],[1,"users-table-wrap"],[1,"table","users-table"],[1,"users-actions-col"],[4,"ngFor","ngForOf","ngForTrackBy"],[3,"totalItems","pageSize","pageContentEvent"],[1,"users-username"],[1,"users-roles",3,"title"],[1,"fi-badge",3,"ngClass"],[1,"users-actions"],["type","button","class","btn btn-sm btn-outline-primary",3,"click",4,"hasPermission"],[4,"hasPermission"],["type","button",1,"btn","btn-sm","btn-outline-primary",3,"click"],["type","button","title","Lock (leaked credentials) and send a password-reset link",1,"btn","btn-sm","btn-outline-danger",3,"disabled","click"],["type","button","title","Unlock a previously locked account",1,"btn","btn-sm","btn-outline-secondary",3,"disabled","click"],["colspan","5",1,"users-empty"],["colspan","5",1,"users-empty","muted"]],template:function(n,t){1&n&&(e.TgZ(0,"div",0)(1,"header",1)(2,"h1"),e._uU(3,"Users"),e.qZA(),e.TgZ(4,"p",2),e._uU(5,"Grant console access and set each user's permissions. Search for a user to begin."),e.qZA()(),e.TgZ(6,"div",3)(7,"div",4)(8,"label"),e._uU(9,"Search"),e.qZA(),e.TgZ(10,"div",5)(11,"input",6),e.NdJ("ngModelChange",function(s){return t.search=s})("keyup.enter",function(){return t.onSearch()}),e.qZA(),e.TgZ(12,"button",7),e.NdJ("click",function(){return t.onSearch()}),e._uU(13,"Search"),e.qZA()()(),e.TgZ(14,"div",8)(15,"label"),e._uU(16,"Role"),e.qZA(),e.TgZ(17,"ng-select",9),e.NdJ("ngModelChange",function(s){return t.roleFilter=s})("change",function(){return t.onSearch()}),e.qZA()(),e.TgZ(18,"div",8)(19,"label"),e._uU(20,"Account status"),e.qZA(),e.TgZ(21,"ng-select",10),e.NdJ("ngModelChange",function(s){return t.statusFilter=s})("change",function(){return t.onSearch()}),e.qZA()()(),e.YNc(22,D,2,0,"div",11),e.YNc(23,$,20,6,"ng-container",12),e.qZA()),2&n&&(e.xp6(11),e.Q6J("ngModel",t.search),e.xp6(6),e.Q6J("items",t.roleOptions)("ngModel",t.roleFilter)("clearable",!0),e.xp6(4),e.Q6J("items",t.statusOptions)("ngModel",t.statusFilter)("clearable",!0),e.xp6(1),e.Q6J("ngIf",!t.searched),e.xp6(1),e.Q6J("ngIf",t.searched))},dependencies:[l.mk,l.sg,l.O5,c.Fj,c.JJ,c.On,v.w9,O.mh,F.A,Q.A],styles:["[_nghost-%COMP%]{display:block;font-family:Nunito Sans,sans-serif;color:#1b2a3a}.users-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:22px;font-weight:800;margin:0 0 4px}.muted[_ngcontent-%COMP%]{color:#6b7a8a}.users-filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;margin:18px 0}.uf-field[_ngcontent-%COMP%]{min-width:180px}.uf-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:700;color:#5a6a7a;margin-bottom:4px}.uf-search[_ngcontent-%COMP%]{min-width:320px;flex:1}.uf-search-row[_ngcontent-%COMP%]{display:flex;gap:8px}.uf-search-row[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{flex:1}.users-table-wrap[_ngcontent-%COMP%]{overflow-x:auto}.users-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.users-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#7a8794;padding:10px 12px;border-bottom:1px solid #e3e9f0}.users-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:11px 12px;border-bottom:1px solid #eef2f6;font-size:14px}.users-username[_ngcontent-%COMP%]{font-weight:700}.users-actions-col[_ngcontent-%COMP%], .users-actions[_ngcontent-%COMP%]{text-align:right}.users-empty[_ngcontent-%COMP%]{text-align:center;padding:26px;color:#7a8794}.fi-badge[_ngcontent-%COMP%]{display:inline-block;padding:3px 10px;border-radius:10px;font-size:11px;font-weight:700;line-height:1.5;border:1px solid transparent}.fi-badge-failed[_ngcontent-%COMP%]{background:#fdecea;color:#b4231f;border-color:#f3c2be}
1.fi-badge-sent[_ngcontent-%COMP%]{background:#e7f6ec;color:#1c7a3f;border-color:#bfe4cc}app-custom-table-pagination[_ngcontent-%COMP%]{display:block;margin-top:14px}.users-roles[_ngcontent-%COMP%]{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"]})});const H=[{path:"",component:m}];class g{}Object.defineProperty(g,"\u0275fac",{enumerable:!0,configurable:!0,writable:!0,value:function(n){return new(n||g)}}),Object.defineProperty(g,"\u0275mod",{enumerable:!0,configurable:!0,writable:!0,value:e.oAB({type:g})}),Object.defineProperty(g,"\u0275inj",{enumerable:!0,configurable:!0,writable:!0,value:e.cJS({imports:[x.Bz.forChild(H),x.Bz]})});class d{}Object.defineProperty(d,"\u0275fac",{enumerable:!0,configurable:!0,writable:!0,value:function(n){return new(n||d)}}),Object.defineProperty(d,"\u0275mod",{enumerable:!0,configurable:!0,writable:!0,value:e.oAB({type:d})}),Object.defineProperty(d,"\u0275inj",{enumerable:!0,configurable:!0,writable:!0,value:e.cJS({imports:[l.ez,c.u5,u.Is,w.ZX,P.m,Z.B,g]})})}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.