{
+ const doc = deleteTarget;
+ if (!doc) return;
setDeletingId(doc.id);
setError(null);
@@ -292,10 +303,12 @@ export default function KnowledgePage() {
try {
await knowledgeDocsApi.delete(doc.fileName);
setDocs((current) => current.filter((item) => item.id !== doc.id));
+ setDeleteTarget(null);
pushFeedback(t('knowledge.status.deleteSuccess'), 'success');
} catch (caughtError) {
const message = caughtError instanceof Error ? caughtError.message : String(caughtError);
setError(message);
+ setDeleteTarget(null);
pushFeedback(t('knowledge.status.failed', { error: message }), 'error');
} finally {
setDeletingId(null);
@@ -311,6 +324,27 @@ export default function KnowledgePage() {
) : null}
+ }
+ onClose={closeDeleteDialog}
+ onConfirm={() => {
+ void confirmDelete();
+ }}
+ />
+
({
'knowledge.storageLabel': 'Storage',
'knowledge.refresh': 'Refresh',
'knowledge.upload': 'Upload',
- 'knowledge.uploadHint': 'Knowledge docs only',
'knowledge.status.loading': 'Loading documents...',
'knowledge.status.uploading': 'Uploading...',
'knowledge.status.deleting': 'Deleting...',
@@ -29,7 +28,10 @@ vi.mock('../src/pages/Knowledge/copy', () => ({
'knowledge.status.deleteSuccess': 'Deleted',
'knowledge.emptyTitle': 'No documents yet',
'knowledge.emptyDescription': 'Upload a file',
- 'knowledge.deleteConfirm': 'Delete this document?',
+ 'knowledge.deleteDialog.title': 'Delete document?',
+ 'knowledge.deleteDialog.confirm': 'Delete document',
+ 'knowledge.deleteDialog.close': 'Close dialog',
+ 'knowledge.common.cancel': 'Cancel',
'knowledge.table.name': 'Name',
'knowledge.table.size': 'Size',
'knowledge.table.modifiedAt': 'Modified At',
@@ -42,6 +44,10 @@ vi.mock('../src/pages/Knowledge/copy', () => ({
return `Knowledge docs request failed: ${params?.error ?? ''}`;
}
+ if (path === 'knowledge.deleteDialog.description') {
+ return `This will permanently remove "${params?.name ?? ''}" from the local knowledge docs directory.`;
+ }
+
return dictionary[path] ?? fallback ?? path;
},
}));
@@ -53,7 +59,6 @@ describe('KnowledgePage', () => {
apiMocks.list.mockReset();
apiMocks.upload.mockReset();
apiMocks.delete.mockReset();
- vi.stubGlobal('confirm', vi.fn(() => true));
});
it('loads and renders docs from the knowledge docs api', async () => {
@@ -87,6 +92,7 @@ describe('KnowledgePage', () => {
const deleteButton = await screen.findByRole('button', { name: /delete/i });
fireEvent.click(deleteButton);
+ fireEvent.click(screen.getByRole('button', { name: 'Delete document' }));
await waitFor(() => {
expect(apiMocks.delete).toHaveBeenCalledWith('guide.md');