import send from '~/assets/icons/send.svg'; import receive from '~/assets/icons/receive.svg'; import { Card, LoadingSpinner, SmallAmount, SmallHeader, VStack } from './layout'; import { For, Match, ParentComponent, Suspense, Switch, createMemo, createResource, createSignal } from 'solid-js'; import { useMegaStore } from '~/state/megaStore'; import { MutinyInvoice } from '@mutinywallet/mutiny-wasm'; import { prettyPrintTime } from '~/utils/prettyPrintTime'; import { JsonModal } from '~/components/JsonModal'; import mempoolTxUrl from '~/utils/mempoolTxUrl'; const THREE_COLUMNS = 'grid grid-cols-[auto,1fr,auto] gap-4 py-2 px-2 border-b border-neutral-800 last:border-b-0' const CENTER_COLUMN = 'min-w-0 overflow-hidden max-w-full' const MISSING_LABEL = 'py-1 px-2 bg-m-red rounded inline-block text-sm' const RIGHT_COLUMN = 'flex flex-col items-right text-right' type OnChainTx = { txid: string received: number sent: number fee?: number confirmation_time?: { height: number timestamp: number } } type Utxo = { outpoint: string txout: { value: number script_pubkey: string } keychain: string is_spent: boolean } const SubtleText: ParentComponent = (props) => { return

{props.children}

} function OnChainItem(props: { item: OnChainTx }) { const isReceive = createMemo(() => props.item.received > 0); const [open, setOpen] = createSignal(false) return ( <> Mempool Link
setOpen(!open())}> {isReceive() ? receive arrow : send arrow}

Label Missing

{isReceive() ? : } {/*

Txid: {props.item.txid}

*/}
{isReceive() ? "RECEIVE" : "SEND"} {props.item.confirmation_time ? prettyPrintTime(props.item.confirmation_time.timestamp) : "Unconfirmed"}
) } function InvoiceItem(props: { item: MutinyInvoice }) { const isSend = createMemo(() => props.item.is_send); const [open, setOpen] = createSignal(false) return ( <>
setOpen(!open())}> {isSend() ? send arrow : receive arrow}

Label Missing

{isSend() ? "SEND" : "RECEIVE"} {prettyPrintTime(Number(props.item.expire))}
) } function Utxo(props: { item: Utxo }) { const spent = createMemo(() => props.item.is_spent); const [open, setOpen] = createSignal(false) return ( <>
setOpen(!open())}> receive arrow

Label Missing

{spent() ? "SPENT" : "UNSPENT"}
) } export function Activity() { const [state, _] = useMegaStore(); const getTransactions = async () => { console.log("Getting onchain txs"); const txs = await state.node_manager?.list_onchain() as OnChainTx[]; return txs.reverse(); } const getInvoices = async () => { console.log("Getting invoices"); const invoices = await state.node_manager?.list_invoices() as MutinyInvoice[]; return invoices.filter((inv) => inv.paid).reverse(); } const getUtXos = async () => { console.log("Getting utxos"); const utxos = await state.node_manager?.list_utxos() as Utxo[]; return utxos; } const [transactions, { refetch: _refetchTransactions }] = createResource(getTransactions); const [invoices, { refetch: _refetchInvoices }] = createResource(getInvoices); const [utxos, { refetch: _refetchUtxos }] = createResource(getUtXos); return ( No transactions (empty state) = 0}> {(tx) => } No invoices (empty state) = 0}> {(invoice) => } No utxos (empty state) = 0}> {(utxo) => } ) }