import { useArk } from "@lume/ark"; import { InfoIcon, LoaderIcon } from "@lume/icons"; import { useStorage } from "@lume/storage"; import { FETCH_LIMIT } from "@lume/utils"; import { NDKKind } from "@nostr-dev-kit/ndk"; import * as Switch from "@radix-ui/react-switch"; import { useQueryClient } from "@tanstack/react-query"; import { isPermissionGranted, requestPermission, } from "@tauri-apps/plugin-notification"; import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { toast } from "sonner"; export function OnboardingScreen() { const ark = useArk(); const storage = useStorage(); const queryClient = useQueryClient(); const navigate = useNavigate(); const [loading, setLoading] = useState(false); const [apiKey, setAPIKey] = useState(""); const [settings, setSettings] = useState({ notification: false, lowPower: false, translation: false, }); const toggleLowPower = async () => { await storage.createSetting("lowPower", String(+!settings.lowPower)); setSettings((state) => ({ ...state, autoupdate: !settings.lowPower })); }; const toggleTranslation = async () => { await storage.createSetting("translation", String(+!settings.translation)); setSettings((state) => ({ ...state, translation: !settings.translation })); }; const toggleNofitication = async () => { await requestPermission(); setSettings((state) => ({ ...state, notification: !settings.notification, })); }; const completeAuth = async () => { if (settings.translation) { if (!apiKey.length) return toast.warning( "You need to provide Translate API if enable translation", ); await storage.createSetting("translateApiKey", apiKey); } setLoading(true); // get account contacts await ark.getUserContacts(ark.account.pubkey); // refetch newsfeed await queryClient.prefetchInfiniteQuery({ queryKey: ["timeline-9999"], initialPageParam: 0, queryFn: async ({ signal, pageParam, }: { signal: AbortSignal; pageParam: number; }) => { const events = await ark.getInfiniteEvents({ filter: { kinds: [NDKKind.Text, NDKKind.Repost], authors: ark.account.contacts, }, limit: FETCH_LIMIT, pageParam, signal, }); return events; }, }); navigate("/"); }; useEffect(() => { async function loadSettings() { // get notification permission const permissionGranted = await isPermissionGranted(); setSettings((prev) => ({ ...prev, notification: permissionGranted })); // get other settings const data = await storage.getAllSettings(); for (const item of data) { if (item.key === "lowPower") setSettings((prev) => ({ ...prev, lowPower: !!parseInt(item.value), })); if (item.key === "translation") setSettings((prev) => ({ ...prev, translation: !!parseInt(item.value), })); } } loadSettings(); }, []); return (
Let's start personalizing your experience.
Enabling push notifications will allow you to receive notifications from Lume.
Limited relay connection and hide all media, sustainable for low network environment
Translate text to your preferred language, powered by Nostr Wine
There are many more settings you can configure from the "Settings" screen. Be sure to visit it later.