import { NwcProfile } from "@mutinywallet/mutiny-wasm"; import { A, useSearchParams } from "@solidjs/router"; import { Scan } from "lucide-solid"; import { createResource, createSignal, ErrorBoundary, For, Show } from "solid-js"; import { QRCodeSVG } from "solid-qr-code"; import { AmountSats, AmountSmall, BackLink, Button, Collapser, ConfirmDialog, DefaultMain, InfoBox, KeyValue, LargeHeader, MutinyWalletGuard, NavBar, NiceP, SettingsCard, ShareCard, SimpleDialog, SmallHeader, TinyText, VStack } from "~/components"; import { NWCEditor } from "~/components/NWCEditor"; import { useI18n } from "~/i18n/context"; import { useMegaStore } from "~/state/megaStore"; import { createDeepSignal, openLinkProgrammatically } from "~/utils"; function Spending(props: { spent: number; remaining: number }) { const i18n = useI18n(); return (
{i18n.t("settings.connections.spent")} {i18n.t("settings.connections.remaining")}
); } function NwcDetails(props: { profile: NwcProfile; refetch: () => void; onEdit?: () => void; }) { const i18n = useI18n(); const [state, _actions, sw] = useMegaStore(); const [confirmOpen, setConfirmOpen] = createSignal(false); function confirmDelete() { setConfirmOpen(true); } async function deleteProfile() { try { await sw.delete_nwc_profile(props.profile.index); setConfirmOpen(false); props.refetch(); } catch (e) { console.error(e); } } async function openInNostrClient() { const uri = props.profile.nwc_uri; await openLinkProgrammatically(uri, { title: i18n.t("settings.connections.nostr_client_not_found"), description: i18n.t( "settings.connections.client_not_found_description" ) }); } return ( = 1000 && props.profile.nwc_uri}>
{i18n.t("settings.connections.careful")} {/* No interval for gifts */} {props.profile.budget_period} {new Date( state.subscription_timestamp! * 1000 ).toLocaleDateString()} {i18n.t("settings.connections.disabled")} } > setConfirmOpen(false)} > {props.profile.tag === "Subscription" ? i18n.t("settings.connections.disable_connection_confirm") : i18n.t("settings.connections.confirm_delete")}
); } function Nwc() { const i18n = useI18n(); const [_state, _actions, sw] = useMegaStore(); async function fetchNwcProfiles() { try { const profiles = await sw.get_nwc_profiles(); console.log("profiles", profiles); if (!profiles) return []; return profiles; } catch (e) { console.error(e); } } const [nwcProfiles, { refetch }] = createResource(fetchNwcProfiles, { storage: createDeepSignal }); const [searchParams, setSearchParams] = useSearchParams(); const [callbackDialogOpen, setCallbackDialogOpen] = createSignal(false); const [callbackUri, setCallbackUri] = createSignal(); // Profile creation / editing const [dialogOpen, setDialogOpen] = createSignal( !!searchParams.queryName || !!searchParams.nwa ); function handleToggleOpen(open: boolean) { setDialogOpen(open); // If they close the dialog clear the search params setSearchParams({ nwa: undefined, name: undefined }); } const [profileToOpen, setProfileToOpen] = createSignal(); function editProfile(profile: NwcProfile) { if (profile && typeof profile.index === "number") { setProfileToOpen(profile.index); setDialogOpen(true); } } function createProfile() { setProfileToOpen(undefined); setDialogOpen(true); } const [newConnection, setNewConnection] = createSignal(); async function handleSave( indexToOpen?: number, nwcUriForCallback?: string ) { setDialogOpen(false); refetch(); if (indexToOpen) { setNewConnection(indexToOpen); } const callbackUriScheme = searchParams.callbackUri; if (callbackUriScheme && nwcUriForCallback) { const fullURI = nwcUriForCallback.replace( "nostr+walletconnect://", `${callbackUriScheme}://` ); setCallbackUri(fullURI); setCallbackDialogOpen(true); } setSearchParams({ nwa: undefined, name: undefined }); } async function openCallbackUri() { await openLinkProgrammatically(callbackUri()); setSearchParams({ callbackUri: "" }); setCallbackDialogOpen(false); } return ( 0}> p.tag !== "Gift")}> {(profile) => ( editProfile(profile)} profile={profile} refetch={refetch} /> )} ( {e.message} )} > ); } export function Connections() { const i18n = useI18n(); return (
{" "}
{i18n.t("settings.connections.title")} {i18n.t("settings.connections.authorize")}
); }