12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import React from 'react'
- import dayjs from 'dayjs'
- import { useTranslation } from 'react-i18next'
- import { WorkflowVersion } from '../types'
- import cn from '@/utils/classnames'
- import type { VersionHistory } from '@/types/workflow'
- type VersionHistoryItemProps = {
- item: VersionHistory
- selectedVersion: string
- onClick: (item: VersionHistory) => void
- curIdx: number
- page: number
- }
- const formatVersion = (version: string, curIdx: number, page: number): string => {
- if (curIdx === 0 && page === 1)
- return WorkflowVersion.Draft
- if (curIdx === 1 && page === 1)
- return WorkflowVersion.Latest
- try {
- const date = new Date(version)
- if (isNaN(date.getTime()))
- return version
- // format as YYYY-MM-DD HH:mm:ss
- return date.toISOString().slice(0, 19).replace('T', ' ')
- }
- catch {
- return version
- }
- }
- const VersionHistoryItem: React.FC<VersionHistoryItemProps> = ({ item, selectedVersion, onClick, curIdx, page }) => {
- const { t } = useTranslation()
- const formatTime = (time: number) => dayjs.unix(time).format('YYYY-MM-DD HH:mm:ss')
- const formattedVersion = formatVersion(item.version, curIdx, page)
- const renderVersionLabel = (version: string) => (
- (version === WorkflowVersion.Draft || version === WorkflowVersion.Latest)
- ? (
- <div className="shrink-0 px-1 border bg-white border-[rgba(0,0,0,0.08)] rounded-[5px] truncate">
- {version}
- </div>
- )
- : null
- )
- return (
- <div
- className={cn(
- 'flex items-center p-2 h-12 text-xs font-medium text-gray-700 justify-between',
- formattedVersion === selectedVersion ? '' : 'hover:bg-gray-100',
- formattedVersion === WorkflowVersion.Draft ? 'cursor-not-allowed' : 'cursor-pointer',
- )}
- onClick={() => item.version !== WorkflowVersion.Draft && onClick(item)}
- >
- <div className='flex flex-col gap-1 py-2'>
- <span className="text-left">{formatTime(formattedVersion === WorkflowVersion.Draft ? item.updated_at : item.created_at)}</span>
- <span className="text-left">{t('workflow.panel.createdBy')} {item.created_by.name}</span>
- </div>
- {renderVersionLabel(formattedVersion)}
- </div>
- )
- }
- export default React.memo(VersionHistoryItem)
|