frontend: Add error handling to collection forms

This commit is contained in:
Lennart
2025-07-23 20:48:28 +02:00
parent f8abc22e63
commit d817c1384c
10 changed files with 70 additions and 3055 deletions

View File

@@ -1,7 +1,6 @@
import { html, LitElement } from "lit"; import { html, LitElement } from "lit";
import { customElement, property } from "lit/decorators.js"; import { customElement, property } from "lit/decorators.js";
import { Ref, createRef, ref } from 'lit/directives/ref.js'; import { Ref, createRef, ref } from 'lit/directives/ref.js';
import { createClient } from "webdav";
import { escapeXml } from "."; import { escapeXml } from ".";
@customElement("create-addressbook-form") @customElement("create-addressbook-form")
@@ -15,8 +14,6 @@ export class CreateAddressbookForm extends LitElement {
return this return this
} }
client = createClient("/carddav")
@property() @property()
user: string = '' user: string = ''
@property() @property()
@@ -80,8 +77,12 @@ export class CreateAddressbookForm extends LitElement {
alert("Empty displayname") alert("Empty displayname")
return return
} }
await this.client.createDirectory(`/principal/${this.principal || this.user}/${this.addr_id}`, { let response = await fetch(`/carddav/principal/${this.principal || this.user}/${this.addr_id}`, {
data: ` method: 'MKCOL',
headers: {
'Content-Type': 'application/xml'
},
body: `
<mkcol xmlns="DAV:" xmlns:CARD="urn:ietf:params:xml:ns:carddav"> <mkcol xmlns="DAV:" xmlns:CARD="urn:ietf:params:xml:ns:carddav">
<set> <set>
<prop> <prop>
@@ -91,7 +92,14 @@ export class CreateAddressbookForm extends LitElement {
</set> </set>
</mkcol> </mkcol>
` `
}) })
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`)
return null
}
window.location.reload() window.location.reload()
return null return null
} }

View File

@@ -1,7 +1,6 @@
import { html, LitElement } from "lit"; import { html, LitElement } from "lit";
import { customElement, property } from "lit/decorators.js"; import { customElement, property } from "lit/decorators.js";
import { Ref, createRef, ref } from 'lit/directives/ref.js'; import { Ref, createRef, ref } from 'lit/directives/ref.js';
import { createClient } from "webdav";
import { escapeXml } from "."; import { escapeXml } from ".";
@customElement("create-calendar-form") @customElement("create-calendar-form")
@@ -14,8 +13,6 @@ export class CreateCalendarForm extends LitElement {
return this return this
} }
client = createClient("/caldav")
@property() @property()
user: string = '' user: string = ''
@property() @property()
@@ -126,8 +123,13 @@ export class CreateCalendarForm extends LitElement {
alert("No calendar components selected") alert("No calendar components selected")
return return
} }
await this.client.createDirectory(`/principal/${this.principal || this.user}/${this.cal_id}`, {
data: ` let response = await fetch(`/caldav/principal/${this.principal || this.user}/${this.cal_id}`, {
method: 'MKCOL',
headers: {
'Content-Type': 'application/xml'
},
body: `
<mkcol xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CS="http://calendarserver.org/ns/" xmlns:ICAL="http://apple.com/ns/ical/"> <mkcol xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CS="http://calendarserver.org/ns/" xmlns:ICAL="http://apple.com/ns/ical/">
<set> <set>
<prop> <prop>
@@ -144,6 +146,11 @@ export class CreateCalendarForm extends LitElement {
</mkcol> </mkcol>
` `
}) })
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`)
return null
}
window.location.reload() window.location.reload()
return null return null
} }

View File

@@ -63,7 +63,7 @@ export class EditAddressbookForm extends LitElement {
alert("Empty displayname") alert("Empty displayname")
return return
} }
await fetch(`/carddav/principal/${this.principal}/${this.addr_id}`, { let response = await fetch(`/carddav/principal/${this.principal}/${this.addr_id}`, {
method: 'PROPPATCH', method: 'PROPPATCH',
headers: { headers: {
'Content-Type': 'application/xml' 'Content-Type': 'application/xml'
@@ -85,6 +85,12 @@ export class EditAddressbookForm extends LitElement {
` `
}) })
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`)
return null
}
window.location.reload() window.location.reload()
return null return null
} }

View File

@@ -97,7 +97,7 @@ export class EditCalendarForm extends LitElement {
alert("No calendar components selected") alert("No calendar components selected")
return return
} }
await fetch(`/caldav/principal/${this.principal}/${this.cal_id}`, { let response = await fetch(`/caldav/principal/${this.principal}/${this.cal_id}`, {
method: 'PROPPATCH', method: 'PROPPATCH',
headers: { headers: {
'Content-Type': 'application/xml' 'Content-Type': 'application/xml'
@@ -124,6 +124,12 @@ export class EditCalendarForm extends LitElement {
</propertyupdate> </propertyupdate>
` `
}) })
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`)
return null
}
window.location.reload() window.location.reload()
return null return null
} }

View File

@@ -25,7 +25,7 @@ export default defineConfig({
format: "es", format: "es",
manualChunks: { manualChunks: {
lit: ["lit"], lit: ["lit"],
webdav: ["webdav"], // webdav: ["webdav"],
} }
} }
}, },

View File

@@ -1,7 +1,6 @@
import { i, x } from "./lit-z6_uA4GX.mjs"; import { i, x } from "./lit-z6_uA4GX.mjs";
import { n as n$1, t } from "./property-D0NJdseG.mjs"; import { n as n$1, t } from "./property-D0NJdseG.mjs";
import { e, n, a as escapeXml } from "./index-b86iLJlP.mjs"; import { e, n, a as escapeXml } from "./index-b86iLJlP.mjs";
import { a as an } from "./webdav-D0R7xCzX.mjs";
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __decorateClass = (decorators, target, key, kind) => { var __decorateClass = (decorators, target, key, kind) => {
@@ -15,7 +14,6 @@ var __decorateClass = (decorators, target, key, kind) => {
let CreateAddressbookForm = class extends i { let CreateAddressbookForm = class extends i {
constructor() { constructor() {
super(); super();
this.client = an("/carddav");
this.user = ""; this.user = "";
this.principal = ""; this.principal = "";
this.addr_id = ""; this.addr_id = "";
@@ -79,8 +77,12 @@ let CreateAddressbookForm = class extends i {
alert("Empty displayname"); alert("Empty displayname");
return; return;
} }
await this.client.createDirectory(`/principal/${this.principal || this.user}/${this.addr_id}`, { let response = await fetch(`/carddav/principal/${this.principal || this.user}/${this.addr_id}`, {
data: ` method: "MKCOL",
headers: {
"Content-Type": "application/xml"
},
body: `
<mkcol xmlns="DAV:" xmlns:CARD="urn:ietf:params:xml:ns:carddav"> <mkcol xmlns="DAV:" xmlns:CARD="urn:ietf:params:xml:ns:carddav">
<set> <set>
<prop> <prop>
@@ -91,6 +93,10 @@ let CreateAddressbookForm = class extends i {
</mkcol> </mkcol>
` `
}); });
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`);
return null;
}
window.location.reload(); window.location.reload();
return null; return null;
} }

View File

@@ -1,7 +1,6 @@
import { i, x } from "./lit-z6_uA4GX.mjs"; import { i, x } from "./lit-z6_uA4GX.mjs";
import { n as n$1, t } from "./property-D0NJdseG.mjs"; import { n as n$1, t } from "./property-D0NJdseG.mjs";
import { e, n, a as escapeXml } from "./index-b86iLJlP.mjs"; import { e, n, a as escapeXml } from "./index-b86iLJlP.mjs";
import { a as an } from "./webdav-D0R7xCzX.mjs";
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __decorateClass = (decorators, target, key, kind) => { var __decorateClass = (decorators, target, key, kind) => {
@@ -15,7 +14,6 @@ var __decorateClass = (decorators, target, key, kind) => {
let CreateCalendarForm = class extends i { let CreateCalendarForm = class extends i {
constructor() { constructor() {
super(); super();
this.client = an("/caldav");
this.user = ""; this.user = "";
this.principal = ""; this.principal = "";
this.cal_id = ""; this.cal_id = "";
@@ -120,8 +118,12 @@ let CreateCalendarForm = class extends i {
alert("No calendar components selected"); alert("No calendar components selected");
return; return;
} }
await this.client.createDirectory(`/principal/${this.principal || this.user}/${this.cal_id}`, { let response = await fetch(`/caldav/principal/${this.principal || this.user}/${this.cal_id}`, {
data: ` method: "MKCOL",
headers: {
"Content-Type": "application/xml"
},
body: `
<mkcol xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CS="http://calendarserver.org/ns/" xmlns:ICAL="http://apple.com/ns/ical/"> <mkcol xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CS="http://calendarserver.org/ns/" xmlns:ICAL="http://apple.com/ns/ical/">
<set> <set>
<prop> <prop>
@@ -138,6 +140,10 @@ let CreateCalendarForm = class extends i {
</mkcol> </mkcol>
` `
}); });
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`);
return null;
}
window.location.reload(); window.location.reload();
return null; return null;
} }

View File

@@ -64,7 +64,7 @@ let EditAddressbookForm = class extends i {
alert("Empty displayname"); alert("Empty displayname");
return; return;
} }
await fetch(`/carddav/principal/${this.principal}/${this.addr_id}`, { let response = await fetch(`/carddav/principal/${this.principal}/${this.addr_id}`, {
method: "PROPPATCH", method: "PROPPATCH",
headers: { headers: {
"Content-Type": "application/xml" "Content-Type": "application/xml"
@@ -85,6 +85,10 @@ let EditAddressbookForm = class extends i {
</propertyupdate> </propertyupdate>
` `
}); });
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`);
return null;
}
window.location.reload(); window.location.reload();
return null; return null;
} }

View File

@@ -87,7 +87,7 @@ let EditCalendarForm = class extends i {
alert("No calendar components selected"); alert("No calendar components selected");
return; return;
} }
await fetch(`/caldav/principal/${this.principal}/${this.cal_id}`, { let response = await fetch(`/caldav/principal/${this.principal}/${this.cal_id}`, {
method: "PROPPATCH", method: "PROPPATCH",
headers: { headers: {
"Content-Type": "application/xml" "Content-Type": "application/xml"
@@ -114,6 +114,10 @@ let EditCalendarForm = class extends i {
</propertyupdate> </propertyupdate>
` `
}); });
if (response.status >= 400) {
alert(`Error ${response.status}: ${await response.text()}`);
return null;
}
window.location.reload(); window.location.reload();
return null; return null;
} }

File diff suppressed because it is too large Load Diff