diff --git a/pkg/interface/src/views/apps/notifications/notification.tsx b/pkg/interface/src/views/apps/notifications/notification.tsx
index e8aba5616..b4691ddba 100644
--- a/pkg/interface/src/views/apps/notifications/notification.tsx
+++ b/pkg/interface/src/views/apps/notifications/notification.tsx
@@ -1,6 +1,6 @@
-import React, { ReactNode, useCallback, useMemo, useState } from 'react';
-import { Row, Box } from '@tlon/indigo-react';
-import _ from 'lodash';
+import React, { ReactNode, useCallback, useMemo, useState } from "react";
+import { Row, Box } from "@tlon/indigo-react";
+import _ from "lodash";
import {
GraphNotificationContents,
IndexedNotification,
@@ -9,16 +9,16 @@ import {
GroupNotificationsConfig,
Groups,
Associations,
- Contacts
-} from '@urbit/api';
-import GlobalApi from '~/logic/api/global';
-import { getParentIndex } from '~/logic/lib/notification';
-import { StatelessAsyncAction } from '~/views/components/StatelessAsyncAction';
-import { GroupNotification } from './group';
-import { GraphNotification } from './graph';
-import { BigInteger } from 'big-integer';
-import { useHovering } from '~/logic/lib/util';
-import useHarkState from '~/logic/state/hark';
+ Contacts,
+} from "@urbit/api";
+import GlobalApi from "~/logic/api/global";
+import { getParentIndex } from "~/logic/lib/notification";
+import { StatelessAsyncAction } from "~/views/components/StatelessAsyncAction";
+import { GroupNotification } from "./group";
+import { GraphNotification } from "./graph";
+import { BigInteger } from "big-integer";
+import { useHovering } from "~/logic/lib/util";
+import useHarkState from "~/logic/state/hark";
interface NotificationProps {
notification: IndexedNotification;
@@ -33,73 +33,107 @@ function getMuted(
graphs: NotificationGraphConfig
) {
const { index, notification } = idxNotif;
- if ('graph' in idxNotif.index) {
+ if ("graph" in idxNotif.index) {
const { graph } = idxNotif.index.graph;
- if(!('graph' in notification.contents)) {
+ if (!("graph" in notification.contents)) {
throw new Error();
}
const parent = getParentIndex(index.graph, notification.contents.graph);
- return _.findIndex(
- graphs?.watching || [],
- g => g.graph === graph && g.index === parent
- ) === -1;
+ return (
+ _.findIndex(
+ graphs?.watching || [],
+ (g) => g.graph === graph && g.index === parent
+ ) === -1
+ );
}
- if ('group' in index) {
- return _.findIndex(groups || [], g => g === index.group.group) === -1;
+ if ("group" in index) {
+ return _.findIndex(groups || [], (g) => g === index.group.group) === -1;
}
return false;
}
-function NotificationWrapper(props: {
+export function NotificationWrapper(props: {
api: GlobalApi;
- time: BigInteger;
- notif: IndexedNotification;
+ time?: BigInteger;
+ notification?: IndexedNotification;
children: ReactNode;
- archived: boolean;
}) {
- const { api, time, notif, children } = props;
+ const { api, time, notification, children } = props;
const onArchive = useCallback(async () => {
- return api.hark.archive(time, notif.index);
- }, [time, notif]);
+ if (!(time && notification)) {
+ return;
+ }
+ return api.hark.archive(time, notification.index);
+ }, [time, notification]);
- const groupConfig = useHarkState(state => state.notificationsGroupConfig);
- const graphConfig = useHarkState(state => state.notificationsGraphConfig);
+ const groupConfig = useHarkState((state) => state.notificationsGroupConfig);
+ const graphConfig = useHarkState((state) => state.notificationsGraphConfig);
- const isMuted = getMuted(
- notif,
- groupConfig,
- graphConfig
- );
+ const isMuted =
+ time && notification && getMuted(notification, groupConfig, graphConfig);
const onChangeMute = useCallback(async () => {
- const func = isMuted ? 'unmute' : 'mute';
- return api.hark[func](notif);
- }, [notif, api, isMuted]);
+ if (!notification) {
+ return;
+ }
+ const func = isMuted ? "unmute" : "mute";
+ return api.hark[func](notification);
+ }, [notification, api, isMuted]);
+
+ const onClick = () => {
+ if (!(time && notification) || notification.notification.read) {
+ return;
+ }
+ return api.hark.read(time, notification.index);
+ };
const { hovering, bind } = useHovering();
- const changeMuteDesc = isMuted ? 'Unmute' : 'Mute';
+ const changeMuteDesc = isMuted ? "Unmute" : "Mute";
return (
{children}
-
-
- {changeMuteDesc}
-
- {!props.archived && (
-
- Dismiss
-
+
+ {time && notification && (
+ <>
+
+ {changeMuteDesc}
+
+
+ Dismiss
+
+ >
)}
@@ -110,23 +144,18 @@ export function Notification(props: NotificationProps) {
const { notification, associations, archived } = props;
const { read, contents, time } = notification.notification;
- const Wrapper = ({ children }) => (
-
- {children}
-
- );
+ const wrapperProps = {
+ notification,
+ time: props.time,
+ api: props.api,
+ };
- if ('graph' in notification.index) {
+ if ("graph" in notification.index) {
const index = notification.index.graph;
const c: GraphNotificationContents = (contents as any).graph;
return (
-
+
-
+
);
}
- if ('group' in notification.index) {
+ if ("group" in notification.index) {
const index = notification.index.group;
const c: GroupNotificationContents = (contents as any).group;
return (
-
+
-
+
);
}