import NoteList, { TNoteListRef } from '@/components/NoteList' import Tabs from '@/components/Tabs' import UserAggregationList, { TUserAggregationListRef } from '@/components/UserAggregationList' import { isTouchDevice } from '@/lib/utils' import { useKindFilter } from '@/providers/KindFilterProvider' import { useUserTrust } from '@/providers/UserTrustProvider' import storage from '@/services/local-storage.service' import { TFeedSubRequest, TNoteListMode } from '@/types' import { useMemo, useRef, useState } from 'react' import KindFilter from '../KindFilter' import { RefreshButton } from '../RefreshButton' export default function NormalFeed({ subRequests, areAlgoRelays = false, isMainFeed = false, showRelayCloseReason = false, disable24hMode = false, onRefresh }: { subRequests: TFeedSubRequest[] areAlgoRelays?: boolean isMainFeed?: boolean showRelayCloseReason?: boolean disable24hMode?: boolean onRefresh?: () => void }) { const { hideUntrustedNotes } = useUserTrust() const { showKinds } = useKindFilter() const [temporaryShowKinds, setTemporaryShowKinds] = useState(showKinds) const [listMode, setListMode] = useState(() => storage.getNoteListMode()) const supportTouch = useMemo(() => isTouchDevice(), []) const noteListRef = useRef(null) const userAggregationListRef = useRef(null) const topRef = useRef(null) const showKindsFilter = useMemo(() => { return subRequests.every((req) => !req.filter.kinds?.length) }, [subRequests]) const handleListModeChange = (mode: TNoteListMode) => { setListMode(mode) if (isMainFeed) { storage.setNoteListMode(mode) } topRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' }) } const handleShowKindsChange = (newShowKinds: number[]) => { setTemporaryShowKinds(newShowKinds) noteListRef.current?.scrollToTop() } return ( <> { handleListModeChange(listMode as TNoteListMode) }} options={ <> {!supportTouch && ( { if (onRefresh) { onRefresh() return } if (listMode === '24h') { userAggregationListRef.current?.refresh() } else { noteListRef.current?.refresh() } }} /> )} {showKindsFilter && ( )} } />
{listMode === '24h' && !disable24hMode ? ( ) : ( )} ) }