import clsx from 'clsx' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { DaoRewardsDistributorActiveDistributionsCardProps } from '@dao-dao/types' import { getFallbackImage, getHumanReadableRewardDistributionLabel, getUniqueRewardDistributionKey, toAccessibleImageUrl, } from '@dao-dao/utils' import { useQuerySyncedState } from '../../hooks' import { Button } from '../buttons' import { ErrorPage } from '../error' import { SwitchCard } from '../inputs' import { LineLoaders } from '../LineLoader' export const DaoRewardsDistributorActiveDistributionsCard = ({ className, distributions, DaoRewardDistributionInfoModal, }: DaoRewardsDistributorActiveDistributionsCardProps) => { const { t } = useTranslation() const [selected, setSelected] = useQuerySyncedState({ param: 'distribution', defaultValue: undefined, }) const selectedDistribution = distributions.loading || distributions.errored ? undefined : selected ? distributions.data.find( (d) => selected === getUniqueRewardDistributionKey(d) ) : undefined const [showPaused, setShowPaused] = useState(false) const distributionsToShow = distributions.loading || distributions.errored ? [] : showPaused ? distributions.data : distributions.data.filter( (d) => !('paused' in d.active_epoch.emission_rate) ) const pausedDistributionsExist = !distributions.loading && !distributions.errored && distributions.data.some((d) => 'paused' in d.active_epoch.emission_rate) return ( <>

{distributions.loading || distributions.errored ? t('title.activeDistributions') : showPaused && pausedDistributionsExist ? t('title.numDistributions', { count: distributions.data.length, }) : t('title.numActiveDistributions', { count: distributionsToShow.length, })}

{distributions.loading ? ( ) : distributions.errored ? ( ) : (
{distributionsToShow.map((distribution) => ( ))}
)} {pausedDistributionsExist && ( setShowPaused((s) => !s)} sizing="sm" /> )}
setSelected(undefined)} /> ) }