import React, {useCallback, useEffect, useState} from 'react'; import { Platform, RefreshControl, StyleSheet, Text, useWindowDimensions, View, } from 'react-native'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import {DataProvider, LayoutProvider, RecyclerListView} from 'recyclerlistview'; import {useTracked} from '../../provider'; import {Actions} from '../../provider/Actions'; import {eSendEvent, ToastEvent} from '../../services/EventManager'; import { eOpenJumpToDialog, eOpenLoginDialog, eScrollEvent, } from '../../utils/Events'; import {PressableButton} from '../PressableButton'; import {COLORS_NOTE} from '../../utils/Colors'; import {SIZE, WEIGHT} from '../../utils/SizeUtils'; import {db} from '../../utils/DB'; import {HeaderMenu} from '../Header/HeaderMenu'; import Heading from '../Typography/Heading'; import {ListHeaderComponent} from './ListHeaderComponent'; import Paragraph from '../Typography/Paragraph'; import {Button} from '../Button'; import Seperator from '../Seperator'; const header = { type: 'MAIN_HEADER', }; const SimpleList = ({ data, type, placeholder, RenderItem, customRefresh, customRefreshing, refreshCallback, sortMenuButton, scrollRef, jumpToDialog, placeholderData, }) => { const [state, dispatch] = useTracked(); const {colors, selectionMode} = state; const searchResults = {...state.searchResults}; const [refreshing, setRefreshing] = useState(false); const [dataProvider, setDataProvider] = useState( new DataProvider((r1, r2) => { return r1 !== r2; }), ); const {width, fontScale} = useWindowDimensions(); const listData = data; const dataType = type; const _onScroll = (event) => { if (!event) return; let y = event.nativeEvent.contentOffset.y; eSendEvent(eScrollEvent, y); }; useEffect(() => { loadData(); }, [listData, searchResults.results]); const loadData = () => { let mainData = [header, ...listData]; setDataProvider(dataProvider.cloneWithRows(mainData)); }; const RenderSectionHeader = ({item, index}) => ( { console.log('clicekd'); if (jumpToDialog) { eSendEvent(eOpenJumpToDialog); } }} style={[ styles.sectionHeader, { color: colors.accent, height: 35, minWidth: 60, }, ]}> {item.title} {index === 1 && sortMenuButton ? : null} ); const _onRefresh = useCallback(async () => { if (Platform.OS === 'ios') { dispatch({ type: Actions.SYNCING, syncing: true, }); } else { setRefreshing(true); } try { let user = await db.user.get(); dispatch({type: Actions.USER, user: user}); await db.sync(); ToastEvent.show('Sync Complete', 'success'); } catch (e) { ToastEvent.show( 'You must login to sync.', 'error', 'global', 5000, () => { eSendEvent(eOpenLoginDialog); }, 'Login', ); } finally { if (Platform.OS === 'ios') { dispatch({ type: Actions.SYNCING, syncing: false, }); } else { setRefreshing(false); } if (refreshCallback) { refreshCallback(); } } dispatch({type: Actions.ALL}); }, []); const _ListEmptyComponent = ( {placeholderData.heading} {placeholderData.paragraph} {placeholderData.button &&