This commit is contained in:
Timothy Jaeryang Baek
2026-06-17 00:39:11 +02:00
parent caedcbae49
commit ed4cb358a0
5 changed files with 68 additions and 31 deletions
+20 -3
View File
@@ -35,6 +35,8 @@
const i18n = getContext('i18n');
$: canImportChats = $user?.role === 'admin' || ($user?.permissions?.chat?.import ?? true);
import {
getChatList,
getAllTags,
@@ -372,6 +374,11 @@
};
const importChatHandler = async (items, pinned = false, folderId = null) => {
if (!canImportChats) {
toast.error($i18n.t('Access prohibited'));
return;
}
console.log('importChatHandler', items, pinned, folderId);
for (const item of items) {
console.log(item);
@@ -1401,6 +1408,11 @@
return null;
});
if (!chat && item) {
if (!canImportChats) {
toast.error($i18n.t('Access prohibited'));
return;
}
chat = await importChats(localStorage.token, [
{
chat: item.chat,
@@ -1409,9 +1421,9 @@
folder_id: null,
created_at: item?.created_at ?? null,
updated_at: item?.updated_at ?? null
}
]);
}
}
]);
}
if (chat) {
console.log(chat);
@@ -1467,6 +1479,11 @@
return null;
});
if (!chat && item) {
if (!canImportChats) {
toast.error($i18n.t('Access prohibited'));
return;
}
chat = await importChats(localStorage.token, [
{
chat: item.chat,
@@ -9,10 +9,6 @@
import { toast } from 'svelte-sonner';
import { goto, invalidate, invalidateAll } from '$app/navigation';
import { onMount, getContext, createEventDispatcher, tick } from 'svelte';
const i18n = getContext('i18n');
const dispatch = createEventDispatcher();
import {
archiveChatById,
cloneChatById,
@@ -35,7 +31,8 @@
currentChatPage,
tags,
selectedFolder,
activeChatIds
activeChatIds,
user
} from '$lib/stores';
import ChatMenu from './ChatMenu.svelte';
@@ -53,6 +50,10 @@
import { generateTitle } from '$lib/apis';
import { createMessagesList } from '$lib/utils';
const i18n = getContext('i18n');
const dispatch = createEventDispatcher();
export let className = '';
export let id;
@@ -143,6 +144,11 @@
};
const cloneChatHandler = async (id) => {
if (!($user?.role === 'admin' || ($user?.permissions?.chat?.import ?? true))) {
toast.error($i18n.t('Access prohibited'));
return;
}
const res = await cloneChatById(
localStorage.token,
id,
@@ -387,17 +387,19 @@
{/if}
</button>
<button
draggable="false"
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl w-full"
on:click={() => {
show = false;
cloneChatHandler();
}}
>
<DocumentDuplicate strokeWidth="1.5" />
<div class="flex items-center">{$i18n.t('Clone')}</div>
</button>
{#if $user?.role === 'admin' || ($user?.permissions?.chat?.import ?? true)}
<button
draggable="false"
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl w-full"
on:click={() => {
show = false;
cloneChatHandler();
}}
>
<DocumentDuplicate strokeWidth="1.5" />
<div class="flex items-center">{$i18n.t('Clone')}</div>
</button>
{/if}
{#if chatId && $folders.length > 0}
<DropdownSub
@@ -161,6 +161,11 @@
return null;
});
if (!chat && item) {
if (!($user?.role === 'admin' || ($user?.permissions?.chat?.import ?? true))) {
toast.error($i18n.t('Access prohibited'));
return;
}
chat = await importChats(localStorage.token, [
{
chat: item.chat,
+19 -12
View File
@@ -5,7 +5,7 @@
import dayjs from 'dayjs';
import { settings, chatId, WEBUI_NAME, models, config } from '$lib/stores';
import { settings, chatId, WEBUI_NAME, models, config, user as sessionUser } from '$lib/stores';
import { convertMessagesToHistory, createMessagesList } from '$lib/utils';
import { getChatByShareId, cloneSharedChatById } from '$lib/apis/chats';
@@ -128,6 +128,11 @@
};
const cloneSharedChat = async () => {
if (!($sessionUser?.role === 'admin' || ($sessionUser?.permissions?.chat?.import ?? true))) {
toast.error($i18n.t('Access prohibited'));
return;
}
if (!chat) return;
const res = await cloneSharedChatById(localStorage.token, chat.id).catch((error) => {
@@ -197,18 +202,20 @@
</div>
</div>
<div
class="absolute bottom-0 right-0 left-0 flex justify-center w-full bg-linear-to-b from-transparent to-white dark:to-gray-900"
>
<div class="pb-5">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
on:click={cloneSharedChat}
>
{$i18n.t('Clone Chat')}
</button>
{#if $sessionUser?.role === 'admin' || ($sessionUser?.permissions?.chat?.import ?? true)}
<div
class="absolute bottom-0 right-0 left-0 flex justify-center w-full bg-linear-to-b from-transparent to-white dark:to-gray-900"
>
<div class="pb-5">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
on:click={cloneSharedChat}
>
{$i18n.t('Clone Chat')}
</button>
</div>
</div>
</div>
{/if}
</div>
</div>
{/if}