import React, {useEffect, useRef, useState} from 'react'; import {FlatList, RefreshControl} from 'react-native'; import {useTracked} from '../../provider'; import {eSendEvent} from '../../services/EventManager'; import Sync from '../../services/Sync'; import {eScrollEvent} from '../../utils/Events'; import JumpToDialog from '../JumpToDialog'; import {NotebookWrapper} from '../NotebookItem/wrapper'; import {NoteWrapper} from '../NoteItem/wrapper'; import SortDialog from '../SortDialog'; import TagItem from '../TagItem'; import {Empty} from './empty'; import {Footer} from './footer'; import {Header} from './header'; import {SectionHeader} from './section-header'; let renderItems = { note: NoteWrapper, notebook: NotebookWrapper, topic: NotebookWrapper, tag: TagItem, section: SectionHeader }; const RenderItem = ({item, index}) => { const Item = renderItems[item.itemType || item.type] || return ( ); }; const SimpleList = ({ listData, type, customRefresh, customRefreshing, refreshCallback, placeholderData, loading, headerProps = { heading: 'Home' }, screen, ListHeader }) => { const [state] = useTracked(); const {colors} = state; const scrollRef = useRef(); const [_loading, _setLoading] = useState(true); const refreshing = false; useEffect(() => { let timeout = null; if (!loading) { timeout = setTimeout( () => { _setLoading(false); }, listData.length === 0 ? 0 : 300 ); } else { _setLoading(true); } return () => { clearTimeout(timeout); }; }, [loading]); const renderItem = React.useCallback( ({item, index}) => item.type === 'header' ? ( ) : ( ), [] ); const _onRefresh = async () => { await Sync.run(); if (refreshCallback) { refreshCallback(); } }; const _onScroll = React.useCallback( event => { if (!event) return; let y = event.nativeEvent.contentOffset.y; eSendEvent(eScrollEvent, { y, screen }); }, [screen] ); let styles = { height: '100%', width: '100%', minHeight: 1, minWidth: 1, backgroundColor:colors.bg }; const _keyExtractor = item => item.id || item.title; return ( <> } ListEmptyComponent={ } ListFooterComponent={