import { firstValueFrom, Subject, take } from 'rxjs' import LoginModal from './view/LoginModal.svelte' import { loggedIn$ } from './streams.js' import type { LoginOptions } from './types.js' // eslint-disable-next-line max-len const loginModal = async (options: LoginOptions): Promise => { if (options) { const error = !options if (error) { throw error } } const app = mountLoginModal(options, loggedIn$) loggedIn$.pipe(take(1)).subscribe(() => { app.$destroy() const modalEl = document.body.querySelector('onboard-magic-login-modal') modalEl && document.body.removeChild(modalEl) }) return firstValueFrom(loggedIn$) } // eslint-disable-next-line max-len const mountLoginModal = ( loginOptions: LoginOptions, loggedIn$: Subject ) => { class loginModalEl extends HTMLElement { constructor() { super() } } if (!customElements.get('onboard-magic-login-modal')) { customElements.define('onboard-magic-login-modal', loginModalEl) } // add to DOM const loginModalDomElement = document.createElement( 'onboard-magic-login-modal' ) const target = loginModalDomElement.attachShadow({ mode: 'open' }) loginModalDomElement.style.all = 'initial' target.innerHTML = ` ` document.body.appendChild(loginModalDomElement) const app = new LoginModal({ target: target, props: { loginOptions, loggedIn$ } }) return app } export default loginModal