feat: folders as projects
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
This commit is contained in:
co-authored by
Classic298
parent
5abc03f4dd
commit
7607c53bd5
@@ -1,24 +1,42 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
import { getContext, onMount } from 'svelte';
|
||||
import { knowledge } from '$lib/stores';
|
||||
|
||||
import Selector from './Knowledge/Selector.svelte';
|
||||
import FileItem from '$lib/components/common/FileItem.svelte';
|
||||
import { getKnowledgeBases } from '$lib/apis/knowledge';
|
||||
|
||||
export let selectedItems = [];
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
let loaded = false;
|
||||
|
||||
onMount(async () => {
|
||||
if (!$knowledge) {
|
||||
knowledge.set(await getKnowledgeBases(localStorage.token));
|
||||
}
|
||||
loaded = true;
|
||||
});
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="flex w-full justify-between mb-1">
|
||||
<div class=" self-center text-sm font-semibold">{$i18n.t('Knowledge')}</div>
|
||||
</div>
|
||||
<slot name="label">
|
||||
<div class="mb-2">
|
||||
<div class="flex w-full justify-between mb-1">
|
||||
<div class=" self-center text-sm font-semibold">
|
||||
{$i18n.t('Knowledge')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=" text-xs dark:text-gray-500">
|
||||
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
|
||||
</div>
|
||||
<div class=" text-xs dark:text-gray-500">
|
||||
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
|
||||
</div>
|
||||
</div>
|
||||
</slot>
|
||||
|
||||
<div class="flex flex-col">
|
||||
{#if selectedItems?.length > 0}
|
||||
<div class=" flex flex-wrap items-center gap-2 mt-2">
|
||||
<div class=" flex flex-wrap items-center gap-2 mb-2.5">
|
||||
{#each selectedItems as file, fileIdx}
|
||||
<FileItem
|
||||
{file}
|
||||
@@ -38,27 +56,30 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="flex flex-wrap text-sm font-medium gap-1.5 mt-2">
|
||||
<Selector
|
||||
on:select={(e) => {
|
||||
const item = e.detail;
|
||||
{#if loaded}
|
||||
<div class="flex flex-wrap text-sm font-medium gap-1.5">
|
||||
<Selector
|
||||
knowledgeItems={$knowledge || []}
|
||||
on:select={(e) => {
|
||||
const item = e.detail;
|
||||
|
||||
if (!selectedItems.find((k) => k.id === item.id)) {
|
||||
selectedItems = [
|
||||
...selectedItems,
|
||||
{
|
||||
...item
|
||||
}
|
||||
];
|
||||
}
|
||||
}}
|
||||
>
|
||||
<button
|
||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
|
||||
type="button">{$i18n.t('Select Knowledge')}</button
|
||||
if (!selectedItems.find((k) => k.id === item.id)) {
|
||||
selectedItems = [
|
||||
...selectedItems,
|
||||
{
|
||||
...item
|
||||
}
|
||||
];
|
||||
}
|
||||
}}
|
||||
>
|
||||
</Selector>
|
||||
</div>
|
||||
<button
|
||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
|
||||
type="button">{$i18n.t('Select Knowledge')}</button
|
||||
>
|
||||
</Selector>
|
||||
</div>
|
||||
{/if}
|
||||
<!-- {knowledge} -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
|
||||
export let onClose: Function = () => {};
|
||||
|
||||
export let knowledgeItems = [];
|
||||
|
||||
let query = '';
|
||||
|
||||
let items = [];
|
||||
@@ -51,7 +53,7 @@
|
||||
};
|
||||
});
|
||||
|
||||
let legacy_documents = $knowledge
|
||||
let legacy_documents = knowledgeItems
|
||||
.filter((item) => item?.meta?.document)
|
||||
.map((item) => ({
|
||||
...item,
|
||||
@@ -86,16 +88,16 @@
|
||||
]
|
||||
: [];
|
||||
|
||||
let collections = $knowledge
|
||||
let collections = knowledgeItems
|
||||
.filter((item) => !item?.meta?.document)
|
||||
.map((item) => ({
|
||||
...item,
|
||||
type: 'collection'
|
||||
}));
|
||||
let collection_files =
|
||||
$knowledge.length > 0
|
||||
knowledgeItems.length > 0
|
||||
? [
|
||||
...$knowledge
|
||||
...knowledgeItems
|
||||
.reduce((a, item) => {
|
||||
return [
|
||||
...new Set([
|
||||
@@ -141,7 +143,7 @@
|
||||
|
||||
<div slot="content">
|
||||
<DropdownMenu.Content
|
||||
class="w-full max-w-96 rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
class="w-full max-w-96 rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-[99999999] bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
sideOffset={8}
|
||||
side="bottom"
|
||||
align="start"
|
||||
@@ -162,7 +164,7 @@
|
||||
|
||||
<div class="max-h-56 overflow-y-scroll">
|
||||
{#if filteredItems.length === 0}
|
||||
<div class="text-center text-sm text-gray-500 dark:text-gray-400">
|
||||
<div class="text-center text-xs text-gray-500 dark:text-gray-400 py-4">
|
||||
{$i18n.t('No knowledge found')}
|
||||
</div>
|
||||
{:else}
|
||||
|
||||
Reference in New Issue
Block a user