mirror of
https://github.com/langgenius/dify.git
synced 2025-09-07 00:00:24 +00:00
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
![]() |
import { useCallback } from 'react'
|
||
|
import dayjs from 'dayjs'
|
||
|
import {
|
||
|
RiCalendarLine,
|
||
|
RiCloseCircleFill,
|
||
|
} from '@remixicon/react'
|
||
|
import DatePicker from '@/app/components/base/date-and-time-picker/date-picker'
|
||
|
import cn from '@/utils/classnames'
|
||
|
import type { TriggerProps } from '@/app/components/base/date-and-time-picker/types'
|
||
|
import useTimestamp from '@/hooks/use-timestamp'
|
||
|
import { useTranslation } from 'react-i18next'
|
||
|
|
||
|
type Props = {
|
||
|
className?: string
|
||
|
value?: number
|
||
|
onChange: (date: number | null) => void
|
||
|
}
|
||
|
const WrappedDatePicker = ({
|
||
|
className,
|
||
|
value,
|
||
|
onChange,
|
||
|
}: Props) => {
|
||
|
const { t } = useTranslation()
|
||
|
// const { userProfile: { timezone } } = useAppContext()
|
||
|
const { formatTime: formatTimestamp } = useTimestamp()
|
||
|
|
||
|
const handleDateChange = useCallback((date?: dayjs.Dayjs) => {
|
||
|
if (date)
|
||
|
onChange(date.unix())
|
||
|
else
|
||
|
onChange(null)
|
||
|
}, [onChange])
|
||
|
|
||
|
const renderTrigger = useCallback(({
|
||
|
handleClickTrigger,
|
||
|
}: TriggerProps) => {
|
||
|
return (
|
||
|
<div onClick={handleClickTrigger} className={cn('group flex items-center rounded-md bg-components-input-bg-normal', className)}>
|
||
|
<div
|
||
|
className={cn(
|
||
|
'grow',
|
||
|
value ? 'text-text-secondary' : 'text-text-tertiary',
|
||
|
)}
|
||
|
>
|
||
|
{value ? formatTimestamp(value, t('datasetDocuments.metadata.dateTimeFormat')) : t('dataset.metadata.chooseTime')}
|
||
|
</div>
|
||
|
<RiCloseCircleFill
|
||
|
className={cn(
|
||
|
'hidden group-hover:block w-4 h-4 cursor-pointer hover:text-components-input-text-filled',
|
||
|
value && 'text-text-quaternary',
|
||
|
)}
|
||
|
onClick={() => handleDateChange()}
|
||
|
/>
|
||
|
<RiCalendarLine
|
||
|
className={cn(
|
||
|
'block group-hover:hidden shrink-0 w-4 h-4',
|
||
|
value ? 'text-text-quaternary' : 'text-text-tertiary',
|
||
|
)}
|
||
|
/>
|
||
|
</div>
|
||
|
)
|
||
|
}, [className, value, formatTimestamp, t, handleDateChange])
|
||
|
|
||
|
return (
|
||
|
<DatePicker
|
||
|
value={dayjs(value ? value * 1000 : Date.now())}
|
||
|
onChange={handleDateChange}
|
||
|
onClear={handleDateChange}
|
||
|
renderTrigger={renderTrigger}
|
||
|
triggerWrapClassName='w-full'
|
||
|
popupZIndexClassname='z-[1000]'
|
||
|
/>
|
||
|
)
|
||
|
}
|
||
|
|
||
|
export default WrappedDatePicker
|