import { appContext } from '../core/AppContext' import styles from './LoginForm.css?inline' export class LoginForm extends HTMLElement { private static styleSheet = new CSSStyleSheet() private shadow: ShadowRoot static { this.styleSheet.replaceSync(styles) } constructor() { super() this.shadow = this.attachShadow({ mode: 'open' }) this.shadow.adoptedStyleSheets = [LoginForm.styleSheet] } connectedCallback() { this.render() this.attachEventListeners() } render() { this.shadow.innerHTML = `

SASjs Tests

` } attachEventListeners() { const form = this.shadow.getElementById('login-form') as HTMLFormElement form.addEventListener('submit', async (e) => { e.preventDefault() await this.handleLogin() }) } async handleLogin() { const username = ( this.shadow.getElementById('username') as HTMLInputElement ).value const password = ( this.shadow.getElementById('password') as HTMLInputElement ).value const submitBtn = this.shadow.getElementById( 'submit-btn' ) as HTMLButtonElement const errorDiv = this.shadow.getElementById('error') as HTMLDivElement errorDiv.textContent = '' submitBtn.textContent = 'Logging in...' submitBtn.disabled = true try { const adapter = appContext.getAdapter() if (!adapter) { throw new Error('Adapter not initialized') } const response = await adapter.logIn(username, password) if (response && response.isLoggedIn) { appContext.setIsLoggedIn(true) this.dispatchEvent( new CustomEvent('login-success', { bubbles: true, composed: true }) ) } else { throw new Error('Login failed') } } catch (error: unknown) { errorDiv.textContent = error instanceof Error ? error.message : 'Login failed. Please try again.' submitBtn.textContent = 'Log In' submitBtn.disabled = false } } } customElements.define('login-form', LoginForm)