import { useEffect } from "react"; import { View } from "react-native"; import type { TimeInputRangeType } from "./components/timeInput/type"; import type ITimeSelectorProps from "./type"; import type { UpdateDateRangeType, UpdateDateType } from "./type"; import stylesheet, { useStyles } from "./stylesheet"; import TimeInput from "./components/timeInput"; import { NCoreUIKitLocalize, NCoreUIKitTheme, NCoreUIKitToast } from "../../core/hooks"; import type { DateTimePickerDateRange } from "../dateTimePicker/type"; import moment from "moment"; import { Fragment } from "react/jsx-runtime"; import Text from "../text"; const TimeSelector = ({ isTimeSelectWorksWithCenterWhenTimePicker, multipleSelectMinimumRequireMS, isWorkWith24HoursFormat = true, isWorkWithSeconds = false, multipleSelectMaximumMS, setIsSheetContentReady, selectMultipleObject, selectObject, pickerType, dateRange, maxDate, minDate, variant, date }: ITimeSelectorProps) => { const { spaces } = NCoreUIKitTheme.useContext(); const { localize } = NCoreUIKitLocalize.useContext(); const { inputsContainer: inputsContainerDynamicStyle, rangeContainer: rangeContainerDynamicStyle, container: containerDynamicStyle, colonText: colonTextDynamicStyle, timeTitle: timeTitleDynamicStyle } = useStyles({ isTimeSelectWorksWithCenterWhenTimePicker, pickerType, spaces }); useEffect(() => { if(pickerType === "time") setIsSheetContentReady(true); }, []); const setDateRangeValue = ({ rangeType, seconds, minutes, hours }: UpdateDateRangeType) => { if(!dateRange) { return; } const newRangeDate = dateRange[rangeType] ? dateRange[rangeType] : new Date(); if(hours !== undefined) { newRangeDate?.setHours(hours); } if(minutes !== undefined) { newRangeDate?.setMinutes(minutes); } if(seconds !== undefined) { newRangeDate?.setSeconds(seconds); } const newMultipleObject = dateRange; newMultipleObject[rangeType] = newRangeDate; return newMultipleObject; }; const setDateValue = ({ seconds, minutes, hours }: UpdateDateType) => { const newDate = date ? date : new Date(); if(hours !== undefined) { newDate?.setHours(hours); } if(minutes !== undefined) { newDate?.setMinutes(minutes); } if(seconds !== undefined) { newDate?.setSeconds(seconds); } return newDate; }; const rangeValidation = ({ dateRangeValue, rangeType }: { dateRangeValue: DateTimePickerDateRange; rangeType: TimeInputRangeType; }) => { const start = rangeType === "start" ? dateRangeValue[rangeType] : dateRange?.start; const end = rangeType === "end" ? dateRangeValue[rangeType] : dateRange?.end; if(start && end) { if(multipleSelectMinimumRequireMS && Math.abs(moment(end).diff(start, "milliseconds")) < multipleSelectMinimumRequireMS) { NCoreUIKitToast.open({ title: localize("selected-start-and-end-times-cannot-be-less-than-x-times-apart", [ moment.duration(multipleSelectMinimumRequireMS).humanize() ]) }); return false; } if(multipleSelectMaximumMS && Math.abs(moment(end).diff(start, "milliseconds")) > multipleSelectMaximumMS) { NCoreUIKitToast.open({ title: localize("selected-start-and-end-times-cannot-exceed-x-intervals", [ moment.duration(multipleSelectMaximumMS).humanize() ]) }); return false; } if(moment(end).isBefore(start)) { NCoreUIKitToast.open({ title: localize("selected-end-time-cannot-before-from-start-time") }); return false; } if(moment(start).isAfter(end)) { NCoreUIKitToast.open({ title: localize("selected-start-time-cannot-after-then-end-time") }); return false; } } return true; }; const renderTimeInputs = () => { if(variant === "range") { return {localize("start-time")}: : { isWorkWithSeconds ? : : null } {localize("end-time")}: : { isWorkWithSeconds ? : : null } ; } return {localize("end-time")}: : { isWorkWithSeconds ? : : null } ; }; return {renderTimeInputs()} ; }; export default TimeSelector;