|
|
@@ -4,6 +4,9 @@ import {
|
|
|
import {
|
|
|
View
|
|
|
} from "react-native";
|
|
|
+import type {
|
|
|
+ TimeInputRangeType
|
|
|
+} from "./components/timeInput/type";
|
|
|
import type ITimeSelectorProps from "./type";
|
|
|
import type {
|
|
|
UpdateDateRangeType,
|
|
|
@@ -17,14 +20,21 @@ import {
|
|
|
NCoreUIKitLocalize,
|
|
|
NCoreUIKitTheme
|
|
|
} 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,
|
|
|
@@ -50,6 +60,8 @@ const TimeSelector = ({
|
|
|
colonText: colonTextDynamicStyle,
|
|
|
timeTitle: timeTitleDynamicStyle
|
|
|
} = useStyles({
|
|
|
+ isTimeSelectWorksWithCenterWhenTimePicker,
|
|
|
+ pickerType,
|
|
|
spaces
|
|
|
});
|
|
|
|
|
|
@@ -109,6 +121,26 @@ const TimeSelector = ({
|
|
|
return newDate;
|
|
|
};
|
|
|
|
|
|
+ const rangeValidation = ({
|
|
|
+ dateRangeValue,
|
|
|
+ rangeType
|
|
|
+ }: {
|
|
|
+ dateRangeValue: DateTimePickerDateRange;
|
|
|
+ rangeType: TimeInputRangeType;
|
|
|
+ }) => {
|
|
|
+ if(dateRange?.start && (rangeType === "end" || dateRange.end)) {
|
|
|
+ if(multipleSelectMinimumRequireMS && Math.abs(moment(rangeType === "end" ? dateRangeValue[rangeType] : dateRange.end).diff(dateRange.start, "milliseconds")) > multipleSelectMinimumRequireMS) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(multipleSelectMaximumMS && Math.abs(moment(rangeType === "end" ? dateRangeValue[rangeType] : dateRange.end).diff(dateRange.start, "milliseconds")) < multipleSelectMaximumMS) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+
|
|
|
const renderTimeInputs = () => {
|
|
|
if(variant === "range") {
|
|
|
return <View
|
|
|
@@ -140,6 +172,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
variant={variant}
|
|
|
@@ -162,6 +195,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
timeType="minutes"
|
|
|
@@ -186,6 +220,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
timeType="seconds"
|
|
|
@@ -217,6 +252,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
variant={variant}
|
|
|
@@ -239,6 +275,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
timeType="minutes"
|
|
|
@@ -263,6 +300,7 @@ const TimeSelector = ({
|
|
|
isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
selectMultipleObject={selectMultipleObject}
|
|
|
setDateRangeValue={setDateRangeValue}
|
|
|
+ rangeValidation={rangeValidation}
|
|
|
setDateValue={setDateValue}
|
|
|
selectObject={selectObject}
|
|
|
timeType="seconds"
|