From d38819ce9af4eadc2e08fe51d33a810befd2cc2a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 14 Jul 2023 15:40:59 +0100 Subject: [PATCH] Fix missing metaspace notification badges (#11269) * Fix missing metaspace notification badges * Simplify conditional types (cherry picked from commit cdffd1ca1f7b60334a8ca3bba64d0a4e6d2b68d0) --- .../views/spaces/SpaceTreeLevel.tsx | 14 ++++-- .../views/spaces/SpaceTreeLevel-test.tsx | 21 +++++++- .../SpaceTreeLevel-test.tsx.snap | 49 +++++++++++++++++++ 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 test/components/views/spaces/__snapshots__/SpaceTreeLevel-test.tsx.snap diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 72ed355ffa..9f66a290b9 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -65,7 +65,7 @@ interface IButtonProps extends Omit = ({ space, - spaceKey, + spaceKey: _spaceKey, className, selected, label, @@ -82,6 +82,8 @@ export const SpaceButton: React.FC = ({ const [onFocus, isActive] = useRovingTabIndex(handle); const tabIndex = isActive ? 0 : -1; + const spaceKey = _spaceKey ?? space?.roomId; + let avatar = (
@@ -92,16 +94,16 @@ export const SpaceButton: React.FC = ({ } let notifBadge; - if (space && notificationState) { + if (spaceKey && notificationState) { let ariaLabel = _t("Jump to first unread room."); - if (space.getMyMembership() === "invite") { + if (space?.getMyMembership() === "invite") { ariaLabel = _t("Jump to first invite."); } const jumpToNotification = (ev: MouseEvent): void => { ev.stopPropagation(); ev.preventDefault(); - SpaceStore.instance.setActiveRoomInSpace(spaceKey ?? space.roomId); + SpaceStore.instance.setActiveRoomInSpace(spaceKey); }; notifBadge = ( @@ -132,7 +134,9 @@ export const SpaceButton: React.FC = ({ const viewSpaceHome = (): void => // space is set here because of the assignment condition of onClick defaultDispatcher.dispatch({ action: Action.ViewRoom, room_id: space!.roomId }); - const activateSpace = (): void => SpaceStore.instance.setActiveSpace(spaceKey ?? space?.roomId ?? ""); + const activateSpace = (): void => { + if (spaceKey) SpaceStore.instance.setActiveSpace(spaceKey); + }; const onClick = props.onClick ?? (selected && space ? viewSpaceHome : activateSpace); return ( diff --git a/test/components/views/spaces/SpaceTreeLevel-test.tsx b/test/components/views/spaces/SpaceTreeLevel-test.tsx index a44a09dfd4..f28cf18d4f 100644 --- a/test/components/views/spaces/SpaceTreeLevel-test.tsx +++ b/test/components/views/spaces/SpaceTreeLevel-test.tsx @@ -17,7 +17,7 @@ limitations under the License. import React from "react"; import { fireEvent, getByTestId, render } from "@testing-library/react"; -import { stubClient, mkRoom } from "../../../test-utils"; +import { mkRoom, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; import DMRoomMap from "../../../../src/utils/DMRoomMap"; import defaultDispatcher from "../../../../src/dispatcher/dispatcher"; @@ -25,6 +25,8 @@ import { Action } from "../../../../src/dispatcher/actions"; import { SpaceButton } from "../../../../src/components/views/spaces/SpaceTreeLevel"; import { MetaSpace, SpaceKey } from "../../../../src/stores/spaces"; import SpaceStore from "../../../../src/stores/spaces/SpaceStore"; +import { StaticNotificationState } from "../../../../src/stores/notifications/StaticNotificationState"; +import { NotificationColor } from "../../../../src/stores/notifications/NotificationColor"; jest.mock("../../../../src/stores/spaces/SpaceStore", () => { // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -99,5 +101,22 @@ describe("SpaceButton", () => { // Re-activating the metaspace is a no-op expect(SpaceStore.instance.setActiveSpace).toHaveBeenCalledWith(MetaSpace.People); }); + + it("should render notificationState if one is provided", () => { + const notificationState = new StaticNotificationState(null, 8, NotificationColor.Grey); + + const { container, asFragment } = render( + , + ); + + expect(container.querySelector(".mx_NotificationBadge_count")).toHaveTextContent("8"); + expect(asFragment()).toMatchSnapshot(); + }); }); }); diff --git a/test/components/views/spaces/__snapshots__/SpaceTreeLevel-test.tsx.snap b/test/components/views/spaces/__snapshots__/SpaceTreeLevel-test.tsx.snap new file mode 100644 index 0000000000..427ba7016b --- /dev/null +++ b/test/components/views/spaces/__snapshots__/SpaceTreeLevel-test.tsx.snap @@ -0,0 +1,49 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SpaceButton metaspace should render notificationState if one is provided 1`] = ` + +
+
+
+
+
+
+
+
+ + 8 + +
+
+
+ + People + +
+
+ +`;