diff --git a/__tests__/components/waves/drops/WaveDropActions.test.tsx b/__tests__/components/waves/drops/WaveDropActions.test.tsx index 9f0e950318..15a469f0a1 100644 --- a/__tests__/components/waves/drops/WaveDropActions.test.tsx +++ b/__tests__/components/waves/drops/WaveDropActions.test.tsx @@ -1,6 +1,6 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import { useSeizeConnectContext } from "@/components/auth/SeizeConnectContext"; +import { useAuth } from "@/components/auth/Auth"; import { useSeizeSettings } from "@/contexts/SeizeSettingsContext"; import { ApiDropType } from "@/generated/models/ApiDropType"; import WaveDropActions from "@/components/waves/drops/WaveDropActions"; @@ -61,12 +61,12 @@ jest.mock("@/contexts/SeizeSettingsContext", () => ({ useSeizeSettings: jest.fn(), })); -jest.mock("@/components/auth/SeizeConnectContext", () => ({ - useSeizeConnectContext: jest.fn(), +jest.mock("@/components/auth/Auth", () => ({ + useAuth: jest.fn(), })); const settingsMock = useSeizeSettings as jest.Mock; -const seizeConnectContextMock = useSeizeConnectContext as jest.Mock; +const authMock = useAuth as jest.Mock; const baseDrop: any = { id: "drop-1", @@ -77,7 +77,7 @@ const baseDrop: any = { describe("WaveDropActions", () => { beforeEach(() => { settingsMock.mockReturnValue({ isMemesWave: () => false }); - seizeConnectContextMock.mockReturnValue({ isConnected: true }); + authMock.mockReturnValue({ connectedProfile: { handle: "alice" } }); }); it("keeps hidden actions non-interactive while closed", () => { @@ -131,8 +131,8 @@ describe("WaveDropActions", () => { expect(screen.queryByTestId("rate")).toBeNull(); }); - it("shows only copy link when disconnected", () => { - seizeConnectContextMock.mockReturnValue({ isConnected: false }); + it("shows only copy link for guests", () => { + authMock.mockReturnValue({ connectedProfile: null }); render( {}} /> diff --git a/__tests__/components/waves/drops/WaveDropMobileMenu.test.tsx b/__tests__/components/waves/drops/WaveDropMobileMenu.test.tsx index 21c78b5816..3da5ea033e 100644 --- a/__tests__/components/waves/drops/WaveDropMobileMenu.test.tsx +++ b/__tests__/components/waves/drops/WaveDropMobileMenu.test.tsx @@ -1,5 +1,4 @@ import { AuthContext } from "@/components/auth/Auth"; -import { useSeizeConnectContext } from "@/components/auth/SeizeConnectContext"; import WaveDropMobileMenu from "@/components/waves/drops/WaveDropMobileMenu"; import { ApiDropType } from "@/generated/models/ApiDropType"; import { useDropInteractionRules } from "@/hooks/drops/useDropInteractionRules"; @@ -12,9 +11,6 @@ const writeText = jest.fn().mockResolvedValue(undefined); jest.mock("@/hooks/drops/useDropInteractionRules", () => ({ useDropInteractionRules: jest.fn(), })); -jest.mock("@/components/auth/SeizeConnectContext", () => ({ - useSeizeConnectContext: jest.fn(), -})); jest.mock("@/components/waves/drops/WaveDropMobileMenuDelete", () => () => (
)); @@ -40,10 +36,6 @@ jest.mock("@/components/waves/drops/WaveDropActionsAddReaction", () => () => ( jest.mock("@/components/waves/drops/WaveDropActionsQuickReact", () => () => (
)); -jest.mock( - "@/components/waves/drops/WaveDropActionsToggleLinkPreview", - () => () =>
-); jest.mock( "@/components/utils/select/dropdown/CommonDropdownItemsMobileWrapper", () => (props: any) => @@ -75,12 +67,10 @@ beforeAll(() => { }); const mockedUseDropInteractionRules = jest.mocked(useDropInteractionRules); -const mockedUseSeizeConnectContext = jest.mocked(useSeizeConnectContext); beforeEach(() => { writeText.mockClear(); mockIsMemesWave.mockReturnValue(false); - mockedUseSeizeConnectContext.mockReturnValue({ isConnected: true } as any); mockedUseDropInteractionRules.mockReturnValue({ canShowVote: true, canVote: true, @@ -194,7 +184,6 @@ test("hides follow and clap when author and memes wave", () => { ); expect(screen.queryByTestId("follow")).toBeNull(); expect(screen.queryByTestId("clap")).toBeNull(); - expect(screen.queryByTestId("toggle-link-preview")).toBeNull(); expect(screen.getByTestId("delete")).toBeInTheDocument(); }); @@ -289,9 +278,46 @@ test("does not show pinned-drop action in the mobile menu for non-admins", () => expect(screen.queryByTestId("set-pinned-drop")).toBeNull(); }); -test("shows only copy link in the mobile menu when disconnected", () => { - mockedUseSeizeConnectContext.mockReturnValue({ isConnected: false } as any); +test("shows full menu when a profile handle is present", () => { + const drop = { + id: "1", + serial_no: 1, + wave: { id: "w" }, + drop_type: ApiDropType.Chat, + author: { handle: "alice" }, + } as any; + + render( + + + + ); + + expect(screen.getByText("Copy link")).toBeInTheDocument(); + expect(screen.getByTestId("quick-react")).toBeInTheDocument(); + expect(screen.getByTestId("add-reaction")).toBeInTheDocument(); + expect(screen.getByText("Reply")).toBeInTheDocument(); + expect(screen.getByTestId("boost")).toBeInTheDocument(); + expect(screen.getByTestId("open")).toBeInTheDocument(); + expect(screen.getByTestId("delete")).toBeInTheDocument(); +}); +test("shows only copy link in the mobile menu for guests", () => { const drop = { id: "1", serial_no: 1, diff --git a/components/waves/drops/WaveDropActions.tsx b/components/waves/drops/WaveDropActions.tsx index f2976ee49b..7d585d47d5 100644 --- a/components/waves/drops/WaveDropActions.tsx +++ b/components/waves/drops/WaveDropActions.tsx @@ -1,6 +1,6 @@ "use client"; -import { useSeizeConnectContext } from "@/components/auth/SeizeConnectContext"; +import { useAuth } from "@/components/auth/Auth"; import { useCompactMode } from "@/contexts/CompactModeContext"; import { useSeizeSettings } from "@/contexts/SeizeSettingsContext"; import { ApiDropType } from "@/generated/models/ApiDropType"; @@ -33,9 +33,10 @@ export default function WaveDropActions({ suppressed = false, }: WaveDropActionsProps) { const { isMemesWave } = useSeizeSettings(); - const { isConnected } = useSeizeConnectContext(); + const { connectedProfile } = useAuth(); const compact = useCompactMode(); const [isMoreDropdownOpen, setIsMoreDropdownOpen] = useState(false); + const showGuestCopyOnly = !connectedProfile?.handle; // Hide voting for participation drops in memes waves const shouldShowVoting = @@ -60,7 +61,9 @@ export default function WaveDropActions({ >
- {isConnected ? ( + {showGuestCopyOnly ? ( + + ) : ( <> @@ -78,11 +81,11 @@ export default function WaveDropActions({ onOpenChange={setIsMoreDropdownOpen} /> - ) : ( - )}
- {isConnected && shouldShowVoting && } + {!showGuestCopyOnly && shouldShowVoting && ( + + )}
); diff --git a/components/waves/drops/WaveDropMobileMenu.tsx b/components/waves/drops/WaveDropMobileMenu.tsx index 1dadccec61..136f8482a7 100644 --- a/components/waves/drops/WaveDropMobileMenu.tsx +++ b/components/waves/drops/WaveDropMobileMenu.tsx @@ -1,7 +1,6 @@ "use client"; import { AuthContext } from "@/components/auth/Auth"; -import { useSeizeConnectContext } from "@/components/auth/SeizeConnectContext"; import CommonDropdownItemsMobileWrapper from "@/components/utils/select/dropdown/CommonDropdownItemsMobileWrapper"; import { useSeizeSettings } from "@/contexts/SeizeSettingsContext"; import type { ApiDrop } from "@/generated/models/ApiDrop"; @@ -51,7 +50,6 @@ const WaveDropMobileMenu: FC = ({ showCopyOption = true, }) => { const { connectedProfile, activeProfileProxy } = useContext(AuthContext); - const { isConnected } = useSeizeConnectContext(); const { isMemesWave } = useSeizeSettings(); const isTemporaryDrop = drop.id.startsWith("temp-"); const { canDelete, canSetPinnedDrop } = useDropInteractionRules(drop); @@ -134,6 +132,7 @@ const WaveDropMobileMenu: FC = ({ }, [connectedProfile, activeProfileProxy, drop.id, drop.author.handle]); const closeMenu = () => setOpen(false); + const showGuestCopyOnly = !connectedProfile?.handle; return createPortal( @@ -142,7 +141,7 @@ const WaveDropMobileMenu: FC = ({ longPressTriggered && "tw-select-none" }`} > - {!isConnected ? ( + {showGuestCopyOnly ? ( showCopyOption && (