import type { FC } from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useSelectOrDelete, useTrigger } from '../../hooks' import { UPDATE_DATASETS_EVENT_EMITTER } from '../../constants' import type { Dataset } from './index' import { DELETE_CONTEXT_BLOCK_COMMAND } from './index' import { File05, Folder } from '@/app/components/base/icons/src/vender/solid/files' import { Plus } from '@/app/components/base/icons/src/vender/line/general' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import { useEventEmitterContextContext } from '@/context/event-emitter' type ContextBlockComponentProps = { nodeKey: string datasets?: Dataset[] onAddContext: () => void canNotAddContext?: boolean } const ContextBlockComponent: FC = ({ nodeKey, datasets = [], onAddContext, canNotAddContext, }) => { const { t } = useTranslation() const [ref, isSelected] = useSelectOrDelete(nodeKey, DELETE_CONTEXT_BLOCK_COMMAND) const [triggerRef, open, setOpen] = useTrigger() const { eventEmitter } = useEventEmitterContextContext() const [localDatasets, setLocalDatasets] = useState(datasets) eventEmitter?.useSubscription((v: any) => { if (v?.type === UPDATE_DATASETS_EVENT_EMITTER) setLocalDatasets(v.payload) }) return (
{t('common.promptEditor.context.item.title')}
{!canNotAddContext && (
{localDatasets.length}
{t('common.promptEditor.context.modal.title', { num: localDatasets.length })}
{ localDatasets.map(dataset => (
{dataset.name}
)) }
{t('common.promptEditor.context.modal.add')}
{t('common.promptEditor.context.modal.footer')}
)}
) } export default ContextBlockComponent