UNPKG

@zenithui/time-picker

Version:

A ZenithUi Time Picker is React component enables users to select a time from a predefined list of options.

43 lines (42 loc) 1.44 kB
import { useEffect, useMemo, useState } from "react"; import { convertTo24Hour, generateTimeOptions, getInitialHour, getInitialPeriod } from "./utils.js"; const useTimePicker = ({ initialTime, format = "12-hours", onTimeChange })=>{ const is12HourFormat = useMemo(()=>"12-hours" === format, [ format ]); const [hour, setHour] = useState(()=>is12HourFormat ? getInitialHour(initialTime) : initialTime?.split(":")?.[0] || "00"); const [minute, setMinute] = useState(initialTime?.split(":")?.[1] || "00"); const [period, setPeriod] = useState(is12HourFormat ? getInitialPeriod(initialTime) : ""); const hours = useMemo(()=>generateTimeOptions(is12HourFormat ? 1 : 0, is12HourFormat ? 12 : 23), [ is12HourFormat ]); const minutes = useMemo(()=>generateTimeOptions(0, 59), []); const periods = is12HourFormat ? [ "AM", "PM" ] : []; useEffect(()=>{ let newTime = ""; newTime = is12HourFormat ? `${convertTo24Hour(hour, period)}:${minute}` : `${hour}:${minute}`; if (newTime !== initialTime) onTimeChange?.(newTime); }, [ hour, minute, period, initialTime, is12HourFormat, onTimeChange ]); return { hour, minute, period, setHour, setMinute, setPeriod, hours, minutes, periods }; }; export { useTimePicker };