diff --git a/src/lib/components/common/Checkbox.svelte b/src/lib/components/common/Checkbox.svelte
new file mode 100644
index 000000000..f69a58401
--- /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 b2d289413..f20d42090 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}