Fixed a few bugs
This commit is contained in:
@@ -9,6 +9,7 @@ import auth from "@/lib/auth";
|
|||||||
import useAsync from "@/hooks/use-async";
|
import useAsync from "@/hooks/use-async";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import useIndicators from "@/hooks/use-indicators";
|
import useIndicators from "@/hooks/use-indicators";
|
||||||
|
import { useEffectOnceWhenReady } from "@/hooks/use-once";
|
||||||
|
|
||||||
export default function DMs() {
|
export default function DMs() {
|
||||||
const { id } = useParams<{ id: string }>();
|
const { id } = useParams<{ id: string }>();
|
||||||
@@ -18,7 +19,8 @@ export default function DMs() {
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { indicators, addIndicator } = useIndicators();
|
const { indicators, addIndicator } = useIndicators();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffectOnceWhenReady(
|
||||||
|
() => {
|
||||||
async function connectTargetNode() {
|
async function connectTargetNode() {
|
||||||
if (!target) return;
|
if (!target) return;
|
||||||
auth({
|
auth({
|
||||||
@@ -36,7 +38,10 @@ export default function DMs() {
|
|||||||
name: target?.display_name || id,
|
name: target?.display_name || id,
|
||||||
kind: "text",
|
kind: "text",
|
||||||
});
|
});
|
||||||
}, [target]);
|
},
|
||||||
|
[target],
|
||||||
|
[(v) => v]
|
||||||
|
);
|
||||||
|
|
||||||
return loading || target ? (
|
return loading || target ? (
|
||||||
<AppLayout app={app}>
|
<AppLayout app={app}>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import SidebarServers from "./SidebarServers";
|
|||||||
import SidebarDMs from "./SidebarDMs";
|
import SidebarDMs from "./SidebarDMs";
|
||||||
import SidebarChannels from "./SidebarChannels";
|
import SidebarChannels from "./SidebarChannels";
|
||||||
import DMItem from "./DMItem";
|
import DMItem from "./DMItem";
|
||||||
|
import { useEffectOnceWhenReady } from "@/hooks/use-once";
|
||||||
|
|
||||||
export default function AppLayout({
|
export default function AppLayout({
|
||||||
children,
|
children,
|
||||||
@@ -28,7 +29,8 @@ export default function AppLayout({
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const isMobile = useIsMobile();
|
const isMobile = useIsMobile();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffectOnceWhenReady(
|
||||||
|
() => {
|
||||||
if (!app.profile?.node_address) return;
|
if (!app.profile?.node_address) return;
|
||||||
|
|
||||||
auth({
|
auth({
|
||||||
@@ -37,7 +39,9 @@ export default function AppLayout({
|
|||||||
onNewMessage: (m) => {
|
onNewMessage: (m) => {
|
||||||
if (m.from !== chatWith && m.from !== app.profile?.id)
|
if (m.from !== chatWith && m.from !== app.profile?.id)
|
||||||
toast(
|
toast(
|
||||||
`New message from ${app.profiles[m.from]?.display_name || m.from}`,
|
`New message from ${
|
||||||
|
app.profiles[m.from]?.display_name || m.from
|
||||||
|
}`,
|
||||||
{
|
{
|
||||||
description: m.contents.slice(0, 80),
|
description: m.contents.slice(0, 80),
|
||||||
action: {
|
action: {
|
||||||
@@ -57,7 +61,10 @@ export default function AppLayout({
|
|||||||
if (app.profile) prev[app.profile.id] = app.profile;
|
if (app.profile) prev[app.profile.id] = app.profile;
|
||||||
return prev;
|
return prev;
|
||||||
});
|
});
|
||||||
}, [chatWith, app.profile]);
|
},
|
||||||
|
[chatWith, app.profile],
|
||||||
|
[undefined, undefined]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-svh md:h-screen">
|
<div className="flex h-svh md:h-screen">
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import {
|
|||||||
} from "@/components/ui/context-menu";
|
} from "@/components/ui/context-menu";
|
||||||
import { ClientMessage, IndicatorContext } from "@/types/protocol";
|
import { ClientMessage, IndicatorContext } from "@/types/protocol";
|
||||||
import { AnimatePresence, motion } from "framer-motion";
|
import { AnimatePresence, motion } from "framer-motion";
|
||||||
|
import AsyncValue from "../AsyncValue";
|
||||||
|
|
||||||
function MessageContainer({
|
function MessageContainer({
|
||||||
message,
|
message,
|
||||||
@@ -429,13 +430,20 @@ export default function MessageBox({
|
|||||||
exit={{ opacity: 0, y: -10 }}
|
exit={{ opacity: 0, y: -10 }}
|
||||||
transition={{ duration: 0.3 }}
|
transition={{ duration: 0.3 }}
|
||||||
>
|
>
|
||||||
{indicators
|
<AsyncValue
|
||||||
.map(
|
func={async () =>
|
||||||
(indicator) =>
|
await Promise.all(
|
||||||
app.profiles[indicator.indicator.params.user_id]
|
indicators.map((indicator) =>
|
||||||
?.display_name ?? null
|
app.getUserById(indicator.indicator.params.user_id)
|
||||||
)
|
)
|
||||||
.join(", ")}
|
)
|
||||||
|
}
|
||||||
|
render={({ value: indicators }) =>
|
||||||
|
indicators
|
||||||
|
?.map((indicator) => indicator?.display_name)
|
||||||
|
.join(", ")
|
||||||
|
}
|
||||||
|
/>
|
||||||
{indicators.length > 0 && " is typing"}
|
{indicators.length > 0 && " is typing"}
|
||||||
</motion.div>
|
</motion.div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user