'use client' import type { Dayjs } from 'dayjs' import type { DatePickerProps } from '@/app/components/base/date-and-time-picker/types' import type { I18nKeysWithPrefix } from '@/types/i18n' import { cn } from '@langgenius/dify-ui/cn' import { Select, SelectContent, SelectItem, SelectItemIndicator, SelectItemText, SelectTrigger, } from '@langgenius/dify-ui/select' import dayjs from 'dayjs' import { noop } from 'es-toolkit/function' import { useState } from 'react' import { useTranslation } from 'react-i18next' import DatePicker from '@/app/components/base/date-and-time-picker/date-picker' import { useLocale } from '@/context/i18n' import { formatToLocalTime } from '@/utils/format' export type AgentMonitoringPeriod = { name: string query: { start: string end: string } } type TimeRangeKey = 'today' | 'last7days' | 'last30days' type TimeRangeOption = { value: TimeRangeKey days: number nameKey: I18nKeysWithPrefix<'agentV2', 'agentDetail.monitoring.timeRanges.'> } type AgentMonitoringTimeRangePickerProps = { value: AgentMonitoringPeriod onChange: (period: AgentMonitoringPeriod) => void } const today = dayjs() const queryDateFormat = 'YYYY-MM-DD HH:mm' const timeRangeOptions: TimeRangeOption[] = [ { value: 'today', days: 0, nameKey: 'agentDetail.monitoring.timeRanges.today' }, { value: 'last7days', days: 7, nameKey: 'agentDetail.monitoring.timeRanges.last7days' }, { value: 'last30days', days: 30, nameKey: 'agentDetail.monitoring.timeRanges.last30days' }, ] const getRangePeriod = (option: TimeRangeOption): AgentMonitoringPeriod => { const end = today.endOf('day') const start = option.days === 0 ? today.startOf('day') : today.subtract(option.days, 'day').startOf('day') return { name: option.value, query: { start: start.format(queryDateFormat), end: end.format(queryDateFormat), }, } } function DateRangePart({ start, end, onStartChange, onEndChange, }: { start: Dayjs end: Dayjs onStartChange: (date?: Dayjs) => void onEndChange: (date?: Dayjs) => void }) { const locale = useLocale() const renderDate: DatePickerProps['renderTrigger'] = (props, _state, { value }) => ( ) const availableStartDate = end.subtract(30, 'day') const isStartDateDisabled = (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')) ) } const availableEndDate = start.add(30, 'day') const isEndDateDisabled = (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')) ) } return (