import React, { FC, useCallback, useMemo, useRef } from 'react' import { ActivityIndicator, FlatList, Image, RefreshControl, SafeAreaView, StyleProp, Text, TextStyle, TouchableOpacity, View, } from 'react-native' import { IMyOrdersOrder } from '../../api/types' import { Dropdown, Loading } from '../../components' import { IDropdownStyles } from '../../components/dropdown/types' import R from '../../res' import OrderListItem from './components/OrderListItem' import { MyOrdersViewStyles as s } from './styles' import { IMyOrdersViewProps } from './types' const MyOrdersView: FC = ({ myEvents, onChangeEvent, selectedEvent, myOrders, onSelectOrder, styles, isLoading, onRefresh, isGettingEventDetails, config, onFetchMoreOrders, texts, onChangeTimeFilter, timeFilters, selectedTimeFilter, isRefreshing, }) => { const onEndReachedCalledDuringMomentum = useRef(false) //#region Handlers const handleOnSelectOrder = (order: IMyOrdersOrder) => { if (onSelectOrder) { onSelectOrder(order) } } const handleOnReachEnd = () => { if (!onEndReachedCalledDuringMomentum.current) { onFetchMoreOrders() onEndReachedCalledDuringMomentum.current = true } } const handleOnMomentumScrollBegin = () => { onEndReachedCalledDuringMomentum.current = false } //#endregion Handlers //#region Renders const renderOrderListItem = useCallback( ({ item }: { item: any }) => ( ), [handleOnSelectOrder] ) const renderRefreshControl = ( ) const dropdownStyles = useMemo( () => ({ container: s.eventsDropdownContainer, button: s.eventsDropdownButton, label: { maxWidth: '100%', ...styles?.eventsDropdown?.label, }, icon: {}, dialog: {}, flatListContainer: {}, }), [] ) const onClearSelectedEvent = () => onChangeEvent({ label: texts?.selectEventPlaceholder || 'Select event', value: 'none', }) const onClearSelectedTimeFilter = () => onChangeTimeFilter({ label: texts?.selectTimeFilterPlaceholder || 'Select time filter', value: 'none', }) const eventsDropdown = ( ) const timeFilterDropdown = ( ) //#endregion Renders //#region Return return ( {texts?.title || 'Events'} {!config?.isTimeFilterDropdownHidden && timeFilterDropdown} {!config?.isEventsDropdownHidden && eventsDropdown} {isLoading && myOrders.length > 8 && !isRefreshing && ( )} {config?.areActivityIndicatorsEnabled && isGettingEventDetails && } ) //#endregion Return } export default MyOrdersView