From b21e1aa690eaa48e5b4a5902eb058548e0fc932d Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 17 Oct 2025 16:32:25 +0200 Subject: [PATCH] Fixed freezing and small optimisation --- src/components/MessageBox.tsx | 26 ++++++-------------------- src/components/Sidebar.tsx | 31 ++++++++++++++++++------------- 2 files changed, 24 insertions(+), 33 deletions(-) diff --git a/src/components/MessageBox.tsx b/src/components/MessageBox.tsx index b846f7f..18c0019 100644 --- a/src/components/MessageBox.tsx +++ b/src/components/MessageBox.tsx @@ -23,35 +23,21 @@ import { useIsMobile } from "@/hooks/use-mobile"; import { Textarea } from "./ui/textarea"; function MessageContainer({ message, app }: { message: Message; app: App }) { - useEffect(() => { - axios - .get("/api/profile/", { params: { id: message.from } }) - .then((res) => - app.setProfiles((prev) => ({ - ...prev, - [message.from]: res.data as UserProfile, - })) - ) - .catch(() => {}); - }, [message.from]); + const [profile, setProfile] = useState(); + + app.getUserById(message.from).then(setProfile); return (
{/*
*/}
- {app.profiles[message.from] - ? app.profiles[message.from]?.display_name - : message.from} + {profile?.display_name || message.from}

{isToday(message.timestamp * 1000) diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 0699d4c..6bfa638 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -8,7 +8,7 @@ import { Volume2Icon, } from "lucide-react"; import { Server, Channel, Message } from "@/types/types"; -import React, { useEffect, useRef, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import Cookies from "js-cookie"; import { Dialog, @@ -30,10 +30,8 @@ import { UserProfile } from "@/hooks/get-user"; import ProfilePicture from "./ProfilePicture"; import auth from "@/lib/auth"; import { toast } from "sonner"; -import { StringMap } from "@/types/typeUtils"; import SettingsDialog from "./settings/SettingsDialog"; import Link from "next/link"; -import { get, Response } from "@/lib/request"; import { cn } from "@/lib/utils"; import App from "@/types/app"; import { ProfileSettings } from "@/types/settings"; @@ -58,13 +56,15 @@ export default function AppSidebar({ const router = useRouter(); const [filteredDms, setFilteredDms] = useState([]); - const dms = Array.from( - new Set( - app.messages - ?.flatMap((item) => [item.from, item.channel_id]) - .filter((item) => item !== app.profile?.id) || [] - ) - ); + const dms = useMemo(() => { + return Array.from( + new Set( + app.messages + ?.flatMap((item) => [item.from, item.channel_id]) + .filter((item) => item !== app.profile?.id) || [] + ) + ); + }, [app.messages, app.profile?.id]); useEffect(() => { const load = async () => { @@ -79,11 +79,16 @@ export default function AppSidebar({ ); }; load(); - }, [dms]); + }, [dms, query]); useEffect(() => { - const s = Cookies.get("servers")?.split(","); - if (s) setServers(s.map((x) => x.trim().split("@") as [string, string])); + const stored = Cookies.get("servers"); + if (!stored) return; + const parsed = stored + .split(",") + .map((x) => x.trim().split("@")) + .filter(([ip, name]) => ip && name) as [string, string][]; + setServers(parsed); }, []); useEffect(() => {