Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { useCallback, useEffect } from 'react'
  2. import { useDatasourceOptions } from '../hooks'
  3. import OptionCard from './option-card'
  4. import type { Datasource } from '@/app/components/rag-pipeline/components/panel/test-run/types'
  5. import type { Node } from '@/app/components/workflow/types'
  6. import type { DataSourceNodeType } from '@/app/components/workflow/nodes/data-source/types'
  7. type DataSourceOptionsProps = {
  8. pipelineNodes: Node<DataSourceNodeType>[]
  9. datasourceNodeId: string
  10. onSelect: (option: Datasource) => void
  11. }
  12. const DataSourceOptions = ({
  13. pipelineNodes,
  14. datasourceNodeId,
  15. onSelect,
  16. }: DataSourceOptionsProps) => {
  17. const options = useDatasourceOptions(pipelineNodes)
  18. const handelSelect = useCallback((value: string) => {
  19. const selectedOption = options.find(option => option.value === value)
  20. if (!selectedOption)
  21. return
  22. const datasource = {
  23. nodeId: selectedOption.value,
  24. nodeData: selectedOption.data,
  25. }
  26. onSelect(datasource)
  27. }, [onSelect, options])
  28. useEffect(() => {
  29. if (options.length > 0 && !datasourceNodeId)
  30. handelSelect(options[0].value)
  31. }, [])
  32. return (
  33. <div className='grid w-full grid-cols-4 gap-1'>
  34. {options.map(option => (
  35. <OptionCard
  36. key={option.value}
  37. label={option.label}
  38. selected={datasourceNodeId === option.value}
  39. nodeData={option.data}
  40. onClick={handelSelect.bind(null, option.value)}
  41. />
  42. ))}
  43. </div>
  44. )
  45. }
  46. export default DataSourceOptions