forked from open-webui/open-webui
Merge pull request #143 from ollama-webui/dev
fix: delete current chat issue
This commit is contained in:
commit
0b6365374b
2 changed files with 81 additions and 45 deletions
|
@ -17,7 +17,9 @@
|
||||||
let title: string = 'Ollama Web UI';
|
let title: string = 'Ollama Web UI';
|
||||||
let search = '';
|
let search = '';
|
||||||
|
|
||||||
let chatTitleEditIdx = null;
|
let chatDeleteId = null;
|
||||||
|
|
||||||
|
let chatTitleEditId = null;
|
||||||
let chatTitle = '';
|
let chatTitle = '';
|
||||||
|
|
||||||
let showDropdown = false;
|
let showDropdown = false;
|
||||||
|
@ -118,25 +120,25 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="px-2.5 flex justify-center my-1">
|
<div class="px-2.5 flex justify-center my-1">
|
||||||
<!-- <button
|
<button
|
||||||
class="flex-grow flex space-x-3 rounded-md px-3 py-2 hover:bg-gray-900 transition"
|
class="flex-grow flex space-x-3 rounded-md px-3 py-2 hover:bg-gray-900 transition"
|
||||||
on:click={async () => {}}
|
on:click={async () => {
|
||||||
|
goto('/presets');
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<div class="self-center">
|
<div class="self-center">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 20 20"
|
fill="none"
|
||||||
fill="currentColor"
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
class="w-4 h-4"
|
class="w-4 h-4"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
d="M3.196 12.87l-.825.483a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.758 0l7.25-4.25a.75.75 0 000-1.294l-.825-.484-5.666 3.322a2.25 2.25 0 01-2.276 0L3.196 12.87z"
|
stroke-linecap="round"
|
||||||
/>
|
stroke-linejoin="round"
|
||||||
<path
|
d="M13.5 16.875h3.375m0 0h3.375m-3.375 0V13.5m0 3.375v3.375M6 10.5h2.25a2.25 2.25 0 002.25-2.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v2.25A2.25 2.25 0 006 10.5zm0 9.75h2.25A2.25 2.25 0 0010.5 18v-2.25a2.25 2.25 0 00-2.25-2.25H6a2.25 2.25 0 00-2.25 2.25V18A2.25 2.25 0 006 20.25zm9.75-9.75H18a2.25 2.25 0 002.25-2.25V6A2.25 2.25 0 0018 3.75h-2.25A2.25 2.25 0 0013.5 6v2.25a2.25 2.25 0 002.25 2.25z"
|
||||||
d="M3.196 8.87l-.825.483a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.758 0l7.25-4.25a.75.75 0 000-1.294l-.825-.484-5.666 3.322a2.25 2.25 0 01-2.276 0L3.196 8.87z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M10.38 1.103a.75.75 0 00-.76 0l-7.25 4.25a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.76 0l7.25-4.25a.75.75 0 000-1.294l-7.25-4.25z"
|
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
@ -144,7 +146,7 @@
|
||||||
<div class="flex self-center">
|
<div class="flex self-center">
|
||||||
<div class=" self-center font-medium text-sm">Presets</div>
|
<div class=" self-center font-medium text-sm">Presets</div>
|
||||||
</div>
|
</div>
|
||||||
</button> -->
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="px-2.5 mt-1 mb-2 flex justify-center space-x-2">
|
<div class="px-2.5 mt-1 mb-2 flex justify-center space-x-2">
|
||||||
|
@ -169,34 +171,24 @@
|
||||||
placeholder="Search"
|
placeholder="Search"
|
||||||
bind:value={search}
|
bind:value={search}
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- <button
|
<!-- <div class="self-center pr-3 py-2 bg-gray-900">
|
||||||
class=" cursor-pointer w-12 rounded-md flex"
|
|
||||||
on:click={() => {
|
|
||||||
show = !show;
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div class=" m-auto self-center">
|
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 20 20"
|
fill="none"
|
||||||
fill="currentColor"
|
viewBox="0 0 24 24"
|
||||||
class="w-5 h-5"
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
fill-rule="evenodd"
|
stroke-linecap="round"
|
||||||
d="M3 4.25A2.25 2.25 0 015.25 2h5.5A2.25 2.25 0 0113 4.25v2a.75.75 0 01-1.5 0v-2a.75.75 0 00-.75-.75h-5.5a.75.75 0 00-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 00.75-.75v-2a.75.75 0 011.5 0v2A2.25 2.25 0 0110.75 18h-5.5A2.25 2.25 0 013 15.75V4.25z"
|
stroke-linejoin="round"
|
||||||
clip-rule="evenodd"
|
d="M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 01-.659 1.591l-5.432 5.432a2.25 2.25 0 00-.659 1.591v2.927a2.25 2.25 0 01-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 00-.659-1.591L3.659 7.409A2.25 2.25 0 013 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0112 3z"
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
d="M19 10a.75.75 0 00-.75-.75H8.704l1.048-.943a.75.75 0 10-1.004-1.114l-2.5 2.25a.75.75 0 000 1.114l2.5 2.25a.75.75 0 101.004-1.114l-1.048-.943h9.546A.75.75 0 0019 10z"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div> -->
|
||||||
</button> -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pl-2.5 my-2 flex-1 flex flex-col space-y-1 overflow-y-auto">
|
<div class="pl-2.5 my-2 flex-1 flex flex-col space-y-1 overflow-y-auto">
|
||||||
|
@ -221,8 +213,8 @@
|
||||||
: ''} transition whitespace-nowrap text-ellipsis"
|
: ''} transition whitespace-nowrap text-ellipsis"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
// goto(`/c/${chat.id}`);
|
// goto(`/c/${chat.id}`);
|
||||||
if (chat.id !== chatTitleEditIdx) {
|
if (chat.id !== chatTitleEditId) {
|
||||||
chatTitleEditIdx = null;
|
chatTitleEditId = null;
|
||||||
chatTitle = '';
|
chatTitle = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +245,7 @@
|
||||||
? 'w-[120px]'
|
? 'w-[120px]'
|
||||||
: 'w-[180px]'} "
|
: 'w-[180px]'} "
|
||||||
>
|
>
|
||||||
{#if chatTitleEditIdx === chat.id}
|
{#if chatTitleEditId === chat.id}
|
||||||
<input bind:value={chatTitle} class=" bg-transparent w-full" />
|
<input bind:value={chatTitle} class=" bg-transparent w-full" />
|
||||||
{:else}
|
{:else}
|
||||||
{chat.title}
|
{chat.title}
|
||||||
|
@ -264,13 +256,13 @@
|
||||||
|
|
||||||
{#if chat.id === $chatId}
|
{#if chat.id === $chatId}
|
||||||
<div class=" absolute right-[22px] top-[10px]">
|
<div class=" absolute right-[22px] top-[10px]">
|
||||||
{#if chatTitleEditIdx === chat.id}
|
{#if chatTitleEditId === chat.id}
|
||||||
<div class="flex self-center space-x-1.5">
|
<div class="flex self-center space-x-1.5">
|
||||||
<button
|
<button
|
||||||
class=" self-center hover:text-white transition"
|
class=" self-center hover:text-white transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
editChatTitle(chat.id, chatTitle);
|
editChatTitle(chat.id, chatTitle);
|
||||||
chatTitleEditIdx = null;
|
chatTitleEditId = null;
|
||||||
chatTitle = '';
|
chatTitle = '';
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -290,7 +282,7 @@
|
||||||
<button
|
<button
|
||||||
class=" self-center hover:text-white transition"
|
class=" self-center hover:text-white transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
chatTitleEditIdx = null;
|
chatTitleEditId = null;
|
||||||
chatTitle = '';
|
chatTitle = '';
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -306,13 +298,52 @@
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
{:else if chatDeleteId === chat.id}
|
||||||
|
<div class="flex self-center space-x-1.5">
|
||||||
|
<button
|
||||||
|
class=" self-center hover:text-white transition"
|
||||||
|
on:click={() => {
|
||||||
|
deleteChat(chat.id);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 20 20"
|
||||||
|
fill="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class=" self-center hover:text-white transition"
|
||||||
|
on:click={() => {
|
||||||
|
chatDeleteId = null;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 20 20"
|
||||||
|
fill="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="flex self-center space-x-1.5">
|
<div class="flex self-center space-x-1.5">
|
||||||
<button
|
<button
|
||||||
class=" self-center hover:text-white transition"
|
class=" self-center hover:text-white transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
chatTitle = chat.title;
|
chatTitle = chat.title;
|
||||||
chatTitleEditIdx = chat.id;
|
chatTitleEditId = chat.id;
|
||||||
// editChatTitle(chat.id, 'a');
|
// editChatTitle(chat.id, 'a');
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -334,7 +365,7 @@
|
||||||
<button
|
<button
|
||||||
class=" self-center hover:text-white transition"
|
class=" self-center hover:text-white transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
deleteChat(chat.id);
|
chatDeleteId = chat.id;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
import { openDB, deleteDB } from 'idb';
|
import { openDB, deleteDB } from 'idb';
|
||||||
import { onMount, tick } from 'svelte';
|
import { onMount, tick } from 'svelte';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
|
|
||||||
import { config, user, showSettings, settings, models, db, chats } from '$lib/stores';
|
import { config, user, showSettings, settings, models, db, chats, chatId } from '$lib/stores';
|
||||||
|
|
||||||
import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
|
import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
|
||||||
import Sidebar from '$lib/components/layout/Sidebar.svelte';
|
import Sidebar from '$lib/components/layout/Sidebar.svelte';
|
||||||
import toast from 'svelte-french-toast';
|
import toast from 'svelte-french-toast';
|
||||||
import { OLLAMA_API_BASE_URL } from '$lib/constants';
|
import { OLLAMA_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants';
|
||||||
|
|
||||||
let loaded = false;
|
let loaded = false;
|
||||||
|
|
||||||
|
@ -133,6 +134,10 @@
|
||||||
await chats.set(await this.getChats());
|
await chats.set(await this.getChats());
|
||||||
},
|
},
|
||||||
deleteChatById: async function (id) {
|
deleteChatById: async function (id) {
|
||||||
|
if ($chatId === id) {
|
||||||
|
goto('/');
|
||||||
|
await chatId.set(uuidv4());
|
||||||
|
}
|
||||||
await this.db.delete('chats', id);
|
await this.db.delete('chats', id);
|
||||||
await chats.set(await this.getChats());
|
await chats.set(await this.getChats());
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue