diff --git a/__tests__/components/groups/page/list/card/GroupCard.test.tsx b/__tests__/components/groups/page/list/card/GroupCard.test.tsx index bf776d8c45..0aea0d5e03 100644 --- a/__tests__/components/groups/page/list/card/GroupCard.test.tsx +++ b/__tests__/components/groups/page/list/card/GroupCard.test.tsx @@ -1,5 +1,6 @@ import React from "react"; import { render, fireEvent } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; import GroupCard, { GroupCardState, } from "@/components/groups/page/list/card/GroupCard"; @@ -30,6 +31,10 @@ jest.mock( const push = jest.fn(); (useRouter as jest.Mock).mockReturnValue({ push }); +beforeEach(() => { + push.mockClear(); +}); + describe("GroupCard", () => { const group: any = { id: "g1", @@ -61,8 +66,30 @@ describe("GroupCard", () => { } it("navigates to community view when idle", () => { - renderComp(); - fireEvent.click(document.querySelector("div.tw-col-span-1")!); + const { getByRole } = renderComp(); + fireEvent.click(getByRole("button")); + expect(push).toHaveBeenCalledWith(`/network?page=1&group=${group.id}`); + }); + + it("navigates to community view when pressing Enter", async () => { + const user = userEvent.setup(); + const { getByRole } = renderComp(); + const button = getByRole("button"); + + button.focus(); + await user.keyboard("{Enter}"); + + expect(push).toHaveBeenCalledWith(`/network?page=1&group=${group.id}`); + }); + + it("navigates to community view when pressing Space", async () => { + const user = userEvent.setup(); + const { getByRole } = renderComp(); + const button = getByRole("button"); + + button.focus(); + await user.keyboard(" "); + expect(push).toHaveBeenCalledWith(`/network?page=1&group=${group.id}`); }); diff --git a/components/groups/page/list/card/GroupCard.tsx b/components/groups/page/list/card/GroupCard.tsx index f0ddd731ad..b12fab8371 100644 --- a/components/groups/page/list/card/GroupCard.tsx +++ b/components/groups/page/list/card/GroupCard.tsx @@ -105,29 +105,33 @@ export default function GroupCard({ ), }; - const goToCommunityView = () => { - if (state !== GroupCardState.IDLE) return; - router.push(`/network?page=1&group=${group?.id}`); - }; + const isIdle = state === GroupCardState.IDLE; + const cardLabel = + group?.name ?? titlePlaceholder ?? "View community group details"; return ( -
-
-
-
-
- {components[state]} +
+ {isIdle && ( + + )} +
+
+
+
+
+ {components[state]} +
); diff --git a/components/groups/page/list/card/GroupCardConfigs.tsx b/components/groups/page/list/card/GroupCardConfigs.tsx index 4db0505683..cf7a4001c8 100644 --- a/components/groups/page/list/card/GroupCardConfigs.tsx +++ b/components/groups/page/list/card/GroupCardConfigs.tsx @@ -203,7 +203,7 @@ export default function GroupCardConfigs({ scrollContainer("left"); }} aria-label="Scroll left" - className="tw-inline-flex tw-items-center tw-justify-center tw-group tw-absolute tw-top-0.5 tw-z-[5] tw-p-0 tw-h-7 tw-w-7 tw-left-0 tw-bg-iron-900 hover:tw-bg-iron-800 tw-ring-1 tw-ring-inset tw-ring-iron-650 tw-rounded-md tw-border-none tw-transition tw-duration-300 tw-ease-out"> + className="tw-inline-flex tw-items-center tw-justify-center tw-group tw-absolute tw-top-0.5 tw-z-[20] tw-p-0 tw-h-7 tw-w-7 tw-left-0 tw-bg-iron-900 hover:tw-bg-iron-800 tw-ring-1 tw-ring-inset tw-ring-iron-650 tw-rounded-md tw-border-none tw-transition tw-duration-300 tw-ease-out"> + className="tw-inline-flex tw-items-center tw-justify-center tw-group tw-absolute tw-top-0.5 tw-z-[20] tw-p-0 tw-h-7 tw-w-7 tw-right-0 tw-bg-iron-900 hover:tw-bg-iron-800 tw-ring-1 tw-ring-inset tw-ring-iron-650 tw-rounded-md tw-border-none tw-transition tw-duration-300 tw-ease-out"> + } tw-relative tw-z-20 tw-whitespace-nowrap tw-inline-flex tw-items-center tw-bg-iron-800 tw-border tw-border-solid tw-rounded-lg tw-px-3 tw-py-2 tw-text-sm tw-font-semibold tw-shadow-sm focus-visible:tw-outline focus-visible:tw-outline-2 focus-visible:tw-outline-offset-2 focus-visible:tw-outline-iron-700 tw-transition tw-duration-300 tw-ease-out`}> Rep all
diff --git a/components/groups/page/list/card/GroupCardHeader.tsx b/components/groups/page/list/card/GroupCardHeader.tsx index 678e8ddeaf..1d80d031a6 100644 --- a/components/groups/page/list/card/GroupCardHeader.tsx +++ b/components/groups/page/list/card/GroupCardHeader.tsx @@ -49,7 +49,7 @@ export default function GroupCardHeader({ ? `/${group?.created_by.handle ?? userPlaceholder}` : userPlaceholder ?? "" } - className="tw-no-underline hover:tw-underline tw-transition tw-duration-300 tw-ease-out tw-text-iron-50 hover:tw-text-iron-400"> + className="tw-relative tw-z-20 tw-no-underline hover:tw-underline tw-transition tw-duration-300 tw-ease-out tw-text-iron-50 hover:tw-text-iron-400"> {group?.created_by.handle ?? userPlaceholder} diff --git a/components/groups/page/list/card/actions/GroupCardEditActions.tsx b/components/groups/page/list/card/actions/GroupCardEditActions.tsx index cb9a2775be..26aec83495 100644 --- a/components/groups/page/list/card/actions/GroupCardEditActions.tsx +++ b/components/groups/page/list/card/actions/GroupCardEditActions.tsx @@ -40,7 +40,7 @@ export default function GroupCardEditActions({ useEffect(() => setEditTitle(getEditTitle()), [isMyFilter]); return ( -
+