Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

data-sources.tsx 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import {
  2. useCallback,
  3. useRef,
  4. } from 'react'
  5. import Link from 'next/link'
  6. import { useTranslation } from 'react-i18next'
  7. import { RiArrowRightUpLine } from '@remixicon/react'
  8. import { BlockEnum } from '../types'
  9. import type {
  10. OnSelectBlock,
  11. ToolWithProvider,
  12. } from '../types'
  13. import type { ToolDefaultValue } from './types'
  14. import Tools from './tools'
  15. import { ViewType } from './view-type-select'
  16. import cn from '@/utils/classnames'
  17. import type { ListRef } from '@/app/components/workflow/block-selector/market-place-plugin/list'
  18. import { getMarketplaceUrl } from '@/utils/var'
  19. import { useGlobalPublicStore } from '@/context/global-public-context'
  20. type AllToolsProps = {
  21. className?: string
  22. toolContentClassName?: string
  23. searchText: string
  24. onSelect: OnSelectBlock
  25. dataSources: ToolWithProvider[]
  26. }
  27. const DataSources = ({
  28. className,
  29. toolContentClassName,
  30. searchText,
  31. onSelect,
  32. dataSources,
  33. }: AllToolsProps) => {
  34. const { t } = useTranslation()
  35. const pluginRef = useRef<ListRef>(null)
  36. const wrapElemRef = useRef<HTMLDivElement>(null)
  37. const handleSelect = useCallback((_: any, toolDefaultValue: ToolDefaultValue) => {
  38. onSelect(BlockEnum.DataSource, toolDefaultValue && {
  39. plugin_id: toolDefaultValue?.provider_id,
  40. provider_type: toolDefaultValue?.provider_type,
  41. provider_name: toolDefaultValue?.provider_name,
  42. datasource_name: toolDefaultValue?.tool_name,
  43. datasource_label: toolDefaultValue?.tool_label,
  44. title: toolDefaultValue?.title,
  45. output_schema: toolDefaultValue?.output_schema,
  46. })
  47. }, [onSelect])
  48. const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures)
  49. return (
  50. <div className={cn(className)}>
  51. <div
  52. ref={wrapElemRef}
  53. className='max-h-[464px] overflow-y-auto'
  54. onScroll={pluginRef.current?.handleScroll}
  55. >
  56. <Tools
  57. className={toolContentClassName}
  58. tools={dataSources}
  59. onSelect={handleSelect as OnSelectBlock}
  60. viewType={ViewType.flat}
  61. hasSearchText={!!searchText}
  62. canNotSelectMultiple
  63. />
  64. {
  65. enable_marketplace && (
  66. <Link
  67. className='system-sm-medium sticky bottom-0 z-10 flex h-8 cursor-pointer items-center rounded-b-lg border-[0.5px] border-t border-components-panel-border bg-components-panel-bg-blur px-4 py-1 text-text-accent-light-mode-only shadow-lg'
  68. href={getMarketplaceUrl('')}
  69. target='_blank'
  70. >
  71. <span>{t('plugin.findMoreInMarketplace')}</span>
  72. <RiArrowRightUpLine className='ml-0.5 h-3 w-3' />
  73. </Link>
  74. )
  75. }
  76. </div>
  77. </div>
  78. )
  79. }
  80. export default DataSources