import { StackScreenProps } from '@react-navigation/stack'; import * as React from 'react'; import { RefreshControl } from 'react-native'; import { useFocusEffect } from '@react-navigation/native'; import { Div, Button, Image, Text, Avatar, Icon } from 'react-native-magnus'; import { FlatList } from 'react-native-gesture-handler'; import Constants from 'expo-constants'; import TimScreen from '../notice/TimScreen'; import useModel from 'flooks'; import Map from '../map/model'; import OrderModel from './model'; import User from '../stores/User'; import { useMount, useRequest, useCreation } from 'ahooks'; import { useTranslation } from 'react-i18next'; import moment from 'moment'; import { promot, toastSuccess, alert, toastInfo } from '../utils/SystemUtils'; import { orderRiderStatus, RiderStatusMap } from '../utils/RiderInfoUtils'; import request from '../utils/RequestUtils'; import { goMap, changeCord } from '../utils/MapUtils'; import OrderCom from './OrderCom'; export default function OrderScreen({ navigation }: StackScreenProps) { const { t } = useTranslation(); const { locationInfo, getNowLocation } = useModel(Map, ['locationInfo']); const { receiverOrder, changeStatus, changeStatusAll } = useModel( OrderModel, [] ); const { getSignInfo, sign, riderOrder } = useModel(User, [ 'getSignInfo', 'sign', ]); const [chooseStatus, setChooseStatus] = React.useState( 'NOT_RECEIVED' ); useMount(() => { getNowLocation(); getSignInfo(); }); const chooseStatusInfo = useCreation(() => { return orderRiderStatus.get(chooseStatus); }, [chooseStatus]); useFocusEffect( React.useCallback(() => { run(); }, []) ); const { data, loading, reload, run } = useRequest( () => { return request.get(chooseStatusInfo.requestUrl, { params: chooseStatusInfo.params, }); }, { manual: false, formatResult: chooseStatusInfo.formatResult, defaultLoading: false, debounceInterval: 1000, initialData: [], } ); const showData = useCreation(() => { if (chooseStatusInfo.status) { return data.filter((item) => { return chooseStatusInfo.status.indexOf(item.riderStatus) !== -1; }); } else { return data; } }, [data, chooseStatusInfo]); return (
{/* */} 骑手客户端
{[...orderRiderStatus.keys()].map((item) => { const info = orderRiderStatus.get(item); return ( ); })}
{ return ( navigation.navigate('OrderStack', { screen: 'OrderDetail', params: { orderId: item.id, }, }) } receiverOrder={() => { receiverOrder(item.id, (res) => { toastSuccess(t('jie-dan-cheng-gong')); run(); }).catch((res) => { toastInfo('该订单异常暂不能接单'); run(); }); }} goMap={() => { const orderStatusInfo = RiderStatusMap.get(item.riderStatus); goMap( orderStatusInfo.type === 'merchant' ? item.merShowName : item.userAddress, orderStatusInfo.type === 'merchant' ? changeCord(item.merLocation) : changeCord(item.location), navigation ); }} changeStatus={() => { const orderStatusInfo = RiderStatusMap.get(item.riderStatus); alert(navigation, { msg: orderStatusInfo.infoText, hasCancel: true, dangers: true, submitEvent: () => { changeStatus( item.id, orderStatusInfo.nextStatus, (res) => { toastSuccess(orderStatusInfo.successText); }, () => { alert(navigation, { msg: orderStatusInfo.errorText, hasCancel: true, dangers: true, submitEvent: () => { changeStatusAll( item.id, orderStatusInfo.nextStatus, (res) => { toastSuccess(orderStatusInfo.successText); run(); } ); }, }); } ); }, }); }} /> ); }} data={showData} contentContainerStyle={{ flexGrow: 1, paddingHorizontal: 15, backgroundColor: '#f2f2f2', }} refreshControl={ } ListEmptyComponent={() => { if (!loading) { return ( {t('zan-wu-shu-ju')} ); } else { return <>; } }} extraData={sign} />
); }