Files
app/ts_web/elements/account/navigation.ts
T

189 lines
4.7 KiB
TypeScript
Raw Normal View History

import {
customElement,
DeesElement,
property,
html,
cssManager,
unsafeCSS,
css,
type TemplateResult,
subscribe,
} from '@design.estate/dees-element';
import * as plugins from '../../plugins.js';
import * as states from '../../states/accountstate.js';
import { IdpState } from '../../states/idp.state.js';
import { commitinfo } from '../../../dist_ts/00_commitinfo_data.js';
declare global {
interface HTMLElementTagNameMap {
'lele-accountnavigation': LeleAccountNavigation;
}
}
@customElement('lele-accountnavigation')
export class LeleAccountNavigation extends DeesElement {
@property()
public options: { text: string; id: string }[] = [
{
id: '1',
text: 'Properties',
},
{
id: '2',
text: 'Users',
},
{
id: '3',
text: 'Activity',
},
{
id: '4',
text: 'Billing & Subscription',
},
];
constructor() {
super();
}
public static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
color: ${cssManager.bdTheme('#333', '#fff')};
padding: 10px;
padding-left: 0px;
background: ${cssManager.bdTheme('#eeeeeb', '#111')};
border-right: ${cssManager.bdTheme('1px solid #ccc', '')};
}
:host([hidden]) {
display: none;
}
.commitinfo {
text-align: center;
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
font-size: 12px;
padding: 8px;
background: ${cssManager.bdTheme('#eeeeeb', '#181818')};
border-top: ${cssManager.bdTheme('1px solid #ccc', '1px solid #333')};
color: ${cssManager.bdTheme('#666', '#ccc')};
}
.navigationGroupLabel {
width: min-content;
white-space: nowrap;
text-transform: uppercase;
font-size: 12px;
font-weight: 300;
border-bottom: 1px dotted #666;
margin-bottom: 5px;
padding-top: 32px;
padding-left: 10px;
padding-bottom: 5px;
}
.navigationOption {
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
font-weight: 500;
padding: 8px;
padding-left: 10px;
margin-bottom: 5px;
}
.navigationOption:hover {
cursor: pointer;
background: ${cssManager.bdTheme('#bbb', '#333')};
}
dees-input-dropdown {
margin-top: 16px;
margin-bottom: 16px;
margin-left: 8px;
}
`,
];
public render(): TemplateResult {
return html`
<style></style>
<div class="commitinfo">idp.global v${commitinfo.version}</div>
<div class="navigationGroupLabel">Account Settings</div>
<div
class="navigationOption"
@click=${async () => {
const idpState = await IdpState.getSingletonInstance();
idpState.domtools.router.pushUrl('/logout');
}}
>
logout
</div>
<div
class="navigationOption"
@click=${async () => {
}}
>
manage roles
</div>
<div
class="navigationOption"
@click=${async () => {
}}
>
create an org
</div>
<div class="navigationGroupLabel">Organization Settings</div>
<dees-input-dropdown
.label=${'choose org:'}
@selectedOption=${(eventArg: CustomEvent) => {
const currentState = states.accountState.getState();
states.accountState.dispatchAction(
states.setSelectedOrg,
currentState.organizations.find((org) => org.data.slug === eventArg.detail.payload)
);
}}
></dees-input-dropdown>
${this.options.map((option) => {
return html` <div class="navigationOption">${option.text}</div> `;
})}
`;
}
public firstUpdated() {
const deesInputDropdown = this.shadowRoot.querySelector('dees-input-dropdown');
const orgToMenuEntry = (orgArg?: plugins.idpInterfaces.data.IOrganization) => {
if (!orgArg) {
return null;
}
return {
option: orgArg.data.name,
key: orgArg.data.slug,
payload: orgArg.data.slug,
};
};
states.accountState
.select((stateArg) => stateArg.organizations)
.pipe(
plugins.deesDomtools.plugins.smartrx.rxjs.ops.map((orgArrayArg) => {
return orgArrayArg.map(orgToMenuEntry);
})
)
.subscribe((menuEntries) => {
deesInputDropdown.options = menuEntries;
});
states.accountState
.select((stateArg) => stateArg.selectedOrg)
.pipe(plugins.deesDomtools.plugins.smartrx.rxjs.ops.map(orgToMenuEntry))
.subscribe((selectedOrgArg) => {
deesInputDropdown.selectedOption = selectedOrgArg;
});
}
}