import React, { useEffect } from "react"; import { Box, Text, UseInput } from "./Ink"; import { NumberInput } from "./NumberInput"; import { ConfiguredFilter } from "./Filter"; import { DateInput } from "./DateInput"; type DateFilterProps = { filter: ConfiguredFilter; onFilterChange: (filter: ConfiguredFilter) => void; onFilterComplete: () => void; useInput: UseInput; }; export const DateFilter = ({ filter, onFilterChange, onFilterComplete, useInput, }: DateFilterProps): React.JSX.Element => { useEffect(() => { switch (filter.operator) { case "lteDate": if (filter.dateMax) { onFilterComplete(); } break; case "gteDate": if (filter.dateMin) { onFilterComplete(); } break; case "betweenDate": if (filter.dateMin && filter.dateMax) { onFilterComplete(); } break; case "today": onFilterComplete(); break; case "inLessThan": case "inMoreThan": case "lessThanAgo": case "moreThanAgo": case "inTheNext": case "inTheLast": default: } }, [filter]); switch (filter.operator) { case "lteDate": return ( Enter your filter maximum date: onFilterChange({ ...filter, dateMax: date }) } useInput={useInput} /> ); case "gteDate": return ( Enter your filter minimum date: onFilterChange({ ...filter, dateMin: date }) } useInput={useInput} /> ); case "betweenDate": return ( Enter your filter{" "} {filter.operator === "betweenDate" ? filter.dateMin === undefined ? "minimum " : "maximum " : ""} date:{" "} filter.dateMin === undefined ? onFilterChange({ ...filter, dateMin: value, }) : onFilterChange({ ...filter, dateMax: value, }) } useInput={useInput} /> ); case "today": return <>; case "inMoreThan": case "moreThanAgo": case "inLessThan": case "inTheNext": case "lessThanAgo": case "inTheLast": return ( Enter a number of days: onFilterChange({ ...filter, relativeDays: days }) } useInput={useInput} /> ); default: return <>; } };