Déclencheur Personnalisé
Remplacez le déclencheur par défaut par votre propre bouton ou champ de saisie. Le composant Trigger accepte une render prop qui vous donne un contrôle total sur l’apparence et le comportement du déclencheur.
import { useState } from "react";import { DatePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
function CompoundCustomTrigger() { const [value, setValue] = useState<Date | null>(null);
return ( <DatePicker.Root value={value} onChange={setValue}> <DatePicker.Trigger> {({ displayValue, isOpen, onToggle, triggerRef }) => ( <button ref={triggerRef as React.Ref<HTMLButtonElement>} onClick={onToggle} style={{ display: "inline-flex", alignItems: "center", gap: 8, padding: "8px 12px", border: "1px solid #d1d5db", borderRadius: 6, background: isOpen ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 14, }} > <span style={{ fontSize: 18 }}>{"\uD83D\uDCC5"}</span> <span>{displayValue || "Pick a date"}</span> </button> )} </DatePicker.Trigger> <DatePicker.Content> <DatePicker.Header> <DatePicker.PrevButton /> <DatePicker.Title /> <DatePicker.NextButton /> </DatePicker.Header> <DatePicker.Grid /> <DatePicker.Footer> <DatePicker.ClearButton /> <DatePicker.CancelButton /> <DatePicker.ConfirmButton /> </DatePicker.Footer> </DatePicker.Content> </DatePicker.Root> );}Props de Rendu du Déclencheur
| Propriété | Type | Description |
|---|---|---|
displayValue | string | Date sélectionnée formatée |
placeholder | string | Texte indicatif |
hasValue | boolean | Indique si une date est sélectionnée |
isOpen | boolean | Indique si la popup est ouverte |
onToggle | () => void | Ouvre/ferme la popup |
onClear | () => void | Efface la sélection |
locale | Locale | Objet de la locale actuelle |
triggerRef | (node) => void | Ref de rappel pour le positionnement |
Déclencheur du Sélecteur de Plage
Le même modèle fonctionne avec DateRangePicker:
import { useState } from "react";import { DateRangePicker } from "react-date-range-picker-styled";import "react-date-range-picker-styled/rdrp-styles.css";
function CompoundCustomTriggerRange() { const [value, setValue] = useState<{ start: Date | null; end: Date | null }>({ start: null, end: null, });
return ( <DateRangePicker.Root value={value} onChange={setValue}> <DateRangePicker.Trigger> {({ displayValue, isOpen, onToggle, triggerRef }) => ( <button ref={triggerRef as React.Ref<HTMLButtonElement>} onClick={onToggle} style={{ display: "inline-flex", alignItems: "center", gap: 8, padding: "8px 16px", border: `2px solid ${isOpen ? "#3b82f6" : "#d1d5db"}`, borderRadius: 8, background: isOpen ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 14, fontWeight: 500, transition: "border-color 0.15s, background 0.15s", }} > <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" > <rect x="3" y="4" width="18" height="18" rx="2" ry="2" /> <line x1="16" y1="2" x2="16" y2="6" /> <line x1="8" y1="2" x2="8" y2="6" /> <line x1="3" y1="10" x2="21" y2="10" /> </svg> <span>{displayValue || "Select date range"}</span> </button> )} </DateRangePicker.Trigger> <DateRangePicker.Content> <div> <DateRangePicker.Header> <DateRangePicker.PrevButton /> <DateRangePicker.Title calendarIndex={0} /> <div style={{ flex: 1 }} /> <DateRangePicker.Title calendarIndex={1} /> <DateRangePicker.NextButton /> </DateRangePicker.Header> <DateRangePicker.Calendars> <DateRangePicker.Grid calendarIndex={0} /> <DateRangePicker.Grid calendarIndex={1} /> </DateRangePicker.Calendars> <DateRangePicker.Footer> <DateRangePicker.ClearButton /> <DateRangePicker.CancelButton /> <DateRangePicker.ConfirmButton /> </DateRangePicker.Footer> </div> </DateRangePicker.Content> </DateRangePicker.Root> );}