From 7cf188a55c8fe069c6dd9b8af679f72fc0175977 Mon Sep 17 00:00:00 2001 From: itoshi Date: Sun, 22 Feb 2026 19:45:03 +0300 Subject: [PATCH] fix: do only after ot --- src/widgets/DevicesTable/DeviceLogsModal.tsx | 38 +++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/widgets/DevicesTable/DeviceLogsModal.tsx b/src/widgets/DevicesTable/DeviceLogsModal.tsx index 68f4c09..8a15f3b 100644 --- a/src/widgets/DevicesTable/DeviceLogsModal.tsx +++ b/src/widgets/DevicesTable/DeviceLogsModal.tsx @@ -15,6 +15,12 @@ interface DeviceLogsModalProps { } const toYYYYMMDD = (d: Date) => d.toISOString().slice(0, 10); +const shiftYYYYMMDD = (value: string, days: number) => { + const d = new Date(`${value}T00:00:00Z`); + if (Number.isNaN(d.getTime())) return value; + d.setUTCDate(d.getUTCDate() + days); + return toYYYYMMDD(d); +}; type LogLevel = "info" | "warn" | "error" | "debug" | "fatal" | "unknown"; @@ -133,6 +139,24 @@ export const DeviceLogsModal = ({ const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000); const [dateFrom, setDateFrom] = useState(toYYYYMMDD(yesterday)); const [dateTo, setDateTo] = useState(toYYYYMMDD(today)); + const dateToMin = shiftYYYYMMDD(dateFrom, 1); + const dateFromMax = shiftYYYYMMDD(dateTo, -1); + + const handleDateFromChange = (value: string) => { + setDateFrom(value); + if (!dateTo || dateTo <= value) { + setDateTo(shiftYYYYMMDD(value, 1)); + } + }; + + const handleDateToChange = (value: string) => { + if (value <= dateFrom) { + toast.info("Дата 'До' должна быть позже даты 'От'"); + setDateTo(shiftYYYYMMDD(dateFrom, 1)); + return; + } + setDateTo(value); + }; useEffect(() => { if (!open || !deviceUuid) return; @@ -235,16 +259,22 @@ export const DeviceLogsModal = ({ label="От" size="small" value={dateFrom} - onChange={(e) => setDateFrom(e.target.value)} - slotProps={{ inputLabel: { shrink: true } }} + onChange={(e) => handleDateFromChange(e.target.value)} + slotProps={{ + inputLabel: { shrink: true }, + htmlInput: { max: dateFromMax }, + }} /> setDateTo(e.target.value)} - slotProps={{ inputLabel: { shrink: true } }} + onChange={(e) => handleDateToChange(e.target.value)} + slotProps={{ + inputLabel: { shrink: true }, + htmlInput: { min: dateToMin }, + }} />