BUR-64 синхронизировал изменение input date/time полей с масштабированием графика. #18

Merged
APervov merged 1 commits from bur-64 into dev 2026-07-05 10:49:04 +00:00
2 changed files with 13 additions and 2 deletions

View File

@@ -4,8 +4,9 @@ import { useRef } from 'react';
import { CalendarDays, CalendarClock, Check, ChevronDown, Clock3, DatabaseZap, Search } from 'lucide-react';
import type { CurrentItem } from '../../../entities/current/types';
import { HistoryChart } from '../../../features/history-chart/HistoryChart';
import type { HistoryZoomRange } from '../../../features/history-chart/chartTypes';
import { RANGE_PRESETS, createRange, type DateRangeState } from '../../../features/history/dateRange';
import { toIsoFromInput } from '../../../utils/format';
import { toInputDateTimeValue, toIsoFromInput } from '../../../utils/format';
import type { HistoryGranularity } from '../../../utils/historyGranularity';
type ArchiveViewProps = {
@@ -108,6 +109,12 @@ export function ArchiveView({
[rangePart]: updateRangeInputPart(range[rangePart], inputPart, value),
});
};
const updateRangeFromZoom = (nextRange: HistoryZoomRange) => {
onRangeChange({
from: toInputDateTimeValue(new Date(nextRange.from)),
to: toInputDateTimeValue(new Date(nextRange.to)),
});
};
return (
<section className="chart-section chart-section--archive">
@@ -263,6 +270,7 @@ export function ArchiveView({
labelFormat={historyAxis.labelFormat}
tags={selectedTags}
tagLabels={tagLabels}
onZoomRangeChange={updateRangeFromZoom}
/>
) : (
<div className="chart-placeholder">Разверните список показателей и выберите серию для графика</div>

View File

@@ -15,6 +15,7 @@ type HistoryChartProps = {
tickIntervalMs?: number;
to: string;
tagLabels?: Record<string, string>;
onZoomRangeChange?: (range: HistoryZoomRange) => void;
};
const ZOOM_REQUEST_DELAY_MS = 350;
@@ -95,6 +96,7 @@ export function HistoryChart({
tickIntervalMs,
to,
tagLabels = {},
onZoomRangeChange,
}: HistoryChartProps) {
const [zoomRange, setZoomRange] = useState(() =>
createInitialZoomRange({ from, granulate, labelFormat, tickIntervalMs, to }),
@@ -167,8 +169,9 @@ export function HistoryChart({
zoomTimerRef.current = setTimeout(() => {
zoomRangeRef.current = nextRange;
setZoomRange(nextRange);
onZoomRangeChange?.(nextRange);
}, ZOOM_REQUEST_DELAY_MS);
}, []);
}, [onZoomRangeChange]);
return (
<HistoryChartArea