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;