import React, { useState, useEffect } from 'react'
import { StyleSheet, Pressable } from 'react-native'
import { useLanguage, useUtils, useConfig } from 'ordering-components/native'
import styled, { useTheme } from 'styled-components/native'
import { OText, OIcon } from '../shared';
export const useOrderUtils = () => {
const theme = useTheme();
const [, t] = useLanguage();
const [{ parseDate }] = useUtils()
const calculateDate = (type: any, from: any, to: any) => {
switch (type) {
case 'today':
const date = parseDate(new Date(), { outputFormat: 'MM/DD/YYYY' })
return { from: `${date} 00:00:00`, to: `${date} 23:59:59` }
case 'yesterday':
const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1)
const start1 = parseDate(yesterday, { outputFormat: 'MM/DD/YYYY' })
const end1 = parseDate(new Date(), { outputFormat: 'MM/DD/YYYY' })
return { from: `${start1} 00:00:00`, to: `${end1} 23:59:59` }
case 'last_7days':
const last_7days = new Date()
last_7days.setDate(last_7days.getDate() - 6)
const start7 = parseDate(last_7days, { outputFormat: 'MM/DD/YYYY' })
const end7 = parseDate(new Date(), { outputFormat: 'MM/DD/YYYY' })
return { from: `${start7} 00:00:00`, to: `${end7} 23:59:59` }
case 'last_30days':
const last_30days = new Date()
last_30days.setDate(last_30days.getDate() - 29)
const start30 = parseDate(last_30days, { outputFormat: 'MM/DD/YYYY' })
const end30 = parseDate(new Date(), { outputFormat: 'MM/DD/YYYY' })
return { from: `${start30} 00:00:00`, to: `${end30} 23:59:59` }
default:
const start = from ? `${parseDate(from, { outputFormat: 'MM/DD/YYYY' })} 00:00:00` : ''
const end = to ? `${parseDate(to, { outputFormat: 'MM/DD/YYYY' })} 23:59:59` : ''
return { from: start, to: end }
}
}
const preorderTypeList = [
{ key: null, name: t('SLA', 'SLA\'s') },
{ key: 'in_time', name: t('OK', 'Ok') },
{ key: 'at_risk', name: t('AT_RISK', 'At Risk') },
{ key: 'delayed', name: t('DELAYED', 'Delayed') }
]
const defaultOrderTypes = [
{ key: 1, name: t('DELIVERY', 'Delivery') },
{ key: 2, name: t('PICKUP', 'Pickup') },
{ key: 3, name: t('EAT_IN', 'Eat in') },
{ key: 4, name: t('CURBSIDE', 'Curbside') },
{ key: 5, name: t('DRIVE_THRU', 'Drive thru') }
]
const deliveryStatus = [
{
key: t('OK', 'Ok'),
des: t('DELIVERY_OK_STATUS_DESC', 'Get delivery time from the businesses.'),
timmer: false,
icon: theme.images.general?.clock1,
backColor: '#00D27A'
},
{
key: t('AT_RISK', 'At risk'),
des: t('DELIVERY_ATRISK_STATUS_DESC', 'Is the time between delivery time of busines and the delayed time.'),
timmer: false,
icon: theme.images.general?.clockRisk,
backColor: '#FFC700'
},
{
key: t('DELAYED', 'Delayed'),
des: t('DELIVERY_DELAYED_STATUS_DESC', 'If this time is exceeded, the order will be delayed.'),
timmer: true,
icon: theme.images.general?.clockDelayed,
backColor: '#E63757'
}
]
const defaultSearchList = {
id: '',
state: '',
city: '',
business: '',
delivery_type: '',
paymethod: '',
driver: '',
timeStatus: '',
date: {
from: '',
to: '',
type: ''
}
}
const constants = {
preorderTypeList,
defaultOrderTypes,
deliveryStatus,
defaultSearchList,
calculateDate
}
return [constants];
}
export const StatusBlock = (props: any) => {
const { item, last } = props
const [showTime, setShowTime] = useState(false)
useEffect(() => {
if (last) {
setShowTime(true)
}
}, [last])
const StatusItems = styled.View`
position: relative;
margin-bottom: 20px;
z-index: 2;
`
const ItemHeader = styled.View`
flex-direction: row;
margin-bottom: 5px;
`
const IconWrapper = styled.View`
flex-direction: row;
align-items: center;
background: #fff;
`
const ItemStatus = styled.View`
width: 4px;
height: 22px;
margin: 0 15px;
border-radius: 4px;
background: ${(props: any) => props.backColor};
`
const ItemContent = styled.View`
display: flex;
padding: 0 30px;
`
const OverLine = styled.View`
position: absolute;
height: 100%;
width: 15px;
top: 20px;
left: 0;
background-color: #fff;
z-index: 2;
`
return (
{item?.key}
{item?.des}
{showTime && ( )}
{last && ( )}
)
}
export const Timer = () => {
const [, t] = useLanguage()
const theme = useTheme()
const [{ configs }] = useConfig();
const styles = StyleSheet.create({
settingTime: {
fontSize: 14,
borderWidth: 1,
borderRadius: 7.6,
margin: 0,
marginRight: 10,
paddingHorizontal: 10,
paddingTop: 5,
borderColor: theme.colors.disabled
}
})
const TimerInputWrapper = styled.View`
color: ${(props: any) => props.theme.colors.disabled};
margin-top: 15px;
margin-left: 30px;
margin-right: 30px;
flex-direction: row;
align-items: flex-end;
`
return (
{configs?.order_deadlines_delayed_time?.value}
{t('TIME_MIN', 'min')}
)
}