diff --git a/ts_web/elements/dees-simple-login.demo.ts b/ts_web/elements/dees-simple-login.demo.ts index 7e708cb..564ec6e 100644 --- a/ts_web/elements/dees-simple-login.demo.ts +++ b/ts_web/elements/dees-simple-login.demo.ts @@ -19,7 +19,13 @@ export const demoFunc = () => html` name="My Application" @login=${(e: CustomEvent) => { console.log('Login event received:', e.detail); - alert(`Login attempted with:\nUsername: ${e.detail.formData.username}\nPassword: ${e.detail.formData.password}`); + const loginData = e.detail?.data || e.detail; + if (loginData?.username && loginData?.password) { + alert(`Login attempted with:\nUsername: ${loginData.username}\nPassword: ${loginData.password}`); + // Here you would typically validate credentials and show the slotted content + } else { + console.error('Invalid login data structure:', e.detail); + } }} >
diff --git a/ts_web/elements/dees-simple-login.ts b/ts_web/elements/dees-simple-login.ts index 37b6943..0b17f7e 100644 --- a/ts_web/elements/dees-simple-login.ts +++ b/ts_web/elements/dees-simple-login.ts @@ -119,19 +119,48 @@ export class DeesSimpleLogin extends DeesElement { `; } - public async firstUpdated(_changedProperties): Promise { - const domtools = await this.domtoolsPromise; + public async firstUpdated(_changedProperties: Map): Promise { super.firstUpdated(_changedProperties); - const form = this.shadowRoot.querySelector('dees-form'); - await form.readyDeferred.promise; - const username = this.shadowRoot.querySelector('dees-input-text[label="username"]'); - const password = this.shadowRoot.querySelector('dees-input-text[label="password"]'); + const domtools = await this.domtoolsPromise; + + // Wait a tick to ensure child elements are rendered + await this.updateComplete; + + const form = this.shadowRoot.querySelector('dees-form') as any; + + if (!form) { + console.error('dees-form element not found in dees-simple-login'); + return; + } + + // Check if the form has the readyDeferred property and wait for it + if (form.readyDeferred?.promise) { + try { + await form.readyDeferred.promise; + } catch (error) { + console.error('Error waiting for form ready:', error); + } + } + + const username = this.shadowRoot.querySelector('dees-input-text[key="username"]'); + const password = this.shadowRoot.querySelector('dees-input-text[key="password"]'); const submit = this.shadowRoot.querySelector('dees-form-submit'); + + // Add form data listener form.addEventListener('formData', (event: CustomEvent) => { - this.dispatchEvent(new CustomEvent('login', { detail: event.detail, bubbles: true, composed: true })); + this.dispatchEvent(new CustomEvent('login', { + detail: event.detail, + bubbles: true, + composed: true + })); }); } + /** + * Dispatches a 'login' event when the form is submitted. + * Event detail structure: { data: { username: string, password: string } } + */ + /** * allows switching to slotted content */