From 1c90a0c85985f3e93959cbfa907d68cf2c03440b Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 10 Aug 2026 13:48:32 +0200 Subject: [PATCH] feat(status): make the set-status menu work feat(user): optimise get() function for react qol(todos): update todos --- apps/web/src/components/modals/basic.tsx | 8 +- apps/web/src/components/modals/profile.tsx | 15 +- apps/web/src/components/navbar.tsx | 9 + apps/web/src/components/sidebar.tsx | 35 +- apps/web/src/components/status-options.ts | 2 +- .../conversation/modal/conversation.tsx | 7 + .../call/src/components/buttons/invite.tsx | 1 + packages/call/src/components/invitePopup.tsx | 1 + packages/call/src/components/modals/base.tsx | 39 +- .../src/components/modals/contextMenu.tsx | 3 +- packages/call/src/components/popout.tsx | 29 +- packages/call/src/components/top.tsx | 101 +++-- packages/call/src/store.tsx | 10 +- packages/call/src/views/preview.tsx | 53 +-- packages/chat/src/components/media.tsx | 9 +- packages/chat/src/components/message.tsx | 21 +- packages/chat/src/components/replyBox.tsx | 9 +- packages/chat/src/context.tsx | 2 +- packages/chat/src/screen.tsx | 1 + packages/chat/todo.md | 1 + packages/notifications/src/context.tsx | 6 +- packages/notifications/todo.md | 2 - packages/settings/src/pages/profile.tsx | 51 ++- packages/shared/src/data.ts | 9 +- packages/storage/todo.md | 1 - packages/user/package.json | 1 + packages/user/src/context.tsx | 353 ++++++++++++++---- packages/user/src/selection.test.ts | 28 ++ packages/user/src/selection.ts | 40 ++ packages/user/src/wrapper.tsx | 51 ++- 30 files changed, 573 insertions(+), 325 deletions(-) create mode 100644 packages/user/src/selection.test.ts create mode 100644 packages/user/src/selection.ts diff --git a/apps/web/src/components/modals/basic.tsx b/apps/web/src/components/modals/basic.tsx index 46eaa45..dc4e48a 100644 --- a/apps/web/src/components/modals/basic.tsx +++ b/apps/web/src/components/modals/basic.tsx @@ -15,7 +15,10 @@ export function Basic({ user, extra, }: { - user: User; + user: Pick< + User, + "Display" | "Username" | "Avatar" | "OnlineStatus" | "Status" + >; extra?: React.ReactNode; }) { const display = user.Display || user.Username || "Unknown"; @@ -57,8 +60,9 @@ export function Basic({ -
+

{display}

+

{user.Status}

{extra}
diff --git a/apps/web/src/components/modals/profile.tsx b/apps/web/src/components/modals/profile.tsx index 6324ab5..a4bddb2 100644 --- a/apps/web/src/components/modals/profile.tsx +++ b/apps/web/src/components/modals/profile.tsx @@ -4,7 +4,20 @@ import { Text } from "@methanium/ui/markdown"; import { ChevronDown, ChevronUp } from "lucide-react"; import { useState } from "react"; -export default function Profile({ user }: { user: User }) { +export default function Profile({ + user, +}: { + user: Pick< + User, + | "UserId" + | "Display" + | "Username" + | "Avatar" + | "About" + | "IotaId" + | "PublicKey" + >; +}) { const [showAdvancedInformation, setShowAdvancedInformation] = useState(false); return ( diff --git a/apps/web/src/components/navbar.tsx b/apps/web/src/components/navbar.tsx index 6c86f96..2f1c115 100644 --- a/apps/web/src/components/navbar.tsx +++ b/apps/web/src/components/navbar.tsx @@ -91,6 +91,15 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { {pathname === "/chat" && id && ( isMobile ? (

{user?.Display}

diff --git a/apps/web/src/components/sidebar.tsx b/apps/web/src/components/sidebar.tsx index 7a7c58b..6c3de28 100644 --- a/apps/web/src/components/sidebar.tsx +++ b/apps/web/src/components/sidebar.tsx @@ -35,7 +35,7 @@ import SidebarBox from "@tensamin/call/sidebarBox"; import { useShowMobileNavbar } from "@/routes/app/useShowMobileNavbar"; import { Ellipsis, Check } from "lucide-react"; import { useState } from "react"; -import type { User } from "@tensamin/user/context"; +import { useUser, type User } from "@tensamin/user/context"; import { mtp, userPresencePreferenceSchema } from "@tensamin/shared/data"; import { useMTP } from "@tensamin/mtp"; import { @@ -64,7 +64,7 @@ function StatusDialog({ saveSucceeded, setSaveSucceeded, }: { - user: User; + user: Pick; open: boolean; onOpenChange: (open: boolean) => void; send: ReturnType["send"]; @@ -77,6 +77,8 @@ function StatusDialog({ saveSucceeded: boolean; setSaveSucceeded: (value: boolean) => void; }) { + const { updateProfile, updateState } = useUser(); + return ( Cancel} />
diff --git a/packages/call/src/components/buttons/invite.tsx b/packages/call/src/components/buttons/invite.tsx index b478529..d49a643 100644 --- a/packages/call/src/components/buttons/invite.tsx +++ b/packages/call/src/components/buttons/invite.tsx @@ -63,6 +63,7 @@ export default function InviteButton({ Loading...} component={(user) => (