diff --git a/src/lib/components/common/Checkbox.svelte b/src/lib/components/common/Checkbox.svelte new file mode 100644 index 00000000..f69a5840 --- /dev/null +++ b/src/lib/components/common/Checkbox.svelte @@ -0,0 +1,70 @@ + + + diff --git a/src/routes/(app)/documents/+page.svelte b/src/routes/(app)/documents/+page.svelte index b2d28941..f20d4209 100644 --- a/src/routes/(app)/documents/+page.svelte +++ b/src/routes/(app)/documents/+page.svelte @@ -11,6 +11,8 @@ import { uploadDocToVectorDB } from '$lib/apis/rag'; import { transformFileName } from '$lib/utils'; + import Checkbox from '$lib/components/common/Checkbox.svelte'; + import EditDocModal from '$lib/components/documents/EditDocModal.svelte'; import AddFilesPlaceholder from '$lib/components/AddFilesPlaceholder.svelte'; import SettingsModal from '$lib/components/documents/SettingsModal.svelte'; @@ -33,6 +35,16 @@ await documents.set(await getDocs(localStorage.token)); }; + const deleteDocs = async (docs) => { + const res = await Promise.all( + docs.map(async (doc) => { + return await deleteDocByName(localStorage.token, doc.name); + }) + ); + + await documents.set(await getDocs(localStorage.token)); + }; + const uploadDoc = async (file) => { const res = await uploadDocToVectorDB(localStorage.token, '', file).catch((error) => { toast.error(error); @@ -123,6 +135,15 @@ dropZone?.removeEventListener('dragleave', onDragLeave); }; }); + + let filteredDocs; + + $: filteredDocs = $documents.filter( + (doc) => + (selectedTag === '' || + (doc?.content?.tags ?? []).map((tag) => tag.name).includes(selectedTag)) && + (query === '' || doc.name.includes(query)) + ); {#if dragged} @@ -287,38 +308,96 @@ {#if tags.length > 0}
- - {#each tags as tag} +
+ doc?.selected === 'checked').length === + filteredDocs.length + ? 'checked' + : 'unchecked'} + indeterminate={filteredDocs.filter((doc) => doc?.selected === 'checked').length > 0 && + filteredDocs.filter((doc) => doc?.selected === 'checked').length !== + filteredDocs.length} + on:change={(e) => { + if (e.detail === 'checked') { + filteredDocs = filteredDocs.map((doc) => ({ ...doc, selected: 'checked' })); + } else if (e.detail === 'unchecked') { + filteredDocs = filteredDocs.map((doc) => ({ ...doc, selected: 'unchecked' })); + } + }} + /> +
+ + {#if filteredDocs.filter((doc) => doc?.selected === 'checked').length === 0} - {/each} + + {#each tags as tag} + + {/each} + {:else} +
+
+ {filteredDocs.filter((doc) => doc?.selected === 'checked').length} Selected +
+ +
+ + + +
+
+ {/if}
{/if}
- {#each $documents.filter((doc) => (selectedTag === '' || (doc?.content?.tags ?? []) - .map((tag) => tag.name) - .includes(selectedTag)) && (query === '' || doc.name.includes(query))) as doc} -
{ + if (doc?.selected === 'checked') { + doc.selected = 'unchecked'; + } else { + doc.selected = 'checked'; + } + }} > +
+ +
@@ -387,9 +466,10 @@
-
+ {/each}