You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

component.tsx 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { type FC, useEffect } from 'react'
  2. import { GeneratorType } from '@/app/components/app/configuration/config/automatic/types'
  3. import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
  4. import { useSelectOrDelete } from '../../hooks'
  5. import { CurrentBlockNode, DELETE_CURRENT_BLOCK_COMMAND } from '.'
  6. import cn from '@/utils/classnames'
  7. import { CodeAssistant, MagicEdit } from '../../../icons/src/vender/line/general'
  8. type CurrentBlockComponentProps = {
  9. nodeKey: string
  10. generatorType: GeneratorType
  11. }
  12. const CurrentBlockComponent: FC<CurrentBlockComponentProps> = ({
  13. nodeKey,
  14. generatorType,
  15. }) => {
  16. const [editor] = useLexicalComposerContext()
  17. const [ref, isSelected] = useSelectOrDelete(nodeKey, DELETE_CURRENT_BLOCK_COMMAND)
  18. const Icon = generatorType === GeneratorType.prompt ? MagicEdit : CodeAssistant
  19. useEffect(() => {
  20. if (!editor.hasNodes([CurrentBlockNode]))
  21. throw new Error('WorkflowVariableBlockPlugin: WorkflowVariableBlock not registered on editor')
  22. }, [editor])
  23. return (
  24. <div
  25. className={cn(
  26. 'group/wrap relative mx-0.5 flex h-[18px] select-none items-center rounded-[5px] border pl-0.5 pr-[3px] text-util-colors-violet-violet-600 hover:border-state-accent-solid hover:bg-state-accent-hover',
  27. isSelected ? ' border-state-accent-solid bg-state-accent-hover' : ' border-components-panel-border-subtle bg-components-badge-white-to-dark',
  28. )}
  29. onClick={(e) => {
  30. e.stopPropagation()
  31. }}
  32. ref={ref}
  33. >
  34. <Icon className='mr-0.5 h-[14px] w-[14px]' />
  35. <div className='text-xs font-medium'>{generatorType === GeneratorType.prompt ? 'current_prompt' : 'current_code'}</div>
  36. </div>
  37. )
  38. }
  39. export default CurrentBlockComponent