{"version":3,"sources":["lib/authMgr/authUi.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAMjF,eAAO,MAAM,QAAQ,yCAAyC,CAAC;AAQ/D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,EACpC,GAAG,GAAE,MAAmB,GACvB,QAAQ,CAEV;AAED,eAAO,MAAM,iBAAiB,EAAE,QAM/B,CAAC;AAEF,eAAO,MAAM,YAAY,iCAAiC,CAAC;AAC3D,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAC7D,eAAO,MAAM,YAAY,iDAAiD,CAAC;AAK3E,qBAAa,YAAa,SAAQ,WAAW;IAC3C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,SAAS,CAAiB;IAElC,OAAO,CAAC,UAAU,CAAiB;;IAUnC,IAAI,IAAI,IAEQ,MAAM,CAFa;IAEnC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAYrB;IAED;;;;;;SAMK;IACE,QAAQ,OAAQ,UAAU,UAE/B;IAEK,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAK5B,MAAM;CAad;AAuDD,eAAe,YAAY,CAAC","file":"../../../lib/authMgr/authUi.d.ts","sourcesContent":["import { singletonProvider } from '../../common/provider.js';\nimport AppContext, { getTools } from '../../common/appContext/appContext.js';\nimport { aliasName as loggerAlias, Logger } from '../../common/appContext/logging.js';\nimport { SharedState, StateEvent } from '../../common/appContext/sharedState.js';\nimport { Ii18n, providerName as i18nProvider } from '../appContext/i18n.js';\nimport LittleDropDown from '../littleDropDown/littleDropDown.js';\nimport { singleton as styleHelper } from '../styleGuide/styleGuide.js';\nimport { css } from './authUi.css.js';\n\nexport const stateKey = 'little-elements/lib/authMgr/userInfo';\n\ninterface Tools {\n  i18n: Ii18n;\n  log: Logger;\n  state: SharedState;\n}\n\nexport interface UserInfo {\n  email: string;\n  groups: string[];\n  iat: number;\n}\n\nexport function newUserInfo(\n  email: string, groups: string[] = [],\n  iat: number = Date.now(),\n): UserInfo {\n  return { email, groups, iat };\n}\n\nexport const anonymousUserInfo: UserInfo = Object.freeze(\n  {\n    email: 'anonymous',\n    groups: [],\n    iat: 0,\n  },\n);\n\nexport const loginContext = 'littleware/lib/authMgr/login';\nexport const logoutContext = 'littleware/lib/authMgr/logout';\nexport const providerName = 'driver/littleware/little-elements/lw-auth-ui';\n\n// initialized below - before web component registered\nlet tools: Tools = null;\n\nexport class LittleAuthUI extends HTMLElement {\n  private userVal = 'anonymous';\n\n  private loginMenu: LittleDropDown;\n\n  private logoutMenu: LittleDropDown;\n\n  constructor() {\n    super();\n    this.loginMenu = new LittleDropDown();\n    this.loginMenu.setAttribute('context', loginContext);\n    this.logoutMenu = new LittleDropDown();\n    this.logoutMenu.setAttribute('context', logoutContext);\n  }\n\n  get user() { return this.userVal; }\n\n  set user(value: string) {\n    if (this.userVal !== value) {\n      this.userVal = value;\n      this.logoutMenu.changeModel(\n        (model) => {\n          model.root.labelKey = (this.userVal || '...').replace(/@.+$/, '@...');\n          return model;\n        },\n      ).then(\n        () => this.render(),\n      );\n    }\n  }\n\n  /**\n     * Can set to NOOP if you do not want the element\n     * to udpate on shared state change - for testing\n     * or whatever.\n     *\n     * @param ev\n     */\n  public listener = (ev: StateEvent) => {\n    this.user = (ev.data.new as UserInfo).email;\n  };\n\n  public connectedCallback(): void {\n    this.render();\n    tools.state.addListener(\n      stateKey,\n      this.listener,\n    );\n  }\n\n  public disconnectedCallback(): void {\n    tools.state.removeListener(stateKey, this.listener);\n  }\n\n  // Render element DOM by returning a `lit-html` template.\n  public render() {\n    if (this.user && this.user !== 'anonymous') {\n      if (this.loginMenu.parentElement) {\n        this.removeChild(this.loginMenu);\n      }\n      this.appendChild(this.logoutMenu);\n    } else {\n      if (this.logoutMenu.parentElement) {\n        this.removeChild(this.logoutMenu);\n      }\n      this.appendChild(this.loginMenu);\n    }\n  }\n}\n\nAppContext.get().then(\n  (cx) => {\n    cx.putDefaultConfig(loginContext, {\n      items: [\n        {\n          className: 'lw-authmgr__item',\n          href: '#authmgr/login',\n          labelKey: 'little-elements:login',\n        },\n      ],\n      root: {\n        className: 'lw-authmgr',\n        href: '#whatever',\n        labelKey: 'little-elements:anonymous',\n      },\n    });\n    cx.putDefaultConfig(logoutContext, {\n      items: [\n        {\n          className: 'lw-authmgr__item',\n          href: '#authmgr/logout',\n          labelKey: 'little-elements:logout',\n        },\n        /* TODO: enable this ...\n                {\n                    className: \"lw-authmgr__item\",\n                    href: \"#authmgr/userinfo\",\n                    labelKey: \"little-elements:userinfo\",\n                },\n                */\n      ],\n      root: {\n        className: 'lw-authmgr',\n        href: '#whatever',\n        labelKey: 'little-elements:logout',\n      },\n    });\n    cx.putProvider(\n      providerName,\n      { i18n: i18nProvider, log: loggerAlias, state: SharedState.providerName },\n      async (toolBox) => {\n        tools = await getTools(toolBox) as Tools;\n        window.customElements.define('lw-auth-ui', LittleAuthUI);\n        styleHelper.componentCss.push(css);\n        styleHelper.render();\n        return singletonProvider(() => 'lw-auth-ui');\n      },\n    );\n    // force instantiation - otherwise default is lazy\n    cx.onStart({ 'lw-auth-ui': providerName }, () => {});\n  },\n);\n\nexport default LittleAuthUI;\n"]}