import { Refresh } from '@mui/icons-material' import clsx from 'clsx' import { ComponentType, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { FeedState, LinkWrapperProps } from '@dao-dao/types' import { Collapsible, IconButton } from '..' import { useDaoNavHelpers } from '../../hooks' export type ProfileFeedProps = { state: FeedState LinkWrapper: ComponentType } export const ProfileFeed = ({ state: { loading, refreshing, refresh, daosWithItems }, LinkWrapper, }: ProfileFeedProps) => { const { t } = useTranslation() const { getDaoPath } = useDaoNavHelpers() const [refreshSpinning, setRefreshSpinning] = useState(false) // Start spinning refresh icon if refreshing sets to true. Turn off once the // iteration completes (in `onAnimationIteration` below). useEffect(() => { if (loading || refreshing) { setRefreshSpinning(true) } }, [loading, refreshing]) return (

{t('title.feed')}

{t('info.feedDescription')}

setRefreshSpinning(false) : undefined } onClick={() => { // Perform one spin even if refresh completes immediately. It // will stop after 1 iteration if `refreshing` does not become // true. setRefreshSpinning(true) refresh() }} variant="ghost" />
{!loading && daosWithItems.length > 0 && (
{daosWithItems.map(({ dao, items }) => ( {items.length ? (
{items.map(({ Renderer, props }, index) => ( ))}
) : undefined}
))}
)}
) }