Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions __tests__/components/waves/drops/WaveDropActions.test.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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",
Expand All @@ -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", () => {
Expand Down Expand Up @@ -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(
<WaveDropActions drop={baseDrop} activePartIndex={0} onReply={() => {}} />
Expand Down
52 changes: 39 additions & 13 deletions __tests__/components/waves/drops/WaveDropMobileMenu.test.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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", () => () => (
<div data-testid="delete" />
));
Expand All @@ -40,10 +36,6 @@ jest.mock("@/components/waves/drops/WaveDropActionsAddReaction", () => () => (
jest.mock("@/components/waves/drops/WaveDropActionsQuickReact", () => () => (
<div data-testid="quick-react" />
));
jest.mock(
"@/components/waves/drops/WaveDropActionsToggleLinkPreview",
() => () => <div data-testid="toggle-link-preview" />
);
jest.mock(
"@/components/utils/select/dropdown/CommonDropdownItemsMobileWrapper",
() => (props: any) =>
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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();
});

Expand Down Expand Up @@ -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(
<AuthContext.Provider
value={
{
connectedProfile: { handle: "alice" },
activeProfileProxy: null,
} as any
}
>
<WaveDropMobileMenu
drop={drop}
isOpen
showReplyAndQuote
longPressTriggered={false}
setOpen={jest.fn()}
onReply={jest.fn()}
onAddReaction={jest.fn()}
/>
</AuthContext.Provider>
);

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,
Expand Down
15 changes: 9 additions & 6 deletions components/waves/drops/WaveDropActions.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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;
Comment thread
prxt6529 marked this conversation as resolved.

// Hide voting for participation drops in memes waves
const shouldShowVoting =
Expand All @@ -60,7 +61,9 @@ export default function WaveDropActions({
>
<div className="tw-flex tw-items-center tw-gap-x-2">
<div className="tw-flex tw-h-9 tw-items-center tw-gap-x-0.5 tw-rounded-xl tw-bg-iron-950 tw-px-1 tw-shadow-md tw-shadow-black/20 tw-ring-1 tw-ring-inset tw-ring-iron-700/40">
{isConnected ? (
{showGuestCopyOnly ? (
<WaveDropActionsCopyLink drop={drop} />
) : (
<>
<WaveDropActionsQuickReact drop={drop} />
<WaveDropActionsAddReaction drop={drop} />
Expand All @@ -78,11 +81,11 @@ export default function WaveDropActions({
onOpenChange={setIsMoreDropdownOpen}
/>
</>
) : (
<WaveDropActionsCopyLink drop={drop} />
)}
</div>
{isConnected && shouldShowVoting && <WaveDropActionsRate drop={drop} />}
{!showGuestCopyOnly && shouldShowVoting && (
<WaveDropActionsRate drop={drop} />
)}
</div>
</div>
);
Expand Down
5 changes: 2 additions & 3 deletions components/waves/drops/WaveDropMobileMenu.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -51,7 +50,6 @@ const WaveDropMobileMenu: FC<WaveDropMobileMenuProps> = ({
showCopyOption = true,
}) => {
const { connectedProfile, activeProfileProxy } = useContext(AuthContext);
const { isConnected } = useSeizeConnectContext();
const { isMemesWave } = useSeizeSettings();
const isTemporaryDrop = drop.id.startsWith("temp-");
const { canDelete, canSetPinnedDrop } = useDropInteractionRules(drop);
Expand Down Expand Up @@ -134,6 +132,7 @@ const WaveDropMobileMenu: FC<WaveDropMobileMenuProps> = ({
}, [connectedProfile, activeProfileProxy, drop.id, drop.author.handle]);

const closeMenu = () => setOpen(false);
const showGuestCopyOnly = !connectedProfile?.handle;

return createPortal(
<CommonDropdownItemsMobileWrapper isOpen={isOpen} setOpen={setOpen}>
Expand All @@ -142,7 +141,7 @@ const WaveDropMobileMenu: FC<WaveDropMobileMenuProps> = ({
longPressTriggered && "tw-select-none"
}`}
>
{!isConnected ? (
{showGuestCopyOnly ? (
showCopyOption && (
<button
className={`tw-flex tw-items-center tw-gap-x-4 tw-rounded-xl tw-border-0 tw-bg-iron-950 tw-p-4 ${
Expand Down
Loading