Merge pull request #16 from kleo-dev/caching

Message caching with last message
This commit is contained in:
Klesti Selimaj
2025-10-15 11:51:48 +02:00
committed by GitHub
4 changed files with 18 additions and 12 deletions
+2 -2
View File
@@ -16,13 +16,13 @@ export default function DMs() {
const { id } = useParams<{ id: string }>(); const { id } = useParams<{ id: string }>();
const wsRef = useRef<WebSocket | null>(null); const wsRef = useRef<WebSocket | null>(null);
const messages = useMessages((s) => s.messages); const messages = useMessages((s) => s.messages);
const setMessages = useMessages((s) => s.setMessages); const addMessage = useMessages((s) => s.addMessage);
const [userList, setUserList] = useState<StringMap<UserProfile>>({}); const [userList, setUserList] = useState<StringMap<UserProfile>>({});
const [user, setUser] = useState<UserProfile | undefined>(); const [user, setUser] = useState<UserProfile | undefined>();
return ( return (
<AppSidebar <AppSidebar
setMessages={setMessages} addMessage={addMessage}
wsRef={wsRef} wsRef={wsRef}
userList={userList} userList={userList}
setUserList={setUserList} setUserList={setUserList}
+2 -2
View File
@@ -13,14 +13,14 @@ export default function Chat() {
const wsRef = useRef<WebSocket | null>(null); const wsRef = useRef<WebSocket | null>(null);
const [userList, setUserList] = useState<StringMap<UserProfile>>({}); const [userList, setUserList] = useState<StringMap<UserProfile>>({});
const messages = useMessages((s) => s.messages); const messages = useMessages((s) => s.messages);
const setMessages = useMessages((s) => s.setMessages); const addMessage = useMessages((s) => s.addMessage);
return ( return (
<AppSidebar <AppSidebar
wsRef={wsRef} wsRef={wsRef}
userList={userList} userList={userList}
setUserList={setUserList} setUserList={setUserList}
setMessages={setMessages} addMessage={addMessage}
messages={messages} messages={messages}
> >
<Card className="bg-background w-full"> <Card className="bg-background w-full">
+11 -5
View File
@@ -8,26 +8,32 @@ import { Message, Server as ServerType } from "@/types/types";
import { UserProfile } from "@/hooks/get-user"; import { UserProfile } from "@/hooks/get-user";
import { StringMap } from "@/types/typeUtils"; import { StringMap } from "@/types/typeUtils";
import auth from "@/lib/auth"; import auth from "@/lib/auth";
import { useMessages } from "@/hooks/use-messages";
export default function Server() { export default function Server() {
const { ip } = useParams<{ ip: string }>(); const { ip } = useParams<{ ip: string }>();
const wsServerRef = useRef<WebSocket | null>(null); const wsServerRef = useRef<WebSocket | null>(null);
const wsNodeRef = useRef<WebSocket | null>(null); const wsNodeRef = useRef<WebSocket | null>(null);
const [server, setServer] = useState<undefined | ServerType>(); const [server, setServer] = useState<undefined | ServerType>();
const [messages, setMessages] = useState<Message[]>([]);
const [userList, setUserList] = useState<StringMap<UserProfile>>({}); const [userList, setUserList] = useState<StringMap<UserProfile>>({});
const messages = useMessages((s) => s.messages);
const addMessage = useMessages((s) => s.addMessage);
useEffect(() => { useEffect(() => {
if (!ip) return; if (!ip) return;
auth(ip, wsServerRef, setServer, setMessages, (m) => { auth(
setMessages((prev) => [...prev, m]); ip,
}); wsServerRef,
setServer,
(ms) => ms.forEach(addMessage),
addMessage
);
}, [ip]); }, [ip]);
return ( return (
<AppSidebar <AppSidebar
wsRef={wsNodeRef} wsRef={wsNodeRef}
setMessages={setMessages} addMessage={() => {}}
userList={userList} userList={userList}
setUserList={setUserList} setUserList={setUserList}
server={server} server={server}
+3 -3
View File
@@ -40,15 +40,15 @@ export default function AppSidebar({
children, children,
chatWith, chatWith,
wsRef, wsRef,
setMessages,
onNewMessage, onNewMessage,
setUser, setUser,
server, server,
messages, messages,
addMessage,
}: Readonly<{ }: Readonly<{
wsRef: React.RefObject<WebSocket | null>; wsRef: React.RefObject<WebSocket | null>;
addMessage: (msg: Message) => void;
messages?: Message[]; messages?: Message[];
setMessages: (m: Message[]) => void;
onNewMessage?: (msg: Message) => void; onNewMessage?: (msg: Message) => void;
userList: StringMap<UserProfile>; userList: StringMap<UserProfile>;
setUserList: React.Dispatch<React.SetStateAction<StringMap<UserProfile>>>; setUserList: React.Dispatch<React.SetStateAction<StringMap<UserProfile>>>;
@@ -79,7 +79,7 @@ export default function AppSidebar({
user?.node_address, user?.node_address,
wsRef, wsRef,
() => {}, () => {},
setMessages, (ms) => ms.forEach(addMessage),
(m) => { (m) => {
if (m.from !== chatWith && m.from !== user.id) if (m.from !== chatWith && m.from !== user.id)
toast( toast(