@descope/role-management-widget 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Descope <help@descope.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # @descope/role-management-widget
2
+
3
+ ## Setup
4
+
5
+ ### Create an `.env` file
6
+
7
+ In the widget package create an `.env` file which includes;
8
+
9
+ ```
10
+ DESCOPE_BASE_URL= # env base url
11
+ DESCOPE_PROJECT_ID= # project ID
12
+ DESCOPE_TENANT= # tenant ID
13
+ DESCOPE_WIDGET_ID= # default: role-management-widget
14
+ ```
15
+
16
+ ### Authenticate
17
+
18
+ Use the DescopeWC in this package's `index.html`. Comment out the widget web-component from `index.html` and paste this:
19
+
20
+ ```
21
+ <script src="https://cdn.jsdelivr.net/npm/@descope/web-component@latest/dist/index.min.js"></script>
22
+ <descope-wc
23
+ project-id="<project-id>"
24
+ flow-id="<flow-id>"
25
+ base-url="<base-url>"
26
+ ></descope-wc>
27
+
28
+ ```
29
+
30
+ ### Start the widget
31
+
32
+ run `npm start` to load the widget.
33
+
34
+ After authentication, comment out DescopeWC and remove restore the widget's web-component in `index.html`.
35
+
36
+ The widget should now run.
37
+
38
+ ## Architecture
39
+
40
+ ## Project Sturcture
41
+
42
+ - `/app` - contains `index.html`
43
+ - `/lib` - widget's source code
44
+ - `lib/mixins` - generic mixins (shared logic to reuse by other widgets)
45
+ - `lib/widget` - widget related implementations
46
+ - `lib/widget/api` - Logic related to API calls
47
+ - `lib/widget/drivers` - An SDK for component interaction
48
+ - `lib/widget/mixins` - Widget specific logic
49
+ - `lib/widget/state` - State managment logic
50
+
51
+ ### API
52
+
53
+ ---
54
+
55
+ ### Mixins
56
+
57
+ The widget is composed of mixins, each mixin contains specific logic parts, and sometime exposes an API that can be used in other mixins.
58
+
59
+ Mixins can be composed on top of each other, so we can create new mixins by composing several mixins together.
60
+
61
+ #### Mixins Creators
62
+
63
+ Functions that create mixins, can get a configuration, and returns the mixin functions.
64
+
65
+ #### Singleton Mixin
66
+
67
+ Since mixins are composeable, in some cases we want to make sure a mixin is loaded only once. For example: When there is no need for its logic to run multiple times when composed in different mixins.
68
+
69
+ For this case we have a wrapper function (`createSingletonMixin`) to ensure that a mixin is loaded only once, regardless how many times it will be composed.
70
+
71
+ Mixins should be wrapped with the `createSingletonMixin` wrapper function, unless there is a reason for running the mixin's logic multiple times.
72
+
73
+ ### State
74
+
75
+ We're using several tools to handle the widget's state:
76
+
77
+ - [Redux Toolkit](https://redux-toolkit.js.org/) for the widget's state managment.
78
+ - [Redux Thunk](https://github.com/reduxjs/redux-thunk) for API calls and async operations we're using
79
+ - [Reselect](https://github.com/reduxjs/reselect) to compute derived data without hitting performence or triggering state recalculation when state is not mutated.
80
+
81
+ ### Drivers
82
+
83
+ An abstraction layer that provides an API for components, and enables handling interactions with components within the widget.
84
+
85
+ The motiviation to use drivers is to decouple the widget's code from the component's implementation, and therefore it's important to interact with components only using drivers (and not relying on component's implenentation details).
86
+
87
+ ### UI Components
88
+
89
+ Widget UI is composed of [`@descope/web-components-ui`](https://github.com/descope/web-components-ui), which is loaded during the widget init in runtime.
90
+
91
+ For optimization, we load only the relevant components, defined on the widget screens DOM.
92
+
93
+ ## Dev
94
+
95
+ ### Use mock screens
96
+
97
+ Since screen are fetched dynamically, when developing a new screen for the widget you will probably want to use mock templates. To do so, simply replace the call to `fetchWidgetPage` with a string which includes your HTML.
98
+
99
+ ### Use local components
100
+
101
+ In some cases you want to make changes to components anf see how it affects the widget. To do so, you need to build [`web-components-ui`](https://github.com/descope/web-components-ui) and serve the `dist` folder from your machine (with `npx serve` or other util).
102
+
103
+ Add the key `base.ui.components.url` to your localStorage and set its value to the URL of the served dist `umd/index.js` file.
104
+
105
+ ###
106
+
107
+ Pay attention that _theme changes_ will not take affect until the components
@@ -0,0 +1,6 @@
1
+
2
+ /**
3
+ * @descope/role-management-widget v0.1.0
4
+ */
5
+ import{pluralize as e,createSingletonMixin as t,compose as i,createTemplate as o,withMemCache as s,debounce as n}from"@descope/sdk-helpers";import{__awaiter as a,__classPrivateFieldGet as l,__classPrivateFieldSet as r,__rest as d}from"tslib";import{projectIdMixin as c,observeAttributesMixin as u,loggerMixin as h,createValidateAttributesMixin as g,createStateManagementMixin as v,initLifecycleMixin as m,staticResourcesMixin as p,descopeUiMixin as R,initElementMixin as f,modalMixin as y,formMixin as w,notificationsMixin as b,debuggerMixin as M,themeMixin as C}from"@descope/sdk-mixins";import{ButtonDriver as W,MultiSelectDriver as k,TextDriver as x,TextFieldDriver as S,GridDriver as j}from"@descope/sdk-component-drivers";import{createSelector as P}from"reselect";import{createAsyncThunk as L}from"@reduxjs/toolkit";import O from"@descope/web-js-sdk";const N=e=>e.selectedRolesIds,F=e=>e.notifications,I=e=>e.tenantPermissions.data||[],$=P((e=>e.rolesList.data),(e=>e.map((e=>{var t;return Object.assign(Object.assign({},e),{editable:0===(null===(t=null==e?void 0:e.tenantId)||void 0===t?void 0:t.length)?"no":"yes"})})))),D=P(N,$,((e,t)=>t.filter((t=>e.includes(t.name))))),q=P(N,(e=>!!e.length)),B=P(N,(e=>1===e.length)),T=P(D,(e=>1===e.length?e[0].name:`${e.length} roles`)),E=e=>(...t)=>i=>{i.addCase(e.pending,((e,i)=>{t.forEach((({onPending:t})=>{null==t||t(e,i)}))})),i.addCase(e.fulfilled,((e,i)=>{t.forEach((({onFulfilled:t})=>{null==t||t(e,i)}))})),i.addCase(e.rejected,((e,i)=>{t.forEach((({onRejected:t})=>{null==t||t(e,i)}))}))},A=e=>({onFulfilled:t=>{e(t).loading=!1},onPending:t=>{e(t).loading=!0,e(t).error=null},onRejected:(t,i)=>{e(t).loading=!1,e(t).error=i.error}}),H=({getErrorMsg:e,getSuccessMsg:t})=>({onFulfilled:(e,i)=>{t&&e.notifications.push({type:"success",msg:t(i)})},onRejected:(t,i)=>{e&&t.notifications.push({type:"error",msg:e(i)})}}),Z=L("roles/create",((e,{extra:{api:t}})=>t.role.create(e))),V=E(Z)({onFulfilled:(e,t)=>{e.rolesList.data.unshift(t.payload)}},A((e=>e.createRole)),H({getSuccessMsg:()=>"Role created successfully",getErrorMsg:e=>{var t;return`\n <div>\n <div>Failed to create role</div>\n ${null===(t=e.error)||void 0===t?void 0:t.message}\n </div>`}})),U={action:Z,reducer:V},z=L("roles/delete",((e,{extra:{api:t}})=>t.role.deleteBatch(e))),J=E(z)({onFulfilled:(e,t)=>{e.rolesList.data=e.rolesList.data.filter((e=>{var i;return 0===(null===(i=null==e?void 0:e.tenantId)||void 0===i?void 0:i.length)||!t.meta.arg.includes(e.name)})),e.selectedRolesIds=[]}},A((e=>e.deleteRole)),H({getSuccessMsg:t=>e(t.meta.arg.length)`${["",t.meta.arg.length]} ${["R","r"]}ole${["","s"]} deleted successfully`,getErrorMsg:t=>e(t.meta.arg.length)`Failed to delete role${["","s"]}`})),G={action:z,reducer:J},K=L("roles/search",((e,{extra:{api:t},getState:i})=>{const o=i().searchParams;return t.role.search(Object.assign(Object.assign({},o),e))})),Q=E(K)({onPending:(e,t)=>{e.searchParams=Object.assign(Object.assign({},e.searchParams),t.meta.arg)},onFulfilled:(e,t)=>{e.rolesList.data=t.payload}},A((e=>e.rolesList))),X={action:K,reducer:Q},Y=L("roles/update",((e,{extra:{api:t}})=>t.role.update(e))),_=E(Y)({onFulfilled:(e,t)=>{const i=e.rolesList.data.findIndex((e=>e.name===t.payload.oldName));-1!==i&&(e.rolesList.data[i]=t.payload)}},A((e=>e.updateRole)),H({getSuccessMsg:()=>"Role updated successfully",getErrorMsg:e=>{var t;return`\n <div>\n <div>Failed to update role</div>\n ${null===(t=e.error)||void 0===t?void 0:t.message}\n </div>`}})),ee={action:Y,reducer:_},te=L("tenant/getTenantPermissions",((e,{extra:{api:t}})=>t.tenant.getTenantPermissions())),ie={action:te,reducer:E(te)({onFulfilled:(e,t)=>{e.tenantPermissions.data=t.payload.permissions}},A((e=>e.tenantPermissions)))},oe={rolesList:{data:[],loading:!1,error:null},createRole:{loading:!1,error:null},updateRole:{loading:!1,error:null},deleteRole:{loading:!1,error:null},tenantPermissions:{loading:!1,error:null,data:[]},searchParams:{text:"",sort:[]},selectedRolesIds:[],notifications:[]},se={search:"/v1/mgmt/role/search",deleteBatch:"/v1/mgmt/role/delete/batch",create:"/v1/mgmt/role/create",update:"/v1/mgmt/role/update"},ne={permissions:"/v1/mgmt/permission/all"},ae=e=>a(void 0,void 0,void 0,(function*(){const t=yield e.text(),i=JSON.parse(t);if(!e.ok){const t=`${i.errorDescription}${i.errorMessage?`: ${i.errorMessage}`:""}`;throw Error(t||`${e.status} ${e.statusText}`)}e.json=()=>Promise.resolve(i),e.text=()=>Promise.resolve(t)})),le=({text:e,sort:t},i)=>a(void 0,void 0,void 0,(function*(){return new Promise((o=>{const s=[];for(let e=1;e<9;e+=1)s.push({name:`Role ${e}`,description:`Role description ${e}`,permissionNames:[`Permission ${e}`],createdTime:new Date,tenantId:i});t.forEach((e=>{s.sort(((t,i)=>{var o,s;return e.desc?null===(s=i[e.field])||void 0===s?void 0:s.localeCompare(t[e.field]):null===(o=t[e.field])||void 0===o?void 0:o.localeCompare(i[e.field])}))})),o(s.filter((t=>t.name.toLowerCase().includes(e.toLowerCase())||t.description.toLowerCase().includes(e.toLowerCase()))))}))})),re=({name:e,description:t,permissionNames:i},o)=>a(void 0,void 0,void 0,(function*(){return new Promise((s=>{s({name:e,description:t,permissionNames:i,createdTime:new Date,tenantId:o})}))})),de=({name:e,newName:t,description:i,permissionNames:o},s)=>a(void 0,void 0,void 0,(function*(){return new Promise((n=>{n({name:t,description:i,permissionNames:o,createdTime:new Date,oldName:e,tenantId:s})}))})),ce=()=>a(void 0,void 0,void 0,(function*(){})),ue=()=>new Promise((e=>{const t=[];for(let e=1;e<5;e+=1)t.push({name:`Permission ${e}`});e({permissions:t})})),he=({httpClient:e,tenant:t,mock:i})=>({search:({page:o,limit:s=1e4,text:n,sort:l}={})=>a(void 0,void 0,void 0,(function*(){if(i)return le({page:o,limit:s,text:n,sort:l},t);const a=yield e.post(se.search,{limit:s,page:o,text:n,sort:l},{queryParams:{tenant:t}});yield ae(a);return(yield a.json()).roles})),deleteBatch:o=>a(void 0,void 0,void 0,(function*(){if(i)return ce();const s=yield e.post(se.deleteBatch,{roleNames:o},{queryParams:{tenant:t}});return yield ae(s),s.json()})),create:({name:o,description:s,permissionNames:n})=>a(void 0,void 0,void 0,(function*(){if(i)return re({name:o,description:s,permissionNames:n},t);const a=yield e.post(se.create,{name:o,description:s,permissionNames:n,tenantId:t},{queryParams:{tenant:t}});yield ae(a);return yield a.json()})),update:({name:o,newName:s,description:n,permissionNames:l})=>a(void 0,void 0,void 0,(function*(){if(i)return de({name:o,newName:s,description:n,permissionNames:l},t);const a=yield e.post(se.update,{name:o,newName:s,description:n,permissionNames:l,tenantId:t},{queryParams:{tenant:t}});yield ae(a);const r=yield a.json();return r.oldName=o,r}))}),ge=({httpClient:e,tenant:t,mock:i})=>({getTenantPermissions:()=>a(void 0,void 0,void 0,(function*(){if(i)return ue();const o=yield e.get(ne.permissions,{queryParams:{tenant:t}});return yield ae(o),o.json()}))}),ve=t((e=>{var t,o,s,n;const d=i(c,u,h,g({tenant:g.missingAttrValidator}))(e);return n=class extends d{constructor(){super(...arguments),t.add(this),o.set(this,void 0)}get baseUrl(){return this.getAttribute("base-url")}get tenant(){return this.getAttribute("tenant")}get mock(){return this.getAttribute("mock")}get api(){return l(this,o,"f")||l(this,t,"m",s).call(this),l(this,o,"f")}init(){const e=Object.create(null,{init:{get:()=>super.init}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.init)||void 0===i?void 0:i.call(this),this.observeAttributes(["project-id","base-url","tenant"],(()=>{l(this,o,"f")&&l(this,t,"m",s).call(this)}))}))}},o=new WeakMap,t=new WeakSet,s=function(){this.logger.debug("creating an sdk instance"),r(this,o,((e,t,i)=>{const o=O(Object.assign(Object.assign({},e),{persistTokens:!0}));return{role:he({httpClient:o.httpClient,tenant:t,mock:i}),tenant:ge({httpClient:o.httpClient,tenant:t,mock:i})}})({projectId:this.projectId,baseUrl:this.baseUrl},this.tenant,"true"===this.mock),"f")},n})),me=t((e=>{const t=i(v({name:"widget",initialState:oe,reducers:{setSelectedRolesIds:(e,{payload:t})=>{e.selectedRolesIds=t},clearNotifications:e=>{e.notifications=[]}},extraReducers:e=>{U.reducer(e),ee.reducer(e),G.reducer(e),X.reducer(e),ie.reducer(e)},asyncActions:{searchRoles:X.action,createRole:U.action,updateRole:ee.action,deleteRoles:G.action,getTenantPermissions:ie.action}}),m,h,ve)(e);return class extends t{constructor(...e){super(...e),this.state=oe,this.subscribe((e=>{this.logger.debug("State update:",e),this.state=e}))}}})),pe=t((e=>{const t=i(p,g({"widget-id":g.missingAttrValidator}))(e);return class extends t{get widgetId(){return this.getAttribute("widget-id")}fetchWidgetPage(e){return a(this,void 0,void 0,(function*(){return(yield this.fetchStaticResource(`role-management-widget/${this.widgetId}/${e}`,"text")).body}))}}})),Re=t((e=>{var t,s,n;return n=class extends(i(h,m,R,f,pe,me)(e)){constructor(){super(...arguments),t.add(this)}onWidgetRootReady(){return a(this,void 0,void 0,(function*(){}))}init(){const e=Object.create(null,{init:{get:()=>super.init}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.init)||void 0===i?void 0:i.call(this),yield Promise.all([l(this,t,"m",s).call(this),this.actions.searchRoles(),this.actions.getTenantPermissions()]),this.onWidgetRootReady()}))}},t=new WeakSet,s=function(){return a(this,void 0,void 0,(function*(){const e=o(yield this.fetchWidgetPage("root.html"));yield this.loadDescopeUiComponents(e),this.contentRootElement.append(e.content.cloneNode(!0))}))},n})),fe=t((e=>{var t,s,n,d,c;return c=class extends(i(me,y,w,h,Re)(e)){constructor(){super(...arguments),t.add(this),s.set(this,void 0),d.set(this,(()=>a(this,void 0,void 0,(function*(){var e;yield l(this,s,"f").setData(null===(e=I(this.state))||void 0===e?void 0:e.map((({name:e})=>({value:e,label:e}))))}))))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",n).call(this)}))}},s=new WeakMap,d=new WeakMap,t=new WeakSet,n=function(){return a(this,void 0,void 0,(function*(){this.createRoleModal=this.createModal(),this.createRoleModal.setContent(o(yield this.fetchWidgetPage("create-role-modal.html")));const e=new W((()=>{var e;return null===(e=this.createRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-cancel"]')}),{logger:this.logger});e.onClick((()=>{this.createRoleModal.close(),this.resetFormData(this.createRoleModal.ele)}));const t=new W((()=>{var e;return null===(e=this.createRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-submit"]')}),{logger:this.logger});t.onClick((()=>a(this,void 0,void 0,(function*(){this.validateForm(this.createRoleModal.ele)&&(this.actions.createRole(Object.assign({},this.getFormData(this.createRoleModal.ele))),this.createRoleModal.close(),this.resetFormData(this.createRoleModal.ele))})))),r(this,s,new k((()=>{var e;return null===(e=this.createRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="permissions-multiselect"]')}),{logger:this.logger}),"f"),l(this,d,"f").call(this)}))},c})),ye=t((e=>{var t,o,s;return s=class extends(i(h,fe,Re)(e)){constructor(){super(...arguments),t.add(this)}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",o).call(this)}))}},t=new WeakSet,o=function(){var e;this.createButton=new W(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector('[data-id="create-role"]'),{logger:this.logger}),this.createButton.onClick((()=>this.createRoleModal.open()))},s})),we=t((e=>{var t,s,n;return n=class extends(i(me,y,h,Re)(e)){constructor(){super(...arguments),t.add(this)}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),yield l(this,t,"m",s).call(this)}))}},t=new WeakSet,s=function(){var e;return a(this,void 0,void 0,(function*(){this.deleteRolesModal=this.createModal(),this.deleteRolesModal.setContent(o(yield this.fetchWidgetPage("delete-roles-modal.html")));const t=new W((()=>{var e;return null===(e=this.deleteRolesModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-cancel"]')}),{logger:this.logger});t.onClick((()=>this.deleteRolesModal.close()));const i=new W((()=>{var e;return null===(e=this.deleteRolesModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-submit"]')}),{logger:this.logger});i.onClick((()=>{const e=D(this.state);this.actions.deleteRoles(null==e?void 0:e.map((e=>e.name))),this.deleteRolesModal.close()}));const s=new x(null===(e=this.deleteRolesModal.ele)||void 0===e?void 0:e.querySelector('[data-id="body-text"]'),{logger:this.logger});this.deleteRolesModal.beforeOpen=()=>{const e=T(this.state);s.text=`Delete ${e}?`}}))},n})),be=t((e=>{var t,o,n,r;return r=class extends(i(h,Re,me,we)(e)){constructor(){super(...arguments),t.add(this),n.set(this,s((e=>{e?this.deleteButton.enable():this.deleteButton.disable()})))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",o).call(this),this.subscribe(l(this,n,"f").bind(this),q)}))}},n=new WeakMap,t=new WeakSet,o=function(){var e;this.deleteButton=new W(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector('[data-id="delete-roles"]'),{logger:this.logger}),this.deleteButton.disable(),this.deleteButton.onClick((()=>{this.deleteRolesModal.open()}))},r})),Me=t((e=>{var t,s,n,c,u,g,v,m;return m=class extends(i(me,y,h,w,Re)(e)){constructor(){super(...arguments),t.add(this),s.set(this,void 0),u.set(this,(()=>a(this,void 0,void 0,(function*(){var e;yield l(this,s,"f").setData(null===(e=I(this.state))||void 0===e?void 0:e.map((({name:e})=>({value:e,label:e}))))})))),g.set(this,(()=>{var e;const t=null===(e=D(this.state))||void 0===e?void 0:e[0],i={name:null==t?void 0:t.name,description:null==t?void 0:t.description,permissionNames:null==t?void 0:t.permissionNames};this.setFormData(this.editRoleModal.ele,i)}))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),yield l(this,t,"m",v).call(this)}))}},s=new WeakMap,u=new WeakMap,g=new WeakMap,t=new WeakSet,n=function(){const e=new W((()=>{var e;return null===(e=this.editRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-cancel"]')}),{logger:this.logger});e.onClick((()=>this.editRoleModal.close()))},c=function(){const e=new W((()=>{var e;return null===(e=this.editRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="modal-submit"]')}),{logger:this.logger});e.onClick((()=>{var e;if(this.validateForm(this.editRoleModal.ele)){const t=this.getFormData(this.editRoleModal.ele),{name:i}=t,o=d(t,["name"]),s=null===(e=D(this.state))||void 0===e?void 0:e[0];this.actions.updateRole(Object.assign({newName:i,name:s.name},o)),this.editRoleModal.close(),this.resetFormData(this.editRoleModal.ele)}}))},v=function(){return a(this,void 0,void 0,(function*(){this.editRoleModal=this.createModal(),this.editRoleModal.setContent(o(yield this.fetchWidgetPage("edit-role-modal.html"))),l(this,t,"m",n).call(this),l(this,t,"m",c).call(this),r(this,s,new k((()=>{var e;return null===(e=this.editRoleModal.ele)||void 0===e?void 0:e.querySelector('[data-id="permissions-multiselect"]')}),{logger:this.logger}),"f"),this.editRoleModal.beforeOpen=()=>a(this,void 0,void 0,(function*(){yield l(this,u,"f").call(this),l(this,g,"f").call(this)}))}))},m})),Ce=t((e=>{var t,o,n,r;return r=class extends(i(h,Re,me,Me,w)(e)){constructor(){super(...arguments),t.add(this),n.set(this,s((e=>{e?this.editButton.enable():this.editButton.disable()})))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",o).call(this),this.subscribe(l(this,n,"f").bind(this),B)}))}},n=new WeakMap,t=new WeakSet,o=function(){var e;this.editButton=new W(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector('[data-id="edit-role"]'),{logger:this.logger}),this.editButton.disable(),this.editButton.onClick((()=>{this.editRoleModal.open()}))},r})),We=t((e=>{var t,o,s,r;return r=class extends(i(h,Re,me)(e)){constructor(){super(...arguments),t.add(this),o.set(this,n((()=>{this.actions.searchRoles({text:this.searchInput.value})})))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",s).call(this)}))}},o=new WeakMap,t=new WeakSet,s=function(){var e;this.searchInput=new S(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector('[data-id="search-input"]'),{logger:this.logger}),this.searchInput.onInput(l(this,o,"f"))},r}));const ke={success:(new DOMParser).parseFromString('<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">\n<g id="Checkmark">\n<path id="Shape" d="M10.0485 15.6396C9.5799 15.171 8.8201 15.171 8.35147 15.6396C7.88284 16.1082 7.88284 16.868 8.35147 17.3367L12.7072 21.6924C13.1759 22.1611 13.9357 22.1611 14.4043 21.6924L24.7152 11.3815C25.1838 10.9129 25.1838 10.1531 24.7152 9.68448C24.2466 9.21585 23.4868 9.21585 23.0181 9.68448L13.5558 19.1469L10.0485 15.6396Z" fill="white"/>\n</g>\n</svg>\n',"image/svg+xml").firstChild,error:(new DOMParser).parseFromString('<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">\n<g id="Icon">\n<path id="Vector" d="M15.9998 26.6558C10.1118 26.6558 5.34375 21.8878 5.34375 15.9998C5.34375 10.1118 10.1118 5.34375 15.9998 5.34375C21.8878 5.34375 26.6558 10.1118 26.6558 15.9998C26.6558 21.8878 21.8878 26.6558 15.9998 26.6558ZM15.9998 24.4798C20.6718 24.4798 24.4798 20.7038 24.4798 15.9998C24.4798 11.3278 20.7038 7.51975 15.9998 7.51975C11.3278 7.51975 7.51975 11.2958 7.51975 15.9998C7.51975 20.6718 11.2958 24.4798 15.9998 24.4798ZM15.3278 9.34375H16.6718C17.0558 9.34375 17.3438 9.63175 17.3118 9.98375L16.9598 16.9278C16.9598 17.1838 16.7678 17.3438 16.5438 17.3438H15.4558C15.2318 17.3438 15.0398 17.1518 15.0398 16.9278L14.6878 9.98375C14.6878 9.63175 14.9758 9.34375 15.3278 9.34375ZM15.4558 19.4558H16.5438C16.9278 19.4558 17.2158 19.7438 17.1838 20.1278V21.1838C17.1838 21.5678 16.8958 21.8558 16.5438 21.8558H15.4558C15.0718 21.8558 14.7838 21.5678 14.7838 21.1838V20.1278C14.7838 19.7438 15.0718 19.4558 15.4558 19.4558Z" fill="#FFDFDD"/>\n</g>\n</svg>\n',"image/svg+xml").firstChild},xe=t((e=>{var t,o,n,r,d;return d=class extends(i(h,me,b,m)(e)){constructor(){super(...arguments),t.add(this),r.set(this,s((e=>{e.length&&(e.forEach((({type:e,msg:i})=>{const s=l(this,t,"m",n).call(this,e);s.setContent(l(this,t,"m",o).call(this,{type:e,msg:i})),s.show()})),setTimeout((()=>this.actions.clearNotifications())))})))}init(){const e=Object.create(null,{init:{get:()=>super.init}});var t;return a(this,void 0,void 0,(function*(){yield null===(t=e.init)||void 0===t?void 0:t.call(this),this.subscribe(l(this,r,"f").bind(this),F)}))}},r=new WeakMap,t=new WeakSet,o=function({type:e,msg:t}){const i=ke[e],o=Object.assign((new DOMParser).parseFromString('<svg width="2em" height="2em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n<g id="Icon">\n<path id="Shape" d="M10.6712 12L7.27521 8.60406C6.90826 8.23711 6.90826 7.64216 7.27521 7.27521C7.64216 6.90826 8.23711 6.90826 8.60406 7.27521L12 10.6712L15.3959 7.27521C15.7629 6.90826 16.3578 6.90826 16.7248 7.27521C17.0917 7.64216 17.0917 8.23711 16.7248 8.60406L13.3288 12L16.7248 15.3959C17.0917 15.7629 17.0917 16.3578 16.7248 16.7248C16.3578 17.0917 15.7629 17.0917 15.3959 16.7248L12 13.3288L8.60406 16.7248C8.23711 17.0917 7.64216 17.0917 7.27521 16.7248C6.90826 16.3578 6.90826 15.7629 7.27521 15.3959L10.6712 12Z" fill="white"/>\n</g>\n</svg>\n',"image/svg+xml").firstChild,{slot:"close"});return`${(null==i?void 0:i.outerHTML)||""}${t}${o.outerHTML}`},n=function(e){return this.createNotification({mode:e,duration:"error"===e?0:3e3,position:"bottom-start",size:"sm"})},d})),Se=t((e=>{var t,o,r,d,c;return c=class extends(i(me,h,Re)(e)){constructor(){super(...arguments),t.add(this),r.set(this,s((e=>{this.rolesTable.data=e}))),d.set(this,n(((e,t)=>{const i=[],{value:o}=t;if(o){const t=e.path;i.push({field:t,desc:"desc"===o})}this.actions.searchRoles({sort:i})})))}onWidgetRootReady(){const e=Object.create(null,{onWidgetRootReady:{get:()=>super.onWidgetRootReady}});var i;return a(this,void 0,void 0,(function*(){yield null===(i=e.onWidgetRootReady)||void 0===i?void 0:i.call(this),l(this,t,"m",o).call(this),this.rolesTable.columns.forEach((e=>{e.onSortDirectionChange((e=>{l(this,d,"f").call(this,e.target,e.detail)}))})),l(this,r,"f").call(this,$(this.state)),this.subscribe(l(this,r,"f").bind(this),$)}))}},r=new WeakMap,d=new WeakMap,t=new WeakSet,o=function(){var e;this.rolesTable=new j(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector('[data-id="roles-table"]'),{logger:this.logger}),this.rolesTable.onSelectedItemsChange((e=>{this.actions.setSelectedRolesIds(e.detail.value.map((({name:e})=>e)))}))},c})),je=t((e=>class extends(i(M,C,Se,ye,be,Ce,We,xe)(e)){init(){const e=Object.create(null,{init:{get:()=>super.init}});var t;return a(this,void 0,void 0,(function*(){yield null===(t=e.init)||void 0===t?void 0:t.call(this)}))}})),Pe=i((e=>class extends(je(e)){}))(HTMLElement);customElements.define("descope-role-management-widget",Pe);export{Pe as default};
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/lib/widget/state/selectors.ts","../../src/lib/widget/state/asyncActions/helpers.ts","../../src/lib/widget/state/asyncActions/createRole.ts","../../src/lib/widget/state/asyncActions/deleteRole.ts","../../src/lib/widget/state/asyncActions/searchRoles.ts","../../src/lib/widget/state/asyncActions/updateRole.ts","../../src/lib/widget/state/asyncActions/getTenantPermissions.ts","../../src/lib/widget/state/initialState.ts","../../src/lib/widget/api/apiPaths.ts","../../src/lib/widget/api/sdk/helpers.ts","../../src/lib/widget/api/sdk/mocks.ts","../../src/lib/widget/api/sdk/createRoleSdk.ts","../../src/lib/widget/api/sdk/createTenantSdk.ts","../../src/lib/widget/mixins/apiMixin.ts","../../src/lib/widget/api/sdk/index.ts","../../src/lib/widget/mixins/stateManagementMixin.ts","../../src/lib/widget/mixins/fetchWidgetPagesMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initWidgetRootMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initCreateRoleModalMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initCreateRoleButtonMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initDeleteRolesModalMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initDeleteRolesButtonMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initEditRoleModalMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initEditRolesButtonMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initFilterRolesInputMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initNotificationsMixin.ts","../../src/lib/widget/mixins/initMixin/initComponentsMixins/initRolesTableMixin.ts","../../src/lib/widget/mixins/initMixin/initMixin.ts","../../src/lib/widget/index.ts","../../src/lib/index.ts"],"sourcesContent":["import { createSelector } from 'reselect';\nimport { State } from './types';\n\nexport const getRawRolesList = (state: State) => state.rolesList.data;\nexport const getSelectedRolesIds = (state: State) => state.selectedRolesIds;\nexport const getNotifications = (state: State) => state.notifications;\nexport const getSearchParams = (state: State) => state.searchParams;\nexport const getTenantPermissions = (state: State) =>\n state.tenantPermissions.data || [];\n\nexport const getRolesList = createSelector(getRawRolesList, (roles) =>\n roles.map((role) => ({\n ...role,\n editable: role?.tenantId?.length === 0 ? 'no' : 'yes',\n })),\n);\n\nexport const getSelectedRoles = createSelector(\n getSelectedRolesIds,\n getRolesList,\n (selected, roles) => roles.filter((role) => selected.includes(role.name)),\n);\n\nexport const getIsRolesSelected = createSelector(\n getSelectedRolesIds,\n (selected) => !!selected.length,\n);\n\nexport const getIsSingleRolesSelected = createSelector(\n getSelectedRolesIds,\n (selected) => selected.length === 1,\n);\n\nexport const getSelectedRolesDetailsForDisplay = createSelector(\n getSelectedRoles,\n (selectedRoles) => {\n if (selectedRoles.length === 1) {\n return selectedRoles[0].name;\n }\n return `${selectedRoles.length} roles`;\n },\n);\n","/* eslint-disable @typescript-eslint/no-shadow */\n/* eslint-disable no-param-reassign */\n\nimport {\n ActionReducerMapBuilder,\n AsyncThunk,\n PayloadAction,\n SerializedError,\n} from '@reduxjs/toolkit';\nimport { State } from '../types';\n\ntype ExtractedArg<T> = T extends AsyncThunk<any, infer U, any> ? U : never;\n\ntype FulfilledAction<T extends AsyncThunk<any, any, any>> = PayloadAction<\n any,\n string,\n {\n arg: ExtractedArg<T>;\n requestId: string;\n },\n never\n>;\n\ntype RejectedAction<T extends AsyncThunk<any, any, any>> = PayloadAction<\n any,\n string,\n {\n arg: ExtractedArg<T>;\n requestId: string;\n },\n SerializedError\n>;\n\ntype PendingAction<T extends AsyncThunk<any, any, any>> = PayloadAction<\n unknown,\n string,\n {\n arg: ExtractedArg<T>;\n requestId: string;\n }\n>;\n\ntype AsyncReducerConfig<T extends AsyncThunk<any, any, any>> = {\n onFulfilled?: (state: State, action: FulfilledAction<T>) => void;\n onRejected?: (state: State, action: RejectedAction<T>) => void;\n onPending?: (state: State, action: PendingAction<T>) => void;\n};\n\nexport const buildAsyncReducer =\n <T extends AsyncThunk<any, any, any>>(action: T) =>\n (...args: AsyncReducerConfig<T>[]) =>\n (builder: ActionReducerMapBuilder<State>) => {\n builder.addCase(action.pending, (state, action) => {\n args.forEach(({ onPending }) => {\n onPending?.(state, action);\n });\n });\n\n builder.addCase(action.fulfilled, (state, action) => {\n args.forEach(({ onFulfilled }) => {\n onFulfilled?.(state, action);\n });\n });\n\n builder.addCase(action.rejected, (state, action) => {\n args.forEach(({ onRejected }) => {\n onRejected?.(state, action);\n });\n });\n };\n\nexport const withRequestStatus = (\n getStateSection: (state: State) => { loading: boolean; error: unknown },\n): AsyncReducerConfig<any> => ({\n onFulfilled: (state) => {\n getStateSection(state).loading = false;\n },\n onPending: (state) => {\n getStateSection(state).loading = true;\n getStateSection(state).error = null;\n },\n onRejected: (state, action) => {\n getStateSection(state).loading = false;\n getStateSection(state).error = action.error;\n },\n});\n\nexport const withNotifications = ({\n getErrorMsg,\n getSuccessMsg,\n}: {\n getErrorMsg?: (action?: RejectedAction<AsyncThunk<any, any, any>>) => string;\n getSuccessMsg?: (\n action?: FulfilledAction<AsyncThunk<any, any, any>>,\n ) => string;\n}): AsyncReducerConfig<any> => ({\n onFulfilled: (state, action) => {\n if (getSuccessMsg)\n state.notifications.push({ type: 'success', msg: getSuccessMsg(action) });\n },\n onRejected: (state, action) => {\n if (getErrorMsg)\n state.notifications.push({ type: 'error', msg: getErrorMsg(action) });\n },\n});\n","/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { Sdk } from '../../api/sdk';\nimport { FirstParameter, State, ThunkConfigExtraApi } from '../types';\nimport {\n buildAsyncReducer,\n withNotifications,\n withRequestStatus,\n} from './helpers';\n\nconst action = createAsyncThunk<\n any,\n FirstParameter<Sdk['role']['create']>,\n ThunkConfigExtraApi\n>('roles/create', (arg, { extra: { api } }) => api.role.create(arg));\n\nconst reducer = buildAsyncReducer(action)(\n {\n onFulfilled: (state, action) => {\n state.rolesList.data.unshift(action.payload);\n },\n },\n withRequestStatus((state: State) => state.createRole),\n withNotifications({\n getSuccessMsg: () => 'Role created successfully',\n getErrorMsg: (action) => {\n const errorMsg = action.error?.message;\n return `\n <div>\n <div>Failed to create role</div>\n ${errorMsg}\n </div>`;\n },\n }),\n);\n\nexport const createRole = { action, reducer };\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { pluralize } from '@descope/sdk-helpers';\nimport { Sdk } from '../../api/sdk';\nimport { FirstParameter, State, ThunkConfigExtraApi } from '../types';\nimport {\n buildAsyncReducer,\n withNotifications,\n withRequestStatus,\n} from './helpers';\n\nconst action = createAsyncThunk<\n any,\n FirstParameter<Sdk['role']['deleteBatch']>,\n ThunkConfigExtraApi\n>('roles/delete', (arg, { extra: { api } }) => api.role.deleteBatch(arg));\n\nconst reducer = buildAsyncReducer(action)(\n {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFulfilled: (state, action) => {\n state.rolesList.data = state.rolesList.data.filter(\n (role) =>\n role?.tenantId?.length === 0 || !action.meta.arg.includes(role.name),\n );\n state.selectedRolesIds = [];\n },\n },\n withRequestStatus((state: State) => state.deleteRole),\n // eslint-disable-next-line @typescript-eslint/no-shadow\n withNotifications({\n // eslint-disable-next-line @typescript-eslint/no-shadow\n getSuccessMsg: (action) =>\n pluralize(action.meta.arg.length)`${['', action.meta.arg.length]} ${[\n 'R',\n 'r',\n ]}ole${['', 's']} deleted successfully`,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n getErrorMsg: (action) =>\n pluralize(action.meta.arg.length)`Failed to delete role${['', 's']}`,\n }),\n);\n\nexport const deleteRoles = { action, reducer };\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { Sdk } from '../../api/sdk';\nimport { FirstParameter, State, ThunkConfigExtraApi } from '../types';\nimport { buildAsyncReducer, withRequestStatus } from './helpers';\nimport { getSearchParams } from '../selectors';\n\nconst action = createAsyncThunk<\n any,\n FirstParameter<Sdk['role']['search']> | void,\n ThunkConfigExtraApi\n>('roles/search', (arg, { extra: { api }, getState }) => {\n // we get the existing search params from state, and adding the new search params from the action\n const searchParams = getSearchParams(getState() as State);\n return api.role.search({ ...searchParams, ...arg });\n});\n\nconst reducer = buildAsyncReducer(action)(\n {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onPending: (state, action) => {\n state.searchParams = { ...state.searchParams, ...action.meta.arg };\n },\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFulfilled: (state, action) => {\n state.rolesList.data = action.payload;\n },\n },\n withRequestStatus((state: State) => state.rolesList),\n);\n\nexport const searchRole = { action, reducer };\n","/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { Sdk } from '../../api/sdk';\nimport { FirstParameter, State, ThunkConfigExtraApi } from '../types';\nimport {\n buildAsyncReducer,\n withNotifications,\n withRequestStatus,\n} from './helpers';\n\nconst action = createAsyncThunk<\n any,\n FirstParameter<Sdk['role']['update']>,\n ThunkConfigExtraApi\n>('roles/update', (arg, { extra: { api } }) => api.role.update(arg));\n\nconst reducer = buildAsyncReducer(action)(\n {\n onFulfilled: (state, action) => {\n const roleIdx = state.rolesList.data.findIndex(\n (role) => role.name === action.payload.oldName,\n );\n if (roleIdx !== -1) {\n state.rolesList.data[roleIdx] = action.payload;\n }\n },\n },\n withRequestStatus((state: State) => state.updateRole),\n withNotifications({\n getSuccessMsg: () => 'Role updated successfully',\n getErrorMsg: (action) => {\n const errorMsg = action.error?.message;\n return `\n <div>\n <div>Failed to update role</div>\n ${errorMsg}\n </div>`;\n },\n }),\n);\n\nexport const updateRole = { action, reducer };\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { Sdk } from '../../api/sdk';\nimport { FirstParameter, State, ThunkConfigExtraApi } from '../types';\nimport { buildAsyncReducer, withRequestStatus } from './helpers';\n\nconst action = createAsyncThunk<\n any,\n FirstParameter<Sdk['tenant']['getTenantPermissions']>,\n ThunkConfigExtraApi\n>('tenant/getTenantPermissions', (_, { extra: { api } }) =>\n api.tenant.getTenantPermissions(),\n);\n\nconst reducer = buildAsyncReducer(action)(\n {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onFulfilled: (state, action) => {\n // eslint-disable-next-line no-param-reassign\n state.tenantPermissions.data = action.payload.permissions;\n },\n },\n withRequestStatus((state: State) => state.tenantPermissions),\n);\n\nexport const getTenantPermissions = { action, reducer };\n","import { State } from './types';\n\nexport const initialState: State = {\n rolesList: {\n data: [],\n loading: false,\n error: null,\n },\n createRole: {\n loading: false,\n error: null,\n },\n updateRole: {\n loading: false,\n error: null,\n },\n deleteRole: {\n loading: false,\n error: null,\n },\n tenantPermissions: {\n loading: false,\n error: null,\n data: [],\n },\n searchParams: { text: '', sort: [] },\n selectedRolesIds: [],\n notifications: [],\n};\n","export const apiPaths = {\n role: {\n search: '/v1/mgmt/role/search',\n deleteBatch: '/v1/mgmt/role/delete/batch',\n create: '/v1/mgmt/role/create',\n update: '/v1/mgmt/role/update',\n },\n tenant: {\n permissions: '/v1/mgmt/permission/all',\n },\n};\n","export const withErrorHandler = async (res: Response) => {\n const text = await res.text();\n const json = JSON.parse(text);\n\n if (!res.ok) {\n const descopeErrorMsg = `${json.errorDescription}${\n json.errorMessage ? `: ${json.errorMessage}` : ''\n }`;\n throw Error(descopeErrorMsg || `${res.status} ${res.statusText}`);\n }\n\n res.json = () => Promise.resolve(json);\n res.text = () => Promise.resolve(text);\n};\n","import {\n CreateRoleConfig,\n Permission,\n Role,\n SearchRolesConfig,\n UpdateRoleConfig,\n} from '../types';\n\nconst search: (\n config: SearchRolesConfig,\n tenantId: string,\n) => Promise<Role[]> = async ({ text, sort }, tenantId) =>\n new Promise((resolve) => {\n const roles: Role[] = [];\n for (let i = 1; i < 9; i += 1) {\n roles.push({\n name: `Role ${i}`,\n description: `Role description ${i}`,\n permissionNames: [`Permission ${i}`],\n createdTime: new Date(),\n tenantId,\n });\n }\n sort.forEach((s) => {\n roles.sort((a, b) =>\n !s.desc\n ? (a[s.field] as string)?.localeCompare(b[s.field] as string)\n : (b[s.field] as string)?.localeCompare(a[s.field] as string),\n );\n });\n resolve(\n roles.filter(\n (role) =>\n role.name.toLowerCase().includes(text.toLowerCase()) ||\n role.description.toLowerCase().includes(text.toLowerCase()),\n ),\n );\n });\n\nconst create: (\n config: CreateRoleConfig,\n tenantId: string,\n) => Promise<Role> = async ({ name, description, permissionNames }, tenantId) =>\n new Promise((resolve) => {\n resolve({\n name,\n description,\n permissionNames,\n createdTime: new Date(),\n tenantId,\n });\n });\n\nconst update: (\n config: UpdateRoleConfig,\n tenantId: string,\n) => Promise<Role & { oldName: string }> = async (\n { name, newName, description, permissionNames },\n tenantId,\n) =>\n new Promise((resolve) => {\n resolve({\n name: newName,\n description,\n permissionNames,\n createdTime: new Date(),\n oldName: name,\n tenantId,\n });\n });\n\nconst deleteBatch = async () => {};\n\nconst getTenantPermissions = (): Promise<{\n permissions: Permission[];\n}> =>\n new Promise((resolve) => {\n const permissions: Permission[] = [];\n for (let i = 1; i < 5; i += 1) {\n permissions.push({\n name: `Permission ${i}`,\n });\n }\n resolve({ permissions });\n });\n\nconst role = {\n search,\n create,\n update,\n deleteBatch,\n};\nconst tenants = {\n getTenantPermissions,\n};\nexport { role, tenants };\n","import {\n CreateRoleConfig,\n HttpClient,\n SearchRolesConfig,\n UpdateRoleConfig,\n Role,\n} from '../types';\nimport { apiPaths } from '../apiPaths';\nimport { withErrorHandler } from './helpers';\nimport { role } from './mocks';\n\nexport const createRoleSdk = ({\n httpClient,\n tenant,\n mock,\n}: {\n httpClient: HttpClient;\n tenant: string;\n mock: boolean;\n}) => {\n const search: (config: SearchRolesConfig) => Promise<Role[]> = async ({\n page,\n limit = 10000,\n text,\n sort,\n } = {}) => {\n if (mock) {\n return role.search({ page, limit, text, sort }, tenant);\n }\n const res = await httpClient.post(\n apiPaths.role.search,\n {\n limit,\n page,\n text,\n sort,\n },\n {\n queryParams: { tenant },\n },\n );\n\n await withErrorHandler(res);\n\n const json = await res.json();\n\n return json.roles;\n };\n\n const deleteBatch = async (roleNames: string[]) => {\n if (mock) {\n return role.deleteBatch();\n }\n const res = await httpClient.post(\n apiPaths.role.deleteBatch,\n { roleNames },\n {\n queryParams: { tenant },\n },\n );\n\n await withErrorHandler(res);\n\n return res.json();\n };\n\n const create: (config: CreateRoleConfig) => Promise<Role[]> = async ({\n name,\n description,\n permissionNames,\n }) => {\n if (mock) {\n return role.create({ name, description, permissionNames }, tenant);\n }\n const res = await httpClient.post(\n apiPaths.role.create,\n {\n name,\n description,\n permissionNames,\n tenantId: tenant,\n },\n {\n queryParams: { tenant },\n },\n );\n\n await withErrorHandler(res);\n\n const json = await res.json();\n\n return json;\n };\n\n const update: (config: UpdateRoleConfig) => Promise<Role[]> = async ({\n name,\n newName,\n description,\n permissionNames,\n }) => {\n if (mock) {\n return role.update(\n { name, newName, description, permissionNames },\n tenant,\n );\n }\n const res = await httpClient.post(\n apiPaths.role.update,\n {\n name,\n newName,\n description,\n permissionNames,\n tenantId: tenant,\n },\n {\n queryParams: { tenant },\n },\n );\n\n await withErrorHandler(res);\n\n const json = await res.json();\n json.oldName = name;\n return json;\n };\n\n return {\n search,\n deleteBatch,\n create,\n update,\n };\n};\n","import { HttpClient, Permission } from '../types';\nimport { apiPaths } from '../apiPaths';\nimport { withErrorHandler } from './helpers';\nimport { tenants } from './mocks';\n\nexport const createTenantSdk = ({\n httpClient,\n tenant,\n mock,\n}: {\n httpClient: HttpClient;\n tenant: string;\n mock: boolean;\n}) => {\n const getTenantPermissions = async (): Promise<{\n permissions: Permission[];\n }> => {\n if (mock) {\n return tenants.getTenantPermissions();\n }\n const res = await httpClient.get(apiPaths.tenant.permissions, {\n queryParams: { tenant },\n });\n\n await withErrorHandler(res);\n\n return res.json();\n };\n\n return {\n getTenantPermissions,\n };\n};\n","import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport {\n createValidateAttributesMixin,\n loggerMixin,\n observeAttributesMixin,\n projectIdMixin,\n} from '@descope/sdk-mixins';\nimport { Sdk, createSdk } from '../api/sdk';\n\nexport const apiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n projectIdMixin,\n observeAttributesMixin,\n loggerMixin,\n createValidateAttributesMixin({\n tenant: createValidateAttributesMixin.missingAttrValidator,\n }),\n )(superclass);\n\n return class ApiMixinClass extends BaseClass {\n #api: Sdk;\n\n #createSdk() {\n this.logger.debug('creating an sdk instance');\n this.#api = createSdk(\n { projectId: this.projectId, baseUrl: this.baseUrl },\n this.tenant,\n this.mock === 'true',\n );\n }\n\n get baseUrl() {\n return this.getAttribute('base-url');\n }\n\n get tenant() {\n return this.getAttribute('tenant');\n }\n\n get mock() {\n return this.getAttribute('mock');\n }\n\n get api() {\n if (!this.#api) {\n this.#createSdk();\n }\n\n return this.#api;\n }\n\n async init() {\n await super.init?.();\n\n this.observeAttributes(['project-id', 'base-url', 'tenant'], () => {\n if (this.#api) {\n this.#createSdk();\n }\n });\n }\n };\n },\n);\n","import createWebSdk from '@descope/web-js-sdk';\nimport { createRoleSdk } from './createRoleSdk';\nimport { createTenantSdk } from './createTenantSdk';\n\nexport const createSdk = (\n config: Parameters<typeof createWebSdk>[0],\n tenant: string,\n mock: boolean,\n) => {\n const webSdk = createWebSdk({ ...config, persistTokens: true });\n\n return {\n role: createRoleSdk({ httpClient: webSdk.httpClient, tenant, mock }),\n tenant: createTenantSdk({ httpClient: webSdk.httpClient, tenant, mock }),\n };\n};\n\nexport type Sdk = ReturnType<typeof createSdk>;\n","/* eslint-disable no-param-reassign */\nimport { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport {\n createStateManagementMixin,\n initLifecycleMixin,\n loggerMixin,\n} from '@descope/sdk-mixins';\nimport {\n createRole,\n deleteRoles,\n getTenantPermissions,\n searchRole,\n updateRole,\n} from '../state/asyncActions';\nimport { initialState } from '../state/initialState';\nimport { apiMixin } from './apiMixin';\n\nexport const stateManagementMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createStateManagementMixin({\n name: 'widget',\n initialState,\n reducers: {\n setSelectedRolesIds: (state, { payload }) => {\n state.selectedRolesIds = payload;\n },\n clearNotifications: (state) => {\n state.notifications = [];\n },\n },\n extraReducers: (builder) => {\n createRole.reducer(builder);\n updateRole.reducer(builder);\n deleteRoles.reducer(builder);\n searchRole.reducer(builder);\n getTenantPermissions.reducer(builder);\n },\n asyncActions: {\n searchRoles: searchRole.action,\n createRole: createRole.action,\n updateRole: updateRole.action,\n deleteRoles: deleteRoles.action,\n getTenantPermissions: getTenantPermissions.action,\n },\n }),\n initLifecycleMixin,\n loggerMixin,\n apiMixin,\n )(superclass);\n return class StateManagementMixinClass extends BaseClass {\n state = initialState;\n\n constructor(...args: any) {\n super(...args);\n\n this.subscribe((state: typeof initialState) => {\n this.logger.debug('State update:', state);\n this.state = state;\n });\n }\n };\n },\n);\n","import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport {\n createValidateAttributesMixin,\n staticResourcesMixin,\n} from '@descope/sdk-mixins';\n\nconst WIDGET_PAGES_BASE_DIR = 'role-management-widget';\n\nexport const fetchWidgetPagesMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n staticResourcesMixin,\n createValidateAttributesMixin({\n 'widget-id': createValidateAttributesMixin.missingAttrValidator,\n }),\n )(superclass);\n return class FetchWidgetPagesMixinClass extends BaseClass {\n get widgetId() {\n return this.getAttribute('widget-id');\n }\n\n async fetchWidgetPage(filename: string) {\n const res = await this.fetchStaticResource(\n `${WIDGET_PAGES_BASE_DIR}/${this.widgetId}/${filename}`,\n 'text',\n );\n return res.body;\n }\n };\n },\n);\n","import {\n compose,\n createSingletonMixin,\n createTemplate,\n} from '@descope/sdk-helpers';\nimport {\n descopeUiMixin,\n initElementMixin,\n initLifecycleMixin,\n loggerMixin,\n} from '@descope/sdk-mixins';\nimport { fetchWidgetPagesMixin } from '../../fetchWidgetPagesMixin';\nimport { stateManagementMixin } from '../../stateManagementMixin';\n\nexport const initWidgetRootMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitWidgetRootMixinClass extends compose(\n loggerMixin,\n initLifecycleMixin,\n descopeUiMixin,\n initElementMixin,\n fetchWidgetPagesMixin,\n stateManagementMixin,\n )(superclass) {\n async #initWidgetRoot() {\n const template = createTemplate(\n // `\n // <descope-container data-editor-type=\"container\" direction=\"column\" id=\"ROOT\" space-between=\"md\" st-horizontal-padding=\"1rem\" st-vertical-padding=\"1rem\" st-align-items=\"safe center\" st-justify-content=\"safe center\" st-host-width=\"100%\" st-gap=\"1rem\">\n // <descope-container data-editor-type=\"container\" direction=\"row\" id=\"headerContainer\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"space-between\" st-background-color=\"#ffffff00\" st-host-width=\"100%\" st-gap=\"0rem\">\n // <descope-text-field bordered=\"true\" data-id=\"search-input\" data-testid=\"search-input\" full-width=\"false\" id=\"search\" label=\"\" max=\"100\" name=\"\" placeholder=\"Search\" required=\"false\" size=\"sm\"></descope-text-field>\n // <descope-container data-editor-type=\"container\" direction=\"row\" id=\"buttonsContainer\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"flex-end\" st-background-color=\"#ffffff00\" st-host-width=\"auto\" st-gap=\"0.5rem\">\n // <descope-button data-id=\"delete-roles\" data-testid=\"delete-roles-trigger\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"deleteRoles\" shape=\"\" size=\"sm\" variant=\"outline\" mode=\"primary\" square=\"false\">Delete</descope-button>\n // <descope-button data-id=\"create-role\" data-testid=\"create-role-trigger\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"createRole\" shape=\"\" size=\"sm\" variant=\"contained\" mode=\"primary\" square=\"false\">+ Role</descope-button>\n // <descope-button data-id=\"edit-role\" data-testid=\"edit-role-trigger\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"updateRole\" shape=\"\" size=\"sm\" variant=\"contained\" mode=\"primary\" square=\"false\">Edit Role</descope-button>\n // </descope-container>\n // </descope-container>\n // <descope-grid column-reordering-allowed=\"true\" data-id=\"roles-table\" size=\"sm\" st-host-height=\"300px\" style=\"width:100%\">\n // <descope-grid-selection-column auto-width=\"true\" frozen=\"true\"></descope-grid-selection-column>\n // <descope-grid-text-column header=\"Name\" path=\"name\" resizable=\"true\" sortable=\"true\"></descope-grid-text-column>\n // <descope-grid-text-column header=\"Description\" path=\"description\" resizable=\"true\" sortable=\"true\"></descope-grid-text-column>\n // <descope-grid-text-column header=\"Permissions\" path=\"permissionNames\" resizable=\"true\"></descope-grid-text-column>\n // <descope-grid-custom-column header=\"Editable\" path=\"editable\" resizable=\"true\">\n // <descope-badge bordered=\"true\" data-pattern=\"no\" mode=\"default\" size=\"xs\" st-text-transform=\"capitalize\"></descope-badge>\n // <descope-badge bordered=\"true\" data-pattern=\"yes\" mode=\"primary\" size=\"xs\" st-text-transform=\"capitalize\"></descope-badge>\n // </descope-grid-custom-column>\n // </descope-grid>\n // </descope-container>\n // `,\n await this.fetchWidgetPage('root.html'),\n );\n await this.loadDescopeUiComponents(template);\n this.contentRootElement.append(template.content.cloneNode(true));\n }\n\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-empty-function\n async onWidgetRootReady() {}\n\n async init() {\n await super.init?.();\n\n await Promise.all([\n this.#initWidgetRoot(),\n this.actions.searchRoles(),\n this.actions.getTenantPermissions(),\n ]);\n\n this.onWidgetRootReady();\n }\n },\n);\n","import {\n ButtonDriver,\n ModalDriver,\n MultiSelectDriver,\n} from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n createTemplate,\n} from '@descope/sdk-helpers';\nimport { formMixin, loggerMixin, modalMixin } from '@descope/sdk-mixins';\nimport { getTenantPermissions } from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initCreateRoleModalMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitCreateRoleModalMixinClass extends compose(\n stateManagementMixin,\n modalMixin,\n formMixin,\n loggerMixin,\n initWidgetRootMixin,\n )(superclass) {\n createRoleModal: ModalDriver;\n\n #permissionsMultiSelect: MultiSelectDriver;\n\n async #initCreateRoleModal() {\n this.createRoleModal = this.createModal();\n this.createRoleModal.setContent(\n createTemplate(\n // `\n // <descope-container data-editor-type=\"container\" direction=\"column\" id=\"ROOT\" space-between=\"md\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"safe center\" st-background-color=\"#80808000\" st-host-width=\"100%\" st-gap=\"1rem\">\n // <descope-text full-width=\"false\" id=\"titleText\" italic=\"false\" mode=\"primary\" text-align=\"center\" variant=\"subtitle1\">New Role</descope-text>\n // <descope-text-field bordered=\"true\" full-width=\"true\" id=\"name\" label=\"Name\" max=\"100\" name=\"name\" placeholder=\"Name\" required=\"true\" size=\"sm\"></descope-text-field>\n // <descope-text-field bordered=\"true\" full-width=\"true\" id=\"description\" label=\"Description\" max=\"1024\" name=\"description\" placeholder=\"Description\" required=\"false\" size=\"sm\"></descope-text-field>\n // <descope-multi-select-combo-box bordered=\"true\" data-id=\"permissions-multiselect\" full-width=\"true\" id=\"permissionsInput\" item-label-path=\"data-name\" item-value-path=\"data-id\" label=\"Permissions\" name=\"permissionNames\" size=\"sm\" allow-custom-value=\"false\" clear-button-visible=\"true\"></descope-multi-select-combo-box>\n // <descope-container data-editor-type=\"container\" direction=\"row\" id=\"buttonsContainer\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"flex-end\" st-background-color=\"#ffffff00\" st-host-width=\"100%\" st-gap=\"0.5rem\">\n // <descope-button data-id=\"modal-cancel\" data-testid=\"create-role-modal-cancel\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"createRoleCancelButton\" shape=\"\" size=\"sm\" variant=\"outline\" mode=\"primary\" square=\"false\">Cancel</descope-button>\n // <descope-button data-id=\"modal-submit\" data-testid=\"create-role-modal-submit\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"createRoleSubmitButton\" shape=\"\" size=\"sm\" variant=\"contained\" mode=\"primary\" square=\"false\">Create</descope-button>\n // </descope-container>\n // </descope-container>\n // `,\n await this.fetchWidgetPage('create-role-modal.html'),\n ),\n );\n\n const cancelButton = new ButtonDriver(\n () =>\n this.createRoleModal.ele?.querySelector('[data-id=\"modal-cancel\"]'),\n { logger: this.logger },\n );\n cancelButton.onClick(() => {\n this.createRoleModal.close();\n this.resetFormData(this.createRoleModal.ele);\n });\n\n const submitButton = new ButtonDriver(\n () =>\n this.createRoleModal.ele?.querySelector('[data-id=\"modal-submit\"]'),\n { logger: this.logger },\n );\n submitButton.onClick(async () => {\n if (this.validateForm(this.createRoleModal.ele)) {\n this.actions.createRole({\n ...this.getFormData(this.createRoleModal.ele),\n });\n this.createRoleModal.close();\n this.resetFormData(this.createRoleModal.ele);\n }\n });\n\n this.#permissionsMultiSelect = new MultiSelectDriver(\n () =>\n this.createRoleModal.ele?.querySelector(\n '[data-id=\"permissions-multiselect\"]',\n ),\n { logger: this.logger },\n );\n\n this.#updatePermissionsMultiSelect();\n }\n\n #updatePermissionsMultiSelect = async () => {\n await this.#permissionsMultiSelect.setData(\n getTenantPermissions(this.state)?.map(({ name }) => ({\n value: name,\n label: name,\n })),\n );\n };\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initCreateRoleModal();\n }\n },\n);\n","import { ButtonDriver } from '@descope/sdk-component-drivers';\nimport { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { loggerMixin } from '@descope/sdk-mixins';\nimport { initCreateRoleModalMixin } from './initCreateRoleModalMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initCreateRoleButtonMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitCreateRoleButtonMixinClass extends compose(\n loggerMixin,\n initCreateRoleModalMixin,\n initWidgetRootMixin,\n )(superclass) {\n createButton: ButtonDriver;\n\n #initCreateButton() {\n this.createButton = new ButtonDriver(\n this.shadowRoot?.querySelector('[data-id=\"create-role\"]'),\n { logger: this.logger },\n );\n this.createButton.onClick(() => this.createRoleModal.open());\n }\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initCreateButton();\n }\n },\n);\n","import {\n ButtonDriver,\n ModalDriver,\n TextDriver,\n} from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n createTemplate,\n} from '@descope/sdk-helpers';\nimport { loggerMixin, modalMixin } from '@descope/sdk-mixins';\nimport {\n getSelectedRoles,\n getSelectedRolesDetailsForDisplay,\n} from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initDeleteRolesModalMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitDeleteRolesModalMixinClass extends compose(\n stateManagementMixin,\n modalMixin,\n loggerMixin,\n initWidgetRootMixin,\n )(superclass) {\n deleteRolesModal: ModalDriver;\n\n async #initDeleteRoleModal() {\n this.deleteRolesModal = this.createModal();\n this.deleteRolesModal.setContent(\n createTemplate(\n // `\n // <descope-container border-radius=\"sm\" data-editor-type=\"container\" direction=\"column\" id=\"ROOT\" space-between=\"md\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"safe center\" st-background-color=\"#80808000\" st-host-width=\"100%\" st-gap=\"1rem\">\n // <descope-text full-width=\"false\" id=\"titleText\" italic=\"false\" mode=\"primary\" text-align=\"center\" variant=\"subtitle1\">Delete Roles</descope-text>\n // <descope-text data-id=\"body-text\" full-width=\"false\" id=\"bodyText\" italic=\"false\" mode=\"primary\" text-align=\"center\" variant=\"body1\"></descope-text>\n // <descope-container data-editor-type=\"container\" direction=\"row\" id=\"buttonsContainer\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"flex-end\" st-background-color=\"#ffffff00\" st-host-width=\"100%\" st-gap=\"0.5rem\">\n // <descope-button data-id=\"modal-cancel\" data-testid=\"delete-roles-modal-cancel\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"deleteRoleCancelButton\" shape=\"\" size=\"sm\" variant=\"outline\" mode=\"primary\" square=\"false\">Cancel</descope-button>\n // <descope-button data-id=\"modal-submit\" data-testid=\"delete-roles-modal-submit\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"deleteRoleSubmitButton\" shape=\"\" size=\"sm\" variant=\"contained\" mode=\"primary\" square=\"false\">Delete</descope-button>\n // </descope-container>\n // </descope-container>\n // `,\n await this.fetchWidgetPage('delete-roles-modal.html'),\n ),\n );\n\n const cancelButton = new ButtonDriver(\n () =>\n this.deleteRolesModal.ele?.querySelector(\n '[data-id=\"modal-cancel\"]',\n ),\n { logger: this.logger },\n );\n cancelButton.onClick(() => this.deleteRolesModal.close());\n\n const submitButton = new ButtonDriver(\n () =>\n this.deleteRolesModal.ele?.querySelector(\n '[data-id=\"modal-submit\"]',\n ),\n { logger: this.logger },\n );\n submitButton.onClick(() => {\n const selectedRoles = getSelectedRoles(this.state);\n this.actions.deleteRoles(selectedRoles?.map((role) => role.name));\n this.deleteRolesModal.close();\n });\n\n const description = new TextDriver(\n this.deleteRolesModal.ele?.querySelector('[data-id=\"body-text\"]'),\n { logger: this.logger },\n );\n\n this.deleteRolesModal.beforeOpen = () => {\n const roleDetails = getSelectedRolesDetailsForDisplay(this.state);\n description.text = `Delete ${roleDetails}?`;\n };\n }\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n await this.#initDeleteRoleModal();\n }\n },\n);\n","import { ButtonDriver } from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n withMemCache,\n} from '@descope/sdk-helpers';\nimport { loggerMixin } from '@descope/sdk-mixins';\nimport { getIsRolesSelected } from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initDeleteRolesModalMixin } from './initDeleteRolesModalMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initDeleteRolesButtonMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitDeleteRolesButtonMixinClass extends compose(\n loggerMixin,\n initWidgetRootMixin,\n stateManagementMixin,\n initDeleteRolesModalMixin,\n )(superclass) {\n deleteButton: ButtonDriver;\n\n #initDeleteButton() {\n this.deleteButton = new ButtonDriver(\n this.shadowRoot?.querySelector('[data-id=\"delete-roles\"]'),\n { logger: this.logger },\n );\n this.deleteButton.disable();\n this.deleteButton.onClick(() => {\n this.deleteRolesModal.open();\n });\n }\n\n #onIsRoleSelectedUpdate = withMemCache(\n (isSelected: ReturnType<typeof getIsRolesSelected>) => {\n if (isSelected) {\n this.deleteButton.enable();\n } else {\n this.deleteButton.disable();\n }\n },\n );\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initDeleteButton();\n\n this.subscribe(\n this.#onIsRoleSelectedUpdate.bind(this),\n getIsRolesSelected,\n );\n }\n },\n);\n","import {\n ButtonDriver,\n ModalDriver,\n MultiSelectDriver,\n} from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n createTemplate,\n} from '@descope/sdk-helpers';\nimport { formMixin, loggerMixin, modalMixin } from '@descope/sdk-mixins';\nimport {\n getSelectedRoles,\n getTenantPermissions,\n} from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initEditRoleModalMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitEditRoleModalMixinClass extends compose(\n stateManagementMixin,\n modalMixin,\n loggerMixin,\n formMixin,\n initWidgetRootMixin,\n )(superclass) {\n editRoleModal: ModalDriver;\n\n #permissionsMultiSelect: MultiSelectDriver;\n\n #initCancelButton() {\n const cancelButton = new ButtonDriver(\n () =>\n this.editRoleModal.ele?.querySelector('[data-id=\"modal-cancel\"]'),\n { logger: this.logger },\n );\n cancelButton.onClick(() => this.editRoleModal.close());\n }\n\n #initSubmitButton() {\n const submitButton = new ButtonDriver(\n () =>\n this.editRoleModal.ele?.querySelector('[data-id=\"modal-submit\"]'),\n { logger: this.logger },\n );\n\n submitButton.onClick(() => {\n if (this.validateForm(this.editRoleModal.ele)) {\n const { name, ...formData } = this.getFormData(\n this.editRoleModal.ele,\n );\n const roleDetails = getSelectedRoles(this.state)?.[0];\n this.actions.updateRole({\n newName: name,\n name: roleDetails.name,\n ...formData,\n });\n this.editRoleModal.close();\n this.resetFormData(this.editRoleModal.ele);\n }\n });\n }\n\n #updatePermissionsMultiSelect = async () => {\n await this.#permissionsMultiSelect.setData(\n getTenantPermissions(this.state)?.map(({ name }) => ({\n value: name,\n label: name,\n })),\n );\n };\n\n #updateModalData = () => {\n const roleDetails = getSelectedRoles(this.state)?.[0];\n\n const formData = {\n name: roleDetails?.name,\n description: roleDetails?.description,\n permissionNames: roleDetails?.permissionNames,\n };\n\n this.setFormData(this.editRoleModal.ele, formData);\n };\n\n async #initEditRoleModal() {\n this.editRoleModal = this.createModal();\n this.editRoleModal.setContent(\n createTemplate(\n // `\n // <descope-container data-editor-type=\"container\" direction=\"column\" id=\"ROOT\" space-between=\"md\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"safe center\" st-background-color=\"#80808000\" st-host-width=\"100%\" st-gap=\"1rem\">\n // <descope-text full-width=\"false\" id=\"titleText\" italic=\"false\" mode=\"primary\" text-align=\"center\" variant=\"subtitle1\">Edit Role</descope-text>\n // <descope-text-field bordered=\"true\" full-width=\"true\" id=\"name\" label=\"Name\" max=\"100\" name=\"name\" placeholder=\"Name\" required=\"true\" size=\"sm\"></descope-text-field>\n // <descope-text-field bordered=\"true\" full-width=\"true\" id=\"description\" label=\"Description\" max=\"1024\" name=\"description\" placeholder=\"Description\" required=\"false\" size=\"sm\"></descope-text-field>\n // <descope-multi-select-combo-box bordered=\"true\" data-id=\"permissions-multiselect\" full-width=\"true\" id=\"permissionsInput\" item-label-path=\"data-name\" item-value-path=\"data-id\" label=\"Permissions\" name=\"permissionNames\" size=\"sm\" allow-custom-value=\"false\" clear-button-visible=\"true\"></descope-multi-select-combo-box>\n // <descope-container data-editor-type=\"container\" direction=\"row\" id=\"buttonsContainer\" st-horizontal-padding=\"0rem\" st-vertical-padding=\"0rem\" st-align-items=\"start\" st-justify-content=\"flex-end\" st-background-color=\"#ffffff00\" st-host-width=\"100%\" st-gap=\"0.5rem\">\n // <descope-button data-id=\"modal-cancel\" data-testid=\"edit-role-modal-cancel\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"editRoleCancelButton\" shape=\"\" size=\"sm\" variant=\"outline\" mode=\"primary\" square=\"false\">Cancel</descope-button>\n // <descope-button data-id=\"modal-submit\" data-testid=\"edit-role-modal-submit\" data-type=\"button\" formNoValidate=\"false\" full-width=\"false\" id=\"editRoleSubmitButton\" shape=\"\" size=\"sm\" variant=\"contained\" mode=\"primary\" square=\"false\">Edit Role</descope-button>\n // </descope-container>\n // </descope-container>\n // `,\n await this.fetchWidgetPage('edit-role-modal.html'),\n ),\n );\n\n this.#initCancelButton();\n this.#initSubmitButton();\n\n this.#permissionsMultiSelect = new MultiSelectDriver(\n () =>\n this.editRoleModal.ele?.querySelector(\n '[data-id=\"permissions-multiselect\"]',\n ),\n { logger: this.logger },\n );\n\n this.editRoleModal.beforeOpen = async () => {\n await this.#updatePermissionsMultiSelect();\n this.#updateModalData();\n };\n }\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n await this.#initEditRoleModal();\n }\n },\n);\n","import { ButtonDriver } from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n withMemCache,\n} from '@descope/sdk-helpers';\nimport { formMixin, loggerMixin } from '@descope/sdk-mixins';\nimport { getIsSingleRolesSelected } from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initEditRoleModalMixin } from './initEditRoleModalMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initEditRoleButtonMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitEditRoleButtonMixinClass extends compose(\n loggerMixin,\n initWidgetRootMixin,\n stateManagementMixin,\n initEditRoleModalMixin,\n formMixin,\n )(superclass) {\n editButton: ButtonDriver;\n\n #initEditButton() {\n this.editButton = new ButtonDriver(\n this.shadowRoot?.querySelector('[data-id=\"edit-role\"]'),\n { logger: this.logger },\n );\n this.editButton.disable();\n this.editButton.onClick(() => {\n this.editRoleModal.open();\n });\n }\n\n #onIsRoleSelectedUpdate = withMemCache(\n (isSelected: ReturnType<typeof getIsSingleRolesSelected>) => {\n if (isSelected) {\n this.editButton.enable();\n } else {\n this.editButton.disable();\n }\n },\n );\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initEditButton();\n\n this.subscribe(\n this.#onIsRoleSelectedUpdate.bind(this),\n getIsSingleRolesSelected,\n );\n }\n },\n);\n","import { TextFieldDriver } from '@descope/sdk-component-drivers';\nimport { compose, createSingletonMixin, debounce } from '@descope/sdk-helpers';\nimport { loggerMixin } from '@descope/sdk-mixins';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initFilterRolesInputMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitFilterRolesInputMixinClass extends compose(\n loggerMixin,\n initWidgetRootMixin,\n stateManagementMixin,\n )(superclass) {\n searchInput: TextFieldDriver;\n\n #onInput = debounce(() => {\n this.actions.searchRoles({ text: this.searchInput.value });\n });\n\n #initSearchInput() {\n // currently we are doing it on client side because we assume there will not be more than 10000 roles per tenant\n this.searchInput = new TextFieldDriver(\n this.shadowRoot?.querySelector('[data-id=\"search-input\"]'),\n { logger: this.logger },\n );\n this.searchInput.onInput(this.#onInput);\n }\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initSearchInput();\n }\n },\n);\n","import {\n compose,\n createSingletonMixin,\n withMemCache,\n} from '@descope/sdk-helpers';\nimport {\n initLifecycleMixin,\n loggerMixin,\n notificationsMixin,\n} from '@descope/sdk-mixins';\nimport checkmark from '../../../../assets/checkmark.svg';\nimport close from '../../../../assets/close.svg';\nimport warning from '../../../../assets/warning.svg';\nimport { getNotifications } from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\n\ntype Notifications = ReturnType<typeof getNotifications>;\ntype Notification = Notifications[0];\n\nconst SUCCESS_NOTIFICATION_DURATION = 3000;\nconst ERROR_NOTIFICATION_DURATION = 0;\n\nconst notificationTypesIcons = {\n success: checkmark(),\n error: warning(),\n};\n\nexport const initNotificationsMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitNotificationsMixinClass extends compose(\n loggerMixin,\n stateManagementMixin,\n notificationsMixin,\n initLifecycleMixin,\n )(superclass) {\n // eslint-disable-next-line class-methods-use-this\n #createNotificationContent({ type, msg }: Notification) {\n const icon = notificationTypesIcons[type];\n\n const closeIcon = Object.assign(close(), { slot: 'close' });\n\n return `${icon?.outerHTML || ''}${msg}${closeIcon.outerHTML}`;\n }\n\n #createNotification(type: Notification['type']) {\n return this.createNotification({\n mode: type,\n duration:\n type === 'error'\n ? ERROR_NOTIFICATION_DURATION\n : SUCCESS_NOTIFICATION_DURATION,\n position: 'bottom-start',\n size: 'sm',\n });\n }\n\n #onNotificationsUpdate = withMemCache((notifications: Notifications) => {\n if (notifications.length) {\n notifications.forEach(({ type, msg }) => {\n const notification = this.#createNotification(type);\n\n notification.setContent(\n this.#createNotificationContent({ type, msg }),\n );\n\n notification.show();\n });\n\n // when there is a selection update from the table we get a double notification\n // this is why we are wrapping the clearNotifications action with timeout;\n setTimeout(() => this.actions.clearNotifications());\n }\n });\n\n async init() {\n await super.init?.();\n\n this.subscribe(\n this.#onNotificationsUpdate.bind(this),\n getNotifications,\n );\n }\n },\n);\n","import { GridDriver } from '@descope/sdk-component-drivers';\nimport {\n compose,\n createSingletonMixin,\n debounce,\n withMemCache,\n} from '@descope/sdk-helpers';\nimport { loggerMixin } from '@descope/sdk-mixins';\nimport { Role } from '../../../api/types';\nimport { getRolesList } from '../../../state/selectors';\nimport { stateManagementMixin } from '../../stateManagementMixin';\nimport { initWidgetRootMixin } from './initWidgetRootMixin';\n\nexport const initRolesTableMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class InitRolesTableMixinClass extends compose(\n stateManagementMixin,\n loggerMixin,\n initWidgetRootMixin,\n )(superclass) {\n rolesTable: GridDriver<Role>;\n\n #initRolesTable() {\n this.rolesTable = new GridDriver(\n this.shadowRoot?.querySelector('[data-id=\"roles-table\"]'),\n { logger: this.logger },\n );\n this.rolesTable.onSelectedItemsChange((e) => {\n this.actions.setSelectedRolesIds(\n e.detail.value.map(({ name }) => name),\n );\n });\n }\n\n #onRolesListUpdate = withMemCache(\n (rolesList: ReturnType<typeof getRolesList>) => {\n this.rolesTable.data = rolesList;\n },\n );\n\n #onColumnSortChange = debounce(\n (\n ele: HTMLElement & { path: string },\n detail: { value: 'asc' | 'desc' | null },\n ) => {\n const sort = [];\n const { value } = detail;\n if (value) {\n const field = ele.path;\n sort.push({ field, desc: value === 'desc' });\n }\n this.actions.searchRoles({ sort });\n },\n );\n\n async onWidgetRootReady() {\n await super.onWidgetRootReady?.();\n\n this.#initRolesTable();\n this.rolesTable.columns.forEach((column) => {\n column.onSortDirectionChange((e: MouseEvent) => {\n this.#onColumnSortChange(e.target, e.detail);\n });\n });\n\n // because we are not waiting for the rest calls,\n // we need to make sure the table is updated with the received roles\n this.#onRolesListUpdate(getRolesList(this.state));\n this.subscribe(this.#onRolesListUpdate.bind(this), getRolesList);\n }\n },\n);\n","import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { debuggerMixin, themeMixin } from '@descope/sdk-mixins';\nimport { initCreateRoleButtonMixin } from './initComponentsMixins/initCreateRoleButtonMixin';\nimport { initDeleteRolesButtonMixin } from './initComponentsMixins/initDeleteRolesButtonMixin';\nimport { initEditRoleButtonMixin } from './initComponentsMixins/initEditRolesButtonMixin';\nimport { initFilterRolesInputMixin } from './initComponentsMixins/initFilterRolesInputMixin';\nimport { initNotificationsMixin } from './initComponentsMixins/initNotificationsMixin';\nimport { initRolesTableMixin } from './initComponentsMixins/initRolesTableMixin';\n\nexport const initMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n // @ts-ignore\n class InitMixinClass extends compose(\n debuggerMixin,\n themeMixin,\n initRolesTableMixin,\n initCreateRoleButtonMixin,\n initDeleteRolesButtonMixin,\n initEditRoleButtonMixin,\n initFilterRolesInputMixin,\n initNotificationsMixin,\n )(superclass) {\n async init() {\n await super.init?.();\n }\n },\n);\n","import { compose } from '@descope/sdk-helpers';\nimport { initMixin } from './mixins/initMixin/initMixin';\n\nconst rootMixin = (superclass: CustomElementConstructor) =>\n class RootMixinClass extends initMixin(superclass) {};\n\nexport const RoleManagementWidget = compose(rootMixin)(HTMLElement);\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { Unsubscribe } from 'redux'; // workaround for https://github.com/microsoft/TypeScript/issues/42873\nimport { RoleManagementWidget } from './widget';\n\nexport default RoleManagementWidget;\n\ncustomElements.define('descope-role-management-widget', RoleManagementWidget);\n"],"names":["getSelectedRolesIds","state","selectedRolesIds","getNotifications","notifications","getTenantPermissions","tenantPermissions","data","getRolesList","createSelector","rolesList","roles","map","role","Object","assign","editable","_a","tenantId","length","getSelectedRoles","selected","filter","includes","name","getIsRolesSelected","getIsSingleRolesSelected","getSelectedRolesDetailsForDisplay","selectedRoles","buildAsyncReducer","action","args","builder","addCase","pending","forEach","onPending","fulfilled","onFulfilled","rejected","onRejected","withRequestStatus","getStateSection","loading","error","withNotifications","getErrorMsg","getSuccessMsg","push","type","msg","createAsyncThunk","arg","extra","api","create","reducer","unshift","payload","createRole","message","deleteBatch","meta","deleteRole","pluralize","deleteRoles","getState","searchParams","search","searchRole","update","roleIdx","findIndex","oldName","updateRole","_","tenant","permissions","initialState","text","sort","apiPaths","withErrorHandler","res","__awaiter","json","JSON","parse","ok","descopeErrorMsg","errorDescription","errorMessage","Error","status","statusText","Promise","resolve","i","description","permissionNames","createdTime","Date","s","a","b","desc","_b","field","localeCompare","toLowerCase","newName","tenants","createRoleSdk","httpClient","mock","page","limit","post","queryParams","roleNames","createTenantSdk","get","apiMixin","createSingletonMixin","superclass","BaseClass","compose","projectIdMixin","observeAttributesMixin","loggerMixin","createValidateAttributesMixin","missingAttrValidator","constructor","_ApiMixinClass_api","set","this","baseUrl","getAttribute","__classPrivateFieldGet","_ApiMixinClass_instances","_ApiMixinClass_createSdk","call","init","_super","observeAttributes","logger","debug","__classPrivateFieldSet","config","webSdk","createWebSdk","persistTokens","createSdk","projectId","stateManagementMixin","createStateManagementMixin","reducers","setSelectedRolesIds","clearNotifications","extraReducers","asyncActions","searchRoles","initLifecycleMixin","super","subscribe","fetchWidgetPagesMixin","staticResourcesMixin","widgetId","fetchWidgetPage","filename","fetchStaticResource","body","initWidgetRootMixin","_InitWidgetRootMixinClass_instances","_InitWidgetRootMixinClass_initWidgetRoot","descopeUiMixin","initElementMixin","onWidgetRootReady","all","actions","template","createTemplate","loadDescopeUiComponents","contentRootElement","append","content","cloneNode","initCreateRoleModalMixin","_InitCreateRoleModalMixinClass_instances","_InitCreateRoleModalMixinClass_permissionsMultiSelect","_InitCreateRoleModalMixinClass_initCreateRoleModal","_InitCreateRoleModalMixinClass_updatePermissionsMultiSelect","modalMixin","formMixin","setData","value","label","createRoleModal","createModal","setContent","cancelButton","ButtonDriver","ele","querySelector","onClick","close","resetFormData","submitButton","validateForm","getFormData","MultiSelectDriver","initCreateRoleButtonMixin","_InitCreateRoleButtonMixinClass_instances","_InitCreateRoleButtonMixinClass_initCreateButton","createButton","shadowRoot","open","initDeleteRolesModalMixin","_InitDeleteRolesModalMixinClass_instances","_InitDeleteRolesModalMixinClass_initDeleteRoleModal","deleteRolesModal","TextDriver","beforeOpen","roleDetails","initDeleteRolesButtonMixin","_InitDeleteRolesButtonMixinClass_instances","_InitDeleteRolesButtonMixinClass_initDeleteButton","_InitDeleteRolesButtonMixinClass_onIsRoleSelectedUpdate","withMemCache","isSelected","deleteButton","enable","disable","bind","initEditRoleModalMixin","_InitEditRoleModalMixinClass_instances","_InitEditRoleModalMixinClass_permissionsMultiSelect","_InitEditRoleModalMixinClass_initCancelButton","_InitEditRoleModalMixinClass_initSubmitButton","_InitEditRoleModalMixinClass_updatePermissionsMultiSelect","_InitEditRoleModalMixinClass_updateModalData","_InitEditRoleModalMixinClass_initEditRoleModal","formData","setFormData","editRoleModal","__rest","initEditRoleButtonMixin","_InitEditRoleButtonMixinClass_instances","_InitEditRoleButtonMixinClass_initEditButton","_InitEditRoleButtonMixinClass_onIsRoleSelectedUpdate","editButton","initFilterRolesInputMixin","_InitFilterRolesInputMixinClass_instances","_InitFilterRolesInputMixinClass_onInput","_InitFilterRolesInputMixinClass_initSearchInput","debounce","searchInput","TextFieldDriver","onInput","notificationTypesIcons","success","initNotificationsMixin","_InitNotificationsMixinClass_instances","_InitNotificationsMixinClass_createNotificationContent","_InitNotificationsMixinClass_createNotification","_InitNotificationsMixinClass_onNotificationsUpdate","notificationsMixin","notification","show","setTimeout","icon","closeIcon","slot","outerHTML","createNotification","mode","duration","position","size","initRolesTableMixin","_InitRolesTableMixinClass_instances","_InitRolesTableMixinClass_initRolesTable","_InitRolesTableMixinClass_onRolesListUpdate","_InitRolesTableMixinClass_onColumnSortChange","rolesTable","detail","path","columns","column","onSortDirectionChange","e","target","GridDriver","onSelectedItemsChange","initMixin","debuggerMixin","themeMixin","RoleManagementWidget","HTMLElement","customElements","define"],"mappings":"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"}