// Copyright (C) 2017-2023 Smart code 203358507 const React = require('react'); const classnames = require('classnames'); const debounce = require('lodash.debounce'); const { useTranslation } = require('react-i18next'); const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange, useProfile } = require('stremio/common'); const { ContinueWatchingItem, EventModal, MainNavBars, MetaItem, MetaRow } = require('stremio/components'); const useBoard = require('./useBoard'); const useContinueWatchingPreview = require('./useContinueWatchingPreview'); const styles = require('./styles'); const { default: StreamingServerWarning } = require('./StreamingServerWarning'); const THRESHOLD = 5; const Board = () => { const { t } = useTranslation(); const streamingServer = useStreamingServer(); const continueWatchingPreview = useContinueWatchingPreview(); const [board, loadBoardRows] = useBoard(); const notifications = useNotifications(); const profile = useProfile(); const boardCatalogsOffset = continueWatchingPreview.items.length > 0 ? 1 : 0; const scrollContainerRef = React.useRef(); const streamingServerWarningDismissed = React.useMemo(() => { return streamingServer.settings !== null && streamingServer.settings.type === 'Ready' || ( !isNaN(profile.settings.streamingServerWarningDismissed.getTime()) && profile.settings.streamingServerWarningDismissed.getTime() > Date.now() ); }, [profile.settings, streamingServer.settings]); const onVisibleRangeChange = React.useCallback(() => { const range = getVisibleChildrenRange(scrollContainerRef.current); if (range === null) { return; } const start = Math.max(0, range.start - boardCatalogsOffset - THRESHOLD); const end = range.end - boardCatalogsOffset + THRESHOLD; if (end < start) { return; } loadBoardRows({ start, end }); }, [boardCatalogsOffset]); const onScroll = React.useCallback(debounce(onVisibleRangeChange, 250), [onVisibleRangeChange]); React.useLayoutEffect(() => { onVisibleRangeChange(); }, [board.catalogs, onVisibleRangeChange]); return (
{ continueWatchingPreview.items.length > 0 ? : null } {board.catalogs.map((catalog, index) => { switch (catalog.content?.type) { case 'Ready': { return ( ); } case 'Err': { if (catalog.content.content !== 'EmptyContent') { return ( ); } return null; } default: { return ( ); } } })}
{ !streamingServerWarningDismissed ? : null }
); }; const BoardFallback = () => (
); module.exports = withCoreSuspender(Board, BoardFallback);