import React, { useState, useEffect } from 'react';
import moment from 'moment';
import {
useLanguage,
useConfig,
useUtils,
useOrder,
MomentOption as MomentOptionController,
} from 'ordering-components/native';
import { useTheme } from 'styled-components/native';
import {
TouchableOpacity,
StyleSheet,
useWindowDimensions,
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 { Container } from '../../layouts/Container';
import {
WrapSelectOption,
Days,
Day,
WrapHours,
Hours,
Hour,
WrapDelveryTime,
} from './styles';
import { TouchableRipple } from 'react-native-paper';
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: 'uppercase',
},
selectStyle: {
zIndex: 10,
},
dateLabel: {
borderWidth: 1,
borderColor: theme.colors.border,
borderRadius: 7.6,
paddingHorizontal: 12,
paddingVertical: 9,
marginBottom: 12,
marginHorizontal: 10,
marginTop: 10
},
dateWrap: {
marginTop: 40,
borderRadius: 7.6,
borderColor: theme.colors.border,
borderWidth: 1,
padding: 17,
marginBottom: 23,
},
timeLabel: {
borderWidth: 1,
borderColor: theme.colors.border,
borderRadius: 7.6,
height: 44,
paddingHorizontal: 16,
flexDirection: 'row',
alignItems: 'center'
}
});
const [, t] = useLanguage();
const [{ configs }] = useConfig();
const [{ parseTime }] = useUtils();
const [orderState] = useOrder();
const { width } = useWindowDimensions();
const [toggleTime, setToggleTime] = useState(false);
const [optionSelected, setOptionSelected] = useState({
isAsap: false,
isSchedule: false,
});
const [momentState, setMomentState] = useState({
isLoading: 0,
isEditing: false,
});
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');
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);
};
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?')}
titleAlign={'center'}
titleStyle={{ fontSize: 14 }}
titleWrapStyle={{ flexBasis: '80%' }}
/>
_handleAsap()}
disabled={orderState.loading} style={{ alignItems: 'flex-start' }}>
{optionSelected.isAsap ? (
) : (
)}
{t('ASAP_ABBREVIATION', 'ASAP') + ` (${moment().format('dddd, MMM D, yyyy h:mm A')} + delivery time)`}
setOptionSelected({ isAsap: false, isSchedule: true })}
disabled={orderState.loading}>
{optionSelected.isSchedule ? (
) : (
)}
{t('SCHEDULE_FOR_LATER', 'Schedule for later')}
{optionSelected.isSchedule && (
{datesList.length > 0 && (
{dateSelected}
{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)} style={{ width: (width * 0.25) - 108 }}>
{dayName}
{dayNumber}
)
})}
)}
{hoursList.length > 0 && optionSelected.isSchedule && (
<>
{ setToggleTime(!toggleTime) }}>
<>
{timeSelected ? timeSelected : t('DELIVERY_TIME', 'Delivery Time')}
>
{toggleTime ? (
{hoursList.map((hour: any, i: any) => (
handleChangeMoment(hour.startTime)}
disabled={orderState.loading}
style={{ borderColor: timeSelected === hour.startTime ? theme.colors.primary : theme.colors.border }}
>
{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',
})}
))}
) : null}
>
)}
)}
);
};
export const MomentOption = (props: any) => {
const momentOptionProps = {
...props,
UIComponent: MomentOptionUI,
};
return ;
};