/* eslint-disable react/jsx-props-no-spreading */ /* eslint-disable no-underscore-dangle */ import * as WebBrowser from 'expo-web-browser'; import * as React from 'react'; import { StyleSheet, View, Clipboard, Dimensions, Animated, PanResponder, findNodeHandle, UIManager, TouchableOpacity, } from 'react-native'; import { Div, Button, Image, Text } from 'react-native-magnus'; import { Appbar, Menu } from 'react-native-paper'; import Constants from 'expo-constants'; import { Flex } from '@ant-design/react-native'; import { ScrollView } from 'react-native-gesture-handler'; import { useRequest, useCreation, useMount } from '@umijs/hooks'; import { useTranslation } from 'react-i18next'; import { useRoute } from '@react-navigation/native'; import { useAnimation } from 'react-native-animation-hooks'; import useModel from 'flooks'; import Toast from '../../flooks/Toast'; import Header from './Header'; // 头部 import { connectKefu } from '../../Utils/TotastUtils'; import { merchantStatusMap, orderStatusMap, RiderStatusMap, payMap, reasonMap, getStatusInfo, } from '../../Utils/OrderUtils'; import Time from '../../Utils/TimeUtils'; import MapScreen from '../Map/MapScreen'; export default function OrderScreen({ navigation }) { const { t } = useTranslation(); const [orderInfo, setorderInfo] = React.useState({ merchant: {}, orderGoodsSpecs: [], }); const { loading, success, warnning, clearLoading } = useModel(Toast, []); const route = useRoute(); const { params } = route; const { orderId } = params || 0; const orderRequest = useRequest(`/orderInfo/get/${orderId}`, { refreshDeps: [orderId], onSuccess: (result) => { setorderInfo(result); }, }); const { merchant, orderGoodsSpecs } = orderInfo; const statusInfo = useCreation(() => { return getStatusInfo(orderInfo); }, [orderInfo]); const finish = useCreation(() => { if ( orderInfo.riderStatus === 'CARRY_OUT' || orderInfo.status === 'CANCELLED' ) { return true; } else { return false; } }, [orderInfo]); const cancelOrder = useCreation(() => { if (orderInfo.status === 'CANCELLED') { return true; } else { return false; } }, [orderInfo, statusInfo]); const Allfinish = useCreation(() => { if (orderInfo.status === 'COMPLETED') { return true; } else { return false; } }, [orderInfo]); const isPay = useCreation(() => { if (orderInfo.status === 'UNPAID') { return false; } else { return true; } }, [orderInfo]); const hasRider = useCreation(() => { if (orderInfo.riderStatus !== 'NOT_RECEIVED' && orderInfo.riderStatus) { return true; } else { return false; } }); const detailRef = React.useRef(); const pan = React.useRef(new Animated.ValueXY()).current; const minMove = React.useRef(new Animated.Value(0)).current; const maxMove = React.useRef( new Animated.Value(Dimensions.get('window').height * 0.6) ).current; const panResponder = React.useRef( PanResponder.create({ onMoveShouldSetPanResponder: () => { console.log('a2'); return false; }, onMoveShouldSetPanResponderCapture: () => false, onStartShouldSetPanResponder: () => { console.log('a1'); return true; }, onStartShouldSetPanResponderCapture: () => false, onResponderTerminationRequest: () => true, onPanResponderGrant: () => { pan.setOffset({ y: pan.y._value, }); }, onPanResponderMove: (e, ges) => { const y = ges.dy + pan.y._offset; if (y >= minMove._value && y <= maxMove._value) { pan.setValue({ y: ges.dy, }); } else if (y < minMove._value) { pan.setValue({ y: minMove._value - pan.y._offset, }); } else { pan.setValue({ y: maxMove._value - pan.y._offset, }); if (ges.moveY > 500) { orderRequest.run(); } } if (maxMove._value !== 0) { if (maxMove._value - y < 200) { setbackgorundColor( `rgba(255, 194, 28,${Math.ceil( (1 / 200) * (maxMove._value - y) )})` ); setshowDetail(false); } else { setbackgorundColor('#FFC21C'); setshowDetail(true); } } }, onPanResponderRelease: () => { pan.flattenOffset(); }, }) ).current; React.useEffect(() => { if (finish || statusInfo.isRefund) { maxMove.setValue(0); pan.setValue({ y: 0, }); setshowDetail(true); setbackgorundColor('#FFC21C'); } else { maxMove.setValue(Dimensions.get('window').height * 0.6); pan.setValue({ y: Dimensions.get('window').height * 0.6, }); setshowDetail(false); } }, [finish, statusInfo]); const [backgorundColor, setbackgorundColor] = React.useState( 'rgba(255, 194, 28,0)' ); const [showDetail, setshowDetail] = React.useState(false); React.useEffect(() => { if (orderRequest.loading) { loading(); } else { clearLoading(); } }, [orderRequest.loading]); return (