forked from open-webui/open-webui
		
	feat: add frontend support for locally sharing chats
This commit is contained in:
		
							parent
							
								
									94976e5ed3
								
							
						
					
					
						commit
						7978adbf45
					
				
					 9 changed files with 433 additions and 106 deletions
				
			
		| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
	const { saveAs } = fileSaver;
 | 
			
		||||
 | 
			
		||||
	import { Separator } from 'bits-ui';
 | 
			
		||||
	import { getChatById } from '$lib/apis/chats';
 | 
			
		||||
	import { getChatById, shareChatById } from '$lib/apis/chats';
 | 
			
		||||
	import { WEBUI_NAME, chatId, modelfiles, settings, showSettings } from '$lib/stores';
 | 
			
		||||
 | 
			
		||||
	import { slide } from 'svelte/transition';
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@
 | 
			
		|||
	import ChevronUpDown from '../icons/ChevronUpDown.svelte';
 | 
			
		||||
	import Menu from './Navbar/Menu.svelte';
 | 
			
		||||
	import TagChatModal from '../chat/TagChatModal.svelte';
 | 
			
		||||
	import { copyToClipboard } from '$lib/utils';
 | 
			
		||||
 | 
			
		||||
	const i18n = getContext('i18n');
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +33,7 @@
 | 
			
		|||
	export let addTag: Function;
 | 
			
		||||
	export let deleteTag: Function;
 | 
			
		||||
 | 
			
		||||
	export let showModelSelector = false;
 | 
			
		||||
	export let showModelSelector = true;
 | 
			
		||||
 | 
			
		||||
	let showShareChatModal = false;
 | 
			
		||||
	let showTagChatModal = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +65,23 @@
 | 
			
		|||
		);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const shareLocalChat = async () => {
 | 
			
		||||
		const chat = await getChatById(localStorage.token, $chatId);
 | 
			
		||||
		console.log('shareLocal', chat);
 | 
			
		||||
		if (chat.share_id) {
 | 
			
		||||
			const shareUrl = `${window.location.origin}/s/${chat.share_id}`;
 | 
			
		||||
			toast.info(
 | 
			
		||||
				$i18n.t('Chat is already shared at {{shareUrl}}, copied to clipboard', { shareUrl })
 | 
			
		||||
			);
 | 
			
		||||
			copyToClipboard(shareUrl);
 | 
			
		||||
		} else {
 | 
			
		||||
			const sharedChat = await shareChatById(localStorage.token, $chatId);
 | 
			
		||||
			const shareUrl = `${window.location.origin}/s/${sharedChat.id}`;
 | 
			
		||||
			toast.info($i18n.t('Chat is now shared at {{shareUrl}}, copied to clipboard', { shareUrl }));
 | 
			
		||||
			copyToClipboard(shareUrl);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const downloadChat = async () => {
 | 
			
		||||
		const chat = (await getChatById(localStorage.token, $chatId)).chat;
 | 
			
		||||
		console.log('download', chat);
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +98,7 @@
 | 
			
		|||
	};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<ShareChatModal bind:show={showShareChatModal} {downloadChat} {shareChat} />
 | 
			
		||||
<ShareChatModal bind:show={showShareChatModal} {downloadChat} {shareChat} {shareLocalChat} />
 | 
			
		||||
<!-- <TagChatModal bind:show={showTagChatModal} {tags} {deleteTag} {addTag} /> -->
 | 
			
		||||
<nav id="nav" class=" sticky py-2.5 top-0 flex flex-row justify-center z-30">
 | 
			
		||||
	<div
 | 
			
		||||
| 
						 | 
				
			
			@ -135,8 +153,10 @@
 | 
			
		|||
		</div> -->
 | 
			
		||||
 | 
			
		||||
		<div class="flex items-center w-full max-w-full">
 | 
			
		||||
			<div class="w-full flex-1 overflow-hidden max-w-full">
 | 
			
		||||
				<ModelSelector bind:selectedModels />
 | 
			
		||||
			<div class="flex-1 overflow-hidden max-w-full">
 | 
			
		||||
				{#if showModelSelector}
 | 
			
		||||
					<ModelSelector bind:selectedModels />
 | 
			
		||||
				{/if}
 | 
			
		||||
			</div>
 | 
			
		||||
 | 
			
		||||
			<div class="self-start flex flex-none items-center">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue