import React, { useCallback, useState } from "react"; import { Platform, Pressable, View } from "react-native"; import DateTimePicker, { type DateTimePickerEvent } from "@react-native-community/datetimepicker"; import { cn, useThemeColor } from "heroui-native"; import { CalendarIcon } from "../helpers/icons"; import { useNTheme } from "../hooks/useNTheme"; import { NText } from "./NText"; export interface NDatePickerProps { value: Date; onChange: (date: Date) => void; label?: string; mode?: "date" | "time" | "datetime"; display?: "default" | "spinner" | "compact" | "inline"; minimumDate?: Date; maximumDate?: Date; disabled?: boolean; className?: string; labelClassName?: string; } export const NDatePicker = React.memo( ({ value, onChange, label, mode = "date", display, minimumDate, maximumDate, disabled = false, className, labelClassName, }) => { const { isDarkMode } = useNTheme(); const [mutedColor] = useThemeColor(["muted"]); const isIOS = Platform.OS === "ios"; const [showPicker, setShowPicker] = useState(isIOS); const handleChange = useCallback( (_: DateTimePickerEvent, date?: Date) => { if (!isIOS) setShowPicker(false); if (date) onChange(date); }, [onChange, isIOS], ); const displayText = mode === "time" ? value.toLocaleTimeString() : value.toLocaleDateString(); const resolvedDisplay = display ?? (isIOS ? "compact" : "default"); return ( {label && ( {label} )} {!isIOS && ( !disabled && setShowPicker(true)} className={cn( "min-h-12 justify-center rounded-2xl border-[1.5px] border-field-border bg-field px-3", disabled && "opacity-50", )} > {displayText} )} {showPicker && ( )} ); }, ); NDatePicker.displayName = "NDatePicker";