Teilbearbeitung des Pull-Requests, nicht fertig da meeting
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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.
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user