add broadcast event button

This commit is contained in:
hzrd149
2023-08-08 21:42:51 -05:00
parent 9b6c653779
commit b4d7d0c642

View File

@@ -1,8 +1,9 @@
import { useMemo, useRef } from "react";
import { import {
Button, Box,
Flex,
Table, Table,
TableContainer, TableContainer,
TableRowProps,
Tbody, Tbody,
Td, Td,
Text, Text,
@@ -11,18 +12,25 @@ import {
Tooltip, Tooltip,
Tr, Tr,
useColorMode, useColorMode,
useToast,
} from "@chakra-ui/react"; } from "@chakra-ui/react";
import { TimelineLoader } from "../../../classes/timeline-loader"; import { TimelineLoader } from "../../../classes/timeline-loader";
import useSubject from "../../../hooks/use-subject"; import useSubject from "../../../hooks/use-subject";
import { getEventRelays } from "../../../services/event-relays"; import { getEventRelays, handleEventFromRelay } from "../../../services/event-relays";
import { NostrEvent } from "../../../types/nostr-event"; import { NostrEvent } from "../../../types/nostr-event";
import { useMemo, useRef } from "react";
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer"; import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
import { RelayFavicon } from "../../relay-favicon"; import { RelayFavicon } from "../../relay-favicon";
import { NoteLink } from "../../note-link"; import { NoteLink } from "../../note-link";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { nostrPostAction } from "../../../classes/nostr-post-action";
import relayPoolService from "../../../services/relay-pool";
function EventRow({ event, relays }: { event: NostrEvent; relays: string[] }) { function EventRow({
event,
relays,
...props
}: { event: NostrEvent; relays: string[] } & Omit<TableRowProps, "children">) {
const toast = useToast();
const sub = useMemo(() => getEventRelays(event.id), [event.id]); const sub = useMemo(() => getEventRelays(event.id), [event.id]);
const seenRelays = useSubject(sub); const seenRelays = useSubject(sub);
@@ -33,8 +41,20 @@ function EventRow({ event, relays }: { event: NostrEvent; relays: string[] }) {
const yes = colorMode === "light" ? "green.200" : "green.800"; const yes = colorMode === "light" ? "green.200" : "green.800";
const no = colorMode === "light" ? "red.200" : "red.800"; const no = colorMode === "light" ? "red.200" : "red.800";
const broadcast = (relay: string) => {
const { results } = nostrPostAction([relay], event, 5000);
results.subscribe((result) => {
if (result.status) {
handleEventFromRelay(relayPoolService.requestRelay(result.url, false), event);
} else if (result.message) {
toast({ description: result.message, status: result.status ? "success" : "error" });
}
});
};
return ( return (
<Tr ref={ref}> <Tr ref={ref} {...props}>
<Td isTruncated p="2"> <Td isTruncated p="2">
{dayjs.unix(event.created_at).fromNow()} {dayjs.unix(event.created_at).fromNow()}
</Td> </Td>
@@ -47,7 +67,14 @@ function EventRow({ event, relays }: { event: NostrEvent; relays: string[] }) {
</Text> </Text>
</Td> </Td>
{relays.map((relay) => ( {relays.map((relay) => (
<Td key={relay} backgroundColor={seenRelays.includes(relay) ? yes : no} title={relay} p="2"> <Td
key={relay}
title={relay}
p="2"
backgroundColor={seenRelays.includes(relay) ? yes : no}
onClick={() => !seenRelays.includes(relay) && broadcast(relay)}
cursor={seenRelays.includes(relay) ? undefined : "pointer"}
>
<RelayFavicon relay={relay} size="2xs" /> <RelayFavicon relay={relay} size="2xs" />
</Td> </Td>
))} ))}
@@ -60,10 +87,6 @@ export default function TimelineHealth({ timeline }: { timeline: TimelineLoader
return ( return (
<> <>
<Flex gap="2">
{/* <Button>All Relays</Button> */}
{/* <Button>Repair feed</Button> */}
</Flex>
<TableContainer> <TableContainer>
<Table size="sm"> <Table size="sm">
<Thead> <Thead>
@@ -76,11 +99,13 @@ export default function TimelineHealth({ timeline }: { timeline: TimelineLoader
</Th> </Th>
<Th p="p">Content</Th> <Th p="p">Content</Th>
{timeline.relays.map((relay) => ( {timeline.relays.map((relay) => (
<Tooltip label={relay}> <Th key={relay} title={relay} w="0.1rem" p="0">
<Th title={relay} w="0.1rem" p="2"> <Tooltip label={relay}>
<RelayFavicon relay={relay} size="2xs" /> <Box p="2">
</Th> <RelayFavicon relay={relay} size="2xs" />
</Tooltip> </Box>
</Tooltip>
</Th>
))} ))}
</Tr> </Tr>
</Thead> </Thead>