import { FormattedMessage, FormattedDate, FormattedNumber, useIntl } from "react-intl"; import { useState } from "react"; import SnortApi, { Subscription, SubscriptionError } from "SnortApi"; import { mapPlanName, mapSubscriptionErrorCode } from "."; import AsyncButton from "Element/AsyncButton"; import Icon from "Icons/Icon"; import useEventPublisher from "Hooks/useEventPublisher"; import SendSats from "Element/SendSats"; import Nip5Service from "Element/Nip5Service"; import { SnortNostrAddressService } from "Pages/NostrAddressPage"; import Nip05 from "Element/User/Nip05"; export default function SubscriptionCard({ sub }: { sub: Subscription }) { const { publisher } = useEventPublisher(); const { formatMessage } = useIntl(); const created = new Date(sub.created * 1000); const expires = new Date(sub.expires * 1000); const now = new Date(); const daysToExpire = Math.floor((expires.getTime() - now.getTime()) / 8.64e7); const hoursToExpire = Math.floor((expires.getTime() - now.getTime()) / 3.6e6); const isExpired = sub.state === "expired"; const isNew = sub.state === "new"; const isPaid = sub.state === "paid"; const [invoice, setInvoice] = useState(""); const [error, setError] = useState(); const [months, setMonths] = useState(1); async function renew(id: string, months: number) { const api = new SnortApi(undefined, publisher); try { const rsp = await api.renewSubscription(id, months); setInvoice(rsp.pr); } catch (e) { if (e instanceof SubscriptionError) { setError(e); } } } function subFeatures() { return ( <> {!sub.handle && ( <>

(sub.handle = h)} /> )} {sub.handle && } ); } return ( <>
{mapPlanName(sub.type)}

{daysToExpire >= 1 && (

)} {daysToExpire >= 0 && daysToExpire < 1 && (

)} {isExpired && (

)} {isNew && (

)}
{(isExpired || isNew) && (
  renew(sub.id, months)}> {isExpired ? : }
setMonths(Number(e.target.value))} min={1} />
)} {isPaid && subFeatures()}
setInvoice("")} title={formatMessage({ defaultMessage: "Pay for subscription", })} /> {error && {mapSubscriptionErrorCode(error)}} ); }