feat: 문서 삭제 기능 — 정보 패널에서 확인 후 삭제 (파일+DB)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-03 13:14:20 +09:00
parent 1b5fa95a9f
commit 770d38b72c
2 changed files with 46 additions and 3 deletions

View File

@@ -1,11 +1,11 @@
<script>
import { X, ExternalLink, Plus, Save } from 'lucide-svelte';
import { X, ExternalLink, Plus, Save, Trash2 } from 'lucide-svelte';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import FormatIcon from './FormatIcon.svelte';
import TagPill from './TagPill.svelte';
let { doc, onclose } = $props();
let { doc, onclose, ondelete = () => {} } = $props();
// 메모 상태
let noteText = $state('');
@@ -16,6 +16,24 @@
let newTag = $state('');
let tagEditing = $state(false);
// 삭제
let deleteConfirm = $state(false);
let deleting = $state(false);
async function deleteDoc() {
deleting = true;
try {
await api(`/documents/${doc.id}?delete_file=true`, { method: 'DELETE' });
addToast('success', '문서 삭제됨');
ondelete();
} catch (err) {
addToast('error', '삭제 실패');
} finally {
deleting = false;
deleteConfirm = false;
}
}
// 편집 URL
let editUrlText = $state('');
let editUrlEditing = $state(false);
@@ -273,5 +291,30 @@
</div>
</dl>
</div>
<!-- 삭제 -->
<div class="pt-2 border-t border-[var(--border)]">
{#if deleteConfirm}
<div class="flex items-center gap-2">
<span class="text-xs text-[var(--error)]">정말 삭제?</span>
<button
onclick={deleteDoc}
disabled={deleting}
class="px-2 py-1 text-xs bg-[var(--error)] text-white rounded disabled:opacity-50"
>{deleting ? '삭제 중...' : '확인'}</button>
<button
onclick={() => deleteConfirm = false}
class="px-2 py-1 text-xs text-[var(--text-dim)]"
>취소</button>
</div>
{:else}
<button
onclick={() => deleteConfirm = true}
class="flex items-center gap-1 text-xs text-[var(--text-dim)] hover:text-[var(--error)]"
>
<Trash2 size={12} /> 문서 삭제
</button>
{/if}
</div>
</div>
</aside>

View File

@@ -258,7 +258,7 @@
aria-label="정보 패널 닫기"
></button>
<div class="absolute right-0 top-0 bottom-0 z-50 w-[320px] shadow-xl">
<PreviewPanel doc={selectedDoc} onclose={() => infoPanelOpen = false} />
<PreviewPanel doc={selectedDoc} onclose={() => infoPanelOpen = false} ondelete={() => { selectedDoc = null; infoPanelOpen = false; loadDocuments(); }} />
</div>
</div>
{/if}