Message caching with last message
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user