Compare commits

...

2 Commits

Author SHA1 Message Date
beo3000 4d00be63e7 ui opti 2026-02-22 16:38:44 +01:00
beo3000 623d3f90bf added drag&drop 2026-02-22 16:17:03 +01:00
3 changed files with 64 additions and 18 deletions

View File

@ -1 +1 @@
1.0.50
1.0.52

View File

@ -2,7 +2,7 @@
import type { Topic } from '@ka-note/shared';
import { liveQuery } from 'dexie';
import { db } from '$lib/db/schema';
import { createTopic, createHistoryEntry, JOURNAL_TOPIC_ID } from '$lib/db/repositories';
import { createTopic, createHistoryEntry, updateTopicSortOrder, JOURNAL_TOPIC_ID } from '$lib/db/repositories';
import { today } from '$lib/db/helpers';
import { processedTopicIds } from '$lib/stores/agenda';
import TopicInput from './TopicInput.svelte';
@ -53,6 +53,34 @@
const topic = await createTopic(contextId, title);
await createHistoryEntry(topic.id, today(), 'Thema angelegt.');
}
// --- Drag & Drop ---
let dragId = $state<string | null>(null);
let dragOverId = $state<string | null>(null);
function onDragStart(id: string) {
dragId = id;
}
function onDragOver(id: string) {
if (dragId && id !== dragId) dragOverId = id;
}
function onDragEnd() {
if (dragId && dragOverId) {
const list = showSplit ? [...openTopics] : [...allTopics];
const fromIdx = list.findIndex(t => t.id === dragId);
const toIdx = list.findIndex(t => t.id === dragOverId);
if (fromIdx !== -1 && toIdx !== -1) {
const reordered = [...list];
const [moved] = reordered.splice(fromIdx, 1);
reordered.splice(toIdx, 0, moved);
updateTopicSortOrder(contextId, reordered.map(t => t.id));
}
}
dragId = null;
dragOverId = null;
}
</script>
<TopicInput oncreate={handleCreate} />
@ -65,13 +93,21 @@
{/if}
{#each openTopics as topic (topic.id)}
<TopicCard
{topic}
{contextId}
{isDailyLog}
{isMeetingMode}
isProcessed={false}
/>
<div
draggable="true"
ondragstart={() => onDragStart(topic.id)}
ondragover={(e) => { e.preventDefault(); onDragOver(topic.id); }}
ondragend={onDragEnd}
class="transition-opacity {dragId === topic.id ? 'opacity-30' : ''} {dragOverId === topic.id ? 'outline outline-2 outline-accent rounded-lg' : ''}"
>
<TopicCard
{topic}
{contextId}
{isDailyLog}
{isMeetingMode}
isProcessed={false}
/>
</div>
{/each}
{#if processedTopics.length > 0}
@ -91,13 +127,21 @@
{/each}
{:else}
{#each allTopics as topic (topic.id)}
<TopicCard
{topic}
{contextId}
{isDailyLog}
{isMeetingMode}
isProcessed={processedIds.has(topic.id)}
/>
<div
draggable="true"
ondragstart={() => onDragStart(topic.id)}
ondragover={(e) => { e.preventDefault(); onDragOver(topic.id); }}
ondragend={onDragEnd}
class="transition-opacity {dragId === topic.id ? 'opacity-30' : ''} {dragOverId === topic.id ? 'outline outline-2 outline-accent rounded-lg' : ''}"
>
<TopicCard
{topic}
{contextId}
{isDailyLog}
{isMeetingMode}
isProcessed={processedIds.has(topic.id)}
/>
</div>
{/each}
{/if}

View File

@ -64,7 +64,6 @@
const text = noteText.trim();
if (!text) return false;
createHistoryEntry(topic.id, today(), text);
updateTopic(topic.id, { isNew: false });
noteText = "";
noteEditor?.clear();
return true;
@ -72,10 +71,12 @@
function handleNote() {
saveNote();
updateTopic(topic.id, { isNew: false });
processedTopicIds.add(topic.id);
}
function handleSkip() {
updateTopic(topic.id, { isNew: false });
processedTopicIds.add(topic.id);
}
@ -83,12 +84,13 @@
const dateInput = prompt("Datum (YYYY-MM-DD):", "2026-06-01");
if (!dateInput) return;
saveNote();
updateTopic(topic.id, { snoozeUntil: dateInput, status: "snoozed" });
updateTopic(topic.id, { snoozeUntil: dateInput, status: "snoozed", isNew: false });
processedTopicIds.add(topic.id);
}
function handleDone() {
saveNote();
updateTopic(topic.id, { isNew: false });
archiveTopic(topic.id);
}