From 89447930b67cb6f47152831f34b2489bb36c0b26 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 6 Nov 2025 14:23:51 +0800 Subject: [PATCH] feat: support start end range --- .../time-range-picker/date-picker.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/date-picker.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/date-picker.tsx index 51452a4e0b..2bfdece433 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/date-picker.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/date-picker.tsx @@ -9,6 +9,7 @@ import { useI18N } from '@/context/i18n' import Picker from '@/app/components/base/date-and-time-picker/date-picker' import type { TriggerProps } from '@/app/components/base/date-and-time-picker/types' import { noop } from 'lodash-es' +import dayjs from 'dayjs' type Props = { start: Dayjs @@ -17,6 +18,7 @@ type Props = { onEndChange: (date?: Dayjs) => void } +const today = dayjs() const DatePicker: FC = ({ start, end, @@ -32,6 +34,21 @@ const DatePicker: FC = ({ ) }, [locale]) + + const availableStartDate = end.subtract(30, 'day') + const startDateDisabled = useCallback((date: Dayjs) => { + if (date.isAfter(today, 'date')) + return true + return !((date.isAfter(availableStartDate, 'date') || date.isSame(availableStartDate, 'date')) && (date.isBefore(end, 'date') || date.isSame(end, 'date'))) + }, [availableStartDate, end]) + + const availableEndDate = start.add(30, 'day') + const endDateDisabled = useCallback((date: Dayjs) => { + if (date.isAfter(today, 'date')) + return true + return !((date.isAfter(start, 'date') || date.isSame(start, 'date')) && (date.isBefore(availableEndDate, 'date') || date.isSame(availableEndDate, 'date'))) + }, [availableEndDate, start]) + return (
@@ -44,6 +61,7 @@ const DatePicker: FC = ({ needTimePicker={false} onClear={noop} noConfirm + getIsDateDisabled={startDateDisabled} /> - = ({ needTimePicker={false} onClear={noop} noConfirm + getIsDateDisabled={endDateDisabled} />