f047_Edit-der-Namen #15
@@ -18,7 +18,6 @@
|
||||
|
||||
let names = list.map((l: ListItem) => l.name);
|
||||
let localName = $state(currentName);
|
||||
|
mina marked this conversation as resolved
Outdated
|
||||
//let names = list;
|
||||
let wasCancelled = $state(false);
|
||||
|
||||
// Automatisch berechneter Fehler
|
||||
@@ -51,10 +50,11 @@
|
||||
|
||||
// Speichern, wenn gültig und zurück an Eltern
|
||||
function commitIfValid() {
|
||||
if (!validateName(localName) && !wasCancelled && localName != currentName) {
|
||||
if (!error && !wasCancelled && localName != currentName) {
|
||||
editedName = localName.trim();
|
||||
onSave(editedName, currentName); //Eltern benachrichtigen
|
||||
} else {
|
||||
localName = currentName;
|
||||
resetEdit();
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,7 @@
|
||||
commitIfValid();
|
||||
} else if (event.key === 'Escape') {
|
||||
event.preventDefault();
|
||||
editedName = currentName;
|
||||
localName = currentName;
|
||||
resetEdit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script lang="ts">
|
||||
import Folder from '$lib/icons/Folder.svelte';
|
||||
import EditableItem from '$lib/components/EditableItem.svelte';
|
||||
import { invalidate } from '$app/navigation';
|
||||
|
||||
interface ListItem {
|
||||
name: string;
|
||||
@@ -16,9 +17,6 @@
|
||||
let names: string[] = $state(caseList.map((l) => l.name));
|
||||
let editedName: string = $state('');
|
||||
|
||||
function getNameById(list: ListItem[], id: number) {
|
||||
return list[id].name;
|
||||
}
|
||||
async function delete_item(ev: Event) {
|
||||
let delete_item = window.confirm('Bist du sicher?');
|
||||
|
||||
@@ -71,23 +69,28 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function handleDelete(name: string) {
|
||||
async function handleDelete(vorgang: string) {
|
||||
let url = `/api/list/${vorgang}`;
|
||||
try {
|
||||
const res = await fetch(`/api/list/${name}`, {
|
||||
const res = await fetch(url, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ name })
|
||||
body: JSON.stringify({ vorgang })
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
const msg = await res.text();
|
||||
console.error('❌ Fehler beim Löschen:', msg);
|
||||
} else {
|
||||
console.log('🗑️ Erfolgreich gelöscht:', name);
|
||||
// Optional: Lokale Liste aktualisieren
|
||||
//S items = items.filter((item) => item.name !== name);
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
//await invalidate('/api/list');
|
||||
|
||||
console.log('🗑️ Erfolgreich gelöscht:', vorgang);
|
||||
await invalidate('/api/list'); // funktioniert nicht vernünftig
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('⚠️ Netzwerkfehler beim Löschen:', err);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script lang="ts">
|
||||
//Kann komplett gelöscht werden
|
||||
import Alert from '$lib/components/Alert.svelte';
|
||||
import Button from '$lib/components/Button.svelte';
|
||||
import Modal from '$lib/components/Modal/Modal.svelte';
|
||||
@@ -75,19 +76,14 @@
|
||||
</div>
|
||||
|
||||
<label for="code">
|
||||
<span >Zugangscode (optional) </span>
|
||||
<span>Zugangscode (optional) </span>
|
||||
</label>
|
||||
|
||||
<div class="mt-2">
|
||||
<div
|
||||
>
|
||||
<input
|
||||
type="text"
|
||||
id="code"
|
||||
/>
|
||||
<div>
|
||||
<input type="text" id="code" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
||||
const crimesList = await getVorgangByCaseId(caseId);
|
||||
|
||||
return {
|
||||
caseId,
|
||||
crimesList,
|
||||
caseToken
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
import shortenFileSize from '$lib/helper/shortenFileSize.js';
|
||||
import timeElapsed from '$lib/helper/timeElapsed.js';
|
||||
|
||||
export let data;
|
||||
let { data } = $props();
|
||||
|
||||
interface ListItem {
|
||||
|
jared
commented
s. o. s. o.
mina
commented
Ja, das können wir mal im Daily ansprechen, ich habe ein Ticket daraus gemacht. Ja, das können wir mal im Daily ansprechen, ich habe ein Ticket daraus gemacht.
|
||||
name: string;
|
||||
@@ -23,26 +23,33 @@
|
||||
|
||||
const crimesList: ListItem[] = data.crimesList;
|
||||
const token: string = data.caseToken;
|
||||
export let vorgang = $page.params.vorgang;
|
||||
let vorgang = data.caseId;
|
||||
/* export let vorgang = $page.params.vorgang; */
|
||||
|
||||
//Variabeln für EditableItem
|
||||
let names: string[] = $state(crimesList.map((l) => l.name));
|
||||
let editedName: string = $state('');
|
||||
|
||||
let open = $state(false);
|
||||
let inProgress = $state(false);
|
||||
let err = $state(false);
|
||||
|
||||
let open = false;
|
||||
$: open;
|
||||
let inProgress = false;
|
||||
$: inProgress;
|
||||
let err = false;
|
||||
$: err;
|
||||
let editingId: number;
|
||||
|
||||
// let admin = data?.user?.admin;
|
||||
let admin = true;
|
||||
|
||||
let rename_input;
|
||||
$: rename_input;
|
||||
|
||||
$effect(() => {
|
||||
console.log('rename_input hat sich geändert:', rename_input);
|
||||
});
|
||||
|
||||
function uploadSuccessful() {
|
||||
open = false;
|
||||
}
|
||||
|
||||
async function handle_input(ev: KeyboardEvent, i: number) {
|
||||
/* async function handle_input(ev: KeyboardEvent, i: number) {
|
||||
let item = crimesList[i];
|
||||
if (ev.key == 'Escape') {
|
||||
let text_field_id = `label__${item.name}`;
|
||||
@@ -111,9 +118,62 @@
|
||||
|
||||
return;
|
||||
}
|
||||
} */
|
||||
|
||||
async function handleSave(newName: string, oldName: string) {
|
||||
console.log('Eltern, speichern erfolgreich', newName, oldName);
|
||||
try {
|
||||
const res = await fetch(`/api/list/${vorgang}/${oldName}`, {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ oldName, newName })
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
const msg = await res.text();
|
||||
console.error('❌ Fehler beim Speichern:', msg);
|
||||
} else {
|
||||
console.log('✅ Erfolgreich gespeichert:', newName);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('⚠️ Netzwerkfehler:', err);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleDelete(tatort: string) {
|
||||
let url = `/api/tatort/`;
|
||||
|
||||
console.log('Delete tatort: ', vorgang, tatort, data.caseId);
|
||||
|
||||
try {
|
||||
const res = await fetch(url, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ vorgang })
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
const msg = await res.text();
|
||||
console.error('❌ Fehler beim Löschen:', msg);
|
||||
} else if (res.status == 204) {
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
// await invalidate(url);
|
||||
} else {
|
||||
console.log('🗑️ Erfolgreich gelöscht:', vorgang);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('⚠️ Netzwerkfehler beim Löschen:', err);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>Hallo</div>
|
||||
<div class="-z-10 bg-white">
|
||||
<div class="flex flex-col items-center justify-center w-full">
|
||||
<h1 class="text-xl">Vorgang {vorgang}</h1>
|
||||
@@ -133,14 +193,11 @@
|
||||
<div class="min-w-0 flex-auto">
|
||||
{#if admin}
|
||||
<EditableItem
|
||||
id={i}
|
||||
inputValue={item.name}
|
||||
editing={editingId === i}
|
||||
editStart={() => (editingId = i)}
|
||||
variant="crimename"
|
||||
existings={crimesList}
|
||||
save={(e) => console.log('Gespeichert:', e)}
|
||||
deleteItem={(e) => console.log('Gelöscht:', e)}
|
||||
list={crimesList}
|
||||
bind:editedName={names[i]}
|
||||
currentName={item.name}
|
||||
onSave={handleSave}
|
||||
onDelete={handleDelete}
|
||||
></EditableItem>
|
||||
{:else}
|
||||
<span class="text-sm font-semibold leading-6 text-gray-900 inline-block min-w-1"
|
||||
@@ -153,6 +210,7 @@
|
||||
</p>
|
||||
{/if}
|
||||
</div>
|
||||
<div>{item.name}</div>
|
||||
</div>
|
||||
<div class="hidden sm:flex sm:flex-col sm:items-end">
|
||||
<p class="text-sm leading-6 text-gray-900">3D Tatort</p>
|
||||
|
||||
@@ -4,17 +4,47 @@ import { json } from '@sveltejs/kit';
|
||||
|
||||
|
||||
|
||||
// Beispiel-Datenquelle (ersetzen durch echte DB oder Datei)
|
||||
let mockList = [ "202505-test-se", "Minas-TestVorgang", "Testing-Mina", "xyz-123" ];
|
||||
|
||||
/*
|
||||
export const GET: RequestHandler = async ({ params }) => {
|
||||
const { filename } = params;
|
||||
|
||||
// TODO: Datei lesen oder Datenbankabfrage
|
||||
return json({ filename, list: mockList });
|
||||
}; */
|
||||
|
||||
// rename operation
|
||||
export async function PUT({ request }: {request: Request}) {
|
||||
const data = await request.json();
|
||||
|
||||
|
||||
// Vorgang
|
||||
const vorgang = request.url.split('/').at(-1);
|
||||
|
||||
// prepare copy, incl. check if new name exists already
|
||||
const old_name = data["old_name"];
|
||||
const src_full_path = `/tatort/${vorgang}/${old_name}`;
|
||||
const new_name = `${vorgang}/${data["new_name"]}`;
|
||||
|
||||
try {
|
||||
await client.statObject('tatort', new_name);
|
||||
return json({ msg: 'Die Datei existiert bereits.' }, { status: 400 });
|
||||
} catch (error) {
|
||||
// continue operation
|
||||
console.log(error, 'continue operation');
|
||||
}
|
||||
|
||||
// actual copy operation
|
||||
await client.copyObject('tatort', new_name, src_full_path)
|
||||
|
||||
// delete
|
||||
await client.removeObject('tatort', `${vorgang}/${old_name}`)
|
||||
|
||||
// return success or failure
|
||||
|
||||
return json({ success: 'success' }, { status: 200 });
|
||||
};
|
||||
|
||||
export const PUT: RequestHandler = async ({ request, params }) => {
|
||||
/* export const PUT: RequestHandler = async ({ request, params }) => {
|
||||
const { filename } = params;
|
||||
const { oldName, newName } = await request.json();
|
||||
|
||||
@@ -41,43 +71,28 @@ export const PUT: RequestHandler = async ({ request, params }) => {
|
||||
|
||||
return json({ success: true, updated: newName });
|
||||
};
|
||||
*/
|
||||
|
||||
export const DELETE: RequestHandler = async ({ request, params }) => {
|
||||
const { filename } = params;
|
||||
const { name } = await request.json();
|
||||
export const DELETE: RequestHandler = async ({ request })=> { //body: {request}, keine params // params= de?param1=value¶ms2
|
||||
// const vorgang = params.vorgang;
|
||||
const { vorgang } = await request.json();
|
||||
|
||||
const index = mockList.findIndex((n) => n === name);
|
||||
if (index === -1) {
|
||||
return new Response('Name nicht gefunden', { status: 404 });
|
||||
}
|
||||
const object_list:string[] = await new Promise((resolve, reject) => {
|
||||
const res: string[] = [];
|
||||
const items_str = client.listObjects('tatort', vorgang, true);
|
||||
|
||||
items_str.on('data', (obj) => {
|
||||
if(obj.name) res.push(obj.name);
|
||||
});
|
||||
|
||||
console.log('📥 DELETE-Request empfangen:', mockList);
|
||||
mockList.splice(index, 1);
|
||||
console.log('📄 Datei:', filename);
|
||||
console.log('🔁 gelöscht', mockList);
|
||||
return json({ success: true, deleted: name });
|
||||
};
|
||||
items_str.on('error', reject);
|
||||
|
||||
// export async function DELETE({ params }) {
|
||||
// const vorgang = params.vorgang;
|
||||
items_str.on('end', async () => {
|
||||
resolve(res);
|
||||
});
|
||||
});
|
||||
|
||||
// const object_list = await new Promise((resolve, reject) => {
|
||||
// const res = [];
|
||||
// const items_str = client.listObjects('tatort', vorgang, true);
|
||||
await client.removeObjects('tatort', object_list);
|
||||
|
||||
// items_str.on('data', (obj) => {
|
||||
// res.push(obj.name);
|
||||
// });
|
||||
|
||||
// items_str.on('error', reject);
|
||||
|
||||
// items_str.on('end', async () => {
|
||||
// resolve(res);
|
||||
// });
|
||||
// });
|
||||
|
||||
// await client.removeObjects('tatort', object_list);
|
||||
|
||||
// return new Response(null, { status: 204 });
|
||||
// }
|
||||
return new Response(null, { status: 204 });
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { BUCKET, client } from '$lib/minio';
|
||||
import type { RequestHandler } from '@sveltejs/kit';
|
||||
|
||||
export async function GET() {
|
||||
const stream = client.listObjectsV2(BUCKET, '', true);
|
||||
@@ -24,7 +25,7 @@ export async function GET() {
|
||||
}
|
||||
|
||||
|
||||
export async function DELETE({ request }: { request: Request }) {
|
||||
/* export async function DELETE({ request }: { request: Request }) {
|
||||
const url_fragments = request.url.split('/');
|
||||
const item = url_fragments.at(-1);
|
||||
const vorgang = url_fragments.at(-2);
|
||||
@@ -32,4 +33,38 @@ export async function DELETE({ request }: { request: Request }) {
|
||||
await client.removeObject(BUCKET, `${vorgang}/${item}`);
|
||||
|
||||
return new Response(null, { status: 204 });
|
||||
}
|
||||
} */
|
||||
|
||||
export const DELETE: RequestHandler = async ({ request,params })=> { //body: {request}, keine params // params= de?param1=value¶ms2
|
||||
|
||||
const token = params;
|
||||
let {vorgang, tatort} = await request.json();
|
||||
|
||||
console.log("Server Delete ", vorgang, tatort, token );
|
||||
const url_fragments = request.url.split('/');
|
||||
tatort = url_fragments.at(-1);
|
||||
vorgang = url_fragments.at(-2);
|
||||
|
||||
await client.removeObject(BUCKET, `${vorgang}/${tatort}?token=${token}`)
|
||||
return new Response(null, { status: 204 });
|
||||
// const vorgang = params.vorgang;
|
||||
/*
|
||||
const object_list:string[] = await new Promise((resolve, reject) => {
|
||||
const res: string[] = [];
|
||||
const items_str = client.listObjects('tatort', vorgang, true);
|
||||
|
||||
items_str.on('data', (obj) => {
|
||||
if(obj.name) res.push(obj.name);
|
||||
});
|
||||
|
||||
items_str.on('error', reject);
|
||||
|
||||
items_str.on('end', async () => {
|
||||
resolve(res);
|
||||
});
|
||||
});
|
||||
|
||||
await client.removeObjects('tatort', object_list);
|
||||
|
||||
return new Response(null, { status: 204 }); */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user
Bitte Console.log entfernen.