diff --git a/src/pages/AvailabilityPage.tsx b/src/pages/AvailabilityPage.tsx index c8b2f5c..630d01f 100644 --- a/src/pages/AvailabilityPage.tsx +++ b/src/pages/AvailabilityPage.tsx @@ -1,9 +1,9 @@ -import { useState, useRef, useCallback, useMemo } from 'react' +import { useState, useRef, useCallback, useMemo, useEffect } from 'react' import { addDays, format, parseISO, isWithinInterval, startOfDay, getDay, isSameDay } from 'date-fns' import { ru } from 'date-fns/locale' import { ChevronLeft, ChevronRight, X, Check, CalendarDays, - Plus, Pencil, Trash2, AlertCircle, RefreshCw, MousePointer2, Rows3, + Plus, Pencil, Trash2, AlertCircle, RefreshCw, MousePointer2, Rows3, ChevronDown, } from 'lucide-react' import { cn } from '../lib/utils' import { @@ -640,11 +640,26 @@ export function AvailabilityPage() { const [periodModal, setPeriodModal] = useState(null) const [cellEditMode, setCellEditMode] = useState(false) const [selectedCat, setSelectedCat] = useState(null) + const [visibleDays, setVisibleDays] = useState(45) + const [showNavPicker, setShowNavPicker] = useState(false) + const [pickerDate, setPickerDate] = useState(format(new Date(), DATE_FMT)) + const navPickerRef = useRef(null) + + useEffect(() => { + if (!showNavPicker) return + const handler = (e: MouseEvent) => { + if (navPickerRef.current && !navPickerRef.current.contains(e.target as Node)) { + setShowNavPicker(false) + } + } + document.addEventListener('mousedown', handler) + return () => document.removeEventListener('mousedown', handler) + }, [showNavPicker]) const dates = useMemo(() => - Array.from({ length: DAYS }, (_, i) => + Array.from({ length: visibleDays }, (_, i) => format(addDays(today, offset + i), DATE_FMT), - ), [today, offset]) + ), [today, offset, visibleDays]) // ── Mouse handlers ── const handleCellDown = (date: string, catId: string) => { @@ -741,6 +756,7 @@ export function AvailabilityPage() { {/* ── Top bar ── */}
+ {/* Tabs */}
{([['grid', 'Сетка цен'], ['periods', 'Периоды']] as const).map(([t, label]) => ( - - + + {showNavPicker && ( +
+ {/* Start date */} +

+ Начало периода +

+
+ setPickerDate(e.target.value)} + className="input text-sm py-1.5 flex-1" + /> + +
+ + {/* Days count */} +

+ Количество дней +

+
+ {[14, 30, 45, 60].map(d => ( + + ))} +
+ + +
+ )} +
+ + + + {/* Cell / range mode toggle */} +
)}
@@ -798,27 +910,6 @@ export function AvailabilityPage() { )} - {tab === 'grid' && ( - - )} - {tab === 'periods' && (