Skip to content

Commit 93e09db

Browse files
authored
DateTimePicket - add validate (#2601)
1 parent 8d2c4f2 commit 93e09db

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

src/components/dateTimePicker/index.tsx

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
1+
import React, {
2+
useCallback,
3+
useEffect,
4+
useMemo,
5+
useRef,
6+
useState,
7+
useImperativeHandle,
8+
forwardRef,
9+
ForwardedRef
10+
} from 'react';
211
import {StyleProp, StyleSheet, ViewStyle} from 'react-native';
312
import {DateTimePickerPackage as RNDateTimePicker, MomentPackage as moment} from '../../optionalDependencies';
4-
import {useDidUpdate} from 'hooks';
13+
import {useDidUpdate} from '../../hooks';
514
import {Colors} from '../../style';
615
import Assets from '../../assets';
716
import {Constants, asBaseComponent, BaseComponentInjectedProps} from '../../commons/new';
@@ -10,7 +19,7 @@ import {DialogProps} from '../dialog';
1019
import View from '../view';
1120
import Button from '../button';
1221
import ExpandableOverlay, {ExpandableOverlayMethods, RenderCustomOverlayProps} from '../../incubator/expandableOverlay';
13-
import type {TextFieldProps} from '../../incubator/TextField';
22+
import type {TextFieldProps, TextFieldMethods} from '../../incubator/TextField';
1423

1524
const MODES = {
1625
DATE: 'date',
@@ -98,11 +107,10 @@ export type DateTimePickerProps = Omit<TextFieldProps, 'value' | 'onChange'> & {
98107
* Should migrate to the new TextField implementation
99108
*/
100109
migrateTextField?: boolean;
101-
}
110+
};
102111

103112
type DateTimePickerPropsInternal = DateTimePickerProps & BaseComponentInjectedProps;
104113

105-
106114
/*eslint-disable*/
107115
/**
108116
* @description: Date and Time Picker Component that wraps RNDateTimePicker for date and time modes.
@@ -113,7 +121,7 @@ type DateTimePickerPropsInternal = DateTimePickerProps & BaseComponentInjectedPr
113121
* @gif: https://github.com/wix/react-native-ui-lib/blob/master/demo/showcase/DateTimePicker/DateTimePicker_iOS.gif?raw=true, https://github.com/wix/react-native-ui-lib/blob/master/demo/showcase/DateTimePicker/DateTimePicker_Android.gif?raw=true
114122
*/
115123
/*eslint-enable*/
116-
function DateTimePicker(props: DateTimePickerPropsInternal) {
124+
const DateTimePicker = forwardRef((props: DateTimePickerPropsInternal, ref: ForwardedRef<any>) => {
117125
const {
118126
value: propsValue,
119127
renderInput,
@@ -143,6 +151,13 @@ function DateTimePicker(props: DateTimePickerPropsInternal) {
143151
const [value, setValue] = useState(propsValue);
144152
const chosenDate = useRef(propsValue);
145153
const expandable = useRef<ExpandableOverlayMethods>();
154+
const textField = useRef<TextFieldMethods>();
155+
156+
useImperativeHandle(ref, () => {
157+
return {
158+
validate: () => textField.current?.validate()
159+
};
160+
});
146161

147162
useEffect(() => {
148163
if (!RNDateTimePicker) {
@@ -322,6 +337,8 @@ function DateTimePicker(props: DateTimePickerPropsInternal) {
322337
) : (
323338
<TextField
324339
{...others}
340+
// @ts-expect-error
341+
ref={textField}
325342
migrate={migrateTextField}
326343
testID={testID}
327344
editable={editable}
@@ -333,7 +350,7 @@ function DateTimePicker(props: DateTimePickerPropsInternal) {
333350
</ExpandableOverlay>
334351
</>
335352
);
336-
}
353+
});
337354

338355
DateTimePicker.displayName = 'DateTimePicker';
339356
export {DateTimePicker}; // For tests

0 commit comments

Comments
 (0)