import { LitElement, css, html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { type Ref, createRef, ref } from 'lit/directives/ref.js'; import { when } from 'lit/directives/when.js'; import '@components/General/Button'; import { StyledInput } from '@components/General/Input'; import { StyledTextarea } from '@components/General/Textarea'; import { StyledToggle } from '@components/General/Toggle'; import type { EveDialog } from '../General/Dialog'; interface InputEvent extends Event { detail: { value: string; }; } @customElement('arx-calendar-event-dialog') export class CalendarEventDialog extends LitElement { @property({ type: Boolean }) open = false; dialogRef: Ref = createRef(); @state() private newEvent = { title: '', description: '', location: '', startDate: '', startTime: '', endDate: '', endTime: '', allDay: false, participants: [] as string[], tags: [] as string[], }; static override styles = css` .form-input { width: 100%; padding: 0.5rem; border: 1px solid var(--color-base-300); border-radius: var(--radius-selector); background: var(--color-base-200); color: var(--color-base-content); } .form-row { display: flex; gap: 1rem; } `; private handleClose() { this.dialogRef.value?.close(false); this.dispatchEvent(new CustomEvent('close', { bubbles: false })); } private handleInputChange(e: Event) { if (e.target instanceof StyledToggle) { const checked = e.target.checked; this.newEvent = { ...this.newEvent, [e.target.name]: checked, }; } else if (e.target instanceof StyledTextarea || e.target instanceof StyledInput) { const inputEvent = e as InputEvent; this.newEvent = { ...this.newEvent, [e.target.name]: inputEvent.detail.value, }; } } private handleSubmit(e: Event) { e.preventDefault(); this.dispatchEvent(new CustomEvent('submit', { detail: { event: this.newEvent } })); } override render() { if (!this.open) return html``; return html` ${when( !this.newEvent.allDay, () => html` `, )} ${when( !this.newEvent.allDay, () => html` `, )} `; } }