import { useMemo } from 'react'; import { HotKeys } from 'react-hotkeys'; import { navigateToProfile } from 'mastodon/actions/accounts'; import { mentionComposeById } from 'mastodon/actions/compose'; import type { NotificationGroup as NotificationGroupModel } from 'mastodon/models/notification_group'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; import { NotificationAdminReport } from './notification_admin_report'; import { NotificationAdminSignUp } from './notification_admin_sign_up'; import { NotificationFavourite } from './notification_favourite'; import { NotificationFollow } from './notification_follow'; import { NotificationFollowRequest } from './notification_follow_request'; import { NotificationMention } from './notification_mention'; import { NotificationModerationWarning } from './notification_moderation_warning'; import { NotificationPoll } from './notification_poll'; import { NotificationReblog } from './notification_reblog'; import { NotificationSeveredRelationships } from './notification_severed_relationships'; import { NotificationStatus } from './notification_status'; import { NotificationUpdate } from './notification_update'; export const NotificationGroup: React.FC<{ notificationGroupId: NotificationGroupModel['group_key']; unread: boolean; onMoveUp: (groupId: string) => void; onMoveDown: (groupId: string) => void; }> = ({ notificationGroupId, unread, onMoveUp, onMoveDown }) => { const notificationGroup = useAppSelector((state) => state.notificationGroups.groups.find( (item) => item.type !== 'gap' && item.group_key === notificationGroupId, ), ); const dispatch = useAppDispatch(); const accountId = notificationGroup?.type === 'gap' ? undefined : notificationGroup?.sampleAccountIds[0]; const handlers = useMemo( () => ({ moveUp: () => { onMoveUp(notificationGroupId); }, moveDown: () => { onMoveDown(notificationGroupId); }, openProfile: () => { if (accountId) dispatch(navigateToProfile(accountId)); }, mention: () => { if (accountId) dispatch(mentionComposeById(accountId)); }, }), [dispatch, notificationGroupId, accountId, onMoveUp, onMoveDown], ); if (!notificationGroup || notificationGroup.type === 'gap') return null; let content; switch (notificationGroup.type) { case 'reblog': content = ( ); break; case 'favourite': content = ( ); break; case 'severed_relationships': content = ( ); break; case 'mention': content = ( ); break; case 'follow': content = ( ); break; case 'follow_request': content = ( ); break; case 'poll': content = ( ); break; case 'status': content = ( ); break; case 'update': content = ( ); break; case 'admin.sign_up': content = ( ); break; case 'admin.report': content = ( ); break; case 'moderation_warning': content = ( ); break; default: return null; } return {content}; };