From 5af3ddb9721007e2e3e5a2703e036b9a10f58ebf Mon Sep 17 00:00:00 2001 From: eiiko6 Date: Mon, 19 Jan 2026 10:58:02 +0100 Subject: [PATCH] added user profiles --- package.json | 4 +- src-tauri/tauri.conf.json | 2 +- src/api/friends.ts | 11 ++ src/components/MessageList.vue | 36 +++- src/components/UserProfileModal.vue | 256 ++++++++++++++++++++++++++++ src/locales/en.ftl | 11 +- src/locales/fr.ftl | 11 +- src/main.ts | 8 +- src/pages/FriendListPage.vue | 58 +++++-- src/themes.json | 12 +- 10 files changed, 378 insertions(+), 31 deletions(-) create mode 100644 src/components/UserProfileModal.vue diff --git a/package.json b/package.json index 18bdf03..e2f3bc0 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "frangipane-client", "private": true, - "version": "1.0.0", - "backendVersion": "1.0.3", + "version": "1.0.1", + "backendVersion": "1.0.4", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index f6f46f4..d1e85c4 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "frangipane", - "version": "1.0.0", + "version": "1.0.1", "identifier": "com.strawberries.frangipane", "build": { "beforeDevCommand": "yarn dev", diff --git a/src/api/friends.ts b/src/api/friends.ts index 2cace51..88c02a9 100644 --- a/src/api/friends.ts +++ b/src/api/friends.ts @@ -29,3 +29,14 @@ export function declineFriendRequest(senderUuid: string) { body: JSON.stringify({ sender_uuid: senderUuid }), }) } + +export function checkIsFriend(targetUuid: string) { + return apiFetch(`/friends/check/${targetUuid}`) +} + +export function removeFriend(friendUuid: string) { + return apiFetch('/friends/remove', { + method: 'POST', + body: JSON.stringify({ friend_uuid: friendUuid }), + }) +} diff --git a/src/components/MessageList.vue b/src/components/MessageList.vue index d80fbb4..7cba4f0 100644 --- a/src/components/MessageList.vue +++ b/src/components/MessageList.vue @@ -2,13 +2,19 @@
  • - -
    {{ m.sender }}
    + +
    + {{ m.sender }} +
    {{ m.sent_at }}
    {{ m.content }}
+ + diff --git a/src/locales/en.ftl b/src/locales/en.ftl index ba6972b..7d4e071 100644 --- a/src/locales/en.ftl +++ b/src/locales/en.ftl @@ -52,6 +52,15 @@ chat-create-submit = Create chat-connecting = Connecting to room... chat-connecting-failed = Could not connect. Check internet connection. +## User profile +profile-title = User profile +profile-add-friend = Add Friend +profile-remove-friend = Remove Friend +profile-remove-friend-confirm = Are you sure you want to remove this friend? +profile-request-sent = Request sent +profile-username = Username +profile-userid = User ID + ## Friends page friends-title = Your friends friends-add-title = Add Friend @@ -102,7 +111,7 @@ settings-error-upload-avatar-failed-upload = Failed to upload image ## Warning warning-wrongversion-title = Wrong app version -warning-wrongversion-message = The backend expects version {$expectedBackendVersion} while your version of the app ({$appVersion}) supports backend version {$backendVersion}. Please update to avoid potential issues. +warning-wrongversion-message = The backend expects version {$backendVersion} while your version of the app ({$appVersion}) supports backend version {$expectedBackendVersion}. Please update to avoid potential issues. warning-wrongversion-dismiss = I know what I'm doing ## Shared diff --git a/src/locales/fr.ftl b/src/locales/fr.ftl index 6b49f84..01045ec 100644 --- a/src/locales/fr.ftl +++ b/src/locales/fr.ftl @@ -52,6 +52,15 @@ chat-create-submit = Créer chat-connecting = Connexion au salon... chat-connecting-failed = Impossible d'établir la connexion. Vérifiez votre internet. +## User profile +profile-title = Profil d'utilisateur +profile-add-friend = Ajouter en ami +profile-remove-friend = Retirer l'ami +profile-remove-friend-confirm = Etes-vous sûr de vouloir retirer cet ami ? +profile-request-sent = Requête envoyée +profile-username = Nom d'utilisateur +profile-userid = ID d'utilisateur + ## Friends page friends-title = Vos amis friends-add-title = Ajouter un ami @@ -100,7 +109,7 @@ settings-error-upload-avatar-failed-upload = Erreur d'envoi de l'image ## Warning warning-wrongversion-title = Mauvaise version de l'application -warning-wrongversion-message = Le backend attend la version {$expectedBackendVersion} alors que votre version de l'application ({$appVersion}) prend en charge la version {$backendVersion} du backend. Veuillez mettre à jour pour éviter d'éventuels problèmes. +warning-wrongversion-message = Le backend attend la version {$backendVersion} alors que votre version de l'application ({$appVersion}) prend en charge la version {$expectedBackendVersion} du backend. Veuillez mettre à jour pour éviter d'éventuels problèmes. warning-wrongversion-dismiss = Je sais ce que je fais ## Shared diff --git a/src/main.ts b/src/main.ts index dfdaece..bfcdfec 100644 --- a/src/main.ts +++ b/src/main.ts @@ -30,9 +30,9 @@ async function init() { init() -export const API = 'http://127.0.0.1:8080' +// export const API = 'http://127.0.0.1:8080' // export const API = 'http://192.168.1.183:8080' -// export const API = 'https://alatreon.org/frangipane' -export const API_WS = 'ws://127.0.0.1:8080/ws' +export const API = 'https://alatreon.org/frangipane' +// export const API_WS = 'ws://127.0.0.1:8080/ws' // export const API_WS = 'ws://192.168.1.183:8080/ws' -// export const API_WS = 'wss://alatreon.org/frangipane/ws' +export const API_WS = 'wss://alatreon.org/frangipane/ws' diff --git a/src/pages/FriendListPage.vue b/src/pages/FriendListPage.vue index 8af5cfc..db8cb3b 100644 --- a/src/pages/FriendListPage.vue +++ b/src/pages/FriendListPage.vue @@ -15,12 +15,16 @@

{{ $t('friends-list-header') }}

-
    -
  • - {{ friend.username }} -
  • -
+
+ +
+ + @@ -28,15 +32,29 @@ import { onMounted, ref } from 'vue' import { fetchFriends, sendFriendRequest } from '../api/friends' import type { Friend } from '../types' +import { getAvatarUrl } from '../store' +import defaultAvatar from '../assets/default-avatar.png' +import UserProfileModal from '../components/UserProfileModal.vue' const friends = ref([]) const username = ref('') const errorMessage = ref('') +const selectedFriend = ref(null) + onMounted(async () => { friends.value = await fetchFriends() }) +const openProfile = (friend: Friend) => { + selectedFriend.value = friend +} + +const handleAvatarError = (event: Event) => { + const img = event.target as HTMLImageElement; + img.src = defaultAvatar; +}; + async function send() { if (!username.value) { // errorMessage.value = 'Username is required.' @@ -106,21 +124,37 @@ async function send() { padding: 1rem; } -.friends-list ul { - list-style: none; - padding: 0; -} - -.friends-list li { +.friend { + width: 100%; + box-sizing: border-box; background: var(--panel-light); + color: var(--text); border: 1px solid var(--border); border-radius: var(--radius); - padding: 0.75rem 1rem; + /* padding: 0.75rem 1rem; */ margin-bottom: 0.5rem; + display: flex; + flex-direction: row; + align-items: center; + gap: 1.2rem; + margin: 0 0 0.5rem 0; } +.friend:hover p { + text-decoration: underline; +} + +/* .friend:hover { */ +/* background-color: var(--panel-hover); */ +/* } */ + .friends-list h2 { font-size: 1.25rem; margin-bottom: 1rem; } + +.avatar { + height: 42px; + width: 42px; +} diff --git a/src/themes.json b/src/themes.json index c8a4fb8..58ae7fe 100644 --- a/src/themes.json +++ b/src/themes.json @@ -42,9 +42,9 @@ "panel-hover": "#414559", "text": "#c6d0f5", "muted": "#838ba7", - "accent": "#a6d189", - "accent-rgb": "166, 209, 137", - "accent-hover": "#81c8be", + "accent": "#8caaee", + "accent-rgb": "140, 170, 238", + "accent-hover": "#85c1dc", "accent-second": "#f2d5cf", "border": "#414559", "error": "#e78284" @@ -76,9 +76,9 @@ "panel-hover": "#313244", "text": "#cdd6f4", "muted": "#7f849c", - "accent": "#89b4fa", - "accent-rgb": "137, 180, 250", - "accent-hover": "#89dceb", + "accent": "#a6e3a1", + "accent-rgb": "166, 227, 161", + "accent-hover": "#94e2d5", "accent-second": "#f5c2e7", "border": "#313244", "error": "#f38ba8"