From b53ca39fe9df88acd88aa48bb714eb0e8ac710f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Fri, 3 Jul 2026 15:23:34 -0300 Subject: [PATCH] Require apply for custom date range --- src/components/DateRangePicker.tsx | 46 +++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/src/components/DateRangePicker.tsx b/src/components/DateRangePicker.tsx index 04c30e5..f4b26b9 100644 --- a/src/components/DateRangePicker.tsx +++ b/src/components/DateRangePicker.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef } from 'react'; +import React, { useRef, useState } from 'react'; import { Calendar, RefreshCw, ChevronDown } from 'lucide-react'; import type { DateRange } from '../types'; import { endOfLocalDay, formatDateParam, parseLocalDateInput, rangeForDay, rangeForLastDays, rangeForPreviousDay, startOfLocalDay } from '../dateRanges'; @@ -32,10 +32,18 @@ const REFRESH_OPTIONS = [ { label: '5m', value: 300000 }, ]; +const getRangeKey = (range: DateRange) => `${formatDateParam(range.start)}:${formatDateParam(range.end)}`; + const DateRangePicker: React.FC = ({ dateRange, onChange, refreshInterval, setRefreshInterval, onManualRefresh }) => { const [isPresetOpen, setIsPresetOpen] = useState(false); + const [customDraft, setCustomDraft] = useState(() => ({ + appliedKey: getRangeKey(dateRange), + range: dateRange + })); const startRef = useRef(null); const endRef = useRef(null); + const appliedRangeKey = getRangeKey(dateRange); + const draftRange = customDraft.appliedKey === appliedRangeKey ? customDraft.range : dateRange; const formatDisplayDate = (date: Date) => { return date.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit', year: 'numeric' }); @@ -49,8 +57,8 @@ const DateRangePicker: React.FC = ({ dateRange, onChange, const newStart = parseLocalDateInput(e.target.value); if (newStart && !isNaN(newStart.getTime())) { const start = startOfLocalDay(newStart); - const end = dateRange.end < start ? endOfLocalDay(start) : dateRange.end; - onChange({ start, end }); + const end = draftRange.end < start ? endOfLocalDay(start) : draftRange.end; + setCustomDraft({ appliedKey: appliedRangeKey, range: { start, end } }); } }; @@ -58,11 +66,19 @@ const DateRangePicker: React.FC = ({ dateRange, onChange, const newEnd = parseLocalDateInput(e.target.value); if (newEnd && !isNaN(newEnd.getTime())) { const end = endOfLocalDay(newEnd); - const start = dateRange.start > end ? startOfLocalDay(end) : dateRange.start; - onChange({ start, end }); + const start = draftRange.start > end ? startOfLocalDay(end) : draftRange.start; + setCustomDraft({ appliedKey: appliedRangeKey, range: { start, end } }); } }; + const draftRangeKey = getRangeKey(draftRange); + const isDraftApplied = draftRangeKey === appliedRangeKey; + + const handleApplyCustomRange = () => { + onChange(draftRange); + setIsPresetOpen(false); + }; + const openPicker = (ref: React.RefObject) => { if (ref.current) { try { @@ -103,11 +119,11 @@ const DateRangePicker: React.FC = ({ dateRange, onChange, className="relative bg-dark-input border border-dark-border text-dark-text text-xs rounded-lg px-2 py-1 focus-within:border-brand-primary w-full cursor-pointer overflow-hidden flex items-center h-6" onClick={() => openPicker(startRef)} > - {formatDisplayDate(dateRange.start)} + {formatDisplayDate(draftRange.start)} @@ -119,16 +135,24 @@ const DateRangePicker: React.FC = ({ dateRange, onChange, className="relative bg-dark-input border border-dark-border text-dark-text text-xs rounded-lg px-2 py-1 focus-within:border-brand-primary w-full cursor-pointer overflow-hidden flex items-center h-6" onClick={() => openPicker(endRef)} > - {formatDisplayDate(dateRange.end)} + {formatDisplayDate(draftRange.end)} + Atalhos @@ -136,7 +160,9 @@ const DateRangePicker: React.FC = ({ dateRange, onChange,