diff --git a/src/lib/components/ExpandableForm.svelte b/src/lib/components/ExpandableForm.svelte index 45b333e..e5a55f5 100644 --- a/src/lib/components/ExpandableForm.svelte +++ b/src/lib/components/ExpandableForm.svelte @@ -22,6 +22,7 @@
- + {#if onDelete} + + {/if}
{/if} diff --git a/src/lib/server/vorgangService.ts b/src/lib/server/vorgangService.ts index 3cf016e..1b0d366 100644 --- a/src/lib/server/vorgangService.ts +++ b/src/lib/server/vorgangService.ts @@ -234,3 +234,27 @@ export const vorgangPINValidation = function (vorgangToken: string, vorgangPIN: return true; }; + +/** + * Change VorgangName or VorgangPIN + * @param vorgangToken + * @param newValue + * @returns {int} number of affected lines + */ +export const updateVorgangAttrByToken = function (vorgangToken: string, + newValue: string, + column: string) { + const renameSQLStmt = `UPDATE cases set ${column} = ? WHERE token = ?`; + const statement = db.prepare(renameSQLStmt); + + let info; + + try { + info = statement.run(newValue, vorgangToken); + } catch (err) { + console.log(`error: ${err}`) + return 0; + } + + return info.changes; +}; \ No newline at end of file diff --git a/src/routes/(angemeldet)/list/+page.svelte b/src/routes/(angemeldet)/list/+page.svelte index 59bbe55..ca9cc6d 100644 --- a/src/routes/(angemeldet)/list/+page.svelte +++ b/src/routes/(angemeldet)/list/+page.svelte @@ -3,12 +3,35 @@ import Trash from '$lib/icons/Trash.svelte'; import Folder from '$lib/icons/Folder.svelte'; import EmptyList from '$lib/components/EmptyList.svelte'; + import NameItemEditor from '$lib/components/NameItemEditor.svelte'; + import Alert from '$lib/components/Alert.svelte'; + import Button from '$lib/components/Button.svelte'; + import Modal from '$lib/components/Modal/Modal.svelte'; + import ModalTitle from '$lib/components/Modal/ModalTitle.svelte'; + import ModalContent from '$lib/components/Modal/ModalContent.svelte'; + import ModalFooter from '$lib/components/Modal/ModalFooter.svelte'; import { API_ROUTES, ROUTE_NAMES } from '../../index.js'; + import { invalidateAll } from '$app/navigation'; let { data, form } = $props(); - let vorgangList = data.vorgangList; - + let vorgangList = $state(data.vorgangList); + + // same as `vorgangList` but with one different property to be used + // with ´NameItemEditor` + const derivedList = $derived.by( + () => { + return vorgangList.map( + ({ vorgangName, ...rest }) => ( + { + name: vorgangName, + ...rest + } + ) + ) + } + ); + let isEmptyList = vorgangList.length === 0; let vorgangName = $state(''); @@ -61,16 +84,12 @@ return true; } - async function delete_item(ev: Event) { + async function deleteVorgang(vorgangToken: string) { let delete_item = window.confirm('Bist du sicher?'); if (delete_item) { - const target = ev.currentTarget as HTMLElement | null; - if (!target) return; - let filename = target.id.split('del__')[1]; - - let url = API_ROUTES.VORGANG(filename); - + let url = API_ROUTES.VORGANG(vorgangToken); + try { const response = await fetch(url, { method: 'DELETE' }); if (response.status == 204) { @@ -87,6 +106,46 @@ } } } + + //Variablen für Modal + let open = $state(false); + let inProgress = $state(false); + let isError = $state(false); + + async function handleSave(newName: string, oldName: string, vorgangToken: string) { + open = true; + inProgress = true; + isError = false; + try { + const res = await fetch(API_ROUTES.VORGANG(vorgangToken), { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ vorgangToken, oldName, newName }) + }); + + if (!res.ok) { + throw new Error('Fehler beim Speichern'); + } + await invalidateAll(); + vorgangList = data.vorgangList; + open = false; + } catch (err) { + console.error('⚠️ Netzwerkfehler beim Speichern', err); + isError = true; + } finally { + inProgress = false; + } + } + + + + async function closeModal() { + open = false; + isError = false; + } +
@@ -100,27 +159,21 @@ {:else} {#each vorgangList as vorgangItem}
  • +
  • {/each} {/if} @@ -190,6 +243,19 @@ +Umbenennen + {#if inProgress} +

    Vorgang läuft...

    + {:else if isError} + Fehler beim Umbenennen + {:else} + Umbenennen erfolgreich + {/if} +
    + +
    +