@digital-realty/ix-account-switcher 1.0.4 → 1.0.6

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.
@@ -9,7 +9,7 @@ import '@digital-realty/ix-tree/ix-tree.js';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
11
11
  import { MobxLitElement } from '@adobe/lit-mobx';
12
- import { userProfile } from './state/userProfile.js';
12
+ import { authedUser } from './state/authedUser.js';
13
13
  import findAccountById from './utils/find-account-by-id.js';
14
14
  import { mapAccountsToTreeNode } from './utils/map-accounts-to-tree.js';
15
15
  export class IxAccountSwitcher extends MobxLitElement {
@@ -46,11 +46,9 @@ export class IxAccountSwitcher extends MobxLitElement {
46
46
  >
47
47
  <ix-tree
48
48
  .rootNode=${rootNode}
49
- .selectedNodeId=${userProfile.accountNumber}
49
+ .selectedNodeId=${authedUser.account_number}
50
50
  @on-tree-node-selected=${(e) => {
51
- userProfile.setAccountNumber(e.detail.message.id);
52
51
  this.showDialog = false;
53
- this.requestUpdate();
54
52
  this.dispatchEvent(new CustomEvent('account-switched', {
55
53
  detail: e.detail.message.id,
56
54
  bubbles: true,
@@ -62,7 +60,7 @@ export class IxAccountSwitcher extends MobxLitElement {
62
60
  </ix-dialog>`;
63
61
  }
64
62
  getSelectedAccount() {
65
- return findAccountById(this.accounts, userProfile.accountNumber);
63
+ return findAccountById(this.accounts, authedUser.account_number);
66
64
  }
67
65
  renderNestedAccountStructureSelect() {
68
66
  const selectedAccount = this.getSelectedAccount();
@@ -93,7 +91,11 @@ export class IxAccountSwitcher extends MobxLitElement {
93
91
  <ix-select
94
92
  @request-selection=${(e) => {
95
93
  const target = e.target;
96
- userProfile.setAccountNumber(target.value);
94
+ this.dispatchEvent(new CustomEvent('account-switched', {
95
+ detail: target.value,
96
+ bubbles: true,
97
+ composed: true,
98
+ }));
97
99
  }}
98
100
  >
99
101
  ${options}
@@ -1 +1 @@
1
- {"version":3,"file":"IxAccountSwitcher.js","sourceRoot":"","sources":["../src/IxAccountSwitcher.ts"],"names":[],"mappings":"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","sourcesContent":["import '@digital-realty/ix-dialog/ix-dialog.js';\nimport '@digital-realty/ix-field/ix-field.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-label-tag/ix-label-tag.js';\nimport '@digital-realty/ix-select/ix-select.js';\nimport '@digital-realty/ix-select/ix-select-option.js';\nimport '@digital-realty/ix-tree/ix-tree.js';\nimport type { IIxTreeNode } from '@digital-realty/ix-tree';\nimport { html, nothing, TemplateResult } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { MobxLitElement } from '@adobe/lit-mobx';\nimport { userProfile } from './state/userProfile.js';\nimport findAccountById from './utils/find-account-by-id.js';\nimport { mapAccountsToTreeNode } from './utils/map-accounts-to-tree.js';\nimport type { NestedAccounts } from './types.js';\n\nexport class IxAccountSwitcher extends MobxLitElement {\n @property({ type: Array }) accounts: NestedAccounts[] = [];\n\n @state() showDialog: boolean = false;\n\n private renderDialog(): TemplateResult<1> {\n const rootNode: IIxTreeNode = mapAccountsToTreeNode(this.accounts);\n\n return html`<ix-dialog\n id=\"account-switcher-dialog\"\n class=\"relative z-50\"\n ?open=${this.showDialog}\n @blur=${() => {\n this.showDialog = false;\n }}\n >\n <div class=\"headline\" slot=\"headline\">\n <span class=\"title\">Switch Account</span>\n <ix-icon-button\n @click=${() => {\n this.showDialog = false;\n }}\n icon=\"close\"\n >\n </ix-icon-button>\n </div>\n <form\n id=\"account-switcher-dialog-form\"\n class=\"form\"\n method=\"dialog\"\n slot=\"content\"\n >\n <ix-tree\n .rootNode=${rootNode}\n .selectedNodeId=${userProfile.accountNumber}\n @on-tree-node-selected=${(e: CustomEvent) => {\n userProfile.setAccountNumber(e.detail.message.id);\n this.showDialog = false;\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent('account-switched', {\n detail: e.detail.message.id,\n bubbles: true,\n composed: true,\n })\n );\n }}\n ></ix-tree>\n </form>\n </ix-dialog>`;\n }\n\n getSelectedAccount() {\n return findAccountById(this.accounts, userProfile.accountNumber as string);\n }\n\n private renderNestedAccountStructureSelect(): TemplateResult<1> {\n const selectedAccount = this.getSelectedAccount();\n\n return html`\n <ix-field\n @click=${() => {\n this.showDialog = true;\n }}\n >\n <div class=\"subaccount-wrap\">\n <span class=\"subaccount-name\"> ${selectedAccount?.name} </span>\n <ix-icon class=\"dd-icon\">arrow_drop_down</ix-icon>\n </div>\n </ix-field>\n `;\n }\n\n private renderFlatAccountStructureSelect(): TemplateResult<1> {\n const selectedAccount = this.getSelectedAccount();\n const activeLabelTag = html`<ix-label-tag>Active</ix-label-tag>`;\n\n const options = this.accounts.map(account => {\n const isSelected = account.id === selectedAccount?.id;\n\n return html`<ix-select-option value=${account.id} .selected=${isSelected}>\n <div slot=\"headline\">${account.name}</div>\n <div slot=\"end\">${isSelected ? activeLabelTag : nothing}</div>\n </ix-select-option>`;\n });\n\n return html`<div class=\"account-switcher__select\">\n <ix-select\n @request-selection=${(e: Event) => {\n const target = e.target as HTMLSelectElement;\n userProfile.setAccountNumber(target.value);\n }}\n >\n ${options}\n </ix-select>\n </div>`;\n }\n\n render(): TemplateResult<1> {\n const hasSubaccounts = this.accounts.some(\n a => a.subaccounts && a.subaccounts.length > 0\n );\n\n return html`\n <div class=\"account-switcher-container\">\n ${hasSubaccounts\n ? this.renderNestedAccountStructureSelect()\n : this.renderFlatAccountStructureSelect()}\n </div>\n\n ${hasSubaccounts ? this.renderDialog() : null}\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"IxAccountSwitcher.js","sourceRoot":"","sources":["../src/IxAccountSwitcher.ts"],"names":[],"mappings":"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","sourcesContent":["import '@digital-realty/ix-dialog/ix-dialog.js';\nimport '@digital-realty/ix-field/ix-field.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-label-tag/ix-label-tag.js';\nimport '@digital-realty/ix-select/ix-select.js';\nimport '@digital-realty/ix-select/ix-select-option.js';\nimport '@digital-realty/ix-tree/ix-tree.js';\nimport type { IIxTreeNode } from '@digital-realty/ix-tree';\nimport { html, nothing, TemplateResult } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { MobxLitElement } from '@adobe/lit-mobx';\nimport { authedUser } from './state/authedUser.js';\nimport findAccountById from './utils/find-account-by-id.js';\nimport { mapAccountsToTreeNode } from './utils/map-accounts-to-tree.js';\nimport type { NestedAccounts } from './types.js';\n\nexport class IxAccountSwitcher extends MobxLitElement {\n @property({ type: Array }) accounts: NestedAccounts[] = [];\n\n @state() showDialog: boolean = false;\n\n private renderDialog(): TemplateResult<1> {\n const rootNode: IIxTreeNode = mapAccountsToTreeNode(this.accounts);\n\n return html`<ix-dialog\n id=\"account-switcher-dialog\"\n class=\"relative z-50\"\n ?open=${this.showDialog}\n @blur=${() => {\n this.showDialog = false;\n }}\n >\n <div class=\"headline\" slot=\"headline\">\n <span class=\"title\">Switch Account</span>\n <ix-icon-button\n @click=${() => {\n this.showDialog = false;\n }}\n icon=\"close\"\n >\n </ix-icon-button>\n </div>\n <form\n id=\"account-switcher-dialog-form\"\n class=\"form\"\n method=\"dialog\"\n slot=\"content\"\n >\n <ix-tree\n .rootNode=${rootNode}\n .selectedNodeId=${authedUser.account_number}\n @on-tree-node-selected=${(e: CustomEvent) => {\n this.showDialog = false;\n this.dispatchEvent(\n new CustomEvent('account-switched', {\n detail: e.detail.message.id,\n bubbles: true,\n composed: true,\n })\n );\n }}\n ></ix-tree>\n </form>\n </ix-dialog>`;\n }\n\n getSelectedAccount() {\n return findAccountById(this.accounts, authedUser.account_number as string);\n }\n\n private renderNestedAccountStructureSelect(): TemplateResult<1> {\n const selectedAccount = this.getSelectedAccount();\n\n return html`\n <ix-field\n @click=${() => {\n this.showDialog = true;\n }}\n >\n <div class=\"subaccount-wrap\">\n <span class=\"subaccount-name\"> ${selectedAccount?.name} </span>\n <ix-icon class=\"dd-icon\">arrow_drop_down</ix-icon>\n </div>\n </ix-field>\n `;\n }\n\n private renderFlatAccountStructureSelect(): TemplateResult<1> {\n const selectedAccount = this.getSelectedAccount();\n const activeLabelTag = html`<ix-label-tag>Active</ix-label-tag>`;\n\n const options = this.accounts.map(account => {\n const isSelected = account.id === selectedAccount?.id;\n\n return html`<ix-select-option value=${account.id} .selected=${isSelected}>\n <div slot=\"headline\">${account.name}</div>\n <div slot=\"end\">${isSelected ? activeLabelTag : nothing}</div>\n </ix-select-option>`;\n });\n\n return html`<div class=\"account-switcher__select\">\n <ix-select\n @request-selection=${(e: Event) => {\n const target = e.target as HTMLSelectElement;\n this.dispatchEvent(\n new CustomEvent('account-switched', {\n detail: target.value,\n bubbles: true,\n composed: true,\n })\n );\n }}\n >\n ${options}\n </ix-select>\n </div>`;\n }\n\n render(): TemplateResult<1> {\n const hasSubaccounts = this.accounts.some(\n a => a.subaccounts && a.subaccounts.length > 0\n );\n\n return html`\n <div class=\"account-switcher-container\">\n ${hasSubaccounts\n ? this.renderNestedAccountStructureSelect()\n : this.renderFlatAccountStructureSelect()}\n </div>\n\n ${hasSubaccounts ? this.renderDialog() : null}\n `;\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { IxAccountSwitcher } from './IxAccountSwitcher.js';
2
+ export { authedUser } from './state/authedUser.js';
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { IxAccountSwitcher } from './IxAccountSwitcher.js';
2
+ export { authedUser } from './state/authedUser.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["export { IxAccountSwitcher } from './IxAccountSwitcher.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { IxAccountSwitcher } from './IxAccountSwitcher.js';\nexport { authedUser } from './state/authedUser.js';\n"]}
@@ -1 +1 @@
1
- import{html,nothing,css}from"lit";import{elementTheme}from"@digital-realty/theme";import{__decorate}from"tslib";import"@digital-realty/ix-dialog/ix-dialog.js";import"@digital-realty/ix-field/ix-field.js";import"@digital-realty/ix-icon-button/ix-icon-button.js";import"@digital-realty/ix-label-tag/ix-label-tag.js";import"@digital-realty/ix-select/ix-select.js";import"@digital-realty/ix-select/ix-select-option.js";import"@digital-realty/ix-tree/ix-tree.js";import{property,state}from"lit/decorators.js";import{MobxLitElement}from"@adobe/lit-mobx";import{makeAutoObservable,toJS}from"mobx";import{makePersistable}from"mobx-persist-store";class UserProfileState{constructor(){this.accountNumber=void 0,this.accountPermissions=[],makeAutoObservable(this),makePersistable(this,{name:"user-profile",properties:["accountNumber","accountPermissions","contact"],storage:window.localStorage})}setPermissions(e){this.accountPermissions=e}setAccountNumber(e){this.accountNumber=e}setContact(e){this.contact=e}get account(){var e;return null==(e=this.contact)?void 0:e.accounts.find(e=>e.accountNumber===this.accountNumber)}hasUserManagementExternalUserRead(){return this.hasPermission("User Management - External User","read")}hasUserManagementExternalUserUpdate(){return this.hasPermission("User Management - External User","update")}hasUserManagementInternalUserUpdate(){return this.hasPermission("User Management - Internal User","update")}hasCustomRoleManagementApprove(){return this.hasPermission("Role Management - Custom Role","approve")}hasCustomRoleManagementCreate(){return this.hasPermission("Role Management - Custom Roles","create")}hasCustomRoleManagementUpdate(){return this.hasPermission("Role Management - Custom Roles","update")}hasCustomRoleManagementRead(){return this.hasPermission("Role Management - Custom Roles","read")}hasInternalRoleManagementCreate(){return this.hasPermission("Role Management - Internal Roles","create")}hasInternalRoleManagementUpdate(){return this.hasPermission("Role Management - Internal Roles","update")}hasInternalRoleManagementRead(){return this.hasPermission("Role Management - Internal Roles","read")}hasDefaultSystemRoleManagementCreate(){return this.hasPermission("Role Management - Default System Roles","create")}hasDefaultSystemRoleManagementUpdate(){return this.hasPermission("Role Management - Default System Roles","update")}hasDefaultSystemRoleManagementRead(){return this.hasPermission("Role Management - Default System Roles","read")}hasPrivilegeLevel(t,s){var e=["approve","create","update","read"],o=e.findIndex(e=>e===t.toLowerCase());return e.findIndex(e=>e===s.toLowerCase())<=o}hasPermission(t,s){var e=toJS(this.accountPermissions).find(e=>e.accountNumber===this.accountNumber||null===e.accountNumber);let o=!1;return e&&e.permissions.forEach(e=>{e.permissionName===t&&s&&this.hasPrivilegeLevel(s.toLowerCase(),e.privilege.toLowerCase())&&(o=!0)}),o}}const userProfile=new UserProfileState,findAccountById=(e,t)=>{var s=e.find(e=>e.id===t);if(s)return s;for(const a of e)if(a.subaccounts){var o=findAccountById(a.subaccounts,t);if(o)return o}return null},mapAccountToTreeNode=(e,t)=>{const s={expanded:!1,id:e.id,label:e.name,parentId:t.id};return s.children=null==(t=e.subaccounts)?void 0:t.map(e=>mapAccountToTreeNode(e,s)),s},mapAccountsToTreeNode=e=>{const t={expanded:!1,id:"root",label:"",parentId:void 0};return t.children=e.map(e=>mapAccountToTreeNode(e,t)),t};class IxAccountSwitcher extends MobxLitElement{constructor(){super(...arguments),this.accounts=[],this.showDialog=!1}renderDialog(){var e=mapAccountsToTreeNode(this.accounts);return html`<ix-dialog id="account-switcher-dialog" class="relative z-50" ?open="${this.showDialog}" @blur="${()=>{this.showDialog=!1}}"><div class="headline" slot="headline"><span class="title">Switch Account</span><ix-icon-button @click="${()=>{this.showDialog=!1}}" icon="close"></ix-icon-button></div><form id="account-switcher-dialog-form" class="form" method="dialog" slot="content"><ix-tree .rootNode="${e}" .selectedNodeId="${userProfile.accountNumber}" @on-tree-node-selected="${e=>{userProfile.setAccountNumber(e.detail.message.id),this.showDialog=!1,this.requestUpdate(),this.dispatchEvent(new CustomEvent("account-switched",{detail:e.detail.message.id,bubbles:!0,composed:!0}))}}"></ix-tree></form></ix-dialog>`}getSelectedAccount(){return findAccountById(this.accounts,userProfile.accountNumber)}renderNestedAccountStructureSelect(){var e=this.getSelectedAccount();return html`<ix-field @click="${()=>{this.showDialog=!0}}"><div class="subaccount-wrap"><span class="subaccount-name">${null==e?void 0:e.name}</span><ix-icon class="dd-icon">arrow_drop_down</ix-icon></div></ix-field>`}renderFlatAccountStructureSelect(){const s=this.getSelectedAccount(),o=html`<ix-label-tag>Active</ix-label-tag>`;var e=this.accounts.map(e=>{var t=e.id===(null===s||void 0===s?void 0:s.id);return html`<ix-select-option value="${e.id}" .selected="${t}"><div slot="headline">${e.name}</div><div slot="end">${t?o:nothing}</div></ix-select-option>`});return html`<div class="account-switcher__select"><ix-select @request-selection="${e=>{e=e.target;userProfile.setAccountNumber(e.value)}}">${e}</ix-select></div>`}render(){var e=this.accounts.some(e=>e.subaccounts&&0<e.subaccounts.length);return html`<div class="account-switcher-container">${e?this.renderNestedAccountStructureSelect():this.renderFlatAccountStructureSelect()}</div>${e?this.renderDialog():null}`}}__decorate([property({type:Array})],IxAccountSwitcher.prototype,"accounts",void 0),__decorate([state()],IxAccountSwitcher.prototype,"showDialog",void 0);const AccountSwitcherStyles=css`.subaccount-wrap{display:flex;--ix-icon-font-size:1.6rem}.subaccount-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:0;flex:1}.dd-icon{margin:-2px -5px -5px 0}.headline{display:flex}.title{flex:1}.form{border:1px solid #e0e0e0;border-radius:.25rem;height:calc(488px - 3rem);margin:1rem 1.5rem 1.5rem 1.5rem;padding:0;width:calc(560px - 3rem);overflow:auto}`;class IxAccountSwitcherStyled extends IxAccountSwitcher{}IxAccountSwitcherStyled.styles=[elementTheme,AccountSwitcherStyles,css`:host{--md-theme-primary:var(--ix-sys-primary, blue)}`],window.customElements.define("ix-account-switcher",IxAccountSwitcherStyled);export{IxAccountSwitcherStyled};
1
+ import{html,nothing,css}from"lit";import{elementTheme}from"@digital-realty/theme";import{__decorate}from"tslib";import"@digital-realty/ix-dialog/ix-dialog.js";import"@digital-realty/ix-field/ix-field.js";import"@digital-realty/ix-icon-button/ix-icon-button.js";import"@digital-realty/ix-label-tag/ix-label-tag.js";import"@digital-realty/ix-select/ix-select.js";import"@digital-realty/ix-select/ix-select-option.js";import"@digital-realty/ix-tree/ix-tree.js";import{property,state}from"lit/decorators.js";import{MobxLitElement}from"@adobe/lit-mobx";import{makeAutoObservable}from"mobx";import{makePersistable}from"mobx-persist-store";class AuthedUserState{constructor(){this.account_number="",this.email="",this.name="",this.auth_time="",makeAutoObservable(this),makePersistable(this,{name:"x-auth",properties:["email","account_number","name","auth_time"],storage:window.localStorage})}setAccount({accountNumber:e,email:t,name:i,authTime:o}){this.account_number=e,this.email=t,this.name=i,this.auth_time=o}getAccount(){return{accountNumber:this.account_number,email:this.email,name:this.name,authTime:this.auth_time}}}const authedUser=new AuthedUserState,findAccountById=(e,t)=>{var i=e.find(e=>e.id===t);if(i)return i;for(const c of e)if(c.subaccounts){var o=findAccountById(c.subaccounts,t);if(o)return o}return null},mapAccountToTreeNode=(e,t)=>{const i={expanded:!1,id:e.id,label:e.name,parentId:t.id};return i.children=null==(t=e.subaccounts)?void 0:t.map(e=>mapAccountToTreeNode(e,i)),i},mapAccountsToTreeNode=e=>{const t={expanded:!1,id:"root",label:"",parentId:void 0};return t.children=e.map(e=>mapAccountToTreeNode(e,t)),t};class IxAccountSwitcher extends MobxLitElement{constructor(){super(...arguments),this.accounts=[],this.showDialog=!1}renderDialog(){var e=mapAccountsToTreeNode(this.accounts);return html`<ix-dialog id="account-switcher-dialog" class="relative z-50" ?open="${this.showDialog}" @blur="${()=>{this.showDialog=!1}}"><div class="headline" slot="headline"><span class="title">Switch Account</span><ix-icon-button @click="${()=>{this.showDialog=!1}}" icon="close"></ix-icon-button></div><form id="account-switcher-dialog-form" class="form" method="dialog" slot="content"><ix-tree .rootNode="${e}" .selectedNodeId="${authedUser.account_number}" @on-tree-node-selected="${e=>{this.showDialog=!1,this.dispatchEvent(new CustomEvent("account-switched",{detail:e.detail.message.id,bubbles:!0,composed:!0}))}}"></ix-tree></form></ix-dialog>`}getSelectedAccount(){return findAccountById(this.accounts,authedUser.account_number)}renderNestedAccountStructureSelect(){var e=this.getSelectedAccount();return html`<ix-field @click="${()=>{this.showDialog=!0}}"><div class="subaccount-wrap"><span class="subaccount-name">${null==e?void 0:e.name}</span><ix-icon class="dd-icon">arrow_drop_down</ix-icon></div></ix-field>`}renderFlatAccountStructureSelect(){const i=this.getSelectedAccount(),o=html`<ix-label-tag>Active</ix-label-tag>`;var e=this.accounts.map(e=>{var t=e.id===(null===i||void 0===i?void 0:i.id);return html`<ix-select-option value="${e.id}" .selected="${t}"><div slot="headline">${e.name}</div><div slot="end">${t?o:nothing}</div></ix-select-option>`});return html`<div class="account-switcher__select"><ix-select @request-selection="${e=>{e=e.target;this.dispatchEvent(new CustomEvent("account-switched",{detail:e.value,bubbles:!0,composed:!0}))}}">${e}</ix-select></div>`}render(){var e=this.accounts.some(e=>e.subaccounts&&0<e.subaccounts.length);return html`<div class="account-switcher-container">${e?this.renderNestedAccountStructureSelect():this.renderFlatAccountStructureSelect()}</div>${e?this.renderDialog():null}`}}__decorate([property({type:Array})],IxAccountSwitcher.prototype,"accounts",void 0),__decorate([state()],IxAccountSwitcher.prototype,"showDialog",void 0);const AccountSwitcherStyles=css`.subaccount-wrap{display:flex;--ix-icon-font-size:1.6rem}.subaccount-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:0;flex:1}.dd-icon{margin:-2px -5px -5px 0}.headline{display:flex}.title{flex:1}.form{border:1px solid #e0e0e0;border-radius:.25rem;height:calc(488px - 3rem);margin:1rem 1.5rem 1.5rem 1.5rem;padding:0;width:calc(560px - 3rem);overflow:auto}`;class IxAccountSwitcherStyled extends IxAccountSwitcher{}IxAccountSwitcherStyled.styles=[elementTheme,AccountSwitcherStyles,css`:host{--md-theme-primary:var(--ix-sys-primary, blue)}`],window.customElements.define("ix-account-switcher",IxAccountSwitcherStyled);export{IxAccountSwitcherStyled};
@@ -0,0 +1,11 @@
1
+ declare class AuthedUserState {
2
+ constructor();
3
+ account_number: string;
4
+ email: string;
5
+ name: string;
6
+ auth_time: string;
7
+ setAccount({ accountNumber, email, name, authTime, }: Record<string, string>): void;
8
+ getAccount(): Record<string, string>;
9
+ }
10
+ export declare const authedUser: AuthedUserState;
11
+ export {};
@@ -0,0 +1,32 @@
1
+ import { makeAutoObservable } from 'mobx';
2
+ import { makePersistable } from 'mobx-persist-store';
3
+ class AuthedUserState {
4
+ constructor() {
5
+ this.account_number = '';
6
+ this.email = '';
7
+ this.name = '';
8
+ this.auth_time = '';
9
+ makeAutoObservable(this);
10
+ makePersistable(this, {
11
+ name: 'x-auth',
12
+ properties: ['email', 'account_number', 'name', 'auth_time'],
13
+ storage: window.localStorage,
14
+ });
15
+ }
16
+ setAccount({ accountNumber, email, name, authTime, }) {
17
+ this.account_number = accountNumber;
18
+ this.email = email;
19
+ this.name = name;
20
+ this.auth_time = authTime;
21
+ }
22
+ getAccount() {
23
+ return {
24
+ accountNumber: this.account_number,
25
+ email: this.email,
26
+ name: this.name,
27
+ authTime: this.auth_time,
28
+ };
29
+ }
30
+ }
31
+ export const authedUser = new AuthedUserState();
32
+ //# sourceMappingURL=authedUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authedUser.js","sourceRoot":"","sources":["../../src/state/authedUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,eAAe;IACnB;QASO,mBAAc,GAAW,EAAE,CAAC;QAE5B,UAAK,GAAW,EAAE,CAAC;QAEnB,SAAI,GAAW,EAAE,CAAC;QAElB,cAAS,GAAW,EAAE,CAAC;QAd5B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,eAAe,CAAC,IAAI,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC;YAC5D,OAAO,EAAE,MAAM,CAAC,YAAY;SAC7B,CAAC,CAAC;IACL,CAAC;IAUM,UAAU,CAAC,EAChB,aAAa,EACb,KAAK,EACL,IAAI,EACJ,QAAQ,GACe;QACvB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAEM,UAAU;QACf,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC","sourcesContent":["import { makeAutoObservable } from 'mobx';\nimport { makePersistable } from 'mobx-persist-store';\n\nclass AuthedUserState {\n constructor() {\n makeAutoObservable(this);\n makePersistable(this, {\n name: 'x-auth',\n properties: ['email', 'account_number', 'name', 'auth_time'],\n storage: window.localStorage,\n });\n }\n\n public account_number: string = '';\n\n public email: string = '';\n\n public name: string = '';\n\n public auth_time: string = '';\n\n public setAccount({\n accountNumber,\n email,\n name,\n authTime,\n }: Record<string, string>) {\n this.account_number = accountNumber;\n this.email = email;\n this.name = name;\n this.auth_time = authTime;\n }\n\n public getAccount(): Record<string, string> {\n return {\n accountNumber: this.account_number,\n email: this.email,\n name: this.name,\n authTime: this.auth_time,\n };\n }\n}\n\nexport const authedUser = new AuthedUserState();\n"]}
package/package.json CHANGED
@@ -3,14 +3,13 @@
3
3
  "description": "Webcomponent ix-account-switcher following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "Digital Realty",
6
- "version": "1.0.4",
6
+ "version": "1.0.6",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
9
9
  "module": "dist/index.js",
10
10
  "exports": {
11
11
  ".": "./dist/index.js",
12
- "./ix-account-switcher.js": "./dist/ix-account-switcher.js",
13
- "./dist/state/userProfile.js": "./dist/state/userProfile.js"
12
+ "./ix-account-switcher.js": "./dist/ix-account-switcher.js"
14
13
  },
15
14
  "publishConfig": {
16
15
  "access": "public"
@@ -31,7 +30,7 @@
31
30
  "@digital-realty/ix-field": "^1.0.5",
32
31
  "@digital-realty/ix-icon-button": "^1.0.37",
33
32
  "@digital-realty/ix-label-tag": "^2.1.8",
34
- "@digital-realty/ix-select": "^1.0.36",
33
+ "@digital-realty/ix-select": "^1.0.37",
35
34
  "@digital-realty/ix-tree": "^3.0.2",
36
35
  "@digital-realty/theme": "^1.0.27",
37
36
  "lit": "^2.0.2",
@@ -107,5 +106,5 @@
107
106
  "README.md",
108
107
  "LICENSE"
109
108
  ],
110
- "gitHead": "b51673dee42269c674ea2815fb2baf806bbb1941"
109
+ "gitHead": "c8089ae61b532ce8e7b0649d70974f329e6a4400"
111
110
  }
@@ -1,28 +0,0 @@
1
- import type { IContactInputAccountsInner, AccountPermission, IContact } from '../types.js';
2
- declare class UserProfileState {
3
- constructor();
4
- accountNumber?: string;
5
- accountPermissions: AccountPermission[];
6
- contact: IContact | undefined;
7
- setPermissions(permissions: AccountPermission[]): void;
8
- setAccountNumber(accountNumber: string): void;
9
- setContact(contact: IContact): void;
10
- get account(): IContactInputAccountsInner;
11
- hasUserManagementExternalUserRead(): boolean;
12
- hasUserManagementExternalUserUpdate(): boolean;
13
- hasUserManagementInternalUserUpdate(): boolean;
14
- hasCustomRoleManagementApprove(): boolean;
15
- hasCustomRoleManagementCreate(): boolean;
16
- hasCustomRoleManagementUpdate(): boolean;
17
- hasCustomRoleManagementRead(): boolean;
18
- hasInternalRoleManagementCreate(): boolean;
19
- hasInternalRoleManagementUpdate(): boolean;
20
- hasInternalRoleManagementRead(): boolean;
21
- hasDefaultSystemRoleManagementCreate(): boolean;
22
- hasDefaultSystemRoleManagementUpdate(): boolean;
23
- hasDefaultSystemRoleManagementRead(): boolean;
24
- private hasPrivilegeLevel;
25
- private hasPermission;
26
- }
27
- export declare const userProfile: UserProfileState;
28
- export {};
@@ -1,91 +0,0 @@
1
- import { makeAutoObservable, toJS } from 'mobx';
2
- import { makePersistable } from 'mobx-persist-store';
3
- class UserProfileState {
4
- constructor() {
5
- this.accountNumber = undefined;
6
- this.accountPermissions = [];
7
- makeAutoObservable(this);
8
- makePersistable(this, {
9
- name: 'user-profile',
10
- properties: ['accountNumber', 'accountPermissions', 'contact'],
11
- storage: window.localStorage,
12
- });
13
- }
14
- setPermissions(permissions) {
15
- this.accountPermissions = permissions;
16
- }
17
- setAccountNumber(accountNumber) {
18
- this.accountNumber = accountNumber;
19
- }
20
- setContact(contact) {
21
- this.contact = contact;
22
- }
23
- get account() {
24
- var _a;
25
- return (_a = this.contact) === null || _a === void 0 ? void 0 : _a.accounts.find(x => x.accountNumber === this.accountNumber);
26
- }
27
- hasUserManagementExternalUserRead() {
28
- return this.hasPermission('User Management - External User', 'read');
29
- }
30
- hasUserManagementExternalUserUpdate() {
31
- return this.hasPermission('User Management - External User', 'update');
32
- }
33
- hasUserManagementInternalUserUpdate() {
34
- return this.hasPermission('User Management - Internal User', 'update');
35
- }
36
- hasCustomRoleManagementApprove() {
37
- return this.hasPermission('Role Management - Custom Role', 'approve');
38
- }
39
- hasCustomRoleManagementCreate() {
40
- return this.hasPermission('Role Management - Custom Roles', 'create');
41
- }
42
- hasCustomRoleManagementUpdate() {
43
- return this.hasPermission('Role Management - Custom Roles', 'update');
44
- }
45
- hasCustomRoleManagementRead() {
46
- return this.hasPermission('Role Management - Custom Roles', 'read');
47
- }
48
- hasInternalRoleManagementCreate() {
49
- return this.hasPermission('Role Management - Internal Roles', 'create');
50
- }
51
- hasInternalRoleManagementUpdate() {
52
- return this.hasPermission('Role Management - Internal Roles', 'update');
53
- }
54
- hasInternalRoleManagementRead() {
55
- return this.hasPermission('Role Management - Internal Roles', 'read');
56
- }
57
- hasDefaultSystemRoleManagementCreate() {
58
- return this.hasPermission('Role Management - Default System Roles', 'create');
59
- }
60
- hasDefaultSystemRoleManagementUpdate() {
61
- return this.hasPermission('Role Management - Default System Roles', 'update');
62
- }
63
- hasDefaultSystemRoleManagementRead() {
64
- return this.hasPermission('Role Management - Default System Roles', 'read');
65
- }
66
- // eslint-disable-next-line class-methods-use-this
67
- hasPrivilegeLevel(requiredPrivilege, currentUserPrivilege) {
68
- const privileges = ['approve', 'create', 'update', 'read'];
69
- const requiredIndex = privileges.findIndex(x => x === requiredPrivilege.toLowerCase());
70
- const currentIndex = privileges.findIndex(x => x === currentUserPrivilege.toLowerCase());
71
- return requiredIndex >= currentIndex;
72
- }
73
- hasPermission(permission, privilege) {
74
- const accountPermissionArray = toJS(this.accountPermissions);
75
- const accountPermission = accountPermissionArray.find(x => x.accountNumber === this.accountNumber || x.accountNumber === null);
76
- let hasPermission = false;
77
- if (accountPermission) {
78
- accountPermission.permissions.forEach(accPermission => {
79
- if (accPermission.permissionName === permission) {
80
- if (privilege &&
81
- this.hasPrivilegeLevel(privilege.toLowerCase(), accPermission.privilege.toLowerCase())) {
82
- hasPermission = true;
83
- }
84
- }
85
- });
86
- }
87
- return hasPermission;
88
- }
89
- }
90
- export const userProfile = new UserProfileState();
91
- //# sourceMappingURL=userProfile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userProfile.js","sourceRoot":"","sources":["../../src/state/userProfile.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAutoObservable, toJS } from 'mobx';\nimport { makePersistable } from 'mobx-persist-store';\nimport type {\n IContactInputAccountsInner,\n AccountPermission,\n IContact,\n} from '../types.js';\n\nclass UserProfileState {\n constructor() {\n makeAutoObservable(this);\n makePersistable(this, {\n name: 'user-profile',\n properties: ['accountNumber', 'accountPermissions', 'contact'],\n storage: window.localStorage,\n });\n }\n\n public accountNumber?: string = undefined;\n\n public accountPermissions: AccountPermission[] = [];\n\n public contact: IContact | undefined;\n\n public setPermissions(permissions: AccountPermission[]) {\n this.accountPermissions = permissions;\n }\n\n public setAccountNumber(accountNumber: string) {\n this.accountNumber = accountNumber;\n }\n\n public setContact(contact: IContact) {\n this.contact = contact;\n }\n\n public get account(): IContactInputAccountsInner {\n return this.contact?.accounts.find(\n x => x.accountNumber === this.accountNumber\n ) as IContactInputAccountsInner;\n }\n\n public hasUserManagementExternalUserRead(): boolean {\n return this.hasPermission('User Management - External User', 'read');\n }\n\n public hasUserManagementExternalUserUpdate(): boolean {\n return this.hasPermission('User Management - External User', 'update');\n }\n\n public hasUserManagementInternalUserUpdate(): boolean {\n return this.hasPermission('User Management - Internal User', 'update');\n }\n\n public hasCustomRoleManagementApprove(): boolean {\n return this.hasPermission('Role Management - Custom Role', 'approve');\n }\n\n public hasCustomRoleManagementCreate(): boolean {\n return this.hasPermission('Role Management - Custom Roles', 'create');\n }\n\n public hasCustomRoleManagementUpdate(): boolean {\n return this.hasPermission('Role Management - Custom Roles', 'update');\n }\n\n public hasCustomRoleManagementRead(): boolean {\n return this.hasPermission('Role Management - Custom Roles', 'read');\n }\n\n public hasInternalRoleManagementCreate(): boolean {\n return this.hasPermission('Role Management - Internal Roles', 'create');\n }\n\n public hasInternalRoleManagementUpdate(): boolean {\n return this.hasPermission('Role Management - Internal Roles', 'update');\n }\n\n public hasInternalRoleManagementRead(): boolean {\n return this.hasPermission('Role Management - Internal Roles', 'read');\n }\n\n public hasDefaultSystemRoleManagementCreate(): boolean {\n return this.hasPermission(\n 'Role Management - Default System Roles',\n 'create'\n );\n }\n\n public hasDefaultSystemRoleManagementUpdate(): boolean {\n return this.hasPermission(\n 'Role Management - Default System Roles',\n 'update'\n );\n }\n\n public hasDefaultSystemRoleManagementRead(): boolean {\n return this.hasPermission('Role Management - Default System Roles', 'read');\n }\n\n // eslint-disable-next-line class-methods-use-this\n private hasPrivilegeLevel(\n requiredPrivilege: string,\n currentUserPrivilege: string\n ): boolean {\n const privileges: string[] = ['approve', 'create', 'update', 'read'];\n const requiredIndex = privileges.findIndex(\n x => x === requiredPrivilege.toLowerCase()\n );\n const currentIndex = privileges.findIndex(\n x => x === currentUserPrivilege.toLowerCase()\n );\n\n return requiredIndex >= currentIndex;\n }\n\n private hasPermission(permission: string, privilege: string): boolean {\n const accountPermissionArray = toJS(this.accountPermissions);\n const accountPermission = accountPermissionArray.find(\n x => x.accountNumber === this.accountNumber || x.accountNumber === null\n ) as AccountPermission;\n let hasPermission: boolean = false;\n\n if (accountPermission) {\n accountPermission.permissions.forEach(accPermission => {\n if (accPermission.permissionName === permission) {\n if (\n privilege &&\n this.hasPrivilegeLevel(\n privilege.toLowerCase(),\n accPermission.privilege.toLowerCase()\n )\n ) {\n hasPermission = true;\n }\n }\n });\n }\n\n return hasPermission;\n }\n}\n\nexport const userProfile = new UserProfileState();\n"]}