Fixed a few bugs

This commit is contained in:
2025-12-23 18:15:27 +01:00
parent 7ee8a14dfa
commit 67acee4b72
3 changed files with 72 additions and 52 deletions
+23 -18
View File
@@ -9,6 +9,7 @@ import auth from "@/lib/auth";
import useAsync from "@/hooks/use-async";
import { Button } from "@/components/ui/button";
import useIndicators from "@/hooks/use-indicators";
import { useEffectOnceWhenReady } from "@/hooks/use-once";
export default function DMs() {
const { id } = useParams<{ id: string }>();
@@ -18,25 +19,29 @@ export default function DMs() {
const router = useRouter();
const { indicators, addIndicator } = useIndicators();
useEffect(() => {
async function connectTargetNode() {
if (!target) return;
auth({
id: target.node_address,
wsRef: targetNode,
messageStore: app.privateMessages,
onIndicator: addIndicator,
useEffectOnceWhenReady(
() => {
async function connectTargetNode() {
if (!target) return;
auth({
id: target.node_address,
wsRef: targetNode,
messageStore: app.privateMessages,
onIndicator: addIndicator,
});
}
connectTargetNode();
app.setCurrentChannel({
id: id,
name: target?.display_name || id,
kind: "text",
});
}
connectTargetNode();
app.setCurrentChannel({
id: id,
name: target?.display_name || id,
kind: "text",
});
}, [target]);
},
[target],
[(v) => v]
);
return loading || target ? (
<AppLayout app={app}>
+34 -27
View File
@@ -13,6 +13,7 @@ import SidebarServers from "./SidebarServers";
import SidebarDMs from "./SidebarDMs";
import SidebarChannels from "./SidebarChannels";
import DMItem from "./DMItem";
import { useEffectOnceWhenReady } from "@/hooks/use-once";
export default function AppLayout({
children,
@@ -28,36 +29,42 @@ export default function AppLayout({
const router = useRouter();
const isMobile = useIsMobile();
useEffect(() => {
if (!app.profile?.node_address) return;
useEffectOnceWhenReady(
() => {
if (!app.profile?.node_address) return;
auth({
id: app.profile.node_address,
wsRef: app.node,
onNewMessage: (m) => {
if (m.from !== chatWith && m.from !== app.profile?.id)
toast(
`New message from ${app.profiles[m.from]?.display_name || m.from}`,
{
description: m.contents.slice(0, 80),
action: {
label: "View",
onClick: () => router.push(`/chat/${m.from}`),
},
position: "top-right",
}
);
auth({
id: app.profile.node_address,
wsRef: app.node,
onNewMessage: (m) => {
if (m.from !== chatWith && m.from !== app.profile?.id)
toast(
`New message from ${
app.profiles[m.from]?.display_name || m.from
}`,
{
description: m.contents.slice(0, 80),
action: {
label: "View",
onClick: () => router.push(`/chat/${m.from}`),
},
position: "top-right",
}
);
if (onNewMessage) onNewMessage(m);
},
messageStore: app.privateMessages,
});
if (onNewMessage) onNewMessage(m);
},
messageStore: app.privateMessages,
});
app.setProfiles((prev) => {
if (app.profile) prev[app.profile.id] = app.profile;
return prev;
});
}, [chatWith, app.profile]);
app.setProfiles((prev) => {
if (app.profile) prev[app.profile.id] = app.profile;
return prev;
});
},
[chatWith, app.profile],
[undefined, undefined]
);
return (
<div className="flex h-svh md:h-screen">
+15 -7
View File
@@ -27,6 +27,7 @@ import {
} from "@/components/ui/context-menu";
import { ClientMessage, IndicatorContext } from "@/types/protocol";
import { AnimatePresence, motion } from "framer-motion";
import AsyncValue from "../AsyncValue";
function MessageContainer({
message,
@@ -429,13 +430,20 @@ export default function MessageBox({
exit={{ opacity: 0, y: -10 }}
transition={{ duration: 0.3 }}
>
{indicators
.map(
(indicator) =>
app.profiles[indicator.indicator.params.user_id]
?.display_name ?? null
)
.join(", ")}
<AsyncValue
func={async () =>
await Promise.all(
indicators.map((indicator) =>
app.getUserById(indicator.indicator.params.user_id)
)
)
}
render={({ value: indicators }) =>
indicators
?.map((indicator) => indicator?.display_name)
.join(", ")
}
/>
{indicators.length > 0 && " is typing"}
</motion.div>
)}