@@ -94,18 +97,19 @@
{#if $selectedFolder}
{
- await chats.set(await getChatList(localStorage.token, $currentChatPage));
- currentChatPage.set(1);
- }}
- onDelete={async () => {
- await chats.set(await getChatList(localStorage.token, $currentChatPage));
- currentChatPage.set(1);
+ folder={$selectedFolder}
+ readOnly={folderReadOnly}
+ onUpdate={async (folder) => {
+ await chats.set(await getChatList(localStorage.token, $currentChatPage));
+ currentChatPage.set(1);
+ }}
+ onDelete={async () => {
+ await chats.set(await getChatList(localStorage.token, $currentChatPage));
+ currentChatPage.set(1);
- selectedFolder.set(null);
- }}
- />
+ selectedFolder.set(null);
+ }}
+ />
{:else}
@@ -210,33 +214,35 @@
{/if}
- {
- dispatch('submit', e.detail);
- }}
- />
+ {#if !($selectedFolder && folderReadOnly)}
+ {
+ dispatch('submit', e.detail);
+ }}
+ />
+ {/if}
diff --git a/src/lib/components/chat/Placeholder/ChatList.svelte b/src/lib/components/chat/Placeholder/ChatList.svelte
index d73bc30a9a..3dfc187089 100644
--- a/src/lib/components/chat/Placeholder/ChatList.svelte
+++ b/src/lib/components/chat/Placeholder/ChatList.svelte
@@ -9,6 +9,7 @@
import ChevronDown from '$lib/components/icons/ChevronDown.svelte';
import Loader from '$lib/components/common/Loader.svelte';
import Spinner from '$lib/components/common/Spinner.svelte';
+ import Tooltip from '$lib/components/common/Tooltip.svelte';
dayjs.extend(localizedFormat);
@@ -54,6 +55,7 @@
let orderBy = 'updated_at';
let direction = 'desc'; // 'asc' or 'desc'
+
$: if (chats) {
init();
}
@@ -157,10 +159,20 @@
{chat?.title}
-
+
{dayjs(chat?.updated_at * 1000).calendar()}
+
+ {#if chat.user_id && chat.owner_name}
+
+
+
+ {/if}
{/each}
diff --git a/src/lib/components/chat/Placeholder/FolderTitle.svelte b/src/lib/components/chat/Placeholder/FolderTitle.svelte
index 7495f5bc09..ab64420120 100644
--- a/src/lib/components/chat/Placeholder/FolderTitle.svelte
+++ b/src/lib/components/chat/Placeholder/FolderTitle.svelte
@@ -31,6 +31,7 @@
import EmojiPicker from '$lib/components/common/EmojiPicker.svelte';
export let folder = null;
+ export let readOnly: boolean = false;
export let onUpdate: Function = (folderId) => {};
export let onDelete: Function = (folderId) => {};
@@ -205,58 +206,72 @@
- {}}
- selected={folder?.meta?.icon ?? null}
- onSubmit={(name) => {
- console.log(name);
- updateIconHandler(name);
- }}
- >
-
-
+
+ {:else}
+
{}}
+ selected={folder?.meta?.icon ?? null}
+ onSubmit={(name) => {
+ console.log(name);
+ updateIconHandler(name);
+ }}
+ >
+
+
+ {/if}
{folder.name}
-
-
{
- showFolderModal = true;
- }}
- onShare={() => {
- showShareModal = true;
- }}
- onDelete={() => {
- showDeleteConfirm = true;
- }}
- onExport={() => {
- exportHandler();
- }}
- onCreateSubFolder={() => {
- showCreateSubFolderModal = true;
- }}
- >
-
+
+ {/if}
{/if}
diff --git a/src/lib/components/layout/Navbar/Menu.svelte b/src/lib/components/layout/Navbar/Menu.svelte
index 43bdc2b745..36357fd539 100644
--- a/src/lib/components/layout/Navbar/Menu.svelte
+++ b/src/lib/components/layout/Navbar/Menu.svelte
@@ -39,6 +39,7 @@
const i18n = getContext('i18n');
export let shareEnabled: boolean = false;
+ export let readOnly: boolean = false;
export let shareHandler: Function;
export let moveChatHandler: Function;
@@ -364,7 +365,7 @@
{/if}
- {#if !$temporaryChatEnabled && ($user?.role === 'admin' || ($user.permissions?.chat?.share ?? true))}
+ {#if !readOnly && !$temporaryChatEnabled && ($user?.role === 'admin' || ($user.permissions?.chat?.share ?? true))}
{$i18n.t('Copy')}
- {#if !$temporaryChatEnabled && chat?.id}
+ {#if !readOnly && !$temporaryChatEnabled && chat?.id}
+ {#if ownerUserId}
+
+
+
+ {/if}
{#if unread}
diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte
index 459175e5a9..979a1029ef 100644
--- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte
+++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte
@@ -11,7 +11,7 @@
import { goto } from '$app/navigation';
import { toast } from 'svelte-sonner';
- import { chatId, mobile, selectedFolder, showSidebar } from '$lib/stores';
+ import { chatId, mobile, selectedFolder, showSidebar, user } from '$lib/stores';
import {
deleteFolderById,
@@ -703,6 +703,9 @@
createdAt={chat.created_at}
updatedAt={chat.updated_at}
lastReadAt={chat.last_read_at}
+ ownerName={chat.owner_name ?? null}
+ ownerUserId={chat.owner_name ? chat.user_id : null}
+ readonly={chat.user_id !== $user?.id}
{shiftKey}
on:change={(e) => {
dispatch('change', e.detail);
diff --git a/src/lib/components/layout/Sidebar/SharedFolderItem.svelte b/src/lib/components/layout/Sidebar/SharedFolderItem.svelte
index b7000695cb..1ae59f367b 100644
--- a/src/lib/components/layout/Sidebar/SharedFolderItem.svelte
+++ b/src/lib/components/layout/Sidebar/SharedFolderItem.svelte
@@ -108,6 +108,8 @@
title={chat.title}
createdAt={chat.created_at}
updatedAt={chat.updated_at}
+ ownerName={chat.owner_name}
+ ownerUserId={chat.user_id}
readonly={chat.readonly ?? !isWritable}
/>
{/each}