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 }