mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-10-09 20:33:03 +02:00
add broadcast event button
This commit is contained in:
@@ -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>
|
||||||
|
Reference in New Issue
Block a user