From f71d1ff9acba9ea41fba41c2dbbca26045e0450a Mon Sep 17 00:00:00 2001 From: eiiko6 Date: Sat, 3 Jan 2026 19:46:31 +0100 Subject: [PATCH] added update profile modal, adjusted forms, and fixed account update in backend --- src/api/account.ts | 10 ++ src/authStore.ts | 14 ++- src/base.css | 22 ++++ src/components/InvitePeopleModal.vue | 7 +- src/components/RoomList.vue | 4 +- src/components/UpdateAccountModal.vue | 161 ++++++++++++++++++++++++++ src/pages/AccountPage.vue | 26 ++++- src/pages/FriendListPage.vue | 2 +- src/pages/LoginPage.vue | 13 ++- src/pages/NotificationsPage.vue | 2 +- src/pages/RegisterPage.vue | 21 +++- src/types.ts | 5 + 12 files changed, 270 insertions(+), 17 deletions(-) create mode 100644 src/api/account.ts create mode 100644 src/components/UpdateAccountModal.vue diff --git a/src/api/account.ts b/src/api/account.ts new file mode 100644 index 0000000..165093e --- /dev/null +++ b/src/api/account.ts @@ -0,0 +1,10 @@ +import { UpdateUserResponse } from '../types'; +import { apiFetch } from './client' +// import type { User } from '../types' + +export function updateAccount(username: string, email: string, password: string) { + return apiFetch('/account', { + method: 'PUT', + body: JSON.stringify({ username, email, password }), + }); +} diff --git a/src/authStore.ts b/src/authStore.ts index 01be67d..00eddf9 100644 --- a/src/authStore.ts +++ b/src/authStore.ts @@ -1,5 +1,5 @@ import { load, Store } from '@tauri-apps/plugin-store' -import { User } from './types' +import { UpdateUserResponse, User } from './types' let store: Store | null = null @@ -30,6 +30,18 @@ export async function clearAuthData() { await s.save() } +export async function updateLocalUser(newData: UpdateUserResponse, uuid?: string) { + const updatedUser = { + username: newData.username, + email: newData.email, + uuid + } + + const s = await getStore() + await s.set('user', updatedUser) + await s.save() +} + export async function setLastRoom(uuid: string) { if (!uuid || uuid === 'none') return const s = await getStore() diff --git a/src/base.css b/src/base.css index 291fbe1..5d7b302 100644 --- a/src/base.css +++ b/src/base.css @@ -24,6 +24,7 @@ body, --accent: #f27aa3; --accent-hover: #ff91b3; --border: #2a2f3b; + --error: #ff5050; --radius: 8px; } @@ -151,6 +152,27 @@ i:hover { outline: none; } +.input-group { + display: flex; + flex-direction: column; + gap: 0.3rem; +} + +.input-group label { + font-size: 0.8rem; + font-weight: 600; + color: var(--muted); +} + +.error-message { + color: var(--error); + font-size: 0.9rem; +} + +.modal { + margin: 30px; +} + @media (hover: hover) { i:hover { color: var(--text); diff --git a/src/components/InvitePeopleModal.vue b/src/components/InvitePeopleModal.vue index 7c8ffa8..0966fea 100644 --- a/src/components/InvitePeopleModal.vue +++ b/src/components/InvitePeopleModal.vue @@ -5,7 +5,10 @@

{{ errorMessage }}

- +
+ + +