'use client' import type { FC } from 'react' import type { DataSourceAuth } from '@/app/components/header/account-setting/data-source-page-new/types' import type { CrawlOptions, CrawlResultItem } from '@/models/datasets' import { cn } from '@langgenius/dify-ui/cn' import * as React from 'react' import { useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { ACCOUNT_SETTING_TAB } from '@/app/components/header/account-setting/constants' import { useIntegrationsSetting } from '@/app/components/header/account-setting/use-integrations-setting' import { ENABLE_WEBSITE_FIRECRAWL, ENABLE_WEBSITE_JINAREADER, ENABLE_WEBSITE_WATERCRAWL, } from '@/config' import { DataSourceProvider } from '@/models/common' import Firecrawl from './firecrawl' import s from './index.module.css' import JinaReader from './jina-reader' import NoData from './no-data' import Watercrawl from './watercrawl' type Props = Readonly<{ onPreview: (payload: CrawlResultItem) => void checkedCrawlResult: CrawlResultItem[] onCheckedCrawlResultChange: (payload: CrawlResultItem[]) => void onCrawlProviderChange: (provider: DataSourceProvider) => void onJobIdChange: (jobId: string) => void crawlOptions: CrawlOptions onCrawlOptionsChange: (payload: CrawlOptions) => void authedDataSourceList: DataSourceAuth[] }> const Website: FC = ({ onPreview, checkedCrawlResult, onCheckedCrawlResultChange, onCrawlProviderChange, onJobIdChange, crawlOptions, onCrawlOptionsChange, authedDataSourceList, }) => { const { t } = useTranslation() const openIntegrationsSetting = useIntegrationsSetting() const [selectedProvider, setSelectedProvider] = useState( DataSourceProvider.jinaReader, ) const availableProviders = useMemo( () => authedDataSourceList.filter((item) => { return ( [ DataSourceProvider.jinaReader, DataSourceProvider.fireCrawl, DataSourceProvider.waterCrawl, ].includes(item.provider as DataSourceProvider) && item.credentials_list.length > 0 ) }), [authedDataSourceList], ) const handleOnConfig = useCallback(() => { openIntegrationsSetting({ payload: ACCOUNT_SETTING_TAB.DATA_SOURCE, }) }, [openIntegrationsSetting]) const source = availableProviders.find((source) => source.provider === selectedProvider) return (
{t(($) => $['stepOne.website.chooseProvider'], { ns: 'datasetCreation' })}
{ENABLE_WEBSITE_JINAREADER && ( )} {ENABLE_WEBSITE_FIRECRAWL && ( )} {ENABLE_WEBSITE_WATERCRAWL && ( )}
{source && selectedProvider === DataSourceProvider.fireCrawl && ( )} {source && selectedProvider === DataSourceProvider.waterCrawl && ( )} {source && selectedProvider === DataSourceProvider.jinaReader && ( )} {!source && }
) } export default React.memo(Website)