import React, { useMemo, useState } from "react"; import { Stack, Typography } from "@mui/material"; import WidgetCard from "../../../components/WidgetCard"; import { useApi } from "../../../contexts/ApiContext"; import { useDashboardFilter } from "../../../contexts/DashboardFilterContext"; import { useI18n } from "../../../contexts/I18nContext"; import { useUser } from "../../../contexts/UserContext"; import { ContribComponent } from "../../../types"; import { pluralizeGranularity, PurchaseAmountItem } from "../../../types/dashboard"; import { hasPermission } from "../../../util/has_permission"; import ExchangeSwitch from "../components/ExchangeSwitch"; import SitesAmountsList from "../components/SitesAmountsList"; import SitesTotal from "../components/SitesTotal"; import { useExchangedData } from "../hooks/useExchangedData"; import { currencyFormat } from "../utils/amountToCurrencyString"; import { diffDatesByGranularityWithFilter } from "../utils/diffDatesByGranularity"; const PurchaseAmountWidget: ContribComponent = ({ data, sx }) => { const { t } = useI18n(); const { filter } = useDashboardFilter(); const api = useApi(); const { user } = useUser(); const [shouldExchange, setShouldExchange] = useState(true); const { exchangedData, totalAmount, onlyExchangedCurrency, exchangeAvailable } = useExchangedData( data, shouldExchange, ); const purchaseAmounts = data.length; const filteredAmount = diffDatesByGranularityWithFilter(filter); const isFourColumn = useMemo(() => { // Ugly check to see if the "Total Subscription Count" widget is present if ( "subscription.stats:total" in api.operations && "dashboard:stats:subscription:total" in api.contrib ) { const [{ component }] = Object.values(api.contrib["dashboard:stats:subscription:count"]); if (component != null) { return hasPermission(user, component.permission); } } return false; }, [api, user]); return ( setShouldExchange((prev) => !prev)} /> {purchaseAmounts >= 2 ? ( <> {shouldExchange && onlyExchangedCurrency && ( )} ) : ( {purchaseAmounts === 1 ? ( {currencyFormat( Number.parseFloat(exchangedData[0].amount), exchangedData[0].currency, )} ) : purchaseAmounts === 0 ? ( {t("No revenue data for current period")} ) : null} {t(`Over ${pluralizeGranularity(filteredAmount, filter.granularity)}`)} )} ); }; export default PurchaseAmountWidget;