diff --git a/app/components/UI/Notification/List/index.tsx b/app/components/UI/Notification/List/index.tsx index 9afeab5b0a16..9e282e45e6ec 100644 --- a/app/components/UI/Notification/List/index.tsx +++ b/app/components/UI/Notification/List/index.tsx @@ -157,11 +157,11 @@ export function NotificationsListItem(props: NotificationsListItemProps) { style={tw`gap-2`} > - + - ); diff --git a/app/components/UI/Notification/NotificationMenuItem/Content.test.tsx b/app/components/UI/Notification/NotificationMenuItem/Content.test.tsx index 870209563295..d1a39401a185 100644 --- a/app/components/UI/Notification/NotificationMenuItem/Content.test.tsx +++ b/app/components/UI/Notification/NotificationMenuItem/Content.test.tsx @@ -1,7 +1,7 @@ import React from 'react'; import renderWithProvider from '../../../../util/test/renderWithProvider'; -import NotificationContent from './Content'; +import NotificationContent, { TEST_IDS } from './Content'; describe('NotificationContent', () => { const title = 'Welcome to the new Test!'; @@ -15,6 +15,7 @@ describe('NotificationContent', () => { it('renders title and description', () => { const { getByText } = renderWithProvider( { expect(getByText(description.start)).toBeOnTheScreen(); expect(getByText(description.end)).toBeOnTheScreen(); }); + + it.each([ + { isRead: false, visible: true }, + { isRead: true, visible: false }, + ])( + 'renders unread indicator when isRead is $isRead', + ({ isRead, visible }) => { + const { queryByTestId } = renderWithProvider( + , + ); + + const unreadBadge = queryByTestId(TEST_IDS.UNREAD_BADGE); + + if (visible) { + expect(unreadBadge).toBeOnTheScreen(); + } else { + expect(unreadBadge).not.toBeOnTheScreen(); + } + }, + ); }); diff --git a/app/components/UI/Notification/NotificationMenuItem/Content.tsx b/app/components/UI/Notification/NotificationMenuItem/Content.tsx index 65cb0882e782..966434f1419a 100644 --- a/app/components/UI/Notification/NotificationMenuItem/Content.tsx +++ b/app/components/UI/Notification/NotificationMenuItem/Content.tsx @@ -1,5 +1,10 @@ import React from 'react'; import { View } from 'react-native'; +import { + BadgeStatus, + BadgeStatusStatus, +} from '@metamask/design-system-react-native'; +import { useTailwind } from '@metamask/design-system-twrnc-preset'; import Text, { TextColor, TextVariant, @@ -8,18 +13,23 @@ import { NotificationMenuItem } from '../../../../util/notifications/notificatio import useStyles from '../List/useStyles'; import { formatMenuItemDate } from '../../../../util/notifications/methods'; +export const TEST_IDS = { + UNREAD_BADGE: 'notification-menu-item-content:unread-badge', +}; + type NotificationContentProps = Pick< NotificationMenuItem, 'title' | 'description' | 'createdAt' ->; +> & { isRead: boolean }; function NotificationContent(props: NotificationContentProps) { const { styles } = useStyles(); + const tw = useTailwind(); return ( {/* Section 1 - Title + Timestamp */} - + {props.title} - - {formatMenuItemDate(new Date(props.createdAt))} - + + {!props.isRead && ( + + )} + + {formatMenuItemDate(new Date(props.createdAt))} + + {/* Section 2 - Left Desc + Right Desc */} diff --git a/app/components/UI/Notification/NotificationMenuItem/Icon.test.tsx b/app/components/UI/Notification/NotificationMenuItem/Icon.test.tsx index ec00bbfbe852..3bc045d7871f 100644 --- a/app/components/UI/Notification/NotificationMenuItem/Icon.test.tsx +++ b/app/components/UI/Notification/NotificationMenuItem/Icon.test.tsx @@ -30,7 +30,6 @@ describe('NotificationIcon', () => { ({ hasBadge, assertion }) => { const { getByTestId, queryByTestId } = renderWithProvider( , diff --git a/app/components/UI/Notification/NotificationMenuItem/Icon.tsx b/app/components/UI/Notification/NotificationMenuItem/Icon.tsx index 5d1638a3a0d0..79443e6b416e 100644 --- a/app/components/UI/Notification/NotificationMenuItem/Icon.tsx +++ b/app/components/UI/Notification/NotificationMenuItem/Icon.tsx @@ -1,11 +1,6 @@ import { View } from 'react-native'; import { Image } from 'expo-image'; -import { - BadgeIcon, - IconSize, - BadgeStatus, - BadgeStatusStatus, -} from '@metamask/design-system-react-native'; +import { BadgeIcon, IconSize } from '@metamask/design-system-react-native'; import { useTailwind } from '@metamask/design-system-twrnc-preset'; import { NotificationMenuItem } from '../../../../util/notifications/notification-states/types/NotificationMenuItem'; import React, { @@ -24,10 +19,7 @@ export const TEST_IDS = { ICON: 'notification-menu-item-icon:icon', }; -type NotificationIconProps = Pick< - NotificationMenuItem, - 'image' | 'badgeIcon' -> & { isRead: boolean }; +type NotificationIconProps = Pick; function MenuIcon(props: NotificationIconProps) { const tw = useTailwind(); @@ -56,7 +48,6 @@ function MenuIcon(props: NotificationIconProps) { } function NotificationIcon(props: NotificationIconProps) { - const tw = useTailwind(); const { styles } = useStyles(); const MaybeBadgeContainer: FC = useCallback( @@ -79,21 +70,11 @@ function NotificationIcon(props: NotificationIconProps) { [props.badgeIcon], ); - const statusStyle = useMemo( - () => (props.isRead ? tw`self-center opacity-0` : tw`self-center`), - [props.isRead, tw], - ); - return ( - - - - - - - - - + + + + ); }