diff --git a/package.json b/package.json index a24cb8af..4d3651b3 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "@radix-ui/react-toolbar": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.14.0", - "@tanstack/react-query-devtools": "^5.14.0", "@tauri-apps/api": "2.0.0-alpha.11", "@tauri-apps/cli": "2.0.0-alpha.17", "@tauri-apps/plugin-autostart": "2.0.0-alpha.3", @@ -117,7 +116,6 @@ "tailwindcss": "^3.3.6", "typescript": "^5.3.3", "vite": "^5.0.10", - "vite-plugin-top-level-await": "^1.4.1", "vite-tsconfig-paths": "^4.2.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8be6fe86..4bc65519 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,9 +53,6 @@ dependencies: '@tanstack/react-query': specifier: ^5.14.0 version: 5.14.0(react@18.2.0) - '@tanstack/react-query-devtools': - specifier: ^5.14.0 - version: 5.14.0(@tanstack/react-query@5.14.0)(react@18.2.0) '@tauri-apps/api': specifier: 2.0.0-alpha.11 version: 2.0.0-alpha.11 @@ -298,9 +295,6 @@ devDependencies: vite: specifier: ^5.0.10 version: 5.0.10(@types/node@20.10.4) - vite-plugin-top-level-await: - specifier: ^1.4.1 - version: 1.4.1(vite@5.0.10) vite-tsconfig-paths: specifier: ^4.2.2 version: 4.2.2(typescript@5.3.3)(vite@5.0.10) @@ -800,6 +794,12 @@ packages: '@noble/hashes': 1.3.1 dev: false + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + dependencies: + '@noble/hashes': 1.3.3 + dev: false + /@noble/hashes@1.3.1: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} engines: {node: '>= 16'} @@ -868,7 +868,7 @@ packages: /@nostr-fetch/kernel@0.14.0: resolution: {integrity: sha512-gJWlOXYBkb3SqTP8WTm7E8dwGA7g+TaYtZntjMf3L2wzivS2OjVLSURyuidSyzdpK8kPpyiL2O3RuotssncO1g==} dependencies: - '@noble/curves': 1.1.0 + '@noble/curves': 1.3.0 '@noble/hashes': 1.3.3 dev: false @@ -1773,16 +1773,6 @@ packages: engines: {node: '>=14.0.0'} dev: false - /@rollup/plugin-virtual@3.0.2: - resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dev: true - /@rollup/rollup-android-arm-eabi@4.9.0: resolution: {integrity: sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==} cpu: [arm] @@ -2055,21 +2045,6 @@ packages: resolution: {integrity: sha512-OEri9fVDYT8XEqgh/dc6fFp1niyqu+MDY+Vp/LwU+scdk9xQLZ7KdUMEUh/sqTEjRM5BlFzAhAv+EIYcvSxt0Q==} dev: false - /@tanstack/query-devtools@5.13.5: - resolution: {integrity: sha512-effSYz9AWcZ6sNd+c8LCBYFIuDZApoCTXEpRlEYChBZpMz9QUUVMLToThwCyUY49+T5pANL3XxgZf3HV7hwJlg==} - dev: false - - /@tanstack/react-query-devtools@5.14.0(@tanstack/react-query@5.14.0)(react@18.2.0): - resolution: {integrity: sha512-A/I/jYeyyNduI3+Kb84emkvqw5YOt7+MpO1ZpfYFyfHzCd5dQ7nWuCZzI67gS/JARwqRfGkuuuJkTfuKnipEzA==} - peerDependencies: - '@tanstack/react-query': ^5.14.0 - react: ^18.0.0 - dependencies: - '@tanstack/query-devtools': 5.13.5 - '@tanstack/react-query': 5.14.0(react@18.2.0) - react: 18.2.0 - dev: false - /@tanstack/react-query@5.14.0(react@18.2.0): resolution: {integrity: sha512-+qCooNZr7aGr6a0UEblfEgDSO1y+H7h7JnT4nUlbyfgCGE695lmBiqTciuW1C1Jr6J6Z2bwyd6YmBDKFKszWhA==} peerDependencies: @@ -6023,11 +5998,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true - /virtua@0.17.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xTlxQ2/mDNSpU1tsdmpZT3kgoxSnjodTfs+OUeahkTSlBEWXnBujXKWXdl+hIRKOF1Igq8/gKPYltGSQV9p2eA==} peerDependencies: @@ -6038,20 +6008,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /vite-plugin-top-level-await@1.4.1(vite@5.0.10): - resolution: {integrity: sha512-hogbZ6yT7+AqBaV6lK9JRNvJDn4/IJvHLu6ET06arNfo0t2IsyCaon7el9Xa8OumH+ESuq//SDf8xscZFE0rWw==} - peerDependencies: - vite: '>=2.8' - dependencies: - '@rollup/plugin-virtual': 3.0.2 - '@swc/core': 1.3.100 - uuid: 9.0.1 - vite: 5.0.10(@types/node@20.10.4) - transitivePeerDependencies: - - '@swc/helpers' - - rollup - dev: true - /vite-tsconfig-paths@4.2.2(typescript@5.3.3)(vite@5.0.10): resolution: {integrity: sha512-dq0FjyxHHDnp0uS3P12WEOX2W7NeuLzX9AWP38D7Zw2CTbFErapwQVlCiT5DMJcVWKQ1MMdTe92PZl/rBQ7qcw==} peerDependencies: diff --git a/src/app/depot/index.tsx b/src/app/depot/index.tsx index a9ac8094..6ea90286 100644 --- a/src/app/depot/index.tsx +++ b/src/app/depot/index.tsx @@ -15,7 +15,8 @@ export function DepotScreen() { setLoading(true); await ark.launchDepot(); - await delay(5000); // delay 5s to make sure depot is running + await ark.createSetting('depot', '1'); + await delay(2000); // delay 2s to make sure depot is running // default depot url: ws://localhost:6090 // #TODO: user can custom depot url diff --git a/src/libs/ark/ark.ts b/src/libs/ark/ark.ts index 96d909c5..afe74904 100644 --- a/src/libs/ark/ark.ts +++ b/src/libs/ark/ark.ts @@ -51,6 +51,7 @@ export class Ark { outbox: boolean; media: boolean; hashtag: boolean; + depot: boolean; }; constructor({ storage, platform }: { storage: Database; platform: Platform }) { @@ -62,6 +63,7 @@ export class Ark { outbox: false, media: true, hashtag: true, + depot: false, }; } @@ -162,6 +164,7 @@ export class Ark { if (item.key === 'media') this.settings.media = !!parseInt(item.value); if (item.key === 'hashtag') this.settings.hashtag = !!parseInt(item.value); if (item.key === 'autoupdate') this.settings.autoupdate = !!parseInt(item.value); + if (item.key === 'depot') this.settings.depot = !!parseInt(item.value); } const explicitRelayUrls = normalizeRelayUrlSet([ diff --git a/src/libs/ark/provider.tsx b/src/libs/ark/provider.tsx index 9ab4eb89..70ad0cbb 100644 --- a/src/libs/ark/provider.tsx +++ b/src/libs/ark/provider.tsx @@ -8,6 +8,7 @@ import { PropsWithChildren, createContext, useContext, useEffect, useState } fro import { Ark } from '@libs/ark'; import { LoaderIcon } from '@shared/icons'; import { QUOTES } from '@utils/constants'; +import { delay } from '@utils/delay'; const ArkContext = createContext(undefined); @@ -23,8 +24,8 @@ const ArkProvider = ({ children }: PropsWithChildren) => { const _ark = new Ark({ storage: sqlite, platform: platformName }); await _ark.init(); + // check update if (_ark.settings.autoupdate) { - // check update const update = await check(); // install new version if (update) { @@ -35,6 +36,12 @@ const ArkProvider = ({ children }: PropsWithChildren) => { } } + // start depot + if (_ark.settings.depot) { + await ark.launchDepot(); + await delay(2000); + } + setArk(_ark); } catch (e) { console.error(e); diff --git a/src/main.jsx b/src/main.jsx index ea7c8de2..65fec4ec 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,5 +1,4 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { createRoot } from 'react-dom/client'; import { Toaster } from 'sonner'; import { ArkProvider } from '@libs/ark/provider'; @@ -19,7 +18,6 @@ const root = createRoot(container); root.render( - diff --git a/src/shared/widgets/index.ts b/src/shared/widgets/index.ts index a8d76f09..1b09b219 100644 --- a/src/shared/widgets/index.ts +++ b/src/shared/widgets/index.ts @@ -7,6 +7,7 @@ export * from './file'; export * from './hashtag'; export * from './thread'; export * from './group'; +export * from './titleBar'; export * from './nostrBand/trendingAccounts'; export * from './nostrBand/trendingNotes'; export * from './other/wrapper'; @@ -16,5 +17,4 @@ export * from './other/widgetList'; export * from './other/addGroupFeeds'; export * from './other/addHashtagFeeds'; export * from './other/userProfile'; -export * from './titleBar'; export * from './other/nostrBandUserProfile'; diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx index e63fb6e0..24e6fc24 100644 --- a/src/shared/widgets/newsfeed.tsx +++ b/src/shared/widgets/newsfeed.tsx @@ -1,6 +1,6 @@ import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useInfiniteQuery } from '@tanstack/react-query'; -import { useCallback, useMemo, useRef } from 'react'; +import { useMemo, useRef } from 'react'; import { VList, VListHandle } from 'virtua'; import { useArk } from '@libs/ark'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; @@ -15,6 +15,8 @@ import { FETCH_LIMIT } from '@utils/constants'; export function NewsfeedWidget() { const ark = useArk(); + const ref = useRef(); + const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: ['newsfeed'], @@ -48,31 +50,27 @@ export function NewsfeedWidget() { refetchOnWindowFocus: false, }); - const ref = useRef(); const allEvents = useMemo( () => (data ? data.pages.flatMap((page) => page) : []), [data] ); - const renderItem = useCallback( - (event: NDKEvent) => { - switch (event.kind) { - case NDKKind.Text: - return ; - case NDKKind.Repost: - return ; - default: - return ; - } - }, - [data] - ); + const renderItem = (event: NDKEvent) => { + switch (event.kind) { + case NDKKind.Text: + return ; + case NDKKind.Repost: + return ; + default: + return ; + } + }; return ( - + {status === 'pending' ? (
@@ -91,7 +89,7 @@ export function NewsfeedWidget() { className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none" > {isFetchingNextPage ? ( - + ) : ( <> diff --git a/src/shared/widgets/other/liveUpdater.tsx b/src/shared/widgets/other/liveUpdater.tsx index a9f5cea3..16166a79 100644 --- a/src/shared/widgets/other/liveUpdater.tsx +++ b/src/shared/widgets/other/liveUpdater.tsx @@ -6,9 +6,10 @@ import { ChevronUpIcon } from '@shared/icons'; export function LiveUpdater({ status }: { status: QueryStatus }) { const ark = useArk(); - const [events, setEvents] = useState([]); const queryClient = useQueryClient(); + const [events, setEvents] = useState([]); + const update = async () => { await queryClient.setQueryData( ['newsfeed'], diff --git a/vite.config.ts b/vite.config.ts index 640e7286..94e36316 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,17 +1,9 @@ import react from '@vitejs/plugin-react-swc'; import { defineConfig } from 'vite'; -import topLevelAwait from 'vite-plugin-top-level-await'; import viteTsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ - plugins: [ - react(), - viteTsconfigPaths(), - topLevelAwait({ - promiseExportName: '__tla', - promiseImportName: (i) => `__tla_${i}`, - }), - ], + plugins: [react(), viteTsconfigPaths()], envPrefix: ['VITE_', 'TAURI_'], build: { target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',