|
@@ -1,5 +1,7 @@
|
|
|
import {
|
|
import {
|
|
|
- TouchableOpacity,
|
|
|
|
|
|
|
+ useEffect
|
|
|
|
|
+} from "react";
|
|
|
|
|
+import {
|
|
|
View
|
|
View
|
|
|
} from "react-native";
|
|
} from "react-native";
|
|
|
import type ITimeSelectorProps from "./type";
|
|
import type ITimeSelectorProps from "./type";
|
|
@@ -10,18 +12,18 @@ import type {
|
|
|
import stylesheet, {
|
|
import stylesheet, {
|
|
|
useStyles
|
|
useStyles
|
|
|
} from "./stylesheet";
|
|
} from "./stylesheet";
|
|
|
|
|
+import TimeInput from "./components/timeInput";
|
|
|
import {
|
|
import {
|
|
|
NCoreUIKitLocalize,
|
|
NCoreUIKitLocalize,
|
|
|
NCoreUIKitTheme
|
|
NCoreUIKitTheme
|
|
|
} from "../../core/hooks";
|
|
} from "../../core/hooks";
|
|
|
-import type INumericInputProps from "../numericInput/type";
|
|
|
|
|
import {
|
|
import {
|
|
|
Fragment
|
|
Fragment
|
|
|
} from "react/jsx-runtime";
|
|
} from "react/jsx-runtime";
|
|
|
-import NumericInput from "../numericInput";
|
|
|
|
|
import Text from "../text";
|
|
import Text from "../text";
|
|
|
|
|
|
|
|
const TimeSelector = ({
|
|
const TimeSelector = ({
|
|
|
|
|
+ isWorkWith24HoursFormat = true,
|
|
|
isWorkWithSeconds = false,
|
|
isWorkWithSeconds = false,
|
|
|
setIsSheetContentReady,
|
|
setIsSheetContentReady,
|
|
|
selectMultipleObject,
|
|
selectMultipleObject,
|
|
@@ -34,11 +36,7 @@ const TimeSelector = ({
|
|
|
date
|
|
date
|
|
|
}: ITimeSelectorProps) => {
|
|
}: ITimeSelectorProps) => {
|
|
|
const {
|
|
const {
|
|
|
- typography,
|
|
|
|
|
- radiuses,
|
|
|
|
|
- borders,
|
|
|
|
|
- spaces,
|
|
|
|
|
- colors
|
|
|
|
|
|
|
+ spaces
|
|
|
} = NCoreUIKitTheme.useContext();
|
|
} = NCoreUIKitTheme.useContext();
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
@@ -48,20 +46,17 @@ const TimeSelector = ({
|
|
|
const {
|
|
const {
|
|
|
inputsContainer: inputsContainerDynamicStyle,
|
|
inputsContainer: inputsContainerDynamicStyle,
|
|
|
rangeContainer: rangeContainerDynamicStyle,
|
|
rangeContainer: rangeContainerDynamicStyle,
|
|
|
- timeContainer: timeContainerDynamicStyle,
|
|
|
|
|
- timeInput: timeInputDynamicStyle,
|
|
|
|
|
container: containerDynamicStyle,
|
|
container: containerDynamicStyle,
|
|
|
colonText: colonTextDynamicStyle,
|
|
colonText: colonTextDynamicStyle,
|
|
|
timeTitle: timeTitleDynamicStyle
|
|
timeTitle: timeTitleDynamicStyle
|
|
|
} = useStyles({
|
|
} = useStyles({
|
|
|
- pickerType,
|
|
|
|
|
- typography,
|
|
|
|
|
- radiuses,
|
|
|
|
|
- borders,
|
|
|
|
|
- colors,
|
|
|
|
|
spaces
|
|
spaces
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if(pickerType === "time") setIsSheetContentReady(true);
|
|
|
|
|
+ }, []);
|
|
|
|
|
+
|
|
|
const setDateRangeValue = ({
|
|
const setDateRangeValue = ({
|
|
|
rangeType,
|
|
rangeType,
|
|
|
seconds,
|
|
seconds,
|
|
@@ -74,22 +69,22 @@ const TimeSelector = ({
|
|
|
|
|
|
|
|
const newRangeDate = dateRange[rangeType] ? dateRange[rangeType] : new Date();
|
|
const newRangeDate = dateRange[rangeType] ? dateRange[rangeType] : new Date();
|
|
|
|
|
|
|
|
- if(hours) {
|
|
|
|
|
|
|
+ if(hours !== undefined) {
|
|
|
newRangeDate?.setHours(hours);
|
|
newRangeDate?.setHours(hours);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(minutes) {
|
|
|
|
|
|
|
+ if(minutes !== undefined) {
|
|
|
newRangeDate?.setMinutes(minutes);
|
|
newRangeDate?.setMinutes(minutes);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(seconds) {
|
|
|
|
|
|
|
+ if(seconds !== undefined) {
|
|
|
newRangeDate?.setSeconds(seconds);
|
|
newRangeDate?.setSeconds(seconds);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const newMultipleObject = dateRange;
|
|
const newMultipleObject = dateRange;
|
|
|
newMultipleObject[rangeType] = newRangeDate;
|
|
newMultipleObject[rangeType] = newRangeDate;
|
|
|
|
|
|
|
|
- selectMultipleObject(newMultipleObject);
|
|
|
|
|
|
|
+ return newMultipleObject;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const setDateValue = ({
|
|
const setDateValue = ({
|
|
@@ -99,62 +94,19 @@ const TimeSelector = ({
|
|
|
}: UpdateDateType) => {
|
|
}: UpdateDateType) => {
|
|
|
const newDate = date ? date : new Date();
|
|
const newDate = date ? date : new Date();
|
|
|
|
|
|
|
|
- if(hours) {
|
|
|
|
|
|
|
+ if(hours !== undefined) {
|
|
|
newDate?.setHours(hours);
|
|
newDate?.setHours(hours);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(minutes) {
|
|
|
|
|
|
|
+ if(minutes !== undefined) {
|
|
|
newDate?.setMinutes(minutes);
|
|
newDate?.setMinutes(minutes);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(seconds) {
|
|
|
|
|
|
|
+ if(seconds !== undefined) {
|
|
|
newDate?.setSeconds(seconds);
|
|
newDate?.setSeconds(seconds);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- selectObject(newDate);
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- const RenderTimeInput = ({
|
|
|
|
|
- rangeType,
|
|
|
|
|
- timeType,
|
|
|
|
|
- ...props
|
|
|
|
|
- }: INumericInputProps & {
|
|
|
|
|
- timeType: "hours" | "minutes" | "seconds";
|
|
|
|
|
- rangeType?: "start" | "end";
|
|
|
|
|
- }) => {
|
|
|
|
|
- return <TouchableOpacity
|
|
|
|
|
- style={[
|
|
|
|
|
- stylesheet.timeContainer,
|
|
|
|
|
- timeContainerDynamicStyle
|
|
|
|
|
- ]}
|
|
|
|
|
- >
|
|
|
|
|
- <NumericInput
|
|
|
|
|
- {...props}
|
|
|
|
|
- onChangeText={(text) => {
|
|
|
|
|
- if(variant === "range") {
|
|
|
|
|
- const updateTime: UpdateDateRangeType = {
|
|
|
|
|
- rangeType: rangeType as "start" | "end"
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- updateTime[timeType] = Number(text);
|
|
|
|
|
-
|
|
|
|
|
- setDateRangeValue(updateTime);
|
|
|
|
|
- } else {
|
|
|
|
|
- setDateValue({
|
|
|
|
|
- [timeType]: Number(text)
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- }}
|
|
|
|
|
- inputStyle={[
|
|
|
|
|
- stylesheet.timeInput,
|
|
|
|
|
- timeInputDynamicStyle
|
|
|
|
|
- ]}
|
|
|
|
|
- keyboardType="numeric"
|
|
|
|
|
- textAlign="center"
|
|
|
|
|
- numberOfLines={1}
|
|
|
|
|
- maxLength={2}
|
|
|
|
|
- />
|
|
|
|
|
- </TouchableOpacity>;
|
|
|
|
|
|
|
+ return newDate;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const renderTimeInputs = () => {
|
|
const renderTimeInputs = () => {
|
|
@@ -183,8 +135,16 @@ const TimeSelector = ({
|
|
|
}
|
|
}
|
|
|
]}
|
|
]}
|
|
|
>
|
|
>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.start?.getHours().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.start?.getHours().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
rangeType="start"
|
|
rangeType="start"
|
|
|
timeType="hours"
|
|
timeType="hours"
|
|
|
/>
|
|
/>
|
|
@@ -197,9 +157,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.start?.getMinutes().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.start?.getMinutes().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="minutes"
|
|
timeType="minutes"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
rangeType="start"
|
|
rangeType="start"
|
|
|
/>
|
|
/>
|
|
|
{
|
|
{
|
|
@@ -213,9 +181,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.start?.getSeconds().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.start?.getSeconds().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="seconds"
|
|
timeType="seconds"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
rangeType="start"
|
|
rangeType="start"
|
|
|
/>
|
|
/>
|
|
|
</Fragment> : null
|
|
</Fragment> : null
|
|
@@ -236,8 +212,16 @@ const TimeSelector = ({
|
|
|
inputsContainerDynamicStyle
|
|
inputsContainerDynamicStyle
|
|
|
]}
|
|
]}
|
|
|
>
|
|
>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.end?.getHours().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.end?.getHours().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
timeType="hours"
|
|
timeType="hours"
|
|
|
rangeType="end"
|
|
rangeType="end"
|
|
|
/>
|
|
/>
|
|
@@ -250,9 +234,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.end?.getMinutes().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.end?.getMinutes().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="minutes"
|
|
timeType="minutes"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
rangeType="end"
|
|
rangeType="end"
|
|
|
/>
|
|
/>
|
|
|
{
|
|
{
|
|
@@ -266,9 +258,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={dateRange?.end?.getSeconds().toString().padStart(2, "0")}
|
|
initialValue={dateRange?.end?.getSeconds().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="seconds"
|
|
timeType="seconds"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
rangeType="end"
|
|
rangeType="end"
|
|
|
/>
|
|
/>
|
|
|
</Fragment> : null
|
|
</Fragment> : null
|
|
@@ -293,8 +293,16 @@ const TimeSelector = ({
|
|
|
inputsContainerDynamicStyle
|
|
inputsContainerDynamicStyle
|
|
|
]}
|
|
]}
|
|
|
>
|
|
>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={date?.getHours().toString().padStart(2, "0")}
|
|
initialValue={date?.getHours().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
timeType="hours"
|
|
timeType="hours"
|
|
|
/>
|
|
/>
|
|
|
<Text
|
|
<Text
|
|
@@ -306,9 +314,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={date?.getMinutes().toString().padStart(2, "0")}
|
|
initialValue={date?.getMinutes().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="minutes"
|
|
timeType="minutes"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
/>
|
|
/>
|
|
|
{
|
|
{
|
|
|
isWorkWithSeconds ? <Fragment>
|
|
isWorkWithSeconds ? <Fragment>
|
|
@@ -321,9 +337,17 @@ const TimeSelector = ({
|
|
|
>
|
|
>
|
|
|
:
|
|
:
|
|
|
</Text>
|
|
</Text>
|
|
|
- <RenderTimeInput
|
|
|
|
|
|
|
+ <TimeInput
|
|
|
initialValue={date?.getSeconds().toString().padStart(2, "0")}
|
|
initialValue={date?.getSeconds().toString().padStart(2, "0")}
|
|
|
|
|
+ isWorkWith24HoursFormat={isWorkWith24HoursFormat}
|
|
|
|
|
+ selectMultipleObject={selectMultipleObject}
|
|
|
|
|
+ setDateRangeValue={setDateRangeValue}
|
|
|
|
|
+ setDateValue={setDateValue}
|
|
|
|
|
+ selectObject={selectObject}
|
|
|
timeType="seconds"
|
|
timeType="seconds"
|
|
|
|
|
+ variant={variant}
|
|
|
|
|
+ maxDate={maxDate}
|
|
|
|
|
+ minDate={minDate}
|
|
|
/>
|
|
/>
|
|
|
</Fragment> : null
|
|
</Fragment> : null
|
|
|
}
|
|
}
|