import { html, LitElement } from "lit"; import { customElement, property } from "lit/decorators.js"; import { Ref, createRef, ref } from 'lit/directives/ref.js'; @customElement("import-addressbook-form") export class ImportAddressbookForm extends LitElement { constructor() { super() } protected override createRenderRoot() { return this } @property() user: string = '' @property() principal: string @property() addressbook_id: string = self.crypto.randomUUID() dialog: Ref = createRef() form: Ref = createRef() file: File; override render() { return html`

Import addressbook



` } async submit(e: SubmitEvent) { e.preventDefault() this.principal ||= this.user if (!this.principal) { alert("Empty principal") return } if (!this.addressbook_id) { alert("Empty id") return } let response = await fetch(`/carddav/principal/${this.principal}/${this.addressbook_id}`, { method: 'IMPORT', headers: { 'Content-Type': 'text/vcard' }, body: this.file, }) if (response.status >= 400) { alert(`Error ${response.status}: ${await response.text()}`) return null } window.location.reload() return null } } declare global { interface HTMLElementTagNameMap { 'import-addressbook-form': ImportAddressbookForm } }