add mute filter to relay notes

This commit is contained in:
hzrd149
2023-11-23 13:28:03 -06:00
parent 684b0e458a
commit a3f49d5524

View File

@@ -1,8 +1,8 @@
import { useCallback, useMemo } from "react"; import { useCallback, useMemo } from "react";
import { Flex, Spacer } from "@chakra-ui/react"; import { Flex, Spacer, useDisclosure } from "@chakra-ui/react";
import { Kind } from "nostr-tools"; import { Kind } from "nostr-tools";
import { isReply } from "../../../helpers/nostr/events"; import { isReply, isRepost } from "../../../helpers/nostr/events";
import { useAppTitle } from "../../../hooks/use-app-title"; import { useAppTitle } from "../../../hooks/use-app-title";
import useTimelineLoader from "../../../hooks/use-timeline-loader"; import useTimelineLoader from "../../../hooks/use-timeline-loader";
import { NostrEvent } from "../../../types/nostr-event"; import { NostrEvent } from "../../../types/nostr-event";
@@ -11,9 +11,13 @@ import TimelineViewTypeButtons from "../../../components/timeline-page/timeline-
import PeopleListSelection from "../../../components/people-list-selection/people-list-selection"; import PeopleListSelection from "../../../components/people-list-selection/people-list-selection";
import { usePeopleListContext } from "../../../providers/people-list-provider"; import { usePeopleListContext } from "../../../providers/people-list-provider";
import { NostrRequestFilter } from "../../../types/nostr-query"; import { NostrRequestFilter } from "../../../types/nostr-query";
import useClientSideMuteFilter from "../../../hooks/use-client-side-mute-filter";
import NoteFilterTypeButtons from "../../../components/note-filter-type-buttons";
export default function RelayNotes({ relay }: { relay: string }) { export default function RelayNotes({ relay }: { relay: string }) {
useAppTitle(`${relay} - Notes`); useAppTitle(`${relay} - Notes`);
const showReplies = useDisclosure();
const showReposts = useDisclosure({ defaultIsOpen: true });
const { filter } = usePeopleListContext(); const { filter } = usePeopleListContext();
const kinds = [Kind.Text]; const kinds = [Kind.Text];
@@ -23,18 +27,22 @@ export default function RelayNotes({ relay }: { relay: string }) {
}, [filter]); }, [filter]);
const timelineEventFilter = useTimelinePageEventFilter(); const timelineEventFilter = useTimelinePageEventFilter();
const muteFilter = useClientSideMuteFilter();
const eventFilter = useCallback( const eventFilter = useCallback(
(event: NostrEvent) => { (event: NostrEvent) => {
if (isReply(event)) return false; if (muteFilter(event)) return false;
if (!showReplies.isOpen && isReply(event)) return false;
if (!showReposts.isOpen && isRepost(event)) return false;
return timelineEventFilter(event); return timelineEventFilter(event);
}, },
[timelineEventFilter], [timelineEventFilter, showReplies.isOpen, showReposts.isOpen, muteFilter],
); );
const timeline = useTimelineLoader(`${relay}-notes`, [relay], query, { eventFilter, enabled: !!filter }); const timeline = useTimelineLoader(`${relay}-notes`, [relay], query, { eventFilter, enabled: !!filter });
const header = ( const header = (
<Flex gap="2" wrap="wrap" px={["2", 0]}> <Flex gap="2" wrap="wrap" px={["2", 0]}>
<PeopleListSelection /> <PeopleListSelection />
<NoteFilterTypeButtons showReplies={showReplies} showReposts={showReposts} />
<Spacer /> <Spacer />
<TimelineViewTypeButtons /> <TimelineViewTypeButtons />
</Flex> </Flex>