import React, { useState, useEffect } from 'react'
import moment from 'moment'
import {
useLanguage,
useConfig,
useUtils,
useOrder,
MomentOption as MomentOptionController
} from 'ordering-components/native'
import { StyleSheet, TextStyle, TouchableOpacity, View } from 'react-native'
import Spinner from 'react-native-loading-spinner-overlay';
import { MomentOptionParams } from '../../types'
import NavBar from '../NavBar'
import { OIcon, OText } from '../shared'
import { useTheme } from 'styled-components/native'
import { Container } from '../../layouts/Container'
import {
WrapSelectOption,
Days,
Day,
WrapHours,
Hours,
Hour,
WrapDelveryTime
} from './styles'
import { SafeAreaView } from 'react-native-safe-area-context'
const MomentOptionUI = (props: MomentOptionParams) => {
const {
navigation,
nopadding,
datesList,
hoursList,
dateSelected,
timeSelected,
handleAsap,
handleChangeDate,
handleChangeTime
} = props
const theme = useTheme();
const styles = StyleSheet.create({
icon: {
marginRight: 10
},
dayNameStyle: {
textTransform: 'capitalize'
},
selectStyle: {
zIndex: 10
},
timeText: { fontSize: 14, lineHeight: 24, marginStart: 24 },
todayDate: {
width: 26,
height: 26,
backgroundColor: theme.colors.primary,
alignItems: 'center',
justifyContent: 'center',
borderRadius: 15
},
timePicker: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
height: 44,
maxHeight: 44,
borderWidth: 1,
borderColor: theme.colors.border,
borderRadius: 7.6,
marginTop: 50,
paddingHorizontal: 16
}
})
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 [showTimes, setShowTimes] = useState(false);
const goToBack = () => navigation?.canGoBack() && navigation.goBack()
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])
useEffect(() => {
if (momentState.isLoading === 2 && !orderState?.loading) {
goToBack()
}
}, [momentState.isLoading])
return (
goToBack()}
btnStyle={{ paddingLeft: 0 }}
paddingTop={0}
style={{ paddingBottom: 0 }}
title={t('WHEN_DO_WE_DELIVERY', 'When do we delivery?')}
/>
_handleAsap()}
disabled={orderState.loading}
>
{optionSelected.isAsap ? (
) : (
)}
{`${t('ASAP_ABBREVIATION', 'ASAP')} (${moment().format('dddd, MMMM D, yyyy h:m A')})`}
setOptionSelected({ isAsap: false, isSchedule: true })}
disabled={orderState.loading}
>
{optionSelected.isSchedule ? (
) : (
)}
{t('SCHEDULE_FOR_LATER', 'Schedule for later')}
{optionSelected.isSchedule && (
{datesList.length > 0 && (
{
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 && (
<>
{ setShowTimes(!showTimes) }}>
{timeSelected != null ? parseTime(moment(timeSelected, 'HH:mm'), { outputFormat: 'hh:mma' }) : '00:00'}
{showTimes && (
{
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' })
)}
))
}
)}
>
)}
)}
)
}
export const MomentOption = (props: any) => {
const momentOptionProps = {
...props,
UIComponent: MomentOptionUI
}
return
}