Daniel Bohry 9 сар өмнө
parent
commit
2afc9687c7

+ 42 - 36
src/routes/profile/+page.svelte

@@ -8,7 +8,9 @@
 	let isLoading = true;
 	let isLoading = true;
 	let currency = 'USD';
 	let currency = 'USD';
 	let orderBy = 'total';
 	let orderBy = 'total';
-	let preferenceSaved = false;
+	let savePreferenceDisabled = true;
+	let hasChanges = false;
+	let saveMessage = '';
 
 
 	$: authentication.subscribe((value) => {
 	$: authentication.subscribe((value) => {
 		isAuthenticated = !!value;
 		isAuthenticated = !!value;
@@ -31,7 +33,7 @@
 			}
 			}
 
 
 			const defaultOrder = localStorage.getItem('defaultOrder');
 			const defaultOrder = localStorage.getItem('defaultOrder');
-			if(defaultOrder) {
+			if (defaultOrder) {
 				orderBy = defaultOrder;
 				orderBy = defaultOrder;
 			} else {
 			} else {
 				localStorage.setItem('defaultOrder', 'total');
 				localStorage.setItem('defaultOrder', 'total');
@@ -50,19 +52,25 @@
 
 
 	function updateCurrency(event) {
 	function updateCurrency(event) {
 		currency = event.target.value;
 		currency = event.target.value;
-		localStorage.setItem('defaultCurrency', currency);
-		showPreferenceSaved();
+		hasChanges = true;
+		savePreferenceDisabled = false;
 	}
 	}
 
 
 	function updateOrderBy(event) {
 	function updateOrderBy(event) {
 		orderBy = event.target.value;
 		orderBy = event.target.value;
-		localStorage.setItem('defaultOrder', orderBy);
-		showPreferenceSaved();
+		hasChanges = true;
+		savePreferenceDisabled = false;
 	}
 	}
 
 
-	function showPreferenceSaved() {
-		preferenceSaved = true;
-		setTimeout(() => (preferenceSaved = false), 1000);
+	function savePreferences() {
+		localStorage.setItem('defaultCurrency', currency);
+		localStorage.setItem('defaultOrder', orderBy);
+		savePreferenceDisabled = true;
+		saveMessage = 'Preferences saved successfully.';
+
+		setTimeout(() => {
+			saveMessage = '';
+		}, 2000);
 	}
 	}
 
 
 </script>
 </script>
@@ -77,7 +85,7 @@
 		<p>Loading...</p>
 		<p>Loading...</p>
 	{:else if isAuthenticated}
 	{:else if isAuthenticated}
 		<div class="profile-header">
 		<div class="profile-header">
-<!--			<p class="welcome-message">Logged in as <strong>{user.username}</strong></p>-->
+			<!--			<p class="welcome-message">Logged in as <strong>{user.username}</strong></p>-->
 		</div>
 		</div>
 
 
 		<div class="settings-card">
 		<div class="settings-card">
@@ -109,15 +117,14 @@
 				</select>
 				</select>
 			</div>
 			</div>
 
 
-			<div class="save-feedback">
-				<div in:fade out:fade class="saved-message" style="visibility: {preferenceSaved ? 'visible' : 'hidden'}">
-					✓ Preference saved
-				</div>
-			</div>
-
+			<button class="save-preferences" on:click={savePreferences} disabled={savePreferenceDisabled}>Save preferences
+			</button>
+			<button class="logout-button" on:click={logout}>Logout</button>
 		</div>
 		</div>
 
 
-		<button class="logout-button" on:click={logout}>Logout</button>
+		{#if saveMessage}
+			<div in:fade out:fade class="save-message">{saveMessage}</div>
+		{/if}
 
 
 	{/if}
 	{/if}
 </div>
 </div>
@@ -136,13 +143,7 @@
         margin-bottom: 1.5rem;
         margin-bottom: 1.5rem;
     }
     }
 
 
-    .welcome-message {
-        margin: 0;
-        font-size: 1.1rem;
-    }
-
-    .logout-button {
-        background-color: #f44336;
+    button {
         color: white;
         color: white;
         border: none;
         border: none;
         border-radius: 8px;
         border-radius: 8px;
@@ -150,6 +151,14 @@
         cursor: pointer;
         cursor: pointer;
     }
     }
 
 
+    .save-preferences {
+        background-color: #4caf50;
+    }
+
+    .logout-button {
+        background-color: #f44336;
+    }
+
     .logout-button:hover {
     .logout-button:hover {
         background-color: #d32f2f;
         background-color: #d32f2f;
     }
     }
@@ -177,7 +186,7 @@
     .settings-group label {
     .settings-group label {
         margin-bottom: 0.5rem;
         margin-bottom: 0.5rem;
         font-weight: 500;
         font-weight: 500;
-				width: 260px;
+        width: 260px;
     }
     }
 
 
     .form-control {
     .form-control {
@@ -189,22 +198,19 @@
         font-size: 1rem;
         font-size: 1rem;
     }
     }
 
 
-    .save-feedback {
+    button:disabled {
+        pointer-events: none;
+        opacity: 0.6;
+        cursor: not-allowed;
+    }
+
+    .save-message {
+				color: green;
         height: 2rem;
         height: 2rem;
         overflow: hidden;
         overflow: hidden;
         position: relative;
         position: relative;
         margin-top: 1rem;
         margin-top: 1rem;
     }
     }
 
 
-    .saved-message {
-        color: green;
-        font-size: 0.9rem;
-        line-height: 1.2;
-        position: absolute;
-        top: 0;
-        left: 0;
-        width: 100%;
-        text-align: left;
-    }
 
 
 </style>
 </style>