useDateRangePicker
Çift aylık takvim, fareyle üzerine gelince önizleme ve önceden ayarlanmış aralıklar ile tarih aralığı seçimi için hook.
İçe Aktarma
import { useDateRangePicker } from "react-date-range-picker-headless";Kullanım
import { useState } from "react";import { useDateRangePicker } from "react-date-range-picker-headless";
function MyDateRangePicker() { const [range, setRange] = useState<{ start: Date | null; end: Date | null }>({ start: null, end: null, });
const picker = useDateRangePicker({ value: range, onChange: setRange, presets: [ { label: "Son 7 gün", value: () => { const end = new Date(); const start = new Date(); start.setDate(start.getDate() - 6); return { start, end }; }, }, ], });
return ( <div ref={picker.containerRef}> <button onClick={picker.handleToggle}> {picker.displayValue || picker.locale.rangePlaceholder} </button> {picker.isOpen && ( <div ref={picker.popupRef} onKeyDown={picker.handleKeyDown}> {/* Yan yana iki takvim */} {[picker.leftCalendar, picker.rightCalendar].map((cal, calIdx) => ( <div key={calIdx}> <span>{picker.locale.formatMonthYear(cal.month)}</span> {cal.weeks.flat().map((day, i) => { if (!day) return <span key={i} />; const dp = picker.getDayProps(day, cal.month); return ( <button key={i} onClick={() => picker.handleDateClick(day)} onMouseEnter={() => picker.handleDateHover(day)} onMouseLeave={() => picker.handleDateHover(null)} > {dp.day} </button> ); })} </div> ))}
{/* Hazır Ayarlar */} {picker.presets.map((preset, i) => ( <button key={i} onClick={() => picker.handlePresetClick(preset)} style={{ fontWeight: i === picker.activePresetIndex ? "bold" : "normal" }} > {preset.label} </button> ))}
<button onClick={picker.handleConfirm}>{picker.locale.confirm}</button> </div> )} </div> );}Seçenekler
| Seçenek | Tür | Varsayılan | Açıklama |
|---|---|---|---|
value | { start: Date | null; end: Date | null } | — | Gerekli. Mevcut aralık değeri. |
onChange | (value: { start: Date | null; end: Date | null }) => void | — | Gerekli. Aralık değiştiğinde çağrılır. |
maxDays | number | — | Bir aralıkta izin verilen maksimum gün sayısı (dahil). |
minDays | number | — | Bir aralıkta gerekli olan minimum gün sayısı (dahil). |
presets | DateRangePreset[] | — | Önceden tanımlanmış tarih aralığı hazır ayarları (ör. “Son 7 gün”, “Bu ay”). |
allowSingleDateInRange | boolean | true | false olduğunda, başlangıcın bitişe eşit olduğu bir aralığın seçilmesini engeller. |
minDate | Date | — | Seçilebilecek en erken tarih. |
maxDate | Date | — | Seçilebilecek en son tarih. |
locale | Partial<Locale> | DEFAULT_LOCALE | Yerelleştirme metinlerini geçersiz kılın. |
initialMonth | Date | — | Görüntülenecek başlangıç ayı. |
size | DatePickerSize | — | UI geçişi. |
weekStartsOn | WeekDay | "sunday" | Haftanın ilk günü. |
isDateUnavailable | (date: Date) => boolean | — | Belirli tarihleri devre dışı bırakmak için özel fonksiyon. |
displayFormat | string | — | Görüntülenen değer için özel format metni. |
open | boolean | — | Kontrollü açık durumu. |
initialOpen | boolean | false | Başlangıçtaki açık durumu (kontrolsüz). |
onOpenChange | (open: boolean) => void | — | Açık durumu değiştiğinde geri arama. |
required | boolean | false | True olduğunda, handleClear işlem yapmaz. |
today | Date | new Date() | Bugünün tarihini geçersiz kılın. |
onMonthChange | (month: Date) => void | — | Görüntülenen ay değiştiğinde geri arama. |
disablePast | boolean | false | Bugünden önceki tüm tarihleri devre dışı bırakın. |
disableFuture | boolean | false | Bugünden sonraki tüm tarihleri devre dışı bırakın. |
showOutsideDays | boolean | false | Bitişik ayın günlerini göster. |
highlightDates | Date[] | — | Vurgulanacak tarihler dizisi. |
shouldCloseOnSelect | boolean | false | Bitiş tarihi seçildiğinde otomatik onayla. |
numberOfMonths | number | 2 | Görüntülenecek takvim ayı sayısı. |
captionLayout | CaptionLayout | "buttons" | Başlık düzeni modu. |
fromYear | number | geçerli yıl - 100 | Açılır menü için başlangıç yılı. |
toYear | number | geçerli yıl + 10 | Açılır menü için bitiş yılı. |
Dönüş Değerleri
| İsim | Tür | Açıklama |
|---|---|---|
isOpen | boolean | Açılır pencerenin açık olup olmadığı. |
tempStartDate | Date | null | Geçici başlangıç tarihi (onaydan önce). |
tempEndDate | Date | null | Geçici bitiş tarihi (onaydan önce). |
hoveredDate | Date | null | O anda üzerine gelinen tarih (aralık önizlemesi için). |
leftMonth | Date | Sol takvimin görüntülenen ayı. |
rightMonth | Date | Sağ takvimin görüntülenen ayı. |
locale | Locale | Çözümlenmiş yerelleştirme nesnesi. |
leftCalendar | CalendarMonth | Sol panel için takvim verileri. |
rightCalendar | CalendarMonth | Sağ panel için takvim verileri. |
calendars | CalendarMonth[] | Tüm takvim aylarının dizisi. |
getDayProps | (date: Date, referenceMonth?: Date) => DayProps | Bir takvim günü hücresi için bayrakları hesaplayın. Çok aylı düzenlerde ay dışı gün algılamasının doğru çalışması için referenceMonth değerini geçin. |
displayValue | string | Onaylanmış aralığın biçimlendirilmiş metni. |
hasValue | boolean | Bir aralığın o anda onaylanıp onaylanmadığı. |
canConfirm | boolean | Mevcut seçimin onay için geçerli olup olmadığı. |
handleDateClick | (date: Date) => void | Bir gün hücresi tıklamasını işleyin. İlk tıklama başlangıcı, ikinci tıklama bitişi ayarlar. |
handleDateHover | (date: Date | null) => void | Aralık önizlemesi için fareyle üzerine gelme olayını işleyin. |
handlePrevMonth | () => void | Her iki takvimi de bir ay geri götürün. |
handleNextMonth | () => void | Her iki takvimi de bir ay ileri götürün. |
handleOpen | () => void | Açılır pencereyi açın. |
handleClose | () => void | Açılır pencereyi kapatın. |
handleToggle | () => void | Açılır pencereyi aç/kapat. |
handleConfirm | () => void | Seçimi onaylayın ve kapatın. |
handleCancel | () => void | İptal edin ve önceki değere geri dönün. |
handleClear | () => void | Aralığı temizleyin (required ise işlem yapmaz). |
handleGoToToday | () => void | Bugünün ayına gidin. |
containerRef | RefObject<HTMLDivElement | null> | Dışarıya tıklama algılaması için sarmalayıcıya ekleyin. |
popupRef | RefObject<HTMLDivElement | null> | Açılır pencere öğesine ekleyin. |
focusedDate | Date | null | Klavye ile odaklanılan tarih. |
handleKeyDown | (e: KeyboardEvent<HTMLElement>) => void | Klavye ile gezinme işleyicisi. |
presets | DateRangePreset[] | Hazır ayarlar dizisi (render için geçiş). |
handlePresetClick | (preset: DateRangePreset) => void | Bir hazır ayar aralığını uygulayın. |
activePresetIndex | number | O anda eşleşen hazır ayarın dizini (yoksa -1). |
years | number[] | Açılır menü modu için yıllar dizisi. |
months | number[] | Açılır menü modu için ay dizinleri. |
handleYearSelect | (year: number, calendarIndex?: number) => void | Görüntülenen yılı ayarlayın. |
handleMonthSelect | (month: number, calendarIndex?: number) => void | Görüntülenen ayı ayarlayın. |
Temel Davranışlar
Aralık Seçim Akışı
- İlk tıklama başlangıç tarihini ayarlar (bitiş tarihi temizlenir)
- İkinci tıklama bitiş tarihini ayarlar (başlangıçtan önceyse otomatik olarak yer değiştirir)
- Üçüncü tıklama sıfırlar ve yeni bir aralık başlatır
Üzerine Gelince Önizleme
Kullanıcı bir başlangıç tarihi seçtiğinde ancak henüz bir bitiş tarihi seçmediğinde, handleDateHover hoveredDate değerini günceller. getDayProps fonksiyonu bunu isInHoverRange ve isHoverTarget değerlerini hesaplamak için kullanır ve potansiyel aralığın bir önizlemesini göstermenize olanak tanır.
Hazır Ayarlar
Hazır ayarlar statik nesneler veya fabrika fonksiyonları olabilir:
const presets = [ { label: "Bugün", value: { start: new Date(), end: new Date() } }, { label: "Son 30 gün", value: () => { const end = new Date(); const start = new Date(); start.setDate(start.getDate() - 29); return { start, end }; }, },];activePresetIndex, mevcut seçimle eşleşen hazır ayarın dizinini veya eşleşen yoksa -1 değerini döndürür.
maxDays / minDays
maxDays ayarlandığında, başlangıç tarihinden itibaren izin verilen aralığın dışındaki tarihler otomatik olarak devre dışı bırakılır. minDays ayarlandığında, başlangıç tarihine çok yakın tarihler devre dışı bırakılır.
shouldCloseOnSelect
Aralık seçiciler için, shouldCloseOnSelect başlangıç tarihi değil, bitiş tarihi seçildiğinde otomatik onayı tetikler.