import { PktElement } from '@/base-elements/element' import { html, nothing } from 'lit' import { customElement, property } from 'lit/decorators.js' import { classMap } from 'lit/directives/class-map.js' import { User, Representing, UserMenuItem, TInternalMenuItem, convertUserMenuItem, Booleanish, booleanishConverter, } from './types' import '@/components/icon' import '@/components/link' export interface IPktHeaderUserMenu { user: User formattedLastLoggedIn?: string representing?: Representing userMenu?: UserMenuItem[] canChangeRepresentation?: Booleanish logoutOnClick?: Booleanish } export class PktHeaderUserMenu extends PktElement implements IPktHeaderUserMenu { @property({ type: Object }) user!: User @property({ type: String, attribute: 'formatted-last-logged-in' }) formattedLastLoggedIn?: string @property({ type: Object }) representing?: Representing @property({ type: Array, attribute: 'user-menu' }) userMenu?: UserMenuItem[] @property({ type: Boolean, attribute: 'can-change-representation', converter: booleanishConverter, }) canChangeRepresentation: Booleanish = false @property({ type: Boolean, attribute: 'logout-on-click', converter: booleanishConverter }) logoutOnClick: Booleanish = false private handleChangeRepresentation() { this.dispatchEvent( new CustomEvent('change-representation', { bubbles: true, composed: true, }), ) } private handleLogout() { this.dispatchEvent( new CustomEvent('log-out', { bubbles: true, composed: true, }), ) } private handleMenuItemClick(item: TInternalMenuItem) { if ('onClick' in item && typeof item.onClick === 'function') { item.onClick() } } private renderLinkOrButton(item: TInternalMenuItem, className?: string) { const isLink = 'href' in item const classes = classMap({ 'pkt-user-menu__link': true, 'pkt-link-button': !isLink, 'pkt-link': !isLink, 'pkt-link--icon-left': !isLink, [className || '']: !!className, }) if (isLink) { return html` ` } return html` ` } private renderLinkSection(links: TInternalMenuItem[]) { return html` ` } render() { const internalMenuItems = this.userMenu?.map(convertUserMenuItem) return html` ` } } declare global { interface HTMLElementTagNameMap { 'pkt-header-user-menu': PktHeaderUserMenu } } try { customElement('pkt-header-user-menu')(PktHeaderUserMenu) } catch (e) { console.warn('Forsøker å definere , men den er allerede definert') }