'use client' import type { FC } from 'react' import React, { useCallback, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useBoolean } from 'ahooks' import cn from 'classnames' import Panel from '../panel' import { DataSourceType } from '../panel/types' import ConfigFirecrawlModal from './config-firecrawl-modal' import { fetchFirecrawlApiKey, removeFirecrawlApiKey } from '@/service/datasets' import type { DataSourceWebsiteItem, } from '@/models/common' import { useAppContext } from '@/context/app-context' import { WebsiteProvider, } from '@/models/common' import Toast from '@/app/components/base/toast' type Props = {} const DataSourceWebsite: FC = () => { const { t } = useTranslation() const { isCurrentWorkspaceManager } = useAppContext() const [list, setList] = useState([]) const checkSetApiKey = useCallback(async () => { const res = await fetchFirecrawlApiKey() as any const list = res.settings.filter((item: DataSourceWebsiteItem) => item.provider === WebsiteProvider.fireCrawl && !item.disabled) setList(list) }, []) useEffect(() => { checkSetApiKey() // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const [isShowConfig, { setTrue: showConfig, setFalse: hideConfig, }] = useBoolean(false) const handleAdded = useCallback(() => { checkSetApiKey() hideConfig() }, [checkSetApiKey, hideConfig]) const handleRemove = useCallback(async () => { await removeFirecrawlApiKey(list[0].id) setList([]) Toast.notify({ type: 'success', message: t('common.api.remove'), }) }, [list, t]) return ( <> 0} onConfigure={showConfig} readonly={!isCurrentWorkspaceManager} configuredList={list.map(item => ({ id: item.id, logo: ({ className }: { className: string }) => (
🔥
), name: 'FireCrawl', isActive: true, }))} onRemove={handleRemove} /> {isShowConfig && ( )} ) } export default React.memo(DataSourceWebsite)