import { BellIcon, ComposeFilledIcon, PlusIcon, SearchIcon } from "@lume/icons"; import { Event, Kind } from "@lume/types"; import { User } from "@/components/user"; import { cn, decodeZapInvoice, displayNpub, sendNativeNotification, } from "@lume/utils"; import { Outlet, createFileRoute } from "@tanstack/react-router"; import { invoke } from "@tauri-apps/api/core"; import { getCurrent } from "@tauri-apps/api/window"; import { useEffect, useState } from "react"; import { toast } from "sonner"; export const Route = createFileRoute("/$account")({ beforeLoad: async ({ context }) => { const ark = context.ark; const accounts = await ark.get_all_accounts(); return { accounts }; }, component: Screen, }); function Screen() { const { ark, platform } = Route.useRouteContext(); const navigate = Route.useNavigate(); return (
); } function Accounts() { const navigate = Route.useNavigate(); const { ark, accounts } = Route.useRouteContext(); const { account } = Route.useParams(); const changeAccount = async (npub: string) => { if (npub === account) { return await ark.open_profile(account); } // change current account and update signer const select = await ark.load_selected_account(npub); if (select) { return navigate({ to: "/$account/home", params: { account: npub } }); } else { toast.warning("Something wrong."); } }; return (
{accounts.map((user) => ( ))}
); } function Bell() { const { ark } = Route.useRouteContext(); const { account } = Route.useParams(); const [count, setCount] = useState(0); useEffect(() => { const unlisten = getCurrent().listen( "activity", async (payload) => { setCount((prevCount) => prevCount + 1); await invoke("set_badge", { count }); const event: Event = JSON.parse(payload.payload); const user = await ark.get_profile(event.pubkey); const userName = user.display_name || user.name || displayNpub(event.pubkey, 16); switch (event.kind) { case Kind.Text: { sendNativeNotification("Mentioned you in a note", userName); break; } case Kind.Repost: { sendNativeNotification("Reposted your note", userName); break; } case Kind.ZapReceipt: { const amount = decodeZapInvoice(event.tags); sendNativeNotification( `Zapped ₿ ${amount.bitcoinFormatted}`, userName, ); break; } default: break; } }, ); return () => { unlisten.then((f) => f()); }; }, []); return ( ); }