fix(timetravel): extend modal slider max до now + 30 days (paired с !220)

MR !220 расширил range у TimeTravelPicker.tsx, но юзер видит другой компонент —
TimeTravelModal.tsx (fullscreen modal с компарисоном now vs picked moment).
У него своя range logic с max = now + pad (1 day), и фикс !220 туда не дотянулся.

User feedback: создал запись с validFrom=18.05, открыл time-travel modal — слайдер
14.05 → 16.05, не дотянуть до 18-го.

Apply same 30-day future window logic к TimeTravelModal так чтобы оба компонента
вели себя одинаково.
This commit is contained in:
Zimin A.N.
2026-05-15 21:08:02 +03:00
parent 234184645f
commit 1713951f76
@@ -109,13 +109,25 @@ export function TimeTravelModal({
isAtNow0 ? undefined : { at: new Date(picked).toISOString() },
)
// Range: от min(marks, createdAt) до now+padding.
// Range: от min(marks, createdAt) до max(now+30d, future marks)+padding.
//
// Future support (fix paired с TimeTravelPicker !220): если у dict есть
// scheduled records (validFrom > now) или user navigated к future date,
// slider должен дотягиваться. Раньше max = now + 1day pad — record с
// validFrom=18.05 был недостижим если сейчас 15.05.
//
// Default future window = 30 days, match'ит TimeTravelPicker.tsx logic.
const createdMs = Date.parse(detail.createdAt)
const range = useMemo(() => {
const minMark = marks.length > 0 ? Math.min(...marks, createdMs) : createdMs - 86_400_000
const span = now - minMark
const pad = Math.max(span * 0.04, 86_400_000)
return { min: minMark - pad, max: now + pad }
const DAY_MS = 86_400_000
const FUTURE_WINDOW_MS = 30 * DAY_MS
const minMark = marks.length > 0 ? Math.min(...marks, createdMs) : createdMs - DAY_MS
// Push max forward: at least now + 30 days, и further если есть future marks.
const maxMark = marks.length > 0 ? Math.max(...marks, now) : now
const effectiveMax = Math.max(maxMark, now + FUTURE_WINDOW_MS)
const span = effectiveMax - minMark
const pad = Math.max(span * 0.04, DAY_MS)
return { min: minMark - pad, max: effectiveMax + pad }
}, [marks, createdMs, now])
// Sync picked when value prop changes while modal open.