import type { FC } from 'react' import type { Dataset } from './index' import type { EventEmitterValue } from '@/context/event-emitter' import { Popover, PopoverContent, PopoverTrigger } from '@langgenius/dify-ui/popover' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useEventEmitterContextContext } from '@/context/event-emitter' import { UPDATE_DATASETS_EVENT_EMITTER } from '../../constants' import { useSelectOrDelete, useTrigger } from '../../hooks' import { DELETE_CONTEXT_BLOCK_COMMAND } from './index' 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((event?: EventEmitterValue) => { if (typeof event === 'string') return if (event?.type === UPDATE_DATASETS_EVENT_EMITTER && Array.isArray(event.payload)) setLocalDatasets(event.payload as Dataset[]) }) return (
{t(($) => $['promptEditor.context.item.title'], { ns: 'common' })}
{!canNotAddContext && ( $['promptEditor.context.item.title'], { ns: 'common' })} className={`flex h-[18px] w-[18px] cursor-pointer items-center justify-center rounded border-none p-0 text-[11px] font-semibold ${open ? 'bg-[#6938EF] text-white' : 'bg-white/50 group-hover:bg-white group-hover:shadow-xs'} `} ref={triggerRef} onClick={(e) => e.preventDefault()} > {localDatasets.length} } />
{t(($) => $['promptEditor.context.modal.title'], { ns: 'common', num: localDatasets.length, })}
{localDatasets.map((dataset) => (
{dataset.name}
))}
{t(($) => $['promptEditor.context.modal.footer'], { ns: 'common' })}
)}
) } export default ContextBlockComponent