diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index c2b685dcc3..8615c32780 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -59,6 +59,8 @@ import Search from '../icons/Search.svelte'; import SearchModal from './SearchModal.svelte'; import FolderModal from './Sidebar/Folders/FolderModal.svelte'; + import Sortable from 'sortablejs'; + import { updateUserSettings } from '$lib/apis/users'; const BREAKPOINT = 768; @@ -79,6 +81,28 @@ let folders = {}; let newFolderId = null; + const initPinnedModelsSortable = () => { + const pinnedModelsList = document.getElementById('pinned-models-list'); + if (pinnedModelsList) { + new Sortable(pinnedModelsList, { + animation: 150, + onUpdate: async (event) => { + const modelId = event.item.dataset.id; + const newIndex = event.newIndex; + + const pinnedModels = $settings.pinnedModels; + const oldIndex = pinnedModels.indexOf(modelId); + + pinnedModels.splice(oldIndex, 1); + pinnedModels.splice(newIndex, 0, modelId); + + settings.set({ ...$settings, pinnedModels: pinnedModels }); + await updateUserSettings(localStorage.token, { ui: $settings }); + } + }); + } + }; + const initFolders = async () => { const folderList = await getFolders(localStorage.token).catch((error) => { toast.error(`${error}`); @@ -373,6 +397,7 @@ await initChannels(); await initChatList(); + initPinnedModelsSortable(); window.addEventListener('keydown', onKeyDown); window.addEventListener('keyup', onKeyUp); @@ -673,12 +698,15 @@ {/if}