forked from open-webui/open-webui
		
	feat: unarchive
This commit is contained in:
		
							parent
							
								
									4c221eabef
								
							
						
					
					
						commit
						45ecaaf392
					
				
					 2 changed files with 115 additions and 7 deletions
				
			
		|  | @ -150,7 +150,12 @@ | |||
| </script> | ||||
| 
 | ||||
| <ShareChatModal bind:show={showShareChatModal} chatId={shareChatId} /> | ||||
| <ArchivedChatsModal bind:show={showArchivedChatsModal} /> | ||||
| <ArchivedChatsModal | ||||
| 	bind:show={showArchivedChatsModal} | ||||
| 	on:change={async () => { | ||||
| 		await chats.set(await getChatList(localStorage.token)); | ||||
| 	}} | ||||
| /> | ||||
| 
 | ||||
| <div | ||||
| 	bind:this={navElement} | ||||
|  |  | |||
|  | @ -1,10 +1,13 @@ | |||
| <script lang="ts"> | ||||
| 	import { toast } from 'svelte-sonner'; | ||||
| 	import dayjs from 'dayjs'; | ||||
| 	import { onMount, getContext } from 'svelte'; | ||||
| 	import { getContext, createEventDispatcher } from 'svelte'; | ||||
| 
 | ||||
| 	const dispatch = createEventDispatcher(); | ||||
| 
 | ||||
| 	import Modal from '$lib/components/common/Modal.svelte'; | ||||
| 	import { getArchivedChatList } from '$lib/apis/chats'; | ||||
| 	import { archiveChatById, deleteChatById, getArchivedChatList } from '$lib/apis/chats'; | ||||
| 	import Tooltip from '$lib/components/common/Tooltip.svelte'; | ||||
| 
 | ||||
| 	const i18n = getContext('i18n'); | ||||
| 
 | ||||
|  | @ -12,9 +15,29 @@ | |||
| 
 | ||||
| 	let chats = []; | ||||
| 
 | ||||
| 	onMount(async () => { | ||||
| 	const unarchiveChatHandler = async (chatId) => { | ||||
| 		const res = await archiveChatById(localStorage.token, chatId).catch((error) => { | ||||
| 			toast.error(error); | ||||
| 		}); | ||||
| 
 | ||||
| 		chats = await getArchivedChatList(localStorage.token); | ||||
| 	}); | ||||
| 
 | ||||
| 		dispatch('change'); | ||||
| 	}; | ||||
| 
 | ||||
| 	const deleteChatHandler = async (chatId) => { | ||||
| 		const res = await deleteChatById(localStorage.token, chatId).catch((error) => { | ||||
| 			toast.error(error); | ||||
| 		}); | ||||
| 
 | ||||
| 		chats = await getArchivedChatList(localStorage.token); | ||||
| 	}; | ||||
| 
 | ||||
| 	$: if (show) { | ||||
| 		(async () => { | ||||
| 			chats = await getArchivedChatList(localStorage.token); | ||||
| 		})(); | ||||
| 	} | ||||
| </script> | ||||
| 
 | ||||
| <Modal size="lg" bind:show> | ||||
|  | @ -45,11 +68,91 @@ | |||
| 			<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6"> | ||||
| 				{#if chats.length > 0} | ||||
| 					<div class="text-left text-sm w-full mb-8"> | ||||
| 						{#each chats as chat} | ||||
| 						<div class="relative overflow-x-auto"> | ||||
| 							<table class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto"> | ||||
| 								<thead | ||||
| 									class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 border-gray-800" | ||||
| 								> | ||||
| 									<tr> | ||||
| 										<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th> | ||||
| 										<th scope="col" class="px-3 py-2"> {$i18n.t('Created At')} </th> | ||||
| 										<th scope="col" class="px-3 py-2 text-right" /> | ||||
| 									</tr> | ||||
| 								</thead> | ||||
| 								<tbody> | ||||
| 									{#each chats as chat} | ||||
| 										<tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-850 text-xs"> | ||||
| 											<td class="px-3 py-1 w-2/3"> | ||||
| 												<div class=" line-clamp-1"> | ||||
| 													{chat.title} | ||||
| 												</div> | ||||
| 											</td> | ||||
| 
 | ||||
| 											<td class=" px-3 py-1"> | ||||
| 												{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))} | ||||
| 											</td> | ||||
| 
 | ||||
| 											<td class="px-3 py-1 text-right"> | ||||
| 												<div class="flex justify-end w-full"> | ||||
| 													<Tooltip content="Unarchive Chat"> | ||||
| 														<button | ||||
| 															class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl" | ||||
| 															on:click={async () => { | ||||
| 																unarchiveChatHandler(chat.id); | ||||
| 															}} | ||||
| 														> | ||||
| 															<svg | ||||
| 																xmlns="http://www.w3.org/2000/svg" | ||||
| 																fill="none" | ||||
| 																viewBox="0 0 24 24" | ||||
| 																stroke-width="1.5" | ||||
| 																stroke="currentColor" | ||||
| 																class="size-4" | ||||
| 															> | ||||
| 																<path | ||||
| 																	stroke-linecap="round" | ||||
| 																	stroke-linejoin="round" | ||||
| 																	d="M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15" | ||||
| 																/> | ||||
| 															</svg> | ||||
| 														</button> | ||||
| 													</Tooltip> | ||||
| 
 | ||||
| 													<Tooltip content="Delete Chat"> | ||||
| 														<button | ||||
| 															class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl" | ||||
| 															on:click={async () => { | ||||
| 																deleteChatHandler(chat.id); | ||||
| 															}} | ||||
| 														> | ||||
| 															<svg | ||||
| 																xmlns="http://www.w3.org/2000/svg" | ||||
| 																fill="none" | ||||
| 																viewBox="0 0 24 24" | ||||
| 																stroke-width="1.5" | ||||
| 																stroke="currentColor" | ||||
| 																class="w-4 h-4" | ||||
| 															> | ||||
| 																<path | ||||
| 																	stroke-linecap="round" | ||||
| 																	stroke-linejoin="round" | ||||
| 																	d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" | ||||
| 																/> | ||||
| 															</svg> | ||||
| 														</button> | ||||
| 													</Tooltip> | ||||
| 												</div> | ||||
| 											</td> | ||||
| 										</tr> | ||||
| 									{/each} | ||||
| 								</tbody> | ||||
| 							</table> | ||||
| 						</div> | ||||
| 						<!-- {#each chats as chat} | ||||
| 							<div> | ||||
| 								{JSON.stringify(chat)} | ||||
| 							</div> | ||||
| 						{/each} | ||||
| 						{/each} --> | ||||
| 					</div> | ||||
| 				{:else} | ||||
| 					<div class="text-left text-sm w-full mb-8">You have no archived conversations.</div> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek