import type { FC } from "react"; import { Button, Paper, Stack, Text } from "@mantine/core"; import { StateView } from "@wealthledger/ui"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; import type { IncomeSummary as IncomeSummaryData } from "@/entities/income"; import { formatMoney, formatSnapshotTime } from "@/shared/lib"; type IncomeSummaryProps = | { lastSuccessfulAt?: null | string; refreshError?: boolean; stale?: boolean; state: "loaded"; summary: IncomeSummaryData; to: string; } | { retry: () => void; state: "error"; to: string } | { state: "empty"; to: string } | { state: "loading"; to: string } | { state: "partial"; to: string }; const IncomeSummary: FC = (props) => { const { t } = useTranslation(); if (props.state === "loading" || props.state === "partial") return ( {t( props.state === "partial" ? "investment.partial" : "income.summaryLoading", )} ); if (props.state === "error") return ( {t("income.summaryRetry")} } error text={t("income.errorText")} title={t("income.summaryError")} /> ); if (props.state === "empty") return ( {t("income.summaryEmpty")} ); return ( {!!props.lastSuccessfulAt && ( {t("investment.sourceTime", { date: formatSnapshotTime(props.lastSuccessfulAt), })} )} {!!props.stale && {t("investment.stale")}} {!!props.refreshError && ( {t("income.refreshError")} )} {props.summary.totalsByCurrency.map(total => ( {formatMoney(total.total)} {t("income.coupon")}: {formatMoney(total.coupon)} ยท{" "} {t("income.dividend")}: {formatMoney(total.dividend)} ))} ); }; export { IncomeSummary };