import React, { useEffect, useState } from 'react'
import { StyleSheet, View, Platform } from 'react-native'
import SelectDropdown from 'react-native-select-dropdown'
import { useTheme } from 'styled-components/native'
import {
MomentOption as MomentOptionController,
useConfig,
useUtils,
useLanguage
} from 'ordering-components/native'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import IconAntDesign from 'react-native-vector-icons/AntDesign'
import { Container } from './styles'
import moment from 'moment'
const MomentSelectorUI = (props: any) => {
const {
datesList,
hoursList,
dateSelected,
timeSelected,
handleChangeDate,
handleChangeTime,
} = props
const theme = useTheme()
const { top } = useSafeAreaInsets()
const [{ configs }] = useConfig()
const [{ parseTime }] = useUtils()
const [, t] = useLanguage()
const [customizedDateList, setCustomizedDateList] = useState([])
const [customizedTimeList, setCustomizedTimeList] = useState([])
const is12hours = configs?.general_hour_format?.value?.includes('hh:mm')
const styles = StyleSheet.create({
selectOption: {
width: '100%',
backgroundColor: theme.colors.backgroundGray100,
paddingVertical: 5,
paddingHorizontal: 14,
flexDirection: 'row-reverse',
alignItems: 'center',
justifyContent: 'space-between',
height: 30
},
selectWrapper: {
flex: 1
}
})
useEffect(() => {
const updatedDatesList = datesList?.map((date: any) => {
return { value: moment(date).format('MMM DD, YYYY'), key: date }
})
setCustomizedDateList(updatedDatesList)
}, [datesList])
useEffect(() => {
if (hoursList?.length > 0) {
const updatedHoursList = hoursList?.map((hour: any) => {
const timeValue = is12hours ? (
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' })
)
return { value: timeValue, key: hour.startTime }
})
setCustomizedTimeList(updatedHoursList)
}
}, [hoursList])
const dropDownIcon = () => {
return (
)
}
return (
item.key === dateSelected)}
data={customizedDateList}
onSelect={(selectedItem, index) => {
handleChangeDate(selectedItem?.key)
}}
buttonTextAfterSelection={(selectedItem, index) => {
return selectedItem?.value
}}
rowTextForSelection={(item, index) => {
return item.value
}}
buttonStyle={{borderTopLeftRadius: 7.6, borderBottomLeftRadius: 7.6, ...styles.selectOption}}
buttonTextStyle={{
color: theme.colors.disabled,
fontSize: 12,
textAlign: 'left',
marginHorizontal: 0
}}
dropdownStyle={{
borderRadius: 8,
borderColor: theme.colors.lightGray,
marginTop: Platform.OS === 'ios' ? 12 : -top
}}
rowStyle={{
borderBottomColor: theme.colors.backgroundGray100,
backgroundColor: theme.colors.backgroundGray100,
height: 30,
flexDirection: 'column',
alignItems: 'flex-start',
paddingTop: 8,
paddingHorizontal: 12
}}
rowTextStyle={{
color: theme.colors.disabled,
fontSize: 12,
marginHorizontal: 0
}}
renderDropdownIcon={() => dropDownIcon()}
dropdownOverlayColor='transparent'
/>
item.key === timeSelected)}
defaultButtonText={t('SELECT_A_TIME_OPTION', 'Select an option')}
data={customizedTimeList}
onSelect={(selectedItem, index) => {
handleChangeTime(selectedItem.key)
}}
buttonTextAfterSelection={(selectedItem, index) => {
return selectedItem.value
}}
rowTextForSelection={(item, index) => {
return item.value
}}
buttonStyle={{borderTopRightRadius: 7.6, borderBottomRightRadius: 7.6, ...styles.selectOption}}
buttonTextStyle={{
color: theme.colors.disabled,
fontSize: 12,
textAlign: 'left',
marginHorizontal: 0
}}
dropdownStyle={{
borderRadius: 8,
borderColor: theme.colors.lightGray,
marginTop: Platform.OS === 'ios' ? 12 : -top
}}
rowStyle={{
borderBottomColor: theme.colors.backgroundGray100,
backgroundColor: theme.colors.backgroundGray100,
height: 30,
flexDirection: 'column',
alignItems: 'flex-start',
paddingTop: 8,
paddingHorizontal: 14
}}
rowTextStyle={{
color: theme.colors.disabled,
fontSize: 12,
marginHorizontal: 0
}}
renderDropdownIcon={() => dropDownIcon()}
dropdownOverlayColor='transparent'
/>
)
}
export const MomentSelector = (props: any) => {
const [{ configs }] = useConfig()
const limitDays = parseInt(configs?.max_days_preorder?.value, 10)
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 businessPreorderProps = {
...props,
UIComponent: MomentSelectorUI,
maxDate: currentDate
}
return
}