matiru

Blockchain-Based Supply Chain Transparency for Agricultural Produce

DatePicker.js (1851B)


import { useState, useEffect } from "react";
import { Platform, Text, TouchableOpacity, View } from "react-native";
import DateTimePicker from "@react-native-community/datetimepicker";
import styles, { colors } from "../styles";

export default function DatePicker({ label, value, onChange }) {
  const [show, setShow] = useState(false);
  const [selected, setSelected] = useState(value ? new Date(value) : null);

  useEffect(() => {
    if (!value) setSelected(null);
  }, [value]);

  const handleChange = (event, selectedDate) => {
    setShow(false);
    if (event.type === "dismissed") return;

    if (selectedDate) {
      setSelected(selectedDate);
      const formatted = selectedDate.toISOString().split("T")[0];
      onChange(formatted);
    }
  };

  return (
    <View style={{ marginVertical: 8 }}>
      {label && (
        <Text
          style={{
            color: colors.gray,
            marginBottom: 4,
            fontWeight: "600",
            fontSize: 16,
          }}
        >
          {label}
        </Text>
      )}

      <TouchableOpacity
        onPress={() => setShow(true)}
        style={[
          styles.input,
          {
            justifyContent: "center",
            backgroundColor: "white",
          },
        ]}
      >
        <Text
          style={{
            fontSize: 16,
            color: selected ? colors.gray : "#999",
          }}
        >
          {selected ? `${selected.toISOString().split("T")[0]}` : "Select Date"}
        </Text>
      </TouchableOpacity>

      {show && (
        <DateTimePicker
          value={selected || new Date()}
          mode="date"
          display={Platform.OS === "ios" ? "spinner" : "default"}
          onChange={handleChange}
          minimumDate={new Date()}
          accentColor={colors.darkGreen}
        />
      )}
    </View>
  );
}