import React, { useState, useEffect } from 'react'; import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'; import { Chat } from '../Chat'; import { StyleSheet, View, BackHandler, TouchableOpacity } from 'react-native'; import { useLanguage, OrderDetails as OrderDetailsController, useSession, } from 'ordering-components/native'; import { useUtils } from 'ordering-components/native'; import { OIcon, OText } from '../shared'; import { OrderDetailsParams } from '../../types'; import { USER_TYPE } from '../../config/constants'; import { useTheme } from 'styled-components/native'; import Alert from '../../providers/AlertProvider'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; export const OrderMessageUI = (props: OrderDetailsParams) => { const { navigation, messages, setMessages, readMessages, messagesReadList, setOrders, } = props; const [{ optimizeImage }] = useUtils(); const theme = useTheme(); const [, t] = useLanguage(); const [openModalForBusiness, setOpenModalForBusiness] = useState(true); const [unreadAlert, setUnreadAlert] = useState({ business: false, driver: false, }); const { top } = useSafeAreaInsets(); const [{ user }] = useSession(); const { order, loading } = props.order; const [alertState, setAlertState] = useState<{ open: boolean; content: Array; key?: string | null; }>({ open: false, content: [], key: null }); useEffect(() => { if (order?.driver === null && user.level === 4) { setAlertState({ open: true, content: [ t( 'YOU_HAVE_BEEN_REMOVED_FROM_THE_ORDER', 'You have been removed from the order', ), ], key: null, }); } }, [order?.driver]); const handleArrowBack = (): boolean => { if (order?.unread_count !== undefined) { setOrders?.((prevOrders: any) => { const { data } = prevOrders; const updateOrder = data?.find((_order: any, index: number) => { if (_order.id === order?.id) { _order.unread_count = 0; data.splice(index, 1, _order); return true; } return false; }); if (updateOrder) { return { ...prevOrders, data }; } return prevOrders; }); readMessages?.(); } navigation?.canGoBack() && navigation.goBack(); return true; }; useEffect(() => { BackHandler.addEventListener('hardwareBackPress', handleArrowBack); return () => BackHandler.removeEventListener('hardwareBackPress', handleArrowBack); }, [order?.unread_count, messages?.messages]); const backIfDriverDoesntExist = () => { navigation?.canGoBack() && navigation.goBack(); }; useEffect(() => { if (messagesReadList?.length) { openModalForBusiness ? setUnreadAlert({ ...unreadAlert, business: false }) : setUnreadAlert({ ...unreadAlert, driver: false }); } }, [messagesReadList]); const styles = StyleSheet.create({ titleSection: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 30, paddingTop: 30, paddingBottom: 25, borderBottomWidth: 2, borderBottomColor: '#e6e6e6', }, titleGroups: { alignItems: 'center', flexDirection: 'row', }, titleIcons: { height: 33, width: 33, borderRadius: 7.6, resizeMode: 'stretch', }, shadow: { height: 34, width: 34, alignItems: 'center', justifyContent: 'center', marginLeft: 15, backgroundColor: theme.colors.clear, paddingHorizontal: 3, borderRadius: 7.6, shadowColor: '#000', shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 3, }, modalText: { fontFamily: 'Poppins', fontStyle: 'normal', fontWeight: '600', color: theme.colors.textGray, textAlign: 'center', zIndex: 10, }, btnBackArrow: { borderWidth: 0, width: 32, height: 32, tintColor: theme.colors.textGray, backgroundColor: theme.colors.clear, borderColor: theme.colors.clear, shadowColor: theme.colors.clear, paddingLeft: 0, paddingRight: 0, marginTop: 10 }, }); return ( <> {(!order || Object.keys(order).length === 0 || loading) && ( )} {order && Object.keys(order).length > 0 && !loading && ( <> handleArrowBack()} style={styles.btnBackArrow}> {`${t('INVOICE_ORDER_NO', 'Order No.')} ${order?.id}`} {!!order?.business?.logo ? ( ) : ( )} {order?.driver && ( )} )} ); }; export const OrderMessage = (props: OrderDetailsParams) => { const orderDetailsProps = { ...props, driverAndBusinessId: true, UIComponent: OrderMessageUI, }; return ; };