diff --git a/apps/desktop2/src/app.tsx b/apps/desktop2/src/app.tsx index cdc90969..064f008f 100644 --- a/apps/desktop2/src/app.tsx +++ b/apps/desktop2/src/app.tsx @@ -1,5 +1,3 @@ -import { useArk } from "@lume/ark"; -import { ArkProvider } from "./ark"; import { QueryClient } from "@tanstack/react-query"; import { RouterProvider, createRouter } from "@tanstack/react-router"; import React, { StrictMode } from "react"; @@ -13,6 +11,7 @@ import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; import { routeTree } from "./router.gen"; // auto generated file import { CancelCircleIcon, CheckCircleIcon, InfoCircleIcon } from "@lume/icons"; +import { Ark } from "@lume/ark"; const queryClient = new QueryClient({ defaultOptions: { @@ -27,6 +26,7 @@ const persister = createSyncStoragePersister({ storage: window.localStorage, }); +const ark = new Ark(); const platformName = await platform(); const osLocale = (await locale()).slice(0, 2); @@ -34,10 +34,10 @@ const osLocale = (await locale()).slice(0, 2); const router = createRouter({ routeTree, context: { - ark: undefined!, platform: platformName, locale: osLocale, settings: null, + ark, queryClient, }, }); @@ -49,17 +49,8 @@ declare module "@tanstack/react-router" { } } -function InnerApp() { - const ark = useArk(); - return ; -} - function App() { - return ( - - - - ); + return ; } // biome-ignore lint/style/noNonNullAssertion: idk diff --git a/apps/desktop2/src/ark.tsx b/apps/desktop2/src/ark.tsx deleted file mode 100644 index bb844efb..00000000 --- a/apps/desktop2/src/ark.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Ark, ArkContext } from "@lume/ark"; -import { PropsWithChildren, useMemo } from "react"; - -export const ArkProvider = ({ children }: PropsWithChildren) => { - const ark = useMemo(() => new Ark(), []); - return {children}; -}; diff --git a/apps/desktop2/src/components/accounts.tsx b/apps/desktop2/src/components/accounts.tsx index b9d22946..01919b59 100644 --- a/apps/desktop2/src/components/accounts.tsx +++ b/apps/desktop2/src/components/accounts.tsx @@ -1,11 +1,14 @@ -import { useArk } from "@lume/ark"; import { Account } from "@lume/types"; import { User } from "@lume/ui"; -import { useNavigate, useParams } from "@tanstack/react-router"; +import { + useNavigate, + useParams, + useRouteContext, +} from "@tanstack/react-router"; import { useEffect, useState } from "react"; export function Accounts() { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const params = useParams({ strict: false }); const [accounts, setAccounts] = useState(null); @@ -36,7 +39,7 @@ export function Accounts() { } function Inactive({ pubkey }: { pubkey: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const navigate = useNavigate(); const changeAccount = async (npub: string) => { diff --git a/apps/desktop2/src/components/avatarUploader.tsx b/apps/desktop2/src/components/avatarUploader.tsx index 475d024f..f87fd3af 100644 --- a/apps/desktop2/src/components/avatarUploader.tsx +++ b/apps/desktop2/src/components/avatarUploader.tsx @@ -1,6 +1,6 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon } from "@lume/icons"; import { cn } from "@lume/utils"; +import { useRouteContext } from "@tanstack/react-router"; import { Dispatch, ReactNode, SetStateAction, useState } from "react"; import { toast } from "sonner"; @@ -13,7 +13,7 @@ export function AvatarUploader({ children: ReactNode; className?: string; }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const [loading, setLoading] = useState(false); const uploadAvatar = async () => { diff --git a/apps/desktop2/src/components/backup.tsx b/apps/desktop2/src/components/backup.tsx deleted file mode 100644 index 1f2fa91c..00000000 --- a/apps/desktop2/src/components/backup.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { ArrowRightIcon, CancelIcon } from "@lume/icons"; -import * as Dialog from "@radix-ui/react-dialog"; -import { Link, useParams } from "@tanstack/react-router"; -import { invoke } from "@tauri-apps/api/core"; -import { useState } from "react"; -import { toast } from "sonner"; - -export function BackupDialog() { - // @ts-ignore, magic!!! - const { account } = useParams({ strict: false }); - - const [key, setKey] = useState(null); - const [passphase, setPassphase] = useState(""); - const [loading, setLoading] = useState(false); - - const encryptKey = async () => { - try { - setLoading(true); - - const encrypted: string = await invoke("get_encrypted_key", { - npub: account, - password: passphase, - }); - - if (encrypted) { - setKey(encrypted); - } - - setLoading(false); - } catch (e) { - setLoading(false); - toast.error(String(e)); - } - }; - - return ( - - - - - - - - - - - Esc - - -
-
-

- This is your account key -

-

- It's use for login to Lume or other Nostr clients. You will lost - access to your account if you lose this key. -

-
-
-
- -
- setPassphase(e.target.value)} - className="h-11 w-full resize-none rounded-lg border-transparent bg-neutral-100 placeholder:text-neutral-600 focus:border-blue-500 focus:ring focus:ring-blue-100 dark:bg-neutral-900 dark:focus:ring-blue-900" - /> -
-
- {key ? ( -
- - -
- ) : null} -
-
- {!key ? ( - - ) : ( - - I've safely store my account key - - )} -
-
-
-
-
- ); -} diff --git a/apps/desktop2/src/components/balance.tsx b/apps/desktop2/src/components/balance.tsx index 87f96408..f31adaba 100644 --- a/apps/desktop2/src/components/balance.tsx +++ b/apps/desktop2/src/components/balance.tsx @@ -1,12 +1,11 @@ -import { useArk } from "@lume/ark"; import { User } from "@lume/ui"; import { getBitcoinDisplayValues } from "@lume/utils"; +import { useRouteContext } from "@tanstack/react-router"; import { useEffect, useMemo, useState } from "react"; export function Balance({ account }: { account: string }) { + const { ark } = useRouteContext({ strict: false }); const [balance, setBalance] = useState(0); - - const ark = useArk(); const value = useMemo(() => getBitcoinDisplayValues(balance), [balance]); useEffect(() => { diff --git a/apps/desktop2/src/components/login.tsx b/apps/desktop2/src/components/login.tsx deleted file mode 100644 index 9f245eeb..00000000 --- a/apps/desktop2/src/components/login.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useArk } from "@lume/ark"; -import { ArrowRightIcon, CancelIcon } from "@lume/icons"; -import * as Dialog from "@radix-ui/react-dialog"; -import { useNavigate } from "@tanstack/react-router"; -import { useState } from "react"; -import { toast } from "sonner"; - -export function LoginDialog() { - const ark = useArk(); - const navigate = useNavigate(); - - const [nsec, setNsec] = useState(""); - const [passphase, setPassphase] = useState(""); - - const login = async () => { - try { - if (!nsec.length) { - return toast.info("You must enter a valid nsec or ncrypto"); - } - - if (nsec.startsWith("ncrypto") && !passphase.length) { - return toast.warning("You must provide a passphase for ncrypto key"); - } - - const save = await ark.save_account(nsec, passphase); - - if (save) { - navigate({ to: "/", search: { guest: false } }); - } - } catch (e) { - toast.error(String(e)); - } - }; - - return ( - - - - - - - - - - - Esc - - -
-
-

Add new account with

-
- - - -
-
-
-
- - setNsec(e.target.value)} - className="h-11 w-full resize-none rounded-lg border-transparent bg-neutral-100 placeholder:text-neutral-600 focus:border-blue-500 focus:ring focus:ring-blue-100 dark:bg-neutral-900 dark:focus:ring-blue-900" - /> -
-
- - setPassphase(e.target.value)} - className="h-11 w-full resize-none rounded-lg border-transparent bg-neutral-100 placeholder:text-neutral-600 focus:border-blue-500 focus:ring focus:ring-blue-100 dark:bg-neutral-900 dark:focus:ring-blue-900" - /> -
-
-
- -
-
-
-
-
- ); -} diff --git a/apps/desktop2/src/components/repost.tsx b/apps/desktop2/src/components/repost.tsx index b956256e..97ee0ac7 100644 --- a/apps/desktop2/src/components/repost.tsx +++ b/apps/desktop2/src/components/repost.tsx @@ -3,8 +3,8 @@ import { Event } from "@lume/types"; import { cn } from "@lume/utils"; import { useQuery } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; -import { useArk } from "@lume/ark"; import { Note, User } from "@lume/ui"; +import { useRouteContext } from "@tanstack/react-router"; export function RepostNote({ event, @@ -13,8 +13,7 @@ export function RepostNote({ event: Event; className?: string; }) { - const ark = useArk(); - + const { ark } = useRouteContext({ strict: false }); const { t } = useTranslation(); const { isLoading, diff --git a/apps/desktop2/src/routes/$account.tsx b/apps/desktop2/src/routes/$account.tsx index 14067002..da362ce1 100644 --- a/apps/desktop2/src/routes/$account.tsx +++ b/apps/desktop2/src/routes/$account.tsx @@ -2,16 +2,14 @@ import { ComposeFilledIcon, PlusIcon } from "@lume/icons"; import { Outlet, createFileRoute, useNavigate } from "@tanstack/react-router"; import { cn } from "@lume/utils"; import { Accounts } from "@/components/accounts"; -import { useArk } from "@lume/ark"; export const Route = createFileRoute("/$account")({ component: App, }); function App() { - const ark = useArk(); const navigate = useNavigate(); - const { platform } = Route.useRouteContext(); + const { ark, platform } = Route.useRouteContext(); return (
diff --git a/apps/desktop2/src/routes/auth/new/profile.tsx b/apps/desktop2/src/routes/auth/new/profile.tsx index e0aef933..57170983 100644 --- a/apps/desktop2/src/routes/auth/new/profile.tsx +++ b/apps/desktop2/src/routes/auth/new/profile.tsx @@ -1,5 +1,4 @@ import { AvatarUploader } from "@/components/avatarUploader"; -import { useArk } from "@lume/ark"; import { LoaderIcon, PlusIcon } from "@lume/icons"; import { Metadata } from "@lume/types"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; @@ -16,11 +15,11 @@ export const Route = createFileRoute("/auth/new/profile")({ }); function Screen() { - const ark = useArk(); const keys = Route.useLoaderData(); const navigate = useNavigate(); const { t } = useTranslation(); + const { ark } = Route.useRouteContext(); const { register, handleSubmit } = useForm(); const [picture, setPicture] = useState(""); diff --git a/apps/desktop2/src/routes/auth/privkey.lazy.tsx b/apps/desktop2/src/routes/auth/privkey.lazy.tsx index 3b1019ab..254971c5 100644 --- a/apps/desktop2/src/routes/auth/privkey.lazy.tsx +++ b/apps/desktop2/src/routes/auth/privkey.lazy.tsx @@ -1,8 +1,6 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon } from "@lume/icons"; import { createLazyFileRoute, useNavigate } from "@tanstack/react-router"; import { useState } from "react"; -import { useTranslation } from "react-i18next"; import { toast } from "sonner"; export const Route = createLazyFileRoute("/auth/privkey")({ @@ -10,10 +8,9 @@ export const Route = createLazyFileRoute("/auth/privkey")({ }); function Screen() { - const ark = useArk(); + const { ark } = Route.useRouteContext(); const navigate = useNavigate(); - const [t] = useTranslation(); const [key, setKey] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); diff --git a/apps/desktop2/src/routes/auth/settings.lazy.tsx b/apps/desktop2/src/routes/auth/settings.lazy.tsx index 54fe9d79..3e612c6c 100644 --- a/apps/desktop2/src/routes/auth/settings.lazy.tsx +++ b/apps/desktop2/src/routes/auth/settings.lazy.tsx @@ -4,7 +4,6 @@ import { useTranslation } from "react-i18next"; import * as Switch from "@radix-ui/react-switch"; import { useEffect, useState } from "react"; import { Settings } from "@lume/types"; -import { useArk } from "@lume/ark"; import { isPermissionGranted, requestPermission, @@ -16,12 +15,12 @@ export const Route = createLazyFileRoute("/auth/settings")({ }); function Screen() { - const ark = useArk(); const navigate = useNavigate(); // @ts-ignore, magic!!! const { account } = Route.useSearch(); const { t } = useTranslation(); + const { ark } = Route.useRouteContext(); const [settings, setSettings] = useState({ notification: false, diff --git a/apps/desktop2/src/routes/editor/-components/media.tsx b/apps/desktop2/src/routes/editor/-components/media.tsx index 147f14c3..247f3800 100644 --- a/apps/desktop2/src/routes/editor/-components/media.tsx +++ b/apps/desktop2/src/routes/editor/-components/media.tsx @@ -1,4 +1,3 @@ -import { useArk } from "@lume/ark"; import { AddMediaIcon, LoaderIcon } from "@lume/icons"; import { cn, insertImage, isImagePath } from "@lume/utils"; import { useEffect, useState } from "react"; @@ -6,9 +5,10 @@ import { useSlateStatic } from "slate-react"; import { toast } from "sonner"; import { getCurrent } from "@tauri-apps/api/window"; import { UnlistenFn } from "@tauri-apps/api/event"; +import { useRouteContext } from "@tanstack/react-router"; export function MediaButton({ className }: { className?: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const editor = useSlateStatic(); const [loading, setLoading] = useState(false); diff --git a/apps/desktop2/src/routes/editor/index.tsx b/apps/desktop2/src/routes/editor/index.tsx index 6b9d4041..4c96956e 100644 --- a/apps/desktop2/src/routes/editor/index.tsx +++ b/apps/desktop2/src/routes/editor/index.tsx @@ -1,4 +1,3 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon, TrashIcon } from "@lume/icons"; import { Portal, @@ -61,6 +60,7 @@ export const Route = createFileRoute("/editor/")({ function Screen() { // @ts-ignore, useless const { reply_to, quote } = Route.useSearch(); + const { ark } = Route.useRouteContext(); let initialValue: EditorElement[]; @@ -89,7 +89,6 @@ function Screen() { ]; } - const ark = useArk(); const ref = useRef(); const contacts = useSuspenseQuery(contactQueryOptions).data as Contact[]; diff --git a/apps/desktop2/src/routes/events/-components/replyList.tsx b/apps/desktop2/src/routes/events/-components/replyList.tsx index f1ba20b4..a3f5c1e4 100644 --- a/apps/desktop2/src/routes/events/-components/replyList.tsx +++ b/apps/desktop2/src/routes/events/-components/replyList.tsx @@ -1,10 +1,10 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon } from "@lume/icons"; import { cn } from "@lume/utils"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { EventWithReplies } from "@lume/types"; import { Reply } from "./reply"; +import { useRouteContext } from "@tanstack/react-router"; export function ReplyList({ eventId, @@ -13,8 +13,7 @@ export function ReplyList({ eventId: string; className?: string; }) { - const ark = useArk(); - + const { ark } = useRouteContext({ strict: false }); const [t] = useTranslation(); const [data, setData] = useState(null); diff --git a/apps/desktop2/src/routes/index.tsx b/apps/desktop2/src/routes/index.tsx index 03b1fb96..3a975983 100644 --- a/apps/desktop2/src/routes/index.tsx +++ b/apps/desktop2/src/routes/index.tsx @@ -1,4 +1,3 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon, PlusIcon } from "@lume/icons"; import { User } from "@lume/ui"; import { Link } from "@tanstack/react-router"; @@ -45,7 +44,6 @@ export const Route = createFileRoute("/")({ }); function Screen() { - const ark = useArk(); const navigate = useNavigate(); const context = Route.useRouteContext(); @@ -53,8 +51,8 @@ function Screen() { const select = async (npub: string) => { setLoading(true); - const loadAccount = await ark.load_selected_account(npub); - context.settings = await ark.get_settings(npub); + const loadAccount = await context.ark.load_selected_account(npub); + context.settings = await context.ark.get_settings(npub); if (loadAccount) { navigate({ @@ -85,7 +83,7 @@ function Screen() {
) : ( <> - {ark.accounts.map((account) => ( + {context.ark.accounts.map((account) => ( - + {t("note.buttons.downvote")} diff --git a/packages/ui/src/note/buttons/reply.tsx b/packages/ui/src/note/buttons/reply.tsx index 07de067e..8f8f87aa 100644 --- a/packages/ui/src/note/buttons/reply.tsx +++ b/packages/ui/src/note/buttons/reply.tsx @@ -2,12 +2,12 @@ import { ReplyIcon } from "@lume/icons"; import * as Tooltip from "@radix-ui/react-tooltip"; import { useTranslation } from "react-i18next"; import { useNoteContext } from "../provider"; -import { useArk } from "@lume/ark"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteReply() { - const ark = useArk(); const event = useNoteContext(); + const { ark } = useRouteContext({ strict: false }); const { t } = useTranslation(); return ( @@ -23,7 +23,7 @@ export function NoteReply() { - + {t("note.menu.viewThread")} diff --git a/packages/ui/src/note/buttons/repost.tsx b/packages/ui/src/note/buttons/repost.tsx index 759248cf..53cb489a 100644 --- a/packages/ui/src/note/buttons/repost.tsx +++ b/packages/ui/src/note/buttons/repost.tsx @@ -1,4 +1,4 @@ -import { LoaderIcon, QuoteIcon, ReplyIcon, RepostIcon } from "@lume/icons"; +import { LoaderIcon, QuoteIcon, RepostIcon } from "@lume/icons"; import { cn } from "@lume/utils"; import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; import * as Tooltip from "@radix-ui/react-tooltip"; @@ -6,10 +6,10 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { useNoteContext } from "../provider"; -import { useArk } from "@lume/ark"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteRepost() { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const event = useNoteContext(); const [t] = useTranslation(); @@ -59,7 +59,7 @@ export function NoteRepost() { - + {t("note.buttons.repost")} diff --git a/packages/ui/src/note/buttons/upvote.tsx b/packages/ui/src/note/buttons/upvote.tsx index 2aaf6184..0c68187a 100644 --- a/packages/ui/src/note/buttons/upvote.tsx +++ b/packages/ui/src/note/buttons/upvote.tsx @@ -1,13 +1,13 @@ import { ArrowUpIcon, LoaderIcon } from "@lume/icons"; import { useState } from "react"; import { useNoteContext } from "../provider"; -import { useArk } from "@lume/ark"; import { cn } from "@lume/utils"; import * as Tooltip from "@radix-ui/react-tooltip"; import { useTranslation } from "react-i18next"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteUpvote() { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const event = useNoteContext(); const [t] = useTranslation(); @@ -48,7 +48,7 @@ export function NoteUpvote() { - + {t("note.buttons.upvote")} diff --git a/packages/ui/src/note/buttons/zap.tsx b/packages/ui/src/note/buttons/zap.tsx index 2e5bf03e..8cc25a7d 100644 --- a/packages/ui/src/note/buttons/zap.tsx +++ b/packages/ui/src/note/buttons/zap.tsx @@ -1,13 +1,11 @@ -import { useArk } from "@lume/ark"; import { ZapIcon } from "@lume/icons"; import { toast } from "sonner"; import { useNoteContext } from "../provider"; -import { useSearch } from "@tanstack/react-router"; +import { useRouteContext, useSearch } from "@tanstack/react-router"; export function NoteZap() { - const ark = useArk(); const event = useNoteContext(); - + const { ark } = useRouteContext({ strict: false }); const { account } = useSearch({ strict: false }); const zap = async () => { diff --git a/packages/ui/src/note/content.tsx b/packages/ui/src/note/content.tsx index 7b536125..9d3f50d4 100644 --- a/packages/ui/src/note/content.tsx +++ b/packages/ui/src/note/content.tsx @@ -7,7 +7,6 @@ import { VIDEOS, cn, } from "@lume/utils"; -import { NIP89 } from "./nip89"; import { useNoteContext } from "./provider"; import { ReactNode, useMemo } from "react"; import { nanoid } from "nanoid"; @@ -136,10 +135,6 @@ export function NoteContent({ } }, []); - if (event.kind !== Kind.Text) { - return ; - } - return (
diff --git a/packages/ui/src/note/mentions/note.tsx b/packages/ui/src/note/mentions/note.tsx index 1481b7d4..c28ed4ee 100644 --- a/packages/ui/src/note/mentions/note.tsx +++ b/packages/ui/src/note/mentions/note.tsx @@ -1,7 +1,8 @@ import { useTranslation } from "react-i18next"; import { User } from "../../user"; -import { useArk, useEvent } from "@lume/ark"; +import { useEvent } from "@lume/ark"; import { LinkIcon } from "@lume/icons"; +import { useRouteContext } from "@tanstack/react-router"; export function MentionNote({ eventId, @@ -10,8 +11,7 @@ export function MentionNote({ eventId: string; openable?: boolean; }) { - const ark = useArk(); - + const { ark } = useRouteContext({ strict: false }); const { t } = useTranslation(); const { isLoading, isError, data } = useEvent(eventId); diff --git a/packages/ui/src/note/mentions/user.tsx b/packages/ui/src/note/mentions/user.tsx index 7f91a985..12cb5b34 100644 --- a/packages/ui/src/note/mentions/user.tsx +++ b/packages/ui/src/note/mentions/user.tsx @@ -1,8 +1,9 @@ -import { useArk, useProfile } from "@lume/ark"; +import { useProfile } from "@lume/ark"; import { displayNpub } from "@lume/utils"; +import { useRouteContext } from "@tanstack/react-router"; export function MentionUser({ pubkey }: { pubkey: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const { isLoading, isError, profile } = useProfile(pubkey); return ( diff --git a/packages/ui/src/note/menu.tsx b/packages/ui/src/note/menu.tsx index 4f36250a..c182121d 100644 --- a/packages/ui/src/note/menu.tsx +++ b/packages/ui/src/note/menu.tsx @@ -3,13 +3,13 @@ import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; import { writeText } from "@tauri-apps/plugin-clipboard-manager"; import { useTranslation } from "react-i18next"; import { useNoteContext } from "./provider"; -import { useArk } from "@lume/ark"; import { toast } from "sonner"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteMenu() { - const ark = useArk(); const event = useNoteContext(); + const { ark } = useRouteContext({ strict: false }); const { t } = useTranslation(); const copyID = async () => { diff --git a/packages/ui/src/note/nip89.tsx b/packages/ui/src/note/nip89.tsx deleted file mode 100644 index ed4cd257..00000000 --- a/packages/ui/src/note/nip89.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useTranslation } from "react-i18next"; -import { AppHandler } from "./appHandler"; -import { useNoteContext } from "./provider"; -import { useArk } from "@lume/ark"; - -export function NIP89({ className }: { className?: string }) { - const ark = useArk(); - const event = useNoteContext(); - - const { t } = useTranslation(); - const { isLoading, isError, data } = useQuery({ - queryKey: ["app-recommend", event.id], - queryFn: () => { - return ark.getAppRecommend({ - unknownKind: event.kind.toString(), - author: event.pubkey, - }); - }, - refetchOnWindowFocus: false, - refetchOnMount: false, - staleTime: Infinity, - }); - - if (isLoading) { -
Loading...
; - } - - if (isError || !data) { - return
Error
; - } - - return ( -
-
-
-

- {t("nip89.unsupported")} -

-

- {event.kind} -

-
-
- - {t("nip89.openWith")} - - {data.map((item) => ( - - ))} -
-
-
- ); -} diff --git a/packages/ui/src/note/primitives/repost.tsx b/packages/ui/src/note/primitives/repost.tsx index b4adc458..0ed06fa4 100644 --- a/packages/ui/src/note/primitives/repost.tsx +++ b/packages/ui/src/note/primitives/repost.tsx @@ -5,7 +5,7 @@ import { useQuery } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import { Note } from ".."; import { User } from "../../user"; -import { useArk } from "@lume/ark"; +import { useRouteContext } from "@tanstack/react-router"; export function RepostNote({ event, @@ -14,8 +14,7 @@ export function RepostNote({ event: Event; className?: string; }) { - const ark = useArk(); - + const { ark } = useRouteContext({ strict: false }); const { t } = useTranslation(); const { isLoading, diff --git a/packages/ui/src/note/thread.tsx b/packages/ui/src/note/thread.tsx index 3214c9d8..5ce6a4a0 100644 --- a/packages/ui/src/note/thread.tsx +++ b/packages/ui/src/note/thread.tsx @@ -2,11 +2,11 @@ import { cn } from "@lume/utils"; import { useTranslation } from "react-i18next"; import { Note } from "."; import { useNoteContext } from "./provider"; -import { useArk } from "@lume/ark"; import { LinkIcon } from "@lume/icons"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteThread({ className }: { className?: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const event = useNoteContext(); const thread = ark.parse_event_thread({ content: event.content, diff --git a/packages/ui/src/note/user.tsx b/packages/ui/src/note/user.tsx index f7485209..c1c16663 100644 --- a/packages/ui/src/note/user.tsx +++ b/packages/ui/src/note/user.tsx @@ -2,10 +2,10 @@ import { cn } from "@lume/utils"; import * as HoverCard from "@radix-ui/react-hover-card"; import { User } from "../user"; import { useNoteContext } from "./provider"; -import { useArk } from "@lume/ark"; +import { useRouteContext } from "@tanstack/react-router"; export function NoteUser({ className }: { className?: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const event = useNoteContext(); return ( @@ -32,7 +32,7 @@ export function NoteUser({ className }: { className?: string }) {
diff --git a/packages/ui/src/user/followButton.tsx b/packages/ui/src/user/followButton.tsx index f634ca7f..7986a137 100644 --- a/packages/ui/src/user/followButton.tsx +++ b/packages/ui/src/user/followButton.tsx @@ -1,12 +1,12 @@ -import { useArk } from "@lume/ark"; import { LoaderIcon } from "@lume/icons"; import { cn } from "@lume/utils"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useUserContext } from "./provider"; +import { useRouteContext } from "@tanstack/react-router"; export function UserFollowButton({ className }: { className?: string }) { - const ark = useArk(); + const { ark } = useRouteContext({ strict: false }); const user = useUserContext(); const [t] = useTranslation(); diff --git a/packages/ui/src/user/nip05.tsx b/packages/ui/src/user/nip05.tsx index 91228177..75ab86ff 100644 --- a/packages/ui/src/user/nip05.tsx +++ b/packages/ui/src/user/nip05.tsx @@ -2,12 +2,12 @@ import { VerifiedIcon } from "@lume/icons"; import { cn, displayLongHandle, displayNpub } from "@lume/utils"; import { useQuery } from "@tanstack/react-query"; import { useUserContext } from "./provider"; -import { useArk } from "@lume/ark"; +import { useRouteContext } from "@tanstack/react-router"; export function UserNip05({ className }: { className?: string }) { - const ark = useArk(); const user = useUserContext(); + const { ark } = useRouteContext({ strict: false }); const { isLoading, data: verified } = useQuery({ queryKey: ["nip05", user?.pubkey], queryFn: async () => {