Teilbearbeitung des Pull-Requests, nicht fertig da meeting

This commit is contained in:
2025-08-13 12:03:14 +02:00
parent 7bdfa1f69b
commit 6c9afda777
6 changed files with 41 additions and 29 deletions

View File

@@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
export let href = null; export let href = null;
export let type = 'button'; export let type: 'button' | 'submit' | 'reset' = 'button';
export let size = 'md'; export let size = 'md';
export let variant = 'primary'; export let variant = 'primary';
export let fullWidth = false; export let fullWidth = false;

View File

@@ -20,9 +20,6 @@
let wasCancelled = $state(false); let wasCancelled = $state(false);
let error: string = $derived(validateName(localName)); let error: string = $derived(validateName(localName));
let manualError = $state('');
let isEditing = $state(false); let isEditing = $state(false);
let inputRef: HTMLInputElement; let inputRef: HTMLInputElement;
@@ -56,7 +53,6 @@
function resetEdit() { function resetEdit() {
wasCancelled = false; wasCancelled = false;
manualError = '';
inputRef?.blur(); inputRef?.blur();
isEditing = false; isEditing = false;
} }
@@ -88,7 +84,7 @@
/> />
<button onclick={startEdit}><Edit /></button> <button onclick={startEdit}><Edit /></button>
<button onclick={() => onDelete(currentName)}><Trash /></button> <button onclick={() => onDelete(currentName)}><Trash /></button>
{#if manualError || error} {#if error}
<p style="color: red;">{manualError || error}</p> <p style="color: red;">{error}</p>
{/if} {/if}
</div> </div>

View File

@@ -1,3 +1,3 @@
import { readFileSync } from 'fs'; import { readFileSync } from 'fs';
export default JSON.parse(readFileSync('./config_prod.json').toString()); export default JSON.parse(readFileSync('./config.json').toString());

Binary file not shown.

View File

@@ -9,16 +9,15 @@
import ModalContent from '$lib/components/Modal/ModalContent.svelte'; import ModalContent from '$lib/components/Modal/ModalContent.svelte';
import ModalFooter from '$lib/components/Modal/ModalFooter.svelte'; import ModalFooter from '$lib/components/Modal/ModalFooter.svelte';
import Cube from '$lib/icons/Cube.svelte'; import Cube from '$lib/icons/Cube.svelte';
import EditableItem from '$lib/components/EditableItem.svelte';
import { invalidate, invalidateAll } from '$app/navigation'; import { invalidate, invalidateAll } from '$app/navigation';
import NameItemEditor from '$lib/components/NameItemEditor.svelte';
//Seite für die Tatort-Liste //Seite für die Tatort-Liste
let { data } = $props(); let { data } = $props();
console.log('tatorte: debug ', data); //zur besseren Nachvollziehbarkeit noch drin gelassen, kann vorm merge gelöscht werden console.log('tatorte: debug ', data);
interface ListItem { interface ListItem {
//sollte Typ Vorgang sein, aber der einfachheit ist es noch ListItem, damit die Komponente EditableItem für Vorgang und Tatort eingesetzt werden kann //sollte Typ Vorgang sein, aber der einfachheit ist es noch ListItem, damit die Komponente NameItemEditor für Vorgang und Tatort eingesetzt werden kann
name: string; name: string;
size: number; size: number;
lastModified: string | number | Date; lastModified: string | number | Date;
@@ -27,40 +26,46 @@
// add other properties as needed // add other properties as needed
} }
let vorgangName: string = data.vorgang.vorgangName; // let vorgang = data.caseId; <!--caseId, vorgang.name aber das funktioniert nicht richtig, daher in server.ts geändert--> let vorgangName: string = data.vorgang.vorgangName;
let crimesList: ListItem[] = $state(data.crimesList); let crimesList: ListItem[] = $state(data.crimesList);
const vorgangPIN: string = data.vorgang.vorgangPIN; //caseToken?? // const token: string | null = data.caseToken; const vorgangPIN: string = data.vorgang.vorgangPIN;
let vorgangToken: string = data.vorgang.vorgangToken; let vorgangToken: string = data.vorgang.vorgangToken;
//Variablen für Modal //Variablen für Modal
let open = $state(false); let open = $state(false);
let inProgress = $state(false); let inProgress = $state(false);
let err = $state(false); let isError = $state(false);
//Variable um nur admin UI anzuzeigen //Variable um nur admin UI anzuzeigen
let admin = data?.user?.admin; let admin = data?.user?.admin;
async function handleSave(newName: string, oldName: string) { async function handleSave(newName: string, oldName: string) {
open = true; open = true;
console.log('Eltern, speichern erfolgreich', newName, oldName); //zur besseren Nachvollziehbarkeit noch drin gelassen, kann vorm merge gelöscht werden inProgress = true;
try { try {
const res = await fetch(`/api/list/${vorgangToken}/${oldName}`, { const res = await fetch(`/api/list/${vorgangToken}/${oldName}`, {
//irgendwas stimmt hier nicht, vorgangToken führt zu Fehler in API,
method: 'PUT', method: 'PUT',
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}, },
body: JSON.stringify({ vorgangToken, oldName, newName }) body: JSON.stringify({ vorgangToken, oldName, newName })
}); })
.then(() => {
inProgress = false;
})
.catch((err) => {
inProgress = false;
isError = true;
console.log('ERROR', err);
});
if (!res.ok) { if (!res.ok) {
const msg = await res.text(); const msg = await res.text();
console.error('❌ Fehler beim Speichern:', msg); console.error('❌ Fehler beim Umbenennen:', msg);
isError = true;
} else { } else {
await invalidate(`/api/list/${vorgangToken}`);
await invalidateAll(); await invalidateAll();
crimesList = data.crimesList; crimesList = data.crimesList;
console.log('✅ Erfolgreich gespeichert:', crimesList, data.crimesList, newName); //zur besseren Nachvollziehbarkeit noch drin gelassen, kann vorm merge gelöscht werden
open = false; open = false;
} }
} catch (err) { } catch (err) {
@@ -69,6 +74,8 @@
} }
async function handleDelete(tatort: string) { async function handleDelete(tatort: string) {
open = true;
inProgress = true;
let url = new URL(data.url); let url = new URL(data.url);
url.pathname += `/${tatort}`; url.pathname += `/${tatort}`;
console.log('Delete tatort: ', `/api${url.pathname}`, url.pathname); console.log('Delete tatort: ', `/api${url.pathname}`, url.pathname);
@@ -80,18 +87,25 @@
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}, },
body: JSON.stringify({ vorgangToken, tatort }) body: JSON.stringify({ vorgangToken, tatort })
}); })
.then(() => {
inProgress = false;
})
.catch((err) => {
isError = true;
inProgress = false;
console.log('ERROR', err);
});
if (!res.ok) { if (!res.ok) {
const msg = await res.text(); const msg = await res.text();
console.error('❌ Fehler beim Löschen:', msg); console.error('❌ Fehler beim Löschen:', msg);
} else { } else {
console.log('🗑️ Erfolgreich gelöscht:', url.pathname); console.log('🗑️ Erfolgreich gelöscht:', url.pathname);
await invalidate(`/api/list/${vorgangToken}`);
await invalidateAll(); await invalidateAll();
crimesList = data.crimesList; crimesList = data.crimesList;
} }
} catch (err) { } catch (err) {
isError = true;
console.error('⚠️ Netzwerkfehler beim Löschen:', err); console.error('⚠️ Netzwerkfehler beim Löschen:', err);
} }
} }
@@ -117,6 +131,7 @@
function closeModal() { function closeModal() {
open = false; open = false;
isError = false;
} }
</script> </script>
@@ -145,13 +160,13 @@
</a> </a>
<div class="min-w-0 flex-auto"> <div class="min-w-0 flex-auto">
{#if admin} {#if admin}
<EditableItem <NameItemEditor
list={data.crimesList} list={data.crimesList}
editedName={data.crimeNames[crimeListItemIndex]} editedName={data.crimeNames[crimeListItemIndex]}
currentName={item.name} currentName={item.name}
onSave={handleSave} onSave={handleSave}
onDelete={handleDelete} onDelete={handleDelete}
></EditableItem> ></NameItemEditor>
{:else} {:else}
<span class="text-sm font-semibold leading-6 text-gray-900 inline-block min-w-1" <span class="text-sm font-semibold leading-6 text-gray-900 inline-block min-w-1"
>{item.name}</span >{item.name}</span
@@ -183,9 +198,10 @@
><ModalTitle>Umbenennen</ModalTitle><ModalContent> ><ModalTitle>Umbenennen</ModalTitle><ModalContent>
{#if inProgress} {#if inProgress}
<p class="py-2 mb-1">Vorgang läuft...</p> <p class="py-2 mb-1">Vorgang läuft...</p>
{/if} {:else if isError}
{#if err}
<Alert class="w-full" type="error">Fehler beim Umbenennen</Alert> <Alert class="w-full" type="error">Fehler beim Umbenennen</Alert>
{:else}
<Alert class="w-full">Upload erfolgreich</Alert>
{/if} {/if}
</ModalContent> </ModalContent>
<ModalFooter><Button disabled={inProgress} on:click={closeModal}>Ok</Button></ModalFooter> <ModalFooter><Button disabled={inProgress} on:click={closeModal}>Ok</Button></ModalFooter>

View File

@@ -11,7 +11,7 @@ export async function load({fetch, params, url}){
throw new Error(`Fehlgeschlagen, es wurden keine Daten zum token gefunden`); throw new Error(`Fehlgeschlagen, es wurden keine Daten zum token gefunden`);
} }
//Variabeln für EditableItem //Variabeln für NameItemEditor
const crimeNames: string[] = crimesList.map((l) => l.name); const crimeNames: string[] = crimesList.map((l) => l.name);
if (crimesList.length === 0) { if (crimesList.length === 0) {