// @flow import React from 'react'; import Button from 'component/button'; import ChannelThumbnail from 'component/channelThumbnail'; import ClaimList from 'component/claimList'; import ClaimPreviewTitle from 'component/claimPreviewTitle'; import DebouncedInput from 'component/common/debounced-input'; import Empty from 'component/common/empty'; import Page from 'component/page'; import Spinner from 'component/spinner'; import * as ICONS from 'constants/icons'; import { SIDEBAR_SUBS_DISPLAYED } from 'constants/subscriptions'; import useClaimListInfiniteScroll from 'effects/use-claimList-infinite-scroll'; function getFilteredUris(uris, filterQuery) { if (filterQuery) { const filterQueryLowerCase = filterQuery.toLowerCase(); return uris.filter((uri) => uri.toLowerCase().includes(filterQueryLowerCase)); } return null; } // **************************************************************************** // ChannelsFollowingManage // **************************************************************************** const FOLLOW_PAGE_SIZE = 30; type Props = { subscribedChannelUris: Array, lastActiveSubs: ?Array, doResolveUris: (uris: Array, returnCachedClaims: boolean, resolveReposts: boolean) => void, doFetchLastActiveSubs: (force?: boolean, count?: number) => void, }; export default function ChannelsFollowingManage(props: Props) { const { subscribedChannelUris, lastActiveSubs, doResolveUris, doFetchLastActiveSubs } = props; const { uris, page, isLoadingPage, bumpPage } = useClaimListInfiniteScroll( subscribedChannelUris, doResolveUris, FOLLOW_PAGE_SIZE ); // Filtered query and their uris. const [filterQuery, setFilterQuery] = React.useState(''); const [filteredUris, setFilteredUris] = React.useState(null); async function resolveUris(uris) { return doResolveUris(uris, true, false); } React.useEffect(() => { const filteredUris = getFilteredUris(uris, filterQuery); if (filteredUris) { resolveUris(filteredUris).finally(() => setFilteredUris(filteredUris)); } else { setFilteredUris(filteredUris); } // (only need to respond to 'filterQuery') // eslint-disable-next-line react-hooks/exhaustive-deps }, [filterQuery]); React.useEffect(() => { doFetchLastActiveSubs(true); }, []); return (
{__('Followed Channels')}
{page < 0 ? (
) : uris && uris.length === 0 ? ( ) : ( <> {filteredUris && } {!filteredUris && lastActiveSubs && lastActiveSubs.length === SIDEBAR_SUBS_DISPLAYED && ( <>
{__('Recently Active')}
{lastActiveSubs.map((sub) => { return (
); })}
)} {!filteredUris && uris.length > 0 && ( <>
{__('All Channels')}
)} )}
); }