From 88a6c3c81fd68485a832cffdc8d4d6d11de9bdf2 Mon Sep 17 00:00:00 2001 From: reya Date: Sat, 24 Feb 2024 14:41:57 +0700 Subject: [PATCH] feat: account switcher --- apps/desktop2/src/components/accounts.tsx | 60 +++++++++++++++---- .../src/routes/{app.tsx => $account.tsx} | 13 ++-- .../{app => $account}/activity.lazy.tsx | 2 +- .../src/routes/{app => $account}/home.tsx | 25 ++++++-- .../home/-components/repost.tsx | 0 .../home/-components/text.tsx | 0 .../{app => $account}/home/global.lazy.tsx | 2 +- .../{app => $account}/home/local.lazy.tsx | 7 ++- .../routes/{app => $account}/space.lazy.tsx | 2 +- .../src/routes/auth/create/self.lazy.tsx | 3 +- apps/desktop2/src/routes/auth/import.lazy.tsx | 3 +- apps/desktop2/src/routes/index.tsx | 9 ++- src-tauri/Cargo.toml | 15 +++++ src-tauri/src/nostr/metadata.rs | 7 ++- 14 files changed, 114 insertions(+), 34 deletions(-) rename apps/desktop2/src/routes/{app.tsx => $account.tsx} (90%) rename apps/desktop2/src/routes/{app => $account}/activity.lazy.tsx (85%) rename apps/desktop2/src/routes/{app => $account}/home.tsx (76%) rename apps/desktop2/src/routes/{app => $account}/home/-components/repost.tsx (100%) rename apps/desktop2/src/routes/{app => $account}/home/-components/text.tsx (100%) rename apps/desktop2/src/routes/{app => $account}/home/global.lazy.tsx (97%) rename apps/desktop2/src/routes/{app => $account}/home/local.lazy.tsx (94%) rename apps/desktop2/src/routes/{app => $account}/space.lazy.tsx (85%) diff --git a/apps/desktop2/src/components/accounts.tsx b/apps/desktop2/src/components/accounts.tsx index e09b2de0..5e748d54 100644 --- a/apps/desktop2/src/components/accounts.tsx +++ b/apps/desktop2/src/components/accounts.tsx @@ -1,29 +1,65 @@ import { useArk } from "@lume/ark"; +import { PlusIcon } from "@lume/icons"; +import { Account } from "@lume/types"; import { User } from "@lume/ui"; +import { Link, useNavigate, useParams } from "@tanstack/react-router"; +import { useEffect, useState } from "react"; export function Accounts() { const ark = useArk(); + const params = useParams({ strict: false }); + + const [accounts, setAccounts] = useState(null); + + useEffect(() => { + async function getAllAccounts() { + const data = await ark.get_all_accounts(); + if (data) setAccounts(data); + } + + getAllAccounts(); + }, []); return (
- {ark.accounts.map((account) => - account.npub === ark.account.npub ? ( - - ) : ( - - ), - )} + + + + {accounts + ? accounts.map((account) => + // @ts-ignore, useless + account.npub === params.account ? ( + + ) : ( + + ), + ) + : null}
); } function Inactive({ pubkey }: { pubkey: string }) { + const ark = useArk(); + const navigate = useNavigate(); + + const changeAccount = async (npub: string) => { + const select = await ark.load_selected_account(npub); + if (select) + navigate({ to: "/$account/home/local", params: { account: npub } }); + }; + return ( - - - - - + ); } diff --git a/apps/desktop2/src/routes/app.tsx b/apps/desktop2/src/routes/$account.tsx similarity index 90% rename from apps/desktop2/src/routes/app.tsx rename to apps/desktop2/src/routes/$account.tsx index 6f4dcc46..5a3bb477 100644 --- a/apps/desktop2/src/routes/app.tsx +++ b/apps/desktop2/src/routes/$account.tsx @@ -7,13 +7,13 @@ import { SpaceFilledIcon, SpaceIcon, } from "@lume/icons"; -import { Link } from "@tanstack/react-router"; +import { Link, useParams } from "@tanstack/react-router"; import { Outlet, createFileRoute } from "@tanstack/react-router"; import { cn } from "@lume/utils"; import { Accounts } from "@/components/accounts"; import { useArk } from "@lume/ark"; -export const Route = createFileRoute("/app")({ +export const Route = createFileRoute("/$account")({ component: App, }); @@ -53,12 +53,15 @@ function App() { } function Navigation() { + // @ts-ignore, useless + const { account } = useParams({ strict: false }); + return (
- + {({ isActive }) => (
)} - + {({ isActive }) => (
)} - + {({ isActive }) => (
- + {({ isActive }) => (
)} - + {({ isActive }) => (
{ const events = await ark.get_events( @@ -38,6 +40,7 @@ function LocalTimeline() { }); const renderItem = (event: Event) => { + if (!event) return; switch (event.kind) { case Kind.Repost: return ; diff --git a/apps/desktop2/src/routes/app/space.lazy.tsx b/apps/desktop2/src/routes/$account/space.lazy.tsx similarity index 85% rename from apps/desktop2/src/routes/app/space.lazy.tsx rename to apps/desktop2/src/routes/$account/space.lazy.tsx index 9e6ead59..857a601e 100644 --- a/apps/desktop2/src/routes/app/space.lazy.tsx +++ b/apps/desktop2/src/routes/$account/space.lazy.tsx @@ -1,6 +1,6 @@ import { createLazyFileRoute } from "@tanstack/react-router"; -export const Route = createLazyFileRoute("/app/space")({ +export const Route = createLazyFileRoute("/$account/space")({ component: Space, }); diff --git a/apps/desktop2/src/routes/auth/create/self.lazy.tsx b/apps/desktop2/src/routes/auth/create/self.lazy.tsx index 12a5ef51..547045f1 100644 --- a/apps/desktop2/src/routes/auth/create/self.lazy.tsx +++ b/apps/desktop2/src/routes/auth/create/self.lazy.tsx @@ -26,7 +26,8 @@ function Create() { try { await ark.save_account(keys); navigate({ - to: "/app/home/local", + to: "/$account/home/local", + params: { account: keys.npub }, search: { onboarding: true }, replace: true, }); diff --git a/apps/desktop2/src/routes/auth/import.lazy.tsx b/apps/desktop2/src/routes/auth/import.lazy.tsx index 811a0d4c..3de95d31 100644 --- a/apps/desktop2/src/routes/auth/import.lazy.tsx +++ b/apps/desktop2/src/routes/auth/import.lazy.tsx @@ -32,7 +32,8 @@ function Import() { nsec: key, }); navigate({ - to: "/app/home", + to: "/$account/home/local", + params: { account: npub }, search: { onboarding: true }, replace: true, }); diff --git a/apps/desktop2/src/routes/index.tsx b/apps/desktop2/src/routes/index.tsx index ebba108f..64be4989 100644 --- a/apps/desktop2/src/routes/index.tsx +++ b/apps/desktop2/src/routes/index.tsx @@ -20,10 +20,12 @@ export const Route = createFileRoute("/")({ }); // Only 1 account, skip account selection screen case 1: - const loadAccount = await ark.load_selected_account(accounts[0].npub); + const account = accounts[0].npub; + const loadAccount = await ark.load_selected_account(account); if (loadAccount) { throw redirect({ - to: "/app/home/local", + to: "/$account/home/local", + params: { account }, search: { redirect: location.href, }, @@ -48,7 +50,8 @@ function Screen() { const loadAccount = await ark.load_selected_account(npub); if (loadAccount) { navigate({ - to: "/app/home", + to: "/$account/home/local", + params: { account: npub }, replace: true, }); } diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 47afa843..8ebc7575 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -47,3 +47,18 @@ default = ["custom-protocol"] # this feature is used used for production builds where `devPath` points to the filesystem # DO NOT remove this custom-protocol = ["tauri/custom-protocol"] + +[profile.dev.package."*"] +opt-level = 3 + +[profile.release] +codegen-units = 1 +lto = true +panic = "abort" +incremental = false +opt-level = 3 +strip = true +rpath = false +debug = false +debug-assertions = false +overflow-checks = false diff --git a/src-tauri/src/nostr/metadata.rs b/src-tauri/src/nostr/metadata.rs index cd87650f..bf978f4e 100644 --- a/src-tauri/src/nostr/metadata.rs +++ b/src-tauri/src/nostr/metadata.rs @@ -26,8 +26,11 @@ pub async fn get_profile(id: &str, state: State<'_, Nostr>) -> Result