Ver Fonte

feat: changelog modal auto popup

Timothy J. Baek há 1 ano atrás
pai
commit
05aea9edf9

+ 8 - 3
src/lib/components/ChangelogModal.svelte

@@ -1,10 +1,14 @@
 <script lang="ts">
-	import Modal from './common/Modal.svelte';
+	import { onMount } from 'svelte';
 	import { Confetti } from 'svelte-confetti';
+
+	import { config } from '$lib/stores';
+
 	import { WEBUI_NAME, WEB_UI_VERSION } from '$lib/constants';
-	import { onMount } from 'svelte';
 	import { getChangelog } from '$lib/apis';
 
+	import Modal from './common/Modal.svelte';
+
 	export let show = false;
 
 	let changelog = null;
@@ -79,11 +83,12 @@
 		<div class="flex justify-end pt-3 text-sm font-medium">
 			<button
 				on:click={() => {
+					localStorage.version = $config.version;
 					show = false;
 				}}
 				class=" px-4 py-2 bg-emerald-600 hover:bg-emerald-700 text-gray-100 transition rounded"
 			>
-				<span class="relative">Ok, let's go!</span>
+				<span class="relative">Okay, Let's Go!</span>
 			</button>
 		</div>
 	</div>

+ 2 - 2
src/lib/components/common/Modal.svelte

@@ -35,13 +35,13 @@
 	<!-- svelte-ignore a11y-no-static-element-interactions -->
 	<div
 		class=" fixed top-0 right-0 left-0 bottom-0 bg-black/60 w-full min-h-screen h-screen flex justify-center z-50 overflow-hidden overscroll-contain"
-		transition:fade={{ duration: 50 }}
+		in:fade={{ duration: 10 }}
 	>
 		<div
 			class=" modal-content m-auto rounded-xl max-w-full {sizeToWidth(
 				size
 			)} mx-2 bg-gray-50 dark:bg-gray-900 shadow-3xl"
-			transition:fade={{ duration: 50 }}
+			in:fade={{ duration: 10 }}
 			on:click={(e) => {
 				e.stopPropagation();
 			}}

+ 1 - 1
src/lib/components/layout/Sidebar.svelte

@@ -563,7 +563,7 @@
 						<div
 							id="dropdownDots"
 							class="absolute z-40 bottom-[70px] 4.5rem rounded-lg shadow w-[240px] bg-gray-900"
-							transition:slide={{ duration: 300 }}
+							in:slide={{ duration: 150 }}
 						>
 							<div class="py-2 w-full">
 								{#if $user.role === 'admin'}

+ 1 - 0
src/lib/stores/index.ts

@@ -32,3 +32,4 @@ export const documents = writable([
 
 export const settings = writable({});
 export const showSettings = writable(false);
+export const showChangelog = writable(false);

+ 12 - 10
src/routes/(app)/+layout.svelte

@@ -1,17 +1,18 @@
 <script lang="ts">
 	import toast from 'svelte-french-toast';
 	import { openDB, deleteDB } from 'idb';
-	import { onMount, tick } from 'svelte';
-	import { goto } from '$app/navigation';
-
 	import fileSaver from 'file-saver';
 	const { saveAs } = fileSaver;
 
+	import { onMount, tick } from 'svelte';
+	import { goto } from '$app/navigation';
+
 	import { getOllamaModels, getOllamaVersion } from '$lib/apis/ollama';
 	import { getModelfiles } from '$lib/apis/modelfiles';
 	import { getPrompts } from '$lib/apis/prompts';
-
 	import { getOpenAIModels } from '$lib/apis/openai';
+	import { getDocs } from '$lib/apis/documents';
+	import { getAllChatTags } from '$lib/apis/chats';
 
 	import {
 		user,
@@ -21,16 +22,16 @@
 		modelfiles,
 		prompts,
 		documents,
-		tags
+		tags,
+		showChangelog,
+		config
 	} from '$lib/stores';
 	import { REQUIRED_OLLAMA_VERSION, WEBUI_API_BASE_URL } from '$lib/constants';
+	import { checkVersion } from '$lib/utils';
 
 	import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
 	import Sidebar from '$lib/components/layout/Sidebar.svelte';
-	import { checkVersion } from '$lib/utils';
 	import ShortcutsModal from '$lib/components/chat/ShortcutsModal.svelte';
-	import { getDocs } from '$lib/apis/documents';
-	import { getAllChatTags } from '$lib/apis/chats';
 	import ChangelogModal from '$lib/components/ChangelogModal.svelte';
 
 	let ollamaVersion = '';
@@ -183,6 +184,8 @@
 				}
 			});
 
+			showChangelog.set(localStorage.version !== $config.version);
+
 			await tick();
 		}
 
@@ -349,8 +352,6 @@
 					</div>
 				</div>
 			</div>
-		{:else}
-			<ChangelogModal show={true} />
 		{/if}
 
 		<div
@@ -358,6 +359,7 @@
 		>
 			<Sidebar />
 			<SettingsModal bind:show={$showSettings} />
+			<ChangelogModal bind:show={$showChangelog} />
 			<slot />
 		</div>
 	</div>