Преглед на файлове

improve save preferences feedback

Daniel Bohry преди 9 месеца
родител
ревизия
4556af8226
променени са 1 файла, в които са добавени 21 реда и са изтрити 17 реда
  1. 21 17
      src/routes/profile/+page.svelte

+ 21 - 17
src/routes/profile/+page.svelte

@@ -9,9 +9,8 @@
 	let currency = 'USD';
 	let orderBy = 'total';
 	let savePreferenceDisabled = true;
-	let hasChanges = false;
-	let saveMessage = '';
 	let theme = 'light';
+	let isSaving = false;
 
 	$: authentication.subscribe((value) => {
 		isAuthenticated = !!value;
@@ -66,33 +65,31 @@
 
 	function updateCurrency(event) {
 		currency = event.target.value;
-		hasChanges = true;
 		savePreferenceDisabled = false;
 	}
 
 	function updateOrderBy(event) {
 		orderBy = event.target.value;
-		hasChanges = true;
 		savePreferenceDisabled = false;
 	}
 
 	function savePreferences() {
+		isSaving = true;
+
 		localStorage.setItem('defaultCurrency', currency);
 		localStorage.setItem('defaultOrder', orderBy);
 		localStorage.setItem('theme', theme);
 		applyTheme(theme);
 
 		savePreferenceDisabled = true;
-		saveMessage = 'Preferences saved successfully.';
 
 		setTimeout(() => {
-			saveMessage = '';
-		}, 2000);
+			isSaving = false;
+		}, 500);
 	}
 
 	function updateTheme(event) {
 		theme = event.target.value;
-		hasChanges = true;
 		savePreferenceDisabled = false;
 	}
 
@@ -161,12 +158,25 @@
 
 			<div class="flex flex-col sm:flex-row sm:justify-between gap-3 pt-4">
 				<button
-					class="bg-blue-500 hover:bg-blue-600 text-white px-5 py-2 rounded-lg transition"
+					class="bg-blue-500 hover:bg-blue-600 text-white px-5 py-2 rounded-lg transition flex items-center justify-center gap-2"
 					on:click={savePreferences}
-					disabled={savePreferenceDisabled}
+					disabled={savePreferenceDisabled || isSaving}
 				>
-					Save preferences
+					<div class="relative min-w-[160px] flex items-center justify-center gap-2">
+						<svg
+							xmlns="http://www.w3.org/2000/svg"
+							fill="none"
+							viewBox="0 0 24 24"
+							class={`animate-spin h-5 w-5 text-white ${!isSaving ? 'hidden' : ''}`}
+						>
+							<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" />
+							<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" />
+						</svg>
+						<span class={isSaving ? 'hidden' : ''}>Save preferences</span>
+						<span class={isSaving ? '' : 'hidden'}>Saving...</span>
+					</div>
 				</button>
+
 				<button
 					class="bg-red-500 hover:bg-red-600 text-white px-5 py-2 rounded-lg transition"
 					on:click={logout}
@@ -175,11 +185,5 @@
 				</button>
 			</div>
 		</div>
-
-		{#if saveMessage}
-			<div in:fade out:fade class="mt-4 text-center text-green-600 dark:text-green-400 font-medium">
-				{saveMessage}
-			</div>
-		{/if}
 	{/if}
 </div>