import { Button } from '@/components/ui/button'; import { Modal } from '@/components/ui/modal/modal'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { IConnector } from '@/interfaces/database/knowledge'; import { DataSourceInfo } from '@/pages/user-setting/data-source/contant'; import { IDataSourceBase } from '@/pages/user-setting/data-source/interface'; import { Link, Settings, Unlink } from 'lucide-react'; import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import LinkDataSourceModal from './link-data-source-modal'; export type IDataSourceNodeProps = IConnector & { icon: React.ReactNode; }; export interface ILinkDataSourceProps { data?: IConnector[]; handleLinkOrEditSubmit?: (data: IDataSourceBase[] | undefined) => void; unbindFunc?: (item: DataSourceItemProps) => void; } interface DataSourceItemProps extends IDataSourceNodeProps { openLinkModalFunc?: (open: boolean, data?: IDataSourceNodeProps) => void; unbindFunc?: (item: DataSourceItemProps) => void; } const DataSourceItem = (props: DataSourceItemProps) => { const { t } = useTranslation(); const { id, name, icon, openLinkModalFunc, unbindFunc } = props; const { navigateToDataSourceDetail } = useNavigatePage(); const toDetail = (id: string) => { navigateToDataSourceDetail(id); }; const openUnlinkModal = () => { Modal.show({ visible: true, className: '!w-[560px]', title: t('dataflowParser.unlinkSourceModalTitle'), children: (
), onVisibleChange: () => { Modal.hide(); }, footer: (
), }); }; return (
{icon}
{name}
<>
); }; const LinkDataSource = (props: ILinkDataSourceProps) => { const { data, handleLinkOrEditSubmit: submit, unbindFunc } = props; const { t } = useTranslation(); const [openLinkModal, setOpenLinkModal] = useState(false); const pipelineNode: IDataSourceNodeProps[] = useMemo(() => { if (data && data.length > 0) { return data.map((item) => { return { ...item, id: item?.id, name: item?.name, icon: DataSourceInfo[item?.source as keyof typeof DataSourceInfo]?.icon || '', } as IDataSourceNodeProps; }); } return []; }, [data]); const openLinkModalFunc = (open: boolean, data?: IDataSourceNodeProps) => { console.log('open', open, data); setOpenLinkModal(open); // if (data) { // setCurrentDataSource(data); // } else { // setCurrentDataSource(undefined); // } }; const handleLinkOrEditSubmit = (data: IDataSourceBase[] | undefined) => { console.log('handleLinkOrEditSubmit', data); submit?.(data); setOpenLinkModal(false); }; return (
{t('knowledgeConfiguration.dataSource')}
{t('knowledgeConfiguration.linkSourceSetTip')}
{pipelineNode.map( (item) => item.id && ( ), )}
{ openLinkModalFunc(open); }} onSubmit={handleLinkOrEditSubmit} />
); }; export default LinkDataSource;