prefetch data
This commit is contained in:
@@ -1,6 +1,81 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { NDKKind } from '@nostr-dev-kit/ndk';
|
||||||
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { Link, useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { useArk } from '@libs/ark';
|
||||||
|
|
||||||
|
import { LoaderIcon } from '@shared/icons';
|
||||||
|
|
||||||
|
import { FETCH_LIMIT } from '@utils/constants';
|
||||||
|
|
||||||
export function FinishScreen() {
|
export function FinishScreen() {
|
||||||
|
const { ark } = useArk();
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const prefetch = async () => {
|
||||||
|
if (!ark.account.contacts.length) return navigate('/');
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
// prefetch newsfeed
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['newsfeed'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost],
|
||||||
|
authors: !ark.account.contacts.length
|
||||||
|
? [ark.account.pubkey]
|
||||||
|
: ark.account.contacts,
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// prefetch notification
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['notification'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
|
||||||
|
'#p': [ark.account.pubkey],
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
navigate('/');
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-full w-full items-center justify-center">
|
<div className="flex h-full w-full items-center justify-center">
|
||||||
<div className="mx-auto flex w-full max-w-md flex-col gap-10">
|
<div className="mx-auto flex w-full max-w-md flex-col gap-10">
|
||||||
@@ -17,12 +92,13 @@ export function FinishScreen() {
|
|||||||
>
|
>
|
||||||
Start tutorial
|
Start tutorial
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<button
|
||||||
to="/"
|
type="button"
|
||||||
|
onClick={prefetch}
|
||||||
className="inline-flex h-11 w-full items-center justify-center rounded-lg bg-neutral-100 font-medium hover:bg-neutral-200 dark:bg-neutral-900 dark:hover:bg-neutral-800"
|
className="inline-flex h-11 w-full items-center justify-center rounded-lg bg-neutral-100 font-medium hover:bg-neutral-200 dark:bg-neutral-900 dark:hover:bg-neutral-800"
|
||||||
>
|
>
|
||||||
Skip
|
{loading ? <LoaderIcon className="h-4 w-4 animate-spin" /> : 'Skip'}
|
||||||
</Link>
|
</button>
|
||||||
<p className="text-center text-sm font-medium text-neutral-500 dark:text-neutral-600">
|
<p className="text-center text-sm font-medium text-neutral-500 dark:text-neutral-600">
|
||||||
You need to restart app to make changes in previous step take effect or you
|
You need to restart app to make changes in previous step take effect or you
|
||||||
can continue with Lume default settings
|
can continue with Lume default settings
|
||||||
|
|||||||
@@ -1,6 +1,81 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { NDKKind } from '@nostr-dev-kit/ndk';
|
||||||
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { Link, useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { useArk } from '@libs/ark';
|
||||||
|
|
||||||
|
import { LoaderIcon } from '@shared/icons';
|
||||||
|
|
||||||
|
import { FETCH_LIMIT } from '@utils/constants';
|
||||||
|
|
||||||
export function TutorialFinishScreen() {
|
export function TutorialFinishScreen() {
|
||||||
|
const { ark } = useArk();
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const prefetch = async () => {
|
||||||
|
if (!ark.account.contacts.length) return navigate('/');
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
// prefetch newsfeed
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['newsfeed'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost],
|
||||||
|
authors: !ark.account.contacts.length
|
||||||
|
? [ark.account.pubkey]
|
||||||
|
: ark.account.contacts,
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// prefetch notification
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['notification'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
|
||||||
|
'#p': [ark.account.pubkey],
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
navigate('/');
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-full w-full items-center justify-center">
|
<div className="flex h-full w-full items-center justify-center">
|
||||||
<div className="mx-auto flex w-full max-w-md flex-col gap-10">
|
<div className="mx-auto flex w-full max-w-md flex-col gap-10">
|
||||||
@@ -11,12 +86,17 @@ export function TutorialFinishScreen() {
|
|||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<Link
|
<button
|
||||||
to="/"
|
type="button"
|
||||||
|
onClick={prefetch}
|
||||||
className="inline-flex h-11 w-full items-center justify-center rounded-lg bg-blue-500 font-medium text-white hover:bg-blue-600"
|
className="inline-flex h-11 w-full items-center justify-center rounded-lg bg-blue-500 font-medium text-white hover:bg-blue-600"
|
||||||
>
|
>
|
||||||
Start using
|
{loading ? (
|
||||||
</Link>
|
<LoaderIcon className="h-4 w-4 animate-spin" />
|
||||||
|
) : (
|
||||||
|
'Start using Lume'
|
||||||
|
)}
|
||||||
|
</button>
|
||||||
<Link
|
<Link
|
||||||
to="https://nostr.how/"
|
to="https://nostr.how/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|||||||
@@ -445,7 +445,6 @@ export class Ark {
|
|||||||
|
|
||||||
public async getUserProfile({ pubkey }: { pubkey: string }) {
|
public async getUserProfile({ pubkey }: { pubkey: string }) {
|
||||||
try {
|
try {
|
||||||
console.log(pubkey);
|
|
||||||
const user = this.#ndk.getUser({ pubkey });
|
const user = this.#ndk.getUser({ pubkey });
|
||||||
const profile = await user.fetchProfile({
|
const profile = await user.fetchProfile({
|
||||||
cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST,
|
cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST,
|
||||||
@@ -472,7 +471,7 @@ export class Ark {
|
|||||||
(user) => user.pubkey
|
(user) => user.pubkey
|
||||||
);
|
);
|
||||||
|
|
||||||
this.account.contacts = contacts;
|
if (pubkey === this.account.pubkey) this.account.contacts = contacts;
|
||||||
return contacts;
|
return contacts;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { NDKKind } from '@nostr-dev-kit/ndk';
|
||||||
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
import { ask } from '@tauri-apps/plugin-dialog';
|
import { ask } from '@tauri-apps/plugin-dialog';
|
||||||
import { platform } from '@tauri-apps/plugin-os';
|
import { platform } from '@tauri-apps/plugin-os';
|
||||||
import { relaunch } from '@tauri-apps/plugin-process';
|
import { relaunch } from '@tauri-apps/plugin-process';
|
||||||
@@ -10,7 +12,7 @@ import { Ark } from '@libs/ark';
|
|||||||
|
|
||||||
import { LoaderIcon } from '@shared/icons';
|
import { LoaderIcon } from '@shared/icons';
|
||||||
|
|
||||||
import { QUOTES } from '@utils/constants';
|
import { FETCH_LIMIT, QUOTES } from '@utils/constants';
|
||||||
|
|
||||||
interface ArkContext {
|
interface ArkContext {
|
||||||
ark: Ark;
|
ark: Ark;
|
||||||
@@ -24,6 +26,8 @@ const ArkProvider = ({ children }: PropsWithChildren<object>) => {
|
|||||||
const [ark, setArk] = useState<Ark>(undefined);
|
const [ark, setArk] = useState<Ark>(undefined);
|
||||||
const [isNewVersion, setIsNewVersion] = useState(false);
|
const [isNewVersion, setIsNewVersion] = useState(false);
|
||||||
|
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
async function initArk() {
|
async function initArk() {
|
||||||
try {
|
try {
|
||||||
const sqlite = await Database.load('sqlite:lume_v2.db');
|
const sqlite = await Database.load('sqlite:lume_v2.db');
|
||||||
@@ -61,6 +65,56 @@ const ArkProvider = ({ children }: PropsWithChildren<object>) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_ark.account) {
|
||||||
|
// prefetch newsfeed
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['newsfeed'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost],
|
||||||
|
authors: !ark.account.contacts.length
|
||||||
|
? [ark.account.pubkey]
|
||||||
|
: ark.account.contacts,
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// prefetch notification
|
||||||
|
await queryClient.prefetchInfiniteQuery({
|
||||||
|
queryKey: ['notification'],
|
||||||
|
initialPageParam: 0,
|
||||||
|
queryFn: async ({
|
||||||
|
signal,
|
||||||
|
pageParam,
|
||||||
|
}: {
|
||||||
|
signal: AbortSignal;
|
||||||
|
pageParam: number;
|
||||||
|
}) => {
|
||||||
|
return await ark.getInfiniteEvents({
|
||||||
|
filter: {
|
||||||
|
kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
|
||||||
|
'#p': [ark.account.pubkey],
|
||||||
|
},
|
||||||
|
limit: FETCH_LIMIT,
|
||||||
|
pageParam,
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setArk(_ark);
|
setArk(_ark);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|||||||
@@ -23,9 +23,19 @@ const NOSTR_MENTIONS = [
|
|||||||
'npub1',
|
'npub1',
|
||||||
'nprofile1',
|
'nprofile1',
|
||||||
'naddr1',
|
'naddr1',
|
||||||
|
'Nostr:npub1',
|
||||||
|
'Nostr:nprofile1',
|
||||||
|
'Nostr:naddre1',
|
||||||
];
|
];
|
||||||
|
|
||||||
const NOSTR_EVENTS = ['nostr:note1', 'note1', 'nostr:nevent1', 'nevent1'];
|
const NOSTR_EVENTS = [
|
||||||
|
'nostr:note1',
|
||||||
|
'note1',
|
||||||
|
'nostr:nevent1',
|
||||||
|
'nevent1',
|
||||||
|
'Nostr:note1',
|
||||||
|
'Nostr:nevent1',
|
||||||
|
];
|
||||||
|
|
||||||
// const BITCOINS = ['lnbc', 'bc1p', 'bc1q'];
|
// const BITCOINS = ['lnbc', 'bc1p', 'bc1q'];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user