Update Sidebar.svelte

This commit is contained in:
Classic298 2025-06-21 13:57:26 +02:00 committed by GitHub
parent 8f01f72d28
commit f6ec2f537f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -22,7 +22,11 @@
socket, socket,
config, config,
isApp, isApp,
models models,
pendingFolderId,
pendingFolderName,
folders,
refreshSidebar
} from '$lib/stores'; } from '$lib/stores';
import { onMount, getContext, tick, onDestroy } from 'svelte'; import { onMount, getContext, tick, onDestroy } from 'svelte';
@ -77,7 +81,6 @@
let chatListLoading = false; let chatListLoading = false;
let allChatsLoaded = false; let allChatsLoaded = false;
let folders = {};
let newFolderId = null; let newFolderId = null;
const initFolders = async () => { const initFolders = async () => {
@ -86,15 +89,15 @@
return []; return [];
}); });
folders = {}; let newFolders = {};
// First pass: Initialize all folder entries // First pass: Initialize all folder entries
for (const folder of folderList) { for (const folder of folderList) {
// Ensure folder is added to folders with its data // Ensure folder is added to folders with its data
folders[folder.id] = { ...(folders[folder.id] || {}), ...folder }; newFolders[folder.id] = { ...(newFolders[folder.id] || {}), ...folder };
if (newFolderId && folder.id === newFolderId) { if (newFolderId && folder.id === newFolderId) {
folders[folder.id].new = true; newFolders[folder.id].new = true;
newFolderId = null; newFolderId = null;
} }
} }
@ -103,30 +106,31 @@
for (const folder of folderList) { for (const folder of folderList) {
if (folder.parent_id) { if (folder.parent_id) {
// Ensure the parent folder is initialized if it doesn't exist // Ensure the parent folder is initialized if it doesn't exist
if (!folders[folder.parent_id]) { if (!newFolders[folder.parent_id]) {
folders[folder.parent_id] = {}; // Create a placeholder if not already present newFolders[folder.parent_id] = {}; // Create a placeholder if not already present
} }
// Initialize childrenIds array if it doesn't exist and add the current folder id // Initialize childrenIds array if it doesn't exist and add the current folder id
folders[folder.parent_id].childrenIds = folders[folder.parent_id].childrenIds newFolders[folder.parent_id].childrenIds = newFolders[folder.parent_id].childrenIds
? [...folders[folder.parent_id].childrenIds, folder.id] ? [...newFolders[folder.parent_id].childrenIds, folder.id]
: [folder.id]; : [folder.id];
// Sort the children by updated_at field // Sort the children by updated_at field
folders[folder.parent_id].childrenIds.sort((a, b) => { newFolders[folder.parent_id].childrenIds.sort((a, b) => {
return folders[b].updated_at - folders[a].updated_at; return newFolders[b].updated_at - newFolders[a].updated_at;
}); });
} }
} }
folders.set(newFolders);
}; };
const createFolder = async (name = 'Untitled') => { const createFolder = async (name = '📁 Untitled Folder') => {
if (name === '') { if (name === '') {
toast.error($i18n.t('Folder name cannot be empty.')); toast.error($i18n.t('Folder name cannot be empty.'));
return; return;
} }
const rootFolders = Object.values(folders).filter((folder) => folder.parent_id === null); const rootFolders = Object.values($folders).filter((folder) => folder.parent_id === null);
if (rootFolders.find((folder) => folder.name.toLowerCase() === name.toLowerCase())) { if (rootFolders.find((folder) => folder.name.toLowerCase() === name.toLowerCase())) {
// If a folder with the same name already exists, append a number to the name // If a folder with the same name already exists, append a number to the name
let i = 1; let i = 1;
@ -138,18 +142,17 @@
name = `${name} ${i}`; name = `${name} ${i}`;
} }
// Add a dummy folder to the list to show the user that the folder is being created // Add a dummy folder to the list to show the user that the folder is being created
const tempId = uuidv4(); const tempId = uuidv4();
folders = { folders.set({
...folders, ...$folders,
tempId: { tempId: {
id: tempId, id: tempId,
name: name, name: name,
created_at: Date.now(), created_at: Date.now(),
updated_at: Date.now() updated_at: Date.now()
} }
}; });
const res = await createNewFolder(localStorage.token, name).catch((error) => { const res = await createNewFolder(localStorage.token, name).catch((error) => {
toast.error(`${error}`); toast.error(`${error}`);
@ -162,6 +165,21 @@
} }
}; };
const createChatInFolderHandler = async (event) => {
const { folderId } = event.detail;
pendingFolderId.set(folderId);
pendingFolderName.set($folders[folderId].name);
await goto('/');
if ($mobile) {
showSidebar.set(false);
}
toast.success($i18n.t('Folder selected for next chat'));
};
const initChannels = async () => { const initChannels = async () => {
await channels.set(await getChannels(localStorage.token)); await channels.set(await getChannels(localStorage.token));
}; };
@ -181,6 +199,8 @@
scrollPaginationEnabled.set(true); scrollPaginationEnabled.set(true);
}; };
refreshSidebar.set(initChatList);
const loadMoreChats = async () => { const loadMoreChats = async () => {
chatListLoading = true; chatListLoading = true;
@ -751,7 +771,7 @@
initChatList(); initChatList();
} }
} else if (type === 'folder') { } else if (type === 'folder') {
if (folders[id].parent_id === null) { if ($folders[id].parent_id === null) {
return; return;
} }
@ -763,7 +783,7 @@
); );
if (res) { if (res) {
await initFolders(); initChatList();
} }
} }
}} }}
@ -844,9 +864,9 @@
</div> </div>
{/if} {/if}
{#if folders} {#if $folders}
<Folders <Folders
{folders} folders={$folders}
on:import={(e) => { on:import={(e) => {
const { folderId, items } = e.detail; const { folderId, items } = e.detail;
importChatHandler(items, false, folderId); importChatHandler(items, false, folderId);
@ -857,6 +877,7 @@
on:change={async () => { on:change={async () => {
initChatList(); initChatList();
}} }}
on:createChatInFolder={createChatInFolderHandler}
/> />
{/if} {/if}