index.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useCallback, useEffect, useState } from 'react'
  4. import NoData from './no-data'
  5. import Firecrawl from './firecrawl'
  6. import { useModalContext } from '@/context/modal-context'
  7. import type { CrawlOptions, CrawlResultItem } from '@/models/datasets'
  8. import { fetchFirecrawlApiKey } from '@/service/datasets'
  9. import { type DataSourceWebsiteItem, WebsiteProvider } from '@/models/common'
  10. type Props = {
  11. onPreview: (payload: CrawlResultItem) => void
  12. checkedCrawlResult: CrawlResultItem[]
  13. onCheckedCrawlResultChange: (payload: CrawlResultItem[]) => void
  14. onJobIdChange: (jobId: string) => void
  15. crawlOptions: CrawlOptions
  16. onCrawlOptionsChange: (payload: CrawlOptions) => void
  17. }
  18. const Website: FC<Props> = ({
  19. onPreview,
  20. checkedCrawlResult,
  21. onCheckedCrawlResultChange,
  22. onJobIdChange,
  23. crawlOptions,
  24. onCrawlOptionsChange,
  25. }) => {
  26. const { setShowAccountSettingModal } = useModalContext()
  27. const [isLoaded, setIsLoaded] = useState(false)
  28. const [isSetFirecrawlApiKey, setIsSetFirecrawlApiKey] = useState(false)
  29. const checkSetApiKey = useCallback(async () => {
  30. const res = await fetchFirecrawlApiKey() as any
  31. const list = res.settings.filter((item: DataSourceWebsiteItem) => item.provider === WebsiteProvider.fireCrawl && !item.disabled)
  32. setIsSetFirecrawlApiKey(list.length > 0)
  33. }, [])
  34. useEffect(() => {
  35. checkSetApiKey().then(() => {
  36. setIsLoaded(true)
  37. })
  38. // eslint-disable-next-line react-hooks/exhaustive-deps
  39. }, [])
  40. const handleOnConfig = useCallback(() => {
  41. setShowAccountSettingModal({
  42. payload: 'data-source',
  43. onCancelCallback: checkSetApiKey,
  44. })
  45. }, [checkSetApiKey, setShowAccountSettingModal])
  46. if (!isLoaded)
  47. return null
  48. return (
  49. <div>
  50. {isSetFirecrawlApiKey
  51. ? (
  52. <Firecrawl
  53. onPreview={onPreview}
  54. checkedCrawlResult={checkedCrawlResult}
  55. onCheckedCrawlResultChange={onCheckedCrawlResultChange}
  56. onJobIdChange={onJobIdChange}
  57. crawlOptions={crawlOptions}
  58. onCrawlOptionsChange={onCrawlOptionsChange}
  59. />
  60. )
  61. : (
  62. <NoData onConfig={handleOnConfig} />
  63. )}
  64. </div>
  65. )
  66. }
  67. export default React.memo(Website)