diff --git a/packages/web/src/components/PageComponents/Messages/MessageItem.tsx b/packages/web/src/components/PageComponents/Messages/MessageItem.tsx index acf89a63..c45e8f5d 100644 --- a/packages/web/src/components/PageComponents/Messages/MessageItem.tsx +++ b/packages/web/src/components/PageComponents/Messages/MessageItem.tsx @@ -1,4 +1,5 @@ import { Avatar } from "@components/UI/Avatar.tsx"; +import { Skeleton } from "@components/UI/Skeleton.tsx"; import { Tooltip, TooltipArrow, @@ -51,6 +52,26 @@ export const MessageItem = ({ message }: MessageItemProps) => { const { getNode, getMyNode } = useNodeDB(); const { t, i18n } = useTranslation("messages"); + const myNodeNum = useMemo(() => getMyNode()?.num, [getMyNode]); + + // Show loading state when myNodeNum is not yet available + if (myNodeNum === undefined) { + return ( +
  • +
    + +
    +
    + + +
    + +
    +
    +
  • + ); + } + const MESSAGE_STATUS_MAP = useMemo( (): Record => ({ [MessageState.Ack]: { @@ -96,8 +117,6 @@ export const MessageItem = ({ message }: MessageItemProps) => { return message.from != null ? getNode(message.from) : null; }, [getNode, message.from]); - const myNodeNum = useMemo(() => getMyNode().num, [getMyNode]); - const { displayName, shortName, isFavorite } = useMemo(() => { const userIdHex = message.from.toString(16).toUpperCase().padStart(2, "0"); const last4 = userIdHex.slice(-4); diff --git a/packages/web/src/components/UI/Skeleton.tsx b/packages/web/src/components/UI/Skeleton.tsx new file mode 100644 index 00000000..dc8e3744 --- /dev/null +++ b/packages/web/src/components/UI/Skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@core/utils/cn.ts"; + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
    + ); +} + +export { Skeleton };