'use client' import type { NewKnowledgeOnlineDocumentsProvider, NewKnowledgeOnlineDriveProvider, NewKnowledgeSourceDraft, NewKnowledgeWebsiteProvider, } from './routes' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { isValidWebsiteSourceDraft, NEW_KNOWLEDGE_SOURCE_NAME_MAX_LENGTH, NEW_KNOWLEDGE_SOURCE_URL_MAX_LENGTH, } from './routes' const sourceTypes = [ { icon: 'i-ri-global-line', value: 'websiteCrawl' }, { icon: 'i-ri-file-text-line', value: 'onlineDocuments' }, { icon: 'i-ri-hard-drive-3-line', value: 'onlineDrive' }, ] as const const providers = { onlineDocuments: [ { icon: 'i-custom-public-common-notion', label: 'Notion' }, { icon: 'i-ri-file-text-line', label: 'Google Docs' }, { icon: 'i-ri-links-line', label: 'Confluence' }, ], onlineDrive: [ { icon: 'i-custom-public-common-google-drive', label: 'Google Drive' }, { icon: 'i-ri-cloud-line', label: 'OneDrive' }, { icon: 'i-ri-box-3-line', label: 'Amazon S3' }, ], websiteCrawl: [ { icon: 'i-ri-fire-fill text-orange-500', label: 'Firecrawl', available: true }, { icon: 'i-custom-public-llm-jina', label: 'Jina Reader' }, { icon: 'i-ri-water-flash-line', label: 'WaterCrawl' }, ], } as const function ConnectedSourceConfiguration({ disabled, draft, onDraftChange, }: { disabled: boolean draft: NewKnowledgeSourceDraft onDraftChange: (draft: NewKnowledgeSourceDraft) => void }) { const { t } = useTranslation('dataset') return (
) } export function CreateSourceSetup({ disabled, draft, onDraftChange, onSourceTypeChange, }: { disabled: boolean draft: NewKnowledgeSourceDraft onDraftChange: (draft: NewKnowledgeSourceDraft) => void onSourceTypeChange: (sourceType: NewKnowledgeSourceDraft['sourceType']) => void }) { const { t } = useTranslation('dataset') const { t: tCreation } = useTranslation('datasetCreation') const [optionsExpanded, setOptionsExpanded] = useState(false) const [backendBoundaryVisible, setBackendBoundaryVisible] = useState(false) const sourceType = draft.sourceType const availableProviders = providers[sourceType] const activeProvider = availableProviders.some((provider) => provider.label === draft.provider) ? draft.provider : availableProviders[0].label const previewReady = draft.sourceType === 'websiteCrawl' && isValidWebsiteSourceDraft(draft) const showBackendBoundary = () => setBackendBoundaryVisible(true) const updateDraft = (nextDraft: NewKnowledgeSourceDraft) => { onDraftChange(nextDraft) setBackendBoundaryVisible(false) } const selectProvider = (provider: string) => { if (draft.sourceType === 'onlineDocuments') updateDraft({ ...draft, provider: provider as NewKnowledgeOnlineDocumentsProvider }) else if (draft.sourceType === 'onlineDrive') updateDraft({ ...draft, provider: provider as NewKnowledgeOnlineDriveProvider }) else updateDraft({ ...draft, provider: provider as NewKnowledgeWebsiteProvider }) } return (
{t(($) => $['newKnowledge.sourceTypeLabel'])}
{sourceTypes.map((option) => ( ))}
{tCreation(($) => $['stepOne.website.chooseProvider'])}
{tCreation(($) => $['stepOne.website.chooseProvider'])}
{providers[sourceType].map((provider) => { return ( ) })}
{draft.sourceType === 'websiteCrawl' && (
{optionsExpanded && (
)}
$['newKnowledge.crawlPreview'])} className="flex min-h-40 flex-col items-center justify-center rounded-lg border border-dashed border-divider-regular px-6 text-center" >

{t(($) => $['newKnowledge.pagesAppearTitle'])}

{t(($) => $['newKnowledge.pagesAppearDescription'])}

)} {draft.sourceType !== 'websiteCrawl' && (
{draft.sourceType === 'onlineDocuments' && activeProvider === 'Notion' && (
provider.label === activeProvider)?.icon, )} />

{t(($) => $['newKnowledge.notionNotConnected'])}

{t(($) => $['newKnowledge.notionNotConnectedDescription'])}

)}
)} {backendBoundaryVisible && (

{t(($) => $['newKnowledge.sourceSetupBackendDependency'])}

)}
) }