feat: show zaps info in history

This commit is contained in:
2024-07-19 15:30:50 +01:00
parent ee581d9c29
commit 2c7a830882
5 changed files with 62 additions and 38 deletions

View File

@ -1,6 +1,7 @@
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import { profileLink } from "@/utils"; import { profileLink } from "@/utils";
import { hexToBech32 } from "@snort/shared";
interface MentionProps { interface MentionProps {
pubkey: string; pubkey: string;
@ -11,7 +12,7 @@ export function Mention({ pubkey }: MentionProps) {
const user = useUserProfile(pubkey); const user = useUserProfile(pubkey);
return ( return (
<Link to={profileLink(user, pubkey)} className="text-primary"> <Link to={profileLink(user, pubkey)} className="text-primary">
{user?.name || pubkey} {user?.name || hexToBech32("npub", pubkey).slice(0, 12)}
</Link> </Link>
); );
} }

View File

@ -1,6 +1,7 @@
import { Mention } from "@/element/mention";
import { BalanceHistoryResult, NostrStreamProvider } from "@/providers/zsz"; import { BalanceHistoryResult, NostrStreamProvider } from "@/providers/zsz";
import { eventLink } from "@/utils"; import { eventLink } from "@/utils";
import { NostrEvent } from "@snort/system"; import { EventKind, NostrEvent } from "@snort/system";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { FormattedMessage, FormattedNumber } from "react-intl"; import { FormattedMessage, FormattedNumber } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
@ -14,41 +15,59 @@ export default function BalanceHistory({ provider }: { provider?: NostrStreamPro
provider.history(page).then(setRows); provider.history(page).then(setRows);
}, []); }, []);
function eventDescription(ev: NostrEvent) {
if (ev.kind === EventKind.LiveEvent) {
return (
<Link to={`/${eventLink(ev)}`} className="text-primary">
<FormattedMessage defaultMessage="Past Stream" />
</Link>
);
} else if (ev.kind === EventKind.ZapRequest) {
return (
<div className="flex flex-col">
<div className="flex items-center gap-1">
<FormattedMessage defaultMessage="Zap from" />
<Mention pubkey={ev.pubkey} />
</div>
{ev.content ? <q className="text-sm block">{ev.content}</q> : ""}
</div>
);
}
}
return ( return (
<div className="grid auto-rows-auto grid-cols-3 gap-1"> <table className="table-auto border-collapse">
<div> <thead>
<FormattedMessage defaultMessage="Time" /> <tr>
</div> <th>
<div> <FormattedMessage defaultMessage="Time" />
<FormattedMessage defaultMessage="Description" /> </th>
</div> <th>
<div> <FormattedMessage defaultMessage="Description" />
<FormattedMessage defaultMessage="Amount" /> </th>
</div> <th>
{rows?.items.map(a => { <FormattedMessage defaultMessage="Amount" />
let ev: NostrEvent | undefined; </th>
if (a.desc && a.desc.startsWith("{")) { </tr>
ev = JSON.parse(a.desc) as NostrEvent; </thead>
} <tbody>
return ( {rows?.items.map(a => {
<> let ev: NostrEvent | undefined;
<div>{new Date(a.created * 1000).toLocaleString()}</div> if (a.desc && a.desc.startsWith("{")) {
<div> ev = JSON.parse(a.desc) as NostrEvent;
{ev ? ( }
<Link to={`/${eventLink(ev)}`} className="text-primary"> return (
<FormattedMessage defaultMessage="Past Stream" /> <tr>
</Link> <td>{new Date(a.created * 1000).toLocaleString()}</td>
) : ( <td>{ev ? eventDescription(ev) : a.desc}</td>
a.desc <td className={a.type === 0 ? "text-green-400" : "text-red-400"}>
)} {a.type === 0 ? "+" : "-"}
</div> <FormattedNumber value={a.amount} />
<div className={a.type === 0 ? "text-green-400" : "text-red-400"}> </td>
{a.type === 0 ? "+" : "-"} </tr>
<FormattedNumber value={a.amount} /> );
</div> })}
</> </tbody>
); </table>
})}
</div>
); );
} }

View File

@ -119,6 +119,9 @@
"5JcXdV": { "5JcXdV": {
"defaultMessage": "Create Account" "defaultMessage": "Create Account"
}, },
"5L4ati": {
"defaultMessage": "Zap from"
},
"5LXWMX": { "5LXWMX": {
"defaultMessage": "New Goal" "defaultMessage": "New Goal"
}, },

View File

@ -20,7 +20,7 @@ export default function SettingsPage() {
const naviage = useNavigate(); const naviage = useNavigate();
return ( return (
<div className="rounded-2xl p-3 md:w-[700px] mx-auto w-full"> <div className="rounded-2xl p-3 md:w-[800px] mx-auto w-full">
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<h1> <h1>
<FormattedMessage defaultMessage="Settings" /> <FormattedMessage defaultMessage="Settings" />

View File

@ -39,6 +39,7 @@
"50+/JW": "Stream Key is required", "50+/JW": "Stream Key is required",
"58DXVG": "To get started, grab your stream key from the platform you wish to forward to.", "58DXVG": "To get started, grab your stream key from the platform you wish to forward to.",
"5JcXdV": "Create Account", "5JcXdV": "Create Account",
"5L4ati": "Zap from",
"5LXWMX": "New Goal", "5LXWMX": "New Goal",
"5QYdPU": "Start Time", "5QYdPU": "Start Time",
"5Wwopw": "Pricing", "5Wwopw": "Pricing",