useStandaloneTimePicker

Gère l’état de l’heure avec un comportement d’ouverture/fermeture et de clic à l’extérieur.

Importer

import { useStandaloneTimePicker } from "react-date-range-picker-headless";

Utilisation

import { useState } from "react";
import { useStandaloneTimePicker } from "react-date-range-picker-headless";
function MyTimePicker() {
const [time, setTime] = useState<Date | null>(null);
const picker = useStandaloneTimePicker({
value: time,
onChange: setTime,
time: { precision: "minute", hourFormat: "24", minuteStep: 5 },
placeholder: "Sélectionner l'heure",
});
return (
<div ref={picker.containerRef}>
<button onClick={picker.handleToggle}>
{picker.hasValue ? picker.displayValue : "Sélectionner l'heure"}
</button>
{picker.isOpen && (
<div ref={picker.popupRef} onKeyDown={picker.handleKeyDown}>
<div>
<span>{String(picker.tempHour).padStart(2, "0")}</span>
<span>:</span>
<span>{String(picker.tempMinute).padStart(2, "0")}</span>
</div>
{/* Hook up hour/minute controls */}
<input
type="range"
min={0}
max={23}
value={picker.tempHour}
onChange={(e) => picker.handleHourChange(Number(e.target.value))}
/>
<input
type="range"
min={0}
max={55}
step={5}
value={picker.tempMinute}
onChange={(e) => picker.handleMinuteChange(Number(e.target.value))}
/>
<div>
<button onClick={picker.handleClear}>Effacer</button>
<button onClick={picker.handleCancel}>Annuler</button>
<button onClick={picker.handleConfirm}>Confirmer</button>
</div>
</div>
)}
</div>
);
}

Options

OptionTypeDéfautDescription
valueDate | nullRequis. Heure actuelle sous forme d’objet Date (seule la partie heure est utilisée).
onChange(date: Date | null) => voidRequis. Appelé lorsque l’heure est confirmée.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Configuration du sélecteur d’heure.
localePartial<Locale>DEFAULT_LOCALERemplacer les chaînes de locale.
displayFormatstringChaîne de formatage personnalisée pour l’affichage du déclencheur.
placeholderstringTexte de substitution lorsqu’aucune valeur n’est sélectionnée.
openbooleanÉtat d’ouverture contrôlé.
initialOpenbooleanfalseÉtat d’ouverture initial (non contrôlé).
onOpenChange(open: boolean) => voidCallback lorsque l’état d’ouverture change.
requiredbooleanfalseSi vrai, handleClear est une opération sans effet.
inlinebooleanfalseToujours afficher le panneau sans déclencheur/popup.
namestringNom du champ de saisie masqué pour la soumission de formulaire.

Valeurs de retour

NomTypeDescription
isOpenbooleanIndique si la popup est actuellement ouverte.
handleOpen() => voidOuvrir la popup.
handleClose() => voidFermer la popup.
handleToggle() => voidBasculer la popup.
tempHournumberValeur de l’heure temporaire actuelle.
tempMinutenumberValeur de la minute temporaire actuelle.
tempSecondnumberValeur de la seconde temporaire actuelle.
tempPeriodTimePeriodPériode AM/PM actuelle.
handleHourChange(hour: number) => voidMettre à jour l’heure temporaire.
handleMinuteChange(minute: number) => voidMettre à jour la minute temporaire.
handleSecondChange(second: number) => voidMettre à jour la seconde temporaire.
handlePeriodChange(period: TimePeriod) => voidMettre à jour la période AM/PM.
handleConfirm() => voidConfirmer l’heure temporaire, appeler onChange, et fermer la popup.
handleCancel() => voidRevenir à la valeur d’origine et fermer la popup.
handleClear() => voidEffacer la valeur et fermer. Opération sans effet si required.
displayValuestringChaîne de l’heure formatée pour le déclencheur (valeur validée).
timeDisplayValuestringChaîne de l’heure formatée pour le panneau (valeur temporaire).
hasValuebooleanIndique si une valeur d’heure est actuellement définie.
canConfirmbooleanIndique si le bouton de confirmation doit être activé.
localeLocaleObjet de locale résolu.
resolvedTimeConfigRequired<TimeConfig>Configuration de l’heure entièrement résolue.
containerRefRefObject<HTMLDivElement | null>Ref pour le conteneur externe (utilisé pour la détection de clic à l’extérieur).
popupRefRefObject<HTMLDivElement | null>Ref pour l’élément de la popup (utilisé pour la détection de clic à l’extérieur).
handleKeyDown(e: KeyboardEvent) => voidGestionnaire de clavier (Échap pour annuler).

Comportements clés

Ouverture/Fermeture

La popup peut être contrôlée ou non contrôlée. Lorsque open est fourni, le hook l’utilise comme source de vérité. Sinon, l’état interne est utilisé avec initialOpen comme valeur de départ.

Clic à l’extérieur

Cliquer à l’extérieur de containerRef et popupRef déclenche handleCancel, ce qui rétablit la valeur d’origine et ferme la popup.

Clavier

Appuyer sur Échap pendant que la popup est ouverte déclenche handleCancel.

Mode en ligne

Lorsque inline est true, le panneau est toujours visible et les modifications sont appliquées immédiatement (synchronisation automatique). La logique d’ouverture/fermeture est contournée.

Modèle d’état temporaire

Ce hook maintient un état temporaire qui n’est validé que lorsque handleConfirm est appelé :

  • handleConfirm — écrit l’état temporaire dans onChange et ferme la popup
  • handleCancel — rétablit l’état temporaire à la value actuelle et ferme
  • handleClear — appelle onChange(null) et ferme

Valeurs d’affichage

  • displayValue — chaîne formatée de la value validée (pour le déclencheur)
  • timeDisplayValue — chaîne formatée des valeurs temporaires (pour le panneau)