From a8cd34d998834ca83e17a19f32fe51f233bb6479 Mon Sep 17 00:00:00 2001 From: reya Date: Thu, 11 Jan 2024 07:56:28 +0700 Subject: [PATCH] chore: small fixes --- apps/desktop/src/routes/home/index.tsx | 2 +- packages/ark/src/ark.ts | 27 +++++++++---------- .../ark/src/components/note/buttons/reply.tsx | 4 +++ .../src/components/note/buttons/repost.tsx | 26 +++++++++++++----- .../ark/src/components/note/buttons/zap.tsx | 4 +-- .../src/components/note/primitives/reply.tsx | 1 - .../src/components/note/primitives/repost.tsx | 1 - .../src/components/note/primitives/text.tsx | 1 - .../src/components/note/primitives/thread.tsx | 1 - packages/ark/src/provider.tsx | 9 +++++++ packages/lume-column-timeline/src/index.tsx | 5 ++-- packages/types/index.d.ts | 2 +- packages/ui/src/navigation.tsx | 2 +- packages/ui/src/replyList.tsx | 4 +-- 14 files changed, 54 insertions(+), 35 deletions(-) diff --git a/apps/desktop/src/routes/home/index.tsx b/apps/desktop/src/routes/home/index.tsx index 6d040a56..5dbffe5d 100644 --- a/apps/desktop/src/routes/home/index.tsx +++ b/apps/desktop/src/routes/home/index.tsx @@ -48,7 +48,7 @@ export function HomeScreen() { { diff --git a/packages/ark/src/ark.ts b/packages/ark/src/ark.ts index 52a811a1..0a176656 100644 --- a/packages/ark/src/ark.ts +++ b/packages/ark/src/ark.ts @@ -389,14 +389,11 @@ export class Ark { signal?: AbortSignal; dedup?: boolean; }) { - const rootIds = new Set(); - const dedupQueue = new Set(); - const connectedRelays = this.ndk.pool - .connectedRelays() - .map((item) => item.url); + const seenIds = new Set(); + const dedupQueue = new Set(); const events = await this.#fetcher.fetchLatestEvents( - connectedRelays, + this.#storage.account.relayList, filter, limit, { @@ -411,17 +408,19 @@ export class Ark { if (dedup) { for (const event of ndkEvents) { - const tags = event.tags.filter((el) => el[0] === "e"); + const tags = event.tags + .filter((el) => el[0] === "e") + ?.map((item) => item[1]); - if (tags && tags.length > 0) { - const rootId = tags.filter((el) => el[3] === "root")[1] ?? tags[0][1]; + if (tags.length) { + for (const tag of tags) { + if (seenIds.has(tag)) { + dedupQueue.add(event.id); + break; + } - if (rootIds.has(rootId)) { - dedupQueue.add(event.id); - break; + seenIds.add(tag); } - - rootIds.add(rootId); } } diff --git a/packages/ark/src/components/note/buttons/reply.tsx b/packages/ark/src/components/note/buttons/reply.tsx index a4dc4ee1..82dc14be 100644 --- a/packages/ark/src/components/note/buttons/reply.tsx +++ b/packages/ark/src/components/note/buttons/reply.tsx @@ -19,6 +19,10 @@ export function NoteReply() { type="button" onClick={() => { setEditorValue([ + { + type: "paragraph", + children: [{ text: "" }], + }, { type: "event", // @ts-expect-error, useless diff --git a/packages/ark/src/components/note/buttons/repost.tsx b/packages/ark/src/components/note/buttons/repost.tsx index cc659368..442893f6 100644 --- a/packages/ark/src/components/note/buttons/repost.tsx +++ b/packages/ark/src/components/note/buttons/repost.tsx @@ -1,4 +1,4 @@ -import { RepostIcon } from "@lume/icons"; +import { LoaderIcon, RepostIcon } from "@lume/icons"; import * as Tooltip from "@radix-ui/react-tooltip"; import { useState } from "react"; import { toast } from "sonner"; @@ -7,17 +7,25 @@ import { useNoteContext } from "../provider"; export function NoteRepost() { const event = useNoteContext(); + + const [loading, setLoading] = useState(false); const [isRepost, setIsRepost] = useState(false); const submit = async () => { try { + setLoading(true); + // repost await event.repost(true); // update state + setLoading(false); setIsRepost(true); + + // notify toast.success("You've reposted this post successfully"); } catch (e) { + setLoading(false); toast.error("Repost failed, try again later"); } }; @@ -31,12 +39,16 @@ export function NoteRepost() { onClick={submit} className="inline-flex items-center justify-center group h-7 w-7 text-neutral-600 dark:text-neutral-400" > - + {loading ? ( + + ) : ( + + )} diff --git a/packages/ark/src/components/note/buttons/zap.tsx b/packages/ark/src/components/note/buttons/zap.tsx index e2fcad93..c47ac145 100644 --- a/packages/ark/src/components/note/buttons/zap.tsx +++ b/packages/ark/src/components/note/buttons/zap.tsx @@ -107,13 +107,13 @@ export function NoteZap() { - +
diff --git a/packages/ark/src/components/note/primitives/reply.tsx b/packages/ark/src/components/note/primitives/reply.tsx index e16fd371..3e6185f4 100644 --- a/packages/ark/src/components/note/primitives/reply.tsx +++ b/packages/ark/src/components/note/primitives/reply.tsx @@ -40,7 +40,6 @@ export function Reply({ ) : null}
-
diff --git a/packages/ark/src/components/note/primitives/repost.tsx b/packages/ark/src/components/note/primitives/repost.tsx index c4a8cc97..b4d7b666 100644 --- a/packages/ark/src/components/note/primitives/repost.tsx +++ b/packages/ark/src/components/note/primitives/repost.tsx @@ -69,7 +69,6 @@ export function RepostNote({
-
diff --git a/packages/ark/src/components/note/primitives/text.tsx b/packages/ark/src/components/note/primitives/text.tsx index dc445f13..9bf8129f 100644 --- a/packages/ark/src/components/note/primitives/text.tsx +++ b/packages/ark/src/components/note/primitives/text.tsx @@ -22,7 +22,6 @@ export function TextNote({
-
diff --git a/packages/ark/src/components/note/primitives/thread.tsx b/packages/ark/src/components/note/primitives/thread.tsx index b22de42c..cc6e10f5 100644 --- a/packages/ark/src/components/note/primitives/thread.tsx +++ b/packages/ark/src/components/note/primitives/thread.tsx @@ -43,7 +43,6 @@ export function ThreadNote({ eventId }: { eventId: string }) {
-
diff --git a/packages/ark/src/provider.tsx b/packages/ark/src/provider.tsx index 905ee274..76bab593 100644 --- a/packages/ark/src/provider.tsx +++ b/packages/ark/src/provider.tsx @@ -175,6 +175,15 @@ const LumeProvider = ({ children }: PropsWithChildren) => { const contacts = await user.follows(); storage.account.contacts = [...contacts].map((user) => user.pubkey); + + const relays = await user.relayList(); + + if (!relays) storage.account.relayList = ndk.explicitRelayUrls; + + storage.account.relayList = [ + ...relays.readRelayUrls, + ...relays.bothRelayUrls, + ]; } // init nostr fetcher diff --git a/packages/lume-column-timeline/src/index.tsx b/packages/lume-column-timeline/src/index.tsx index 9feceaa9..2b16a969 100644 --- a/packages/lume-column-timeline/src/index.tsx +++ b/packages/lume-column-timeline/src/index.tsx @@ -1,11 +1,11 @@ import { Column, useStorage } from "@lume/ark"; import { TimelineIcon } from "@lume/icons"; import { IColumn } from "@lume/types"; +import { EventRoute, UserRoute } from "@lume/ui"; import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; import { useQueryClient } from "@tanstack/react-query"; import { useRef } from "react"; import { HomeRoute } from "./home"; -import { EventRoute, UserRoute } from "@lume/ui"; export function Timeline({ column }: { column: IColumn }) { const colKey = `timeline-${column.id}`; @@ -14,11 +14,12 @@ export function Timeline({ column }: { column: IColumn }) { const since = useRef(Math.floor(Date.now() / 1000)); const refreshTimeline = async (events: NDKEvent[]) => { + const uniqEvents = new Set(events); await queryClient.setQueryData( [colKey], (prev: { pageParams: number; pages: Array }) => ({ ...prev, - pages: [[...events], ...prev.pages], + pages: [[...uniqEvents], ...prev.pages], }), ); }; diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts index 3f31c565..23218114 100644 --- a/packages/types/index.d.ts +++ b/packages/types/index.d.ts @@ -17,7 +17,7 @@ export interface Account { pubkey: string; is_active: number; contacts: string[]; - relayList: NDKRelayList; + relayList: string[]; } export interface WidgetGroup { diff --git a/packages/ui/src/navigation.tsx b/packages/ui/src/navigation.tsx index c28feafd..a2f53228 100644 --- a/packages/ui/src/navigation.tsx +++ b/packages/ui/src/navigation.tsx @@ -121,7 +121,7 @@ export function Navigation() { : "text-black/50 dark:text-neutral-400", )} > - + )} diff --git a/packages/ui/src/replyList.tsx b/packages/ui/src/replyList.tsx index c394441a..0d18d3d6 100644 --- a/packages/ui/src/replyList.tsx +++ b/packages/ui/src/replyList.tsx @@ -57,9 +57,7 @@ export function ReplyList({ ) : ( - data.map((event) => ( - - )) + data.map((event) => ) )} );