fix: pipeline init
parent
4d68aadc1c
commit
f6978ce6b1
@ -0,0 +1,39 @@
|
|||||||
|
import {
|
||||||
|
memo,
|
||||||
|
} from 'react'
|
||||||
|
import PromptEditor from '@/app/components/base/prompt-editor'
|
||||||
|
import cn from '@/utils/classnames'
|
||||||
|
import Placeholder from './placeholder'
|
||||||
|
|
||||||
|
type MixedVariableTextInputProps = {
|
||||||
|
editable?: boolean
|
||||||
|
value?: string
|
||||||
|
onChange?: (text: string) => void
|
||||||
|
}
|
||||||
|
const MixedVariableTextInput = ({
|
||||||
|
editable = true,
|
||||||
|
value = '',
|
||||||
|
onChange,
|
||||||
|
}: MixedVariableTextInputProps) => {
|
||||||
|
return (
|
||||||
|
<PromptEditor
|
||||||
|
wrapperClassName={cn(
|
||||||
|
'rounded-lg border border-transparent bg-components-input-bg-normal px-2 py-1',
|
||||||
|
'hover:border-components-input-border-hover hover:bg-components-input-bg-hover',
|
||||||
|
'focus-within:border-components-input-border-active focus-within:bg-components-input-bg-active focus-within:shadow-xs',
|
||||||
|
)}
|
||||||
|
className='caret:text-text-accent'
|
||||||
|
editable={editable}
|
||||||
|
value={value}
|
||||||
|
workflowVariableBlock={{
|
||||||
|
show: true,
|
||||||
|
variables: [],
|
||||||
|
workflowNodesMap: {},
|
||||||
|
}}
|
||||||
|
placeholder={<Placeholder />}
|
||||||
|
onChange={onChange}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default memo(MixedVariableTextInput)
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
import { useCallback } from 'react'
|
||||||
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
|
||||||
|
import { FOCUS_COMMAND } from 'lexical'
|
||||||
|
import { $insertNodes } from 'lexical'
|
||||||
|
import { CustomTextNode } from '@/app/components/base/prompt-editor/plugins/custom-text/node'
|
||||||
|
import Badge from '@/app/components/base/badge'
|
||||||
|
|
||||||
|
const Placeholder = () => {
|
||||||
|
const [editor] = useLexicalComposerContext()
|
||||||
|
|
||||||
|
const handleInsert = useCallback((text: string) => {
|
||||||
|
editor.update(() => {
|
||||||
|
const textNode = new CustomTextNode(text)
|
||||||
|
$insertNodes([textNode])
|
||||||
|
})
|
||||||
|
editor.dispatchCommand(FOCUS_COMMAND, undefined as any)
|
||||||
|
}, [editor])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className='pointer-events-auto flex h-full w-full cursor-text items-center px-2'
|
||||||
|
onClick={(e) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
handleInsert('')
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className='flex grow items-center'>
|
||||||
|
Type or press
|
||||||
|
<div className='system-kbd mx-0.5 flex h-4 w-4 items-center justify-center rounded bg-components-kbd-bg-gray text-text-placeholder'>/</div>
|
||||||
|
<div
|
||||||
|
className='system-sm-regular cursor-pointer text-components-input-text-placeholder underline decoration-dotted decoration-auto underline-offset-auto hover:text-text-tertiary'
|
||||||
|
onClick={((e) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
handleInsert('/')
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
insert variable
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Badge
|
||||||
|
className='shrink-0'
|
||||||
|
text='String'
|
||||||
|
uppercase={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Placeholder
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
import { useCallback } from 'react'
|
||||||
|
import {
|
||||||
|
useStore,
|
||||||
|
useWorkflowStore,
|
||||||
|
} from '@/app/components/workflow/store'
|
||||||
|
import { useWorkflowConfig } from '@/service/use-workflow'
|
||||||
|
import type { ToolWithProvider } from '@/app/components/workflow/types'
|
||||||
|
import type { FetchWorkflowDraftResponse } from '@/types/workflow'
|
||||||
|
|
||||||
|
export const usePipelineConfig = () => {
|
||||||
|
const pipelineId = useStore(s => s.pipelineId)
|
||||||
|
const workflowStore = useWorkflowStore()
|
||||||
|
|
||||||
|
const handleUpdateWorkflowConfig = useCallback((config: Record<string, any>) => {
|
||||||
|
const { setWorkflowConfig } = workflowStore.getState()
|
||||||
|
|
||||||
|
setWorkflowConfig(config)
|
||||||
|
}, [workflowStore])
|
||||||
|
useWorkflowConfig(
|
||||||
|
pipelineId ? `/rag/pipeline/${pipelineId}/workflows/draft/config` : '',
|
||||||
|
handleUpdateWorkflowConfig,
|
||||||
|
)
|
||||||
|
|
||||||
|
const handleUpdateDataSourceList = useCallback((dataSourceList: ToolWithProvider[]) => {
|
||||||
|
const { setDataSourceList } = workflowStore.getState()
|
||||||
|
|
||||||
|
setDataSourceList!(dataSourceList)
|
||||||
|
}, [workflowStore])
|
||||||
|
useWorkflowConfig<ToolWithProvider[]>(
|
||||||
|
'/rag/pipelines/datasource-plugins',
|
||||||
|
handleUpdateDataSourceList,
|
||||||
|
)
|
||||||
|
|
||||||
|
const handleUpdateNodesDefaultConfigs = useCallback((nodesDefaultConfigs: Record<string, any>) => {
|
||||||
|
const { setNodesDefaultConfigs } = workflowStore.getState()
|
||||||
|
|
||||||
|
setNodesDefaultConfigs!(nodesDefaultConfigs)
|
||||||
|
}, [workflowStore])
|
||||||
|
useWorkflowConfig(
|
||||||
|
pipelineId ? `/rag/pipeline/${pipelineId}/workflows/default-workflow-block-configs` : '',
|
||||||
|
handleUpdateNodesDefaultConfigs,
|
||||||
|
)
|
||||||
|
|
||||||
|
const handleUpdatePublishedAt = useCallback((publishedWorkflow: FetchWorkflowDraftResponse) => {
|
||||||
|
const { setPublishedAt } = workflowStore.getState()
|
||||||
|
|
||||||
|
setPublishedAt(publishedWorkflow?.created_at)
|
||||||
|
}, [workflowStore])
|
||||||
|
useWorkflowConfig(
|
||||||
|
pipelineId ? `/rag/pipeline/${pipelineId}/workflows/publish` : '',
|
||||||
|
handleUpdatePublishedAt,
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
import {
|
||||||
|
useRef,
|
||||||
|
} from 'react'
|
||||||
|
import type {
|
||||||
|
OnSelectBlock,
|
||||||
|
ToolWithProvider,
|
||||||
|
} from '../types'
|
||||||
|
import Tools from './tools'
|
||||||
|
import { ViewType } from './view-type-select'
|
||||||
|
import cn from '@/utils/classnames'
|
||||||
|
import type { ListRef } from '@/app/components/workflow/block-selector/market-place-plugin/list'
|
||||||
|
|
||||||
|
type AllToolsProps = {
|
||||||
|
className?: string
|
||||||
|
toolContentClassName?: string
|
||||||
|
searchText: string
|
||||||
|
onSelect: OnSelectBlock
|
||||||
|
dataSources: ToolWithProvider[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const DataSources = ({
|
||||||
|
className,
|
||||||
|
toolContentClassName,
|
||||||
|
searchText,
|
||||||
|
onSelect,
|
||||||
|
dataSources,
|
||||||
|
}: AllToolsProps) => {
|
||||||
|
const pluginRef = useRef<ListRef>(null)
|
||||||
|
const wrapElemRef = useRef<HTMLDivElement>(null)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={cn(className)}>
|
||||||
|
<div
|
||||||
|
ref={wrapElemRef}
|
||||||
|
className='max-h-[464px] overflow-y-auto'
|
||||||
|
onScroll={pluginRef.current?.handleScroll}
|
||||||
|
>
|
||||||
|
<Tools
|
||||||
|
className={toolContentClassName}
|
||||||
|
showWorkflowEmpty={false}
|
||||||
|
tools={dataSources}
|
||||||
|
onSelect={onSelect}
|
||||||
|
viewType={ViewType.flat}
|
||||||
|
hasSearchText={!!searchText}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DataSources
|
||||||
Loading…
Reference in New Issue