|
|
@@ -1,6 +1,5 @@
|
|
|
import {
|
|
|
- type FC,
|
|
|
- useRef
|
|
|
+ type FC
|
|
|
} from "react";
|
|
|
import {
|
|
|
TouchableOpacity
|
|
|
@@ -39,8 +38,6 @@ const TimeInput: FC<TimeInputCombinedProps> = ({
|
|
|
radiuses
|
|
|
} = NCoreUIKitTheme.useContext();
|
|
|
|
|
|
- const inputDebouncer = useRef<ReturnType<typeof setTimeout>>(null);
|
|
|
-
|
|
|
const {
|
|
|
container: containerDynamicStyle,
|
|
|
input: inputDynamicStyle
|
|
|
@@ -57,10 +54,10 @@ const TimeInput: FC<TimeInputCombinedProps> = ({
|
|
|
>
|
|
|
<NumericInput
|
|
|
{...props}
|
|
|
- validation={(text) => {
|
|
|
+ validation={(text, setText) => {
|
|
|
let resp = true;
|
|
|
|
|
|
- if(props.validation && !props.validation(text)) {
|
|
|
+ if(props.validation && !props.validation(text, setText)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -68,24 +65,29 @@ const TimeInput: FC<TimeInputCombinedProps> = ({
|
|
|
|
|
|
if(timeType === "hours") {
|
|
|
if(num < 0) {
|
|
|
+ setText("0");
|
|
|
resp = false;
|
|
|
}
|
|
|
|
|
|
if(isWorkWith24HoursFormat) {
|
|
|
if(num > 23) {
|
|
|
+ setText("23");
|
|
|
resp = false;
|
|
|
}
|
|
|
} else {
|
|
|
if(num > 11) {
|
|
|
+ setText("11");
|
|
|
resp = false;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
if(num < 0) {
|
|
|
+ setText("0");
|
|
|
resp = false;
|
|
|
}
|
|
|
|
|
|
if(num > 59) {
|
|
|
+ setText("59");
|
|
|
resp = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -103,14 +105,20 @@ const TimeInput: FC<TimeInputCombinedProps> = ({
|
|
|
if(nDRV) {
|
|
|
const nDRVMoment = moment(nDRV[rangeType as "start" | "end"]);
|
|
|
|
|
|
- if(minDate && nDRVMoment.isBefore(minDate)) resp = false;
|
|
|
-
|
|
|
- if(maxDate && nDRVMoment.isAfter(maxDate)) resp = false;
|
|
|
+ if(minDate && nDRVMoment.isBefore(minDate)) {
|
|
|
+ setText(moment(minDate).get(timeType).toString());
|
|
|
+ resp = false;
|
|
|
+ }
|
|
|
|
|
|
+ if(maxDate && nDRVMoment.isAfter(maxDate)) {
|
|
|
+ setText(moment(maxDate).get(timeType).toString());
|
|
|
+ resp = false;
|
|
|
+ }
|
|
|
+ console.log("x:", resp);
|
|
|
if(rangeValidation && !rangeValidation({
|
|
|
rangeType: rangeType as "start" | "end",
|
|
|
dateRangeValue: nDRV
|
|
|
- })) {
|
|
|
+ }, setText)) {
|
|
|
resp = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -119,37 +127,36 @@ const TimeInput: FC<TimeInputCombinedProps> = ({
|
|
|
[timeType]: Number(text)
|
|
|
});
|
|
|
|
|
|
- if(minDate && nDV && moment(nDV).isBefore(minDate)) resp = false;
|
|
|
+ if(minDate && nDV && moment(nDV).isBefore(minDate)) {
|
|
|
+ setText(moment(minDate).get(timeType).toString());
|
|
|
+ resp = false;
|
|
|
+ }
|
|
|
|
|
|
- if(maxDate && nDV && moment(nDV).isAfter(maxDate)) resp = false;
|
|
|
+ if(maxDate && nDV && moment(nDV).isAfter(maxDate)) {
|
|
|
+ setText(moment(maxDate).get(timeType).toString());
|
|
|
+ resp = false;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return resp;
|
|
|
}}
|
|
|
onChangeText={(text) => {
|
|
|
- if(inputDebouncer.current) {
|
|
|
- clearTimeout(inputDebouncer.current);
|
|
|
- inputDebouncer.current = null;
|
|
|
- }
|
|
|
-
|
|
|
- inputDebouncer.current = setTimeout(() => {{
|
|
|
- if(variant === "range") {
|
|
|
- const updateTime: UpdateDateRangeType = {
|
|
|
- rangeType: rangeType as "start" | "end"
|
|
|
- };
|
|
|
+ if(variant === "range") {
|
|
|
+ const updateTime: UpdateDateRangeType = {
|
|
|
+ rangeType: rangeType as "start" | "end"
|
|
|
+ };
|
|
|
|
|
|
- updateTime[timeType] = Number(text);
|
|
|
+ updateTime[timeType] = Number(text);
|
|
|
|
|
|
- const nDRV = setDateRangeValue(updateTime);
|
|
|
- selectMultipleObject(nDRV);
|
|
|
- } else {
|
|
|
- const nDV = setDateValue({
|
|
|
- [timeType]: Number(text)
|
|
|
- });
|
|
|
- selectObject(nDV);
|
|
|
- }
|
|
|
- }}, 500);
|
|
|
+ const nDRV = setDateRangeValue(updateTime);
|
|
|
+ selectMultipleObject(nDRV);
|
|
|
+ } else {
|
|
|
+ const nDV = setDateValue({
|
|
|
+ [timeType]: Number(text)
|
|
|
+ });
|
|
|
+ selectObject(nDV);
|
|
|
+ }
|
|
|
}}
|
|
|
inputStyle={[
|
|
|
stylesheet.input,
|