diff --git a/client/.gitignore b/client/.gitignore index f7fb300..3ee3508 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -1,5 +1,6 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. package-lock.json +yarn.lock # dependencies /node_modules diff --git a/client/Dockerfile b/client/Dockerfile index d98802f..e3ccefb 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -1,5 +1,5 @@ # Stage 1: Building the React application -FROM node:18-alpine AS build +FROM node:20-alpine AS build WORKDIR /app COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ RUN \ diff --git a/client/src/components/Home.tsx b/client/src/components/Home.tsx index f00ae83..56732cd 100644 --- a/client/src/components/Home.tsx +++ b/client/src/components/Home.tsx @@ -19,35 +19,45 @@ const useUniqEvents = () => { return unsubscribe; }, []); - return uniqBy(events, "id"); + const uniqEvents = uniqBy(events, "id"); + + const noteEvents = uniqEvents.filter(event => event.kind === 1); + const metadataEvents = uniqEvents.filter(event => event.kind === 0); + + return { noteEvents, metadataEvents }; }; const Home = () => { const filterDifficulty = localStorage.getItem("filterDifficulty") || DEFAULT_DIFFICULTY; const [sortByTime, setSortByTime] = useState(true); - const uniqEvents = useUniqEvents(); + const [setAnon, setSetAnon] = useState(true); + const { noteEvents, metadataEvents } = useUniqEvents(); - const postEvents = uniqEvents + const postEvents = noteEvents .filter((event) => verifyPow(event) >= Number(filterDifficulty) && event.kind !== 0 && (event.kind !== 1 || !event.tags.some((tag) => tag[0] === "e")) ) - const sortedEvents = [...postEvents].sort((a, b) => + const sortedEvents = [...postEvents] + .sort((a, b) => sortByTime ? b.created_at - a.created_at : verifyPow(b) - verifyPow(a) + ) + .filter( + !setAnon ? (e) => !metadataEvents.some((metadataEvent) => metadataEvent.pubkey === e.pubkey) : () => true ); const toggleSort = useCallback(() => { setSortByTime(prev => !prev); }, []); - const getMetadataEvent = (event: Event) => { - return uniqEvents.find((e) => e.pubkey === event.pubkey && e.kind === 0) || null; - }; + const toggleAnon = useCallback(() => { + setSetAnon(prev => !prev); + }, []); const countReplies = (event: Event) => { - return uniqEvents.filter((e) => e.tags.some((tag) => tag[0] === "e" && tag[1] === event.id)).length; + return noteEvents.filter((e) => e.tags.some((tag) => tag[0] === "e" && tag[1] === event.id)).length; }; // Render the component @@ -57,10 +67,10 @@ const Home = () => {
-
{sortedEvents.map((event) => ( event.kind === 1 ? e.pubkey === event.pubkey && e.kind === 0) || null} replyCount={countReplies(event)} /> : ))}