diff --git a/src/components/nostr/kinds/BaseEventRenderer.tsx b/src/components/nostr/kinds/BaseEventRenderer.tsx index 5f2a420..05fb9e8 100644 --- a/src/components/nostr/kinds/BaseEventRenderer.tsx +++ b/src/components/nostr/kinds/BaseEventRenderer.tsx @@ -10,7 +10,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; -import { Menu, Copy, Check, FileJson, ExternalLink } from "lucide-react"; +import { Menu, Copy, Check, FileJson, ExternalLink, Reply } from "lucide-react"; import { useGrimoire } from "@/core/state"; import { useCopy } from "@/hooks/useCopy"; import { JsonViewer } from "@/components/JsonViewer"; @@ -21,6 +21,9 @@ import { getSeenRelays } from "applesauce-core/helpers/relays"; import { EventFooter } from "@/components/EventFooter"; import { cn } from "@/lib/utils"; import { isAddressableKind } from "@/lib/nostr-kinds"; +import { ComposeDialog } from "@/components/compose"; +import { use$ } from "applesauce-react/hooks"; +import accountManager from "@/services/accounts"; /** * Universal event properties and utilities shared across all kind renderers @@ -101,9 +104,11 @@ function ReplyPreview({ * Event menu - universal actions for any event */ export function EventMenu({ event }: { event: NostrEvent }) { + const account = use$(accountManager.active$); const { addWindow } = useGrimoire(); const { copy, copied } = useCopy(); const [jsonDialogOpen, setJsonDialogOpen] = useState(false); + const [showReply, setShowReply] = useState(false); const openEventDetail = () => { let pointer; @@ -181,6 +186,12 @@ export function EventMenu({ event }: { event: NostrEvent }) { Open + {account && ( + setShowReply(true)}> + + Reply + + )} {copied ? ( @@ -201,6 +212,12 @@ export function EventMenu({ event }: { event: NostrEvent }) { onOpenChange={setJsonDialogOpen} title={`Event ${event.id.slice(0, 8)}... - Raw JSON`} /> + ); } diff --git a/src/components/nostr/user-menu.tsx b/src/components/nostr/user-menu.tsx index f6dd4ed..2e4fc89 100644 --- a/src/components/nostr/user-menu.tsx +++ b/src/components/nostr/user-menu.tsx @@ -1,4 +1,4 @@ -import { User } from "lucide-react"; +import { User, PenSquare } from "lucide-react"; import accounts from "@/services/accounts"; import { useProfile } from "@/hooks/useProfile"; import { use$ } from "applesauce-react/hooks"; @@ -19,6 +19,7 @@ import Nip05 from "./nip05"; import { RelayLink } from "./RelayLink"; import SettingsDialog from "@/components/SettingsDialog"; import LoginDialog from "./LoginDialog"; +import { ComposeDialog } from "@/components/compose"; import { useState } from "react"; function UserAvatar({ pubkey }: { pubkey: string }) { @@ -56,6 +57,7 @@ export default function UserMenu() { const relays = state.activeAccount?.relays; const [showSettings, setShowSettings] = useState(false); const [showLogin, setShowLogin] = useState(false); + const [showCompose, setShowCompose] = useState(false); function openProfile() { if (!account?.pubkey) return; @@ -75,6 +77,11 @@ export default function UserMenu() { <> +