您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

option-card.tsx 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import React from 'react'
  2. import cn from '@/utils/classnames'
  3. import type { DataSourceNodeType } from '@/app/components/workflow/nodes/data-source/types'
  4. import DatasourceIcon from './datasource-icon'
  5. import { useDatasourceIcon } from './hooks'
  6. type OptionCardProps = {
  7. label: string
  8. selected: boolean
  9. nodeData: DataSourceNodeType
  10. onClick?: () => void
  11. }
  12. const OptionCard = ({
  13. label,
  14. selected,
  15. nodeData,
  16. onClick,
  17. }: OptionCardProps) => {
  18. const iconUrl = useDatasourceIcon(nodeData) as string
  19. return (
  20. <div
  21. className={cn(
  22. 'flex cursor-pointer items-center gap-2 rounded-xl border border-components-option-card-option-border bg-components-option-card-option-bg p-3 shadow-shadow-shadow-3',
  23. selected
  24. ? 'border-components-option-card-option-selected-border bg-components-option-card-option-selected-bg shadow-xs ring-[0.5px] ring-inset ring-components-option-card-option-selected-border'
  25. : 'hover:bg-components-option-card-bg-hover hover:border-components-option-card-option-border-hover hover:shadow-xs',
  26. )}
  27. onClick={onClick}
  28. >
  29. <div className='flex size-8 shrink-0 items-center justify-center rounded-lg border-[0.5px] border-components-panel-border bg-background-default-dodge p-1.5'>
  30. <DatasourceIcon iconUrl={iconUrl} />
  31. </div>
  32. <div
  33. className={cn('system-sm-medium line-clamp-2 grow text-text-secondary', selected && 'text-text-primary')}
  34. title={label}
  35. >
  36. {label}
  37. </div>
  38. </div>
  39. )
  40. }
  41. export default React.memo(OptionCard)