From a90f06218126547a1e3c681515895c8f0efbd3d3 Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 21:53:25 +0200 Subject: [PATCH 01/28] refactor: move the homepage to /me from / --- layouts/client.vue | 2 +- pages/index.vue | 16 ++-------------- pages/me/index.vue | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 pages/me/index.vue diff --git a/layouts/client.vue b/layouts/client.vue index 966e60a..de1e029 100644 --- a/layouts/client.vue +++ b/layouts/client.vue @@ -10,7 +10,7 @@
- +
diff --git a/pages/index.vue b/pages/index.vue index 41deadf..cb5f57e 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,23 +1,11 @@ + + \ No newline at end of file From b1a3ce9b00977c4bf74af610f944c885eb2ef719 Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:18:28 +0200 Subject: [PATCH 02/28] feat: update interface to include friends_since --- types/interfaces.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/types/interfaces.ts b/types/interfaces.ts index 610d007..7b9a97b 100644 --- a/types/interfaces.ts +++ b/types/interfaces.ts @@ -61,7 +61,8 @@ export interface UserResponse { pronouns: string | null, about: string | null, email?: string, - email_verified?: boolean + email_verified?: boolean, + friends_since: string | null, } export interface StatsResponse { From 8a9ecaa2e2ead30576367a2bd275c70edeb1da19 Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:44:18 +0200 Subject: [PATCH 03/28] refactor: move spacer into it's own component --- components/VerticalSpacer.vue | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 components/VerticalSpacer.vue diff --git a/components/VerticalSpacer.vue b/components/VerticalSpacer.vue new file mode 100644 index 0000000..293e9f0 --- /dev/null +++ b/components/VerticalSpacer.vue @@ -0,0 +1,21 @@ + + + + + From 5dbf21b0abb975d98ae1e825fd6edaf01fab36dc Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:44:46 +0200 Subject: [PATCH 04/28] feat: implement friends list --- components/DirectMessagesSidebar.vue | 38 ++++++++++++++++++++++++++++ components/UserEntry.vue | 35 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 components/DirectMessagesSidebar.vue create mode 100644 components/UserEntry.vue diff --git a/components/DirectMessagesSidebar.vue b/components/DirectMessagesSidebar.vue new file mode 100644 index 0000000..d9f677d --- /dev/null +++ b/components/DirectMessagesSidebar.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/components/UserEntry.vue b/components/UserEntry.vue new file mode 100644 index 0000000..dcea368 --- /dev/null +++ b/components/UserEntry.vue @@ -0,0 +1,35 @@ + + + + + From 15e5a21277f487174f66dcc6113edf2aae2265bd Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:47:52 +0200 Subject: [PATCH 05/28] refactor: try sorting components into sub-folders --- components/{ => Guild}/Channel.vue | 0 components/{ => Member}/MemberEntry.vue | 0 components/{ => Popups}/CropPopup.vue | 0 components/{ => Popups}/InvitePopup.vue | 0 components/{ => Popups}/Loading.vue | 0 components/{ => User}/UserEntry.vue | 0 components/{ => User}/UserPopup.vue | 0 components/UserArea.vue | 20 ------------------- components/{ => UserInterface}/Button.vue | 0 .../{ => UserInterface}/VerticalSpacer.vue | 0 10 files changed, 20 deletions(-) rename components/{ => Guild}/Channel.vue (100%) rename components/{ => Member}/MemberEntry.vue (100%) rename components/{ => Popups}/CropPopup.vue (100%) rename components/{ => Popups}/InvitePopup.vue (100%) rename components/{ => Popups}/Loading.vue (100%) rename components/{ => User}/UserEntry.vue (100%) rename components/{ => User}/UserPopup.vue (100%) delete mode 100644 components/UserArea.vue rename components/{ => UserInterface}/Button.vue (100%) rename components/{ => UserInterface}/VerticalSpacer.vue (100%) diff --git a/components/Channel.vue b/components/Guild/Channel.vue similarity index 100% rename from components/Channel.vue rename to components/Guild/Channel.vue diff --git a/components/MemberEntry.vue b/components/Member/MemberEntry.vue similarity index 100% rename from components/MemberEntry.vue rename to components/Member/MemberEntry.vue diff --git a/components/CropPopup.vue b/components/Popups/CropPopup.vue similarity index 100% rename from components/CropPopup.vue rename to components/Popups/CropPopup.vue diff --git a/components/InvitePopup.vue b/components/Popups/InvitePopup.vue similarity index 100% rename from components/InvitePopup.vue rename to components/Popups/InvitePopup.vue diff --git a/components/Loading.vue b/components/Popups/Loading.vue similarity index 100% rename from components/Loading.vue rename to components/Popups/Loading.vue diff --git a/components/UserEntry.vue b/components/User/UserEntry.vue similarity index 100% rename from components/UserEntry.vue rename to components/User/UserEntry.vue diff --git a/components/UserPopup.vue b/components/User/UserPopup.vue similarity index 100% rename from components/UserPopup.vue rename to components/User/UserPopup.vue diff --git a/components/UserArea.vue b/components/UserArea.vue deleted file mode 100644 index d922c3f..0000000 --- a/components/UserArea.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/Button.vue b/components/UserInterface/Button.vue similarity index 100% rename from components/Button.vue rename to components/UserInterface/Button.vue diff --git a/components/VerticalSpacer.vue b/components/UserInterface/VerticalSpacer.vue similarity index 100% rename from components/VerticalSpacer.vue rename to components/UserInterface/VerticalSpacer.vue From 59000709fe5f3ae0c3b7f3254870481094e90da2 Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:51:14 +0200 Subject: [PATCH 06/28] feat: update api --- composables/api.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/composables/api.ts b/composables/api.ts index d2ca7a0..8a37a8e 100644 --- a/composables/api.ts +++ b/composables/api.ts @@ -1,4 +1,4 @@ -import type { ChannelResponse, GuildMemberResponse, GuildResponse, MessageResponse, StatsResponse } from "~/types/interfaces"; +import type { ChannelResponse, GuildMemberResponse, GuildResponse, MessageResponse, StatsResponse, UserResponse } from "~/types/interfaces"; export const useApi = () => { async function fetchGuilds(): Promise { @@ -24,14 +24,18 @@ export const useApi = () => { async function fetchMember(guildId: string, memberId: string): Promise { return await fetchWithApi(`/guilds/${guildId}/members/${memberId}`); } - + async function fetchUsers() { return await fetchWithApi(`/users`); } - + async function fetchUser(userId: string) { return await fetchWithApi(`/users/${userId}`); } + + async function fetchFriends(): Promise { + return await fetchWithApi('/me/friends') + } async function fetchMessages(channelId: string, options?: { amount?: number, offset?: number }): Promise { return await fetchWithApi(`/channels/${channelId}/messages`, { query: { amount: options?.amount ?? 100, offset: options?.offset ?? 0 } }); @@ -59,6 +63,7 @@ export const useApi = () => { fetchMember, fetchUsers, fetchUser, + fetchFriends, fetchMessages, fetchMessage, fetchInstanceStats, From 8e69dc805e20e5feab0493b9b9aafac5a23f3c57 Mon Sep 17 00:00:00 2001 From: JustTemmie <47639983+JustTemmie@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:51:56 +0200 Subject: [PATCH 07/28] chore: remove unused popups --- components/Member/MemberEntry.vue | 1 - components/Settings/UserSettings/Account.vue | 1 - components/Settings/UserSettings/Privacy.vue | 1 - pages/servers/[serverId]/channels/[channelId].vue | 1 - 4 files changed, 4 deletions(-) diff --git a/components/Member/MemberEntry.vue b/components/Member/MemberEntry.vue index ed4cd48..1ea4170 100644 --- a/components/Member/MemberEntry.vue +++ b/components/Member/MemberEntry.vue @@ -10,7 +10,6 @@ \ No newline at end of file diff --git a/components/User/UserEntry.vue b/components/User/UserEntry.vue index dcea368..b463759 100644 --- a/components/User/UserEntry.vue +++ b/components/User/UserEntry.vue @@ -24,7 +24,12 @@ const props = defineProps<{ margin-bottom: .5em; gap: .5em; - cursor: pointer; + text-decoration: none; + color: inherit; +} + +.user-item:hover { + background-color: #00000020 } .user-avatar { diff --git a/components/UserInterface/VerticalSpacer.vue b/components/UserInterface/VerticalSpacer.vue index 293e9f0..8ac1bd6 100644 --- a/components/UserInterface/VerticalSpacer.vue +++ b/components/UserInterface/VerticalSpacer.vue @@ -2,15 +2,6 @@ - - \ No newline at end of file diff --git a/components/DirectMessagesSidebar.vue b/components/Me/DirectMessagesSidebar.vue similarity index 73% rename from components/DirectMessagesSidebar.vue rename to components/Me/DirectMessagesSidebar.vue index dece975..5a0e99d 100644 --- a/components/DirectMessagesSidebar.vue +++ b/components/Me/DirectMessagesSidebar.vue @@ -5,24 +5,24 @@

Direct Messages

+ Friends +
- + :href="`/me/${user.uuid}`"/>
+ + \ No newline at end of file diff --git a/composables/api.ts b/composables/api.ts index 8a37a8e..0cd6db0 100644 --- a/composables/api.ts +++ b/composables/api.ts @@ -37,6 +37,14 @@ export const useApi = () => { return await fetchWithApi('/me/friends') } + async function addFriend(username: string): Promise { + await fetchWithApi('/me/friends', { method: "POST", body: { username } }); + } + + async function removeFriend(userId: string): Promise { + await fetchWithApi(`/me/friends/${userId}`, { method: "DELETE" }); + } + async function fetchMessages(channelId: string, options?: { amount?: number, offset?: number }): Promise { return await fetchWithApi(`/channels/${channelId}/messages`, { query: { amount: options?.amount ?? 100, offset: options?.offset ?? 0 } }); } @@ -64,6 +72,8 @@ export const useApi = () => { fetchUsers, fetchUser, fetchFriends, + addFriend, + removeFriend, fetchMessages, fetchMessage, fetchInstanceStats, diff --git a/pages/me/[userId].vue b/pages/me/[userId].vue new file mode 100644 index 0000000..d466938 --- /dev/null +++ b/pages/me/[userId].vue @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/pages/me/friends.vue b/pages/me/friends.vue new file mode 100644 index 0000000..b284658 --- /dev/null +++ b/pages/me/friends.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/pages/me/index.vue b/pages/me/index.vue index 701481d..b075668 100644 --- a/pages/me/index.vue +++ b/pages/me/index.vue @@ -5,6 +5,8 @@ \ No newline at end of file From 890fbebbe9f3dd91d37ff605b1fc95aeaee1a2cc Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Sat, 12 Jul 2025 18:58:09 +0200 Subject: [PATCH 22/28] feat: use