import React, { useState, useEffect } from 'react'
import moment from 'moment'
import {
useLanguage,
useConfig,
useUtils,
useOrder,
MomentOption as MomentOptionController
} from 'ordering-components/native'
import { StyleSheet, View } from 'react-native'
import Spinner from 'react-native-loading-spinner-overlay';
import { MomentOptionParams } from '../../types'
import { OText, OButton } from '../shared'
import { useTheme } from 'styled-components/native'
import {
Container,
HeaderTitle,
ButtonGroup,
Days,
Day,
WrapHours,
Hours,
Hour,
WrapDelveryTime
} from './styles'
const MomentOptionUI = (props: MomentOptionParams) => {
const {
nopadding,
datesList,
hoursList,
dateSelected,
timeSelected,
handleAsap,
handleChangeDate,
handleChangeTime
} = props
const theme = useTheme()
const [, t] = useLanguage()
const [{ configs }] = useConfig()
const [{ parseTime }] = useUtils()
const [orderState] = useOrder()
const [optionSelected, setOptionSelected] = useState({ isAsap: false, isSchedule: false })
const [momentState, setMomentState] = useState({ isLoading: 0, isEditing: false })
const _handleAsap = () => {
setMomentState({ isLoading: 1, isEditing: true })
handleAsap()
setOptionSelected({ isAsap: true, isSchedule: false })
if (!orderState.options?.moment) {
setMomentState({ isLoading: 2, isEditing: false })
}
}
const handleChangeMoment = (time : any) => {
setMomentState({ isLoading: 1, isEditing: true })
handleChangeTime(time)
}
const momento = moment(`${dateSelected} ${timeSelected}`, 'YYYY-MM-DD HH:mm').toDate()
const momentUnix = momento.getTime() / 1000
const momentFormat = moment.unix(momentUnix).utc().format('YYYY-MM-DD HH:mm:ss')
useEffect(() => {
if (orderState.options?.moment) {
setOptionSelected({ isAsap: false, isSchedule: true })
} else {
setOptionSelected({ isAsap: true, isSchedule: false })
}
if (momentState.isEditing && (momentFormat === orderState.options?.moment || timeSelected === null)) {
setMomentState({ isLoading: 2, isEditing: false })
}
}, [orderState.options?.moment])
return (
_handleAsap()}
/>
setOptionSelected({ isAsap: false, isSchedule: true })}
/>
{optionSelected.isSchedule && (
{datesList.length > 0 && (
<>
{t('DELIVERY_DATE', 'Delivery Date')}
{
datesList.slice(0, 6).map((date: any, i: any) => {
const dateParts = date.split('-')
const _date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2])
const dayName = t('DAY' + (_date.getDay() >= 1 ? _date.getDay() : 7)).substring(0, 3).toUpperCase()
const dayNumber = (_date.getDate() < 10 ? '0' : '') + _date.getDate()
return (
handleChangeDate(date)}
>
{dayName}
{dayNumber}
)
})
}
>
)}
{hoursList.length > 0 && optionSelected.isSchedule && (
<>
{t('DELIVERY_TIME', 'Delivery Time')}
{
hoursList.map((hour: any, i: any) => (
handleChangeMoment(hour.startTime)}
disabled={orderState.loading}
>
{configs?.format_time?.value === '12' ? (
hour.startTime.includes('12')
? `${hour.startTime}PM`
: parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
) : (
parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'HH:mm' })
)}
))
}
>
)}
)}
)
}
const styles = StyleSheet.create({
icon: {
marginRight: 10
},
dayNameStyle: {
textTransform: 'uppercase'
},
selectStyle: {
zIndex: 10
}
})
export const MomentOption = (props: any) => {
const [{ configs }] = useConfig()
const limitDays = configs?.max_days_preorder?.value
const currentDate = new Date()
const time = limitDays > 1
? currentDate.getTime() + ((limitDays - 1) * 24 * 60 * 60 * 1000)
: limitDays === 1 ? currentDate.getTime() : currentDate.getTime() + (6 * 24 * 60 * 60 * 1000)
currentDate.setTime(time)
currentDate.setHours(23)
currentDate.setMinutes(59)
const momentOptionProps = {
...props,
maxDate: currentDate,
UIComponent: MomentOptionUI
}
return
}