forked from open-webui/open-webui
		
	feat: delete shared chat link
This commit is contained in:
		
							parent
							
								
									dcac8a773b
								
							
						
					
					
						commit
						865c268312
					
				
					 2 changed files with 77 additions and 50 deletions
				
			
		|  | @ -226,16 +226,17 @@ async def share_chat_by_id(id: str, user=Depends(get_current_user)): | ||||||
| ############################ | ############################ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @router.delete("/{share_id}/share", response_model=Optional[bool]) | @router.delete("/{id}/share", response_model=Optional[bool]) | ||||||
| async def delete_shared_chat_by_id(share_id: str, user=Depends(get_current_user)): | async def delete_shared_chat_by_id(id: str, user=Depends(get_current_user)): | ||||||
|     chat = Chats.get_chat_by_id_and_user_id(share_id, user.id) |     chat = Chats.get_chat_by_id_and_user_id(id, user.id) | ||||||
|     if chat: |     if chat: | ||||||
|         if not chat.share_id: |         if not chat.share_id: | ||||||
|             return False |             return False | ||||||
|         result = Chats.delete_shared_chat_by_chat_id(chat.id) |  | ||||||
|         update_result = Chats.update_chat_share_id_by_id(chat.id, None) |  | ||||||
| 
 | 
 | ||||||
|         return result and update_result |         result = Chats.delete_shared_chat_by_chat_id(id) | ||||||
|  |         update_result = Chats.update_chat_share_id_by_id(id, None) | ||||||
|  | 
 | ||||||
|  |         return result and update_result != None | ||||||
|     else: |     else: | ||||||
|         raise HTTPException( |         raise HTTPException( | ||||||
|             status_code=status.HTTP_401_UNAUTHORIZED, |             status_code=status.HTTP_401_UNAUTHORIZED, | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
| 	const { saveAs } = fileSaver; | 	const { saveAs } = fileSaver; | ||||||
| 
 | 
 | ||||||
| 	import { toast } from 'svelte-sonner'; | 	import { toast } from 'svelte-sonner'; | ||||||
| 	import { getChatById, shareChatById } from '$lib/apis/chats'; | 	import { deleteSharedChatById, getChatById, shareChatById } from '$lib/apis/chats'; | ||||||
| 	import { chatId, modelfiles } from '$lib/stores'; | 	import { chatId, modelfiles } from '$lib/stores'; | ||||||
| 	import { copyToClipboard } from '$lib/utils'; | 	import { copyToClipboard } from '$lib/utils'; | ||||||
| 
 | 
 | ||||||
|  | @ -28,6 +28,7 @@ | ||||||
| 
 | 
 | ||||||
| 		toast.success($i18n.t('Copied shared conversation URL to clipboard!')); | 		toast.success($i18n.t('Copied shared conversation URL to clipboard!')); | ||||||
| 		copyToClipboard(chatShareUrl); | 		copyToClipboard(chatShareUrl); | ||||||
|  | 		chat = await getChatById(localStorage.token, $chatId); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	const shareChat = async () => { | 	const shareChat = async () => { | ||||||
|  | @ -78,6 +79,7 @@ | ||||||
| 
 | 
 | ||||||
| 	onMount(async () => { | 	onMount(async () => { | ||||||
| 		chat = await getChatById(localStorage.token, $chatId); | 		chat = await getChatById(localStorage.token, $chatId); | ||||||
|  | 		console.log(chat); | ||||||
| 	}); | 	}); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  | @ -105,53 +107,77 @@ | ||||||
| 		</div> | 		</div> | ||||||
| 		<hr class=" dark:border-gray-800" /> | 		<hr class=" dark:border-gray-800" /> | ||||||
| 
 | 
 | ||||||
| 		<div class="px-4 pt-4 pb-5 w-full flex flex-col justify-center"> | 		{#if chat} | ||||||
| 			<div class=" text-sm dark:text-gray-300 mb-1"> | 			<div class="px-4 pt-4 pb-5 w-full flex flex-col justify-center"> | ||||||
| 				Messages you send after creating your link won't be shared. Anyone with the URL will be able | 				<div class=" text-sm dark:text-gray-300 mb-1"> | ||||||
| 				to view the shared chat. | 					{#if chat.share_id} | ||||||
| 			</div> | 						<a href="/s/{chat.share_id}" target="_blank" | ||||||
|  | 							>You have shared this chat <span class=" underline">before</span>.</a | ||||||
|  | 						> | ||||||
|  | 						Click here to | ||||||
|  | 						<button | ||||||
|  | 							class="underline" | ||||||
|  | 							on:click={async () => { | ||||||
|  | 								const res = await deleteSharedChatById(localStorage.token, $chatId); | ||||||
| 
 | 
 | ||||||
| 			<div class="flex justify-end"> | 								if (res) { | ||||||
| 				<div class="flex flex-col items-end space-x-1 mt-1.5"> | 									chat = await getChatById(localStorage.token, $chatId); | ||||||
| 					<div class="flex gap-1"> | 								} | ||||||
| 						<button | 							}}>delete this link</button | ||||||
| 							class=" self-center px-3.5 py-2 rounded-xl text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-white" | 						> and create a new shared link. | ||||||
| 							type="button" | 					{:else} | ||||||
| 							on:click={() => { | 						Messages you send after creating your link won't be shared. Anyone with the URL will be | ||||||
| 								shareChat(); | 						able to view the shared chat. | ||||||
| 								show = false; | 					{/if} | ||||||
| 							}} | 				</div> | ||||||
| 						> |  | ||||||
| 							{$i18n.t('Share to OpenWebUI Community')} |  | ||||||
| 						</button> |  | ||||||
| 
 | 
 | ||||||
| 						<button | 				<div class="flex justify-end"> | ||||||
| 							class=" self-center flex items-center gap-1 px-3.5 py-2 rounded-xl text-sm font-medium bg-emerald-600 hover:bg-emerald-500 text-white" | 					<div class="flex flex-col items-end space-x-1 mt-1.5"> | ||||||
| 							type="button" | 						<div class="flex gap-1"> | ||||||
| 							on:click={() => { | 							<button | ||||||
| 								shareLocalChat(); | 								class=" self-center px-3.5 py-2 rounded-xl text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-white" | ||||||
| 								show = false; | 								type="button" | ||||||
| 							}} | 								on:click={() => { | ||||||
| 						> | 									shareChat(); | ||||||
| 							<Link /> | 									show = false; | ||||||
| 							{$i18n.t('Copy Link')} | 								}} | ||||||
| 						</button> | 							> | ||||||
| 					</div> | 								{$i18n.t('Share to OpenWebUI Community')} | ||||||
| 					<div class="flex gap-1 mt-1.5"> | 							</button> | ||||||
| 						<div class=" self-center text-gray-400 text-xs font-medium">{$i18n.t('or')}</div> | 
 | ||||||
| 						<button | 							<button | ||||||
| 							class=" text-right rounded-full text-xs font-medium text-gray-700 dark:text-gray-500 underline" | 								class=" self-center flex items-center gap-1 px-3.5 py-2 rounded-xl text-sm font-medium bg-emerald-600 hover:bg-emerald-500 text-white" | ||||||
| 							type="button" | 								type="button" | ||||||
| 							on:click={() => { | 								on:click={() => { | ||||||
| 								downloadChat(); | 									shareLocalChat(); | ||||||
| 								show = false; | 									show = false; | ||||||
| 							}} | 								}} | ||||||
| 						> | 							> | ||||||
| 							{$i18n.t('Download as a File')} | 								<Link /> | ||||||
| 						</button> | 
 | ||||||
|  | 								{#if chat.share_id} | ||||||
|  | 									{$i18n.t('Update and Copy Link')} | ||||||
|  | 								{:else} | ||||||
|  | 									{$i18n.t('Copy Link')} | ||||||
|  | 								{/if} | ||||||
|  | 							</button> | ||||||
|  | 						</div> | ||||||
|  | 						<div class="flex gap-1 mt-1.5"> | ||||||
|  | 							<div class=" self-center text-gray-400 text-xs font-medium">{$i18n.t('or')}</div> | ||||||
|  | 							<button | ||||||
|  | 								class=" text-right rounded-full text-xs font-medium text-gray-700 dark:text-gray-500 underline" | ||||||
|  | 								type="button" | ||||||
|  | 								on:click={() => { | ||||||
|  | 									downloadChat(); | ||||||
|  | 									show = false; | ||||||
|  | 								}} | ||||||
|  | 							> | ||||||
|  | 								{$i18n.t('Download as a File')} | ||||||
|  | 							</button> | ||||||
|  | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		{/if} | ||||||
| 	</div> | 	</div> | ||||||
| </Modal> | </Modal> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek