UNPKG

@janiscommerce/ui-native

Version:
27 lines (26 loc) 1.37 kB
import React, { forwardRef, memo, useImperativeHandle, useMemo, useState } from 'react'; import RNDatePicker from 'react-native-date-picker'; import { getSharedProps } from './utils'; const DatePickerModal = memo(forwardRef(({ onConfirm, onCancel, title, confirmText, cancelText, date, ...sharedProps }, ref) => { const [isVisible, setIsVisible] = useState(false); // Resolved once per `date` reference. Callers should stabilise the `date` prop // (e.g. via useState/useMemo) to avoid the fallback regenerating on every render. const resolvedDate = useMemo(() => date ?? new Date(), [date]); const baseProps = getSharedProps({ ...sharedProps, date: resolvedDate }); useImperativeHandle(ref, () => ({ open: () => setIsVisible(true), close: () => setIsVisible(false), }), []); const handleConfirm = (selectedDate) => { setIsVisible(false); onConfirm(selectedDate); }; // The library fires onCancel both on the Cancel button and on tap-outside. const handleCancel = () => { setIsVisible(false); onCancel?.(); }; return (<RNDatePicker {...baseProps} modal open={isVisible} onConfirm={handleConfirm} onCancel={handleCancel} title={title} confirmText={confirmText} cancelText={cancelText}/>); })); DatePickerModal.displayName = 'DatePickerModal'; export default DatePickerModal;