import React, { useState, useEffect } from 'react'
import { useLanguage, useOrder, ToastType, useToast, OrderList, OrderDetails as OrderDetailsConTableoller, useBusiness } from 'ordering-components/native'
import { useTheme } from 'styled-components/native';
import { useFocusEffect } from '@react-navigation/native'
import { OText, OModal } from '../shared'
import { NotFoundSource } from '../NotFoundSource'
import { ActiveOrders } from '../ActiveOrders'
import { Messages } from '../Messages';
import NavBar from '../NavBar'
import {
MessageListingParams,
OrdersOptionParams
} from '../../types'
import {
Placeholder,
PlaceholderLine,
Fade
} from "rn-placeholder";
import { View, BackHandler, Platform } from 'react-native'
import {
MessageListingWrapper,
MessageContainer
} from './styles';
import { getOrderStatus } from '../../utils'
const OrdersOptionUI = (props: OrdersOptionParams) => {
const {
navigation,
activeOrders,
orderList,
pagination,
titleContent,
customArray,
onNavigationRedirect,
orderStatus,
loadMoreOrders,
loadOrders,
setSelectedOrderId,
setOrderList,
setOpenMessges,
setRefreshOrders,
refreshOrders
} = props
const theme = useTheme();
const [, t] = useLanguage()
const [, { reorder }] = useOrder()
const { showToast } = useToast()
const { loading, error, orders: values } = orderList
const imageFails = activeOrders
? theme.images.general.emptyActiveOrders
: theme.images.general.emptyPastOrders
const orders = customArray || values || []
const handleClickOrder = (uuid: string) => {
setSelectedOrderId(uuid)
setOpenMessges(true)
}
useFocusEffect(
React.useCallback(() => {
loadOrders()
}, [navigation])
)
useEffect(() => {
if (loading) return
setOrderList(orderList)
}, [orderList, loading])
useEffect(() => {
if (refreshOrders) {
loadOrders(false, false, false, true)
setRefreshOrders && setRefreshOrders(false)
}
}, [refreshOrders])
return (
<>
{!loading && orders.length === 0 && (
)}
{loading && (
{[...Array(6)].map((item, i) => (
))}
)}
{!loading && !error && orders.length > 0 && (
orderStatus.includes(order.status))}
pagination={pagination}
loadMoreOrders={loadMoreOrders}
customArray={customArray}
getOrderStatus={getOrderStatus}
onNavigationRedirect={onNavigationRedirect}
isMessageView
handleClickOrder={handleClickOrder}
/>
)}
>
)
}
const OrderMessageUI = (props: any) => {
const {
navigation,
messages,
setMessages,
readMessages,
messagesReadList,
setOpenMessges,
setSeletedOrder,
setSelectedOrderId
} = props;
const [openModalForBusiness, setOpenModalForBusiness] = useState(false);
const [openModalForDriver, setOpenModalForDriver] = useState(false);
const [openMessages, setOpenMessages] = useState({ business: false, driver: false });
const [unreadAlert, setUnreadAlert] = useState({
business: false,
driver: false,
});
const [, t] = useLanguage()
const { order } = props.order;
const handleArrowBack: any = () => {
navigation.navigate('BottomTab');
};
const handleClose = () => {
setOpenMessges(false)
setSeletedOrder(null)
setSelectedOrderId(null)
}
const handleOpenMessages = (data: any) => {
setOpenMessages(data)
readMessages && readMessages();
}
useEffect(() => {
if (messagesReadList?.length) {
openModalForBusiness
? setUnreadAlert({ ...unreadAlert, business: false })
: setUnreadAlert({ ...unreadAlert, driver: false });
}
}, [messagesReadList]);
useEffect(() => {
setOpenModalForBusiness(true);
setOpenModalForDriver(true);
readMessages && readMessages();
}, [order])
useEffect(() => {
BackHandler.addEventListener('hardwareBackPress', handleArrowBack);
return () => {
BackHandler.removeEventListener('hardwareBackPress', handleArrowBack);
};
}, []);
useEffect(() => {
handleOpenMessages({ driver: false, business: true })
}, [])
return (
<>
handleClose()}
/>
>
)
}
export const OrderListing = (props: OrdersOptionParams) => {
const [businessState] = useBusiness();
const OrderListingProps = {
...props,
UIComponent: OrdersOptionUI,
orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
useDefualtSessionManager: true,
paginationSettings: {
initialPage: 1,
pageSize: 10,
controlType: 'infinity'
},
businessId: businessState?.business?.id,
profileMessages: true,
orderBy: 'last_direct_message_at',
orderDirection: 'asc'
}
return
}
export const MessagesView = (props: any) => {
const orderDetailsProps = {
...props,
UIComponent: OrderMessageUI,
};
return ;
};
export const MessageListing = (props: MessageListingParams) => {
const {
navigation
} = props
const [orderListStatus, setOrderListStatus] = useState({
error: null,
loading: false,
orders: []
})
const [selectedOrderId, setSelectedOrderId] = useState(null)
const [seletedOrder, setSeletedOrder] = useState()
const [openMessages, setOpenMessges] = useState(false)
const [, t] = useLanguage()
const theme = useTheme()
const goToBack = () => {
navigation?.canGoBack() && navigation.goBack()
setSelectedOrderId(null)
setSeletedOrder([])
}
const handleCloseModal = () => {
setOpenMessges(false)
}
useEffect(() => {
if (!orderListStatus?.loading && selectedOrderId) {
const _orders = orderListStatus?.orders
const _seletedOrder = _orders.find((order: any) => order?.uuid === selectedOrderId)
setSeletedOrder(_seletedOrder)
}
}, [orderListStatus, selectedOrderId])
return (
{openMessages && !!seletedOrder?.id && (
handleCloseModal()}
>
)}
)
}