feat: answer support readonly

This commit is contained in:
Joel
2024-03-20 15:32:06 +08:00
parent 698eb9671f
commit 38a1ea139a
14 changed files with 72 additions and 12 deletions

View File

@@ -92,10 +92,12 @@ const VarList: FC<Props> = ({
onlyLeafNodeVar={onlyLeafNodeVar}
filterVar={filterVar}
/>
<RemoveButton
className='!p-2 !bg-gray-100 hover:!bg-gray-200'
onClick={handleVarRemove(index)}
/>
{!readonly && (
<RemoveButton
className='!p-2 !bg-gray-100 hover:!bg-gray-200'
onClick={handleVarRemove(index)}
/>
)}
</div>
))}
</div>

View File

@@ -183,7 +183,11 @@ const VarReferencePicker: FC<Props> = ({
onOpenChange={setOpen}
placement='bottom-start'
>
<PortalToFollowElemTrigger onClick={() => !isConstant ? setOpen(!open) : setControlFocus(Date.now())} className='!flex'>
<PortalToFollowElemTrigger onClick={() => {
if (readonly)
return
!isConstant ? setOpen(!open) : setControlFocus(Date.now())
}} className='!flex'>
<div className={cn((open || isFocus) && 'border border-gray-300', 'relative group/wrap flex items-center w-full h-8 p-1 rounded-lg bg-gray-100')}>
{isSupportConstantValue
? <div onClick={(e) => {
@@ -242,7 +246,7 @@ const VarReferencePicker: FC<Props> = ({
: <div className='text-[13px] font-normal text-gray-400'>{t('workflow.common.setVarValuePlaceholder')}</div>}
</div>
)}
{hasValue && (<div
{(hasValue && !readonly) && (<div
className='invisible group-hover/wrap:visible absolute h-5 right-1 top-[50%] translate-y-[-50%] group p-1 rounded-md hover:bg-black/5 cursor-pointer'
onClick={handleClearVar}
>

View File

@@ -17,9 +17,9 @@ const Panel: FC<NodePanelProps<AnswerNodeType>> = ({
data,
}) => {
const { t } = useTranslation()
const readOnly = false
const {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,
@@ -32,7 +32,7 @@ const Panel: FC<NodePanelProps<AnswerNodeType>> = ({
<Field
title={t(`${i18nPrefix}.outputVars`)}
operations={
<AddButton onClick={handleAddVariable} />
!readOnly ? <AddButton onClick={handleAddVariable} /> : undefined
}
>
<VarList

View File

@@ -5,8 +5,12 @@ import type { Var } from '../../types'
import { VarType } from '../../types'
import type { AnswerNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: AnswerNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { inputs, setInputs } = useNodeCrud<AnswerNodeType>(id, payload)
// variables
const { handleVarListChange, handleAddVariable } = useVarList<AnswerNodeType>({
@@ -25,6 +29,7 @@ const useConfig = (id: string, payload: AnswerNodeType) => {
return varPayload.type !== VarType.arrayObject
}, [])
return {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,

View File

@@ -11,8 +11,13 @@ import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-cr
import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run'
import { fetchNodeDefault } from '@/service/workflow'
import { useStore as useAppStore } from '@/app/components/app/store'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: CodeNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const appId = useAppStore.getState().appDetail?.id
const [allLanguageDefault, setAllLanguageDefault] = useState<Record<CodeLanguage, CodeNodeType> | null>(null)
@@ -114,6 +119,7 @@ const useConfig = (id: string, payload: CodeNodeType) => {
}, [setRunInputData])
return {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,

View File

@@ -1,8 +1,11 @@
import useVarList from '../_base/hooks/use-var-list'
import type { EndNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: EndNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { inputs, setInputs } = useNodeCrud<EndNodeType>(id, payload)
const { handleVarListChange, handleAddVariable } = useVarList<EndNodeType>({
@@ -14,6 +17,7 @@ const useConfig = (id: string, payload: EndNodeType) => {
})
return {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,

View File

@@ -8,8 +8,12 @@ import type { Authorization, Body, HttpNodeType, Method } from './types'
import useKeyValueList from './hooks/use-key-value-list'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: HttpNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { inputs, setInputs } = useNodeCrud<HttpNodeType>(id, payload)
const { handleVarListChange, handleAddVariable } = useVarList<HttpNodeType>({
@@ -112,6 +116,7 @@ const useConfig = (id: string, payload: HttpNodeType) => {
}, [setRunInputData])
return {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,

View File

@@ -8,10 +8,12 @@ import type { Condition, IfElseNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import {
useIsChatMode,
useNodesReadOnly,
useWorkflow,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: IfElseNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { getBeforeNodesInSameBranch } = useWorkflow()
const isChatMode = useIsChatMode()
const availableNodes = getBeforeNodesInSameBranch(id)
@@ -53,6 +55,7 @@ const useConfig = (id: string, payload: IfElseNodeType) => {
})
return {
readOnly,
inputs,
handleConditionsChange,
handleAddCondition,

View File

@@ -3,7 +3,10 @@ import produce from 'immer'
import { isEqual } from 'lodash-es'
import type { ValueSelector, Var } from '../../types'
import { BlockEnum, VarType } from '../../types'
import { useIsChatMode, useWorkflow } from '../../hooks'
import {
useIsChatMode, useNodesReadOnly,
useWorkflow,
} from '../../hooks'
import type { KnowledgeRetrievalNodeType, MultipleRetrievalConfig } from './types'
import { RETRIEVE_TYPE } from '@/types/app'
import { DATASET_DEFAULT } from '@/config'
@@ -14,6 +17,7 @@ import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-s
import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const isChatMode = useIsChatMode()
const { getBeforeNodesInSameBranch } = useWorkflow()
const startNode = getBeforeNodesInSameBranch(id).find(node => node.data.type === BlockEnum.Start)
@@ -242,6 +246,7 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => {
}, [runInputData, setRunInputData])
return {
readOnly,
inputs,
handleQueryVarChange,
filterVar,

View File

@@ -4,7 +4,10 @@ import useVarList from '../_base/hooks/use-var-list'
import { VarType } from '../../types'
import type { Memory, ValueSelector, Var } from '../../types'
import { useStore } from '../../store'
import { useIsChatMode } from '../../hooks'
import {
useIsChatMode,
useNodesReadOnly,
} from '../../hooks'
import type { LLMNodeType } from './types'
import { Resolution } from '@/types/app'
import { useModelListAndDefaultModelAndCurrentProviderAndModel, useTextGenerationCurrentProviderAndModelAndModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
@@ -16,6 +19,7 @@ import { RETRIEVAL_OUTPUT_STRUCT } from '@/app/components/workflow/constants'
import { checkHasContextBlock, checkHasHistoryBlock, checkHasQueryBlock } from '@/app/components/base/prompt-editor/constants'
const useConfig = (id: string, payload: LLMNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const isChatMode = useIsChatMode()
const defaultConfig = useStore(s => s.nodesDefaultConfigs)[payload.type]
@@ -259,6 +263,7 @@ const useConfig = (id: string, payload: LLMNodeType) => {
const varInputs = toVarInputs(inputs.variables)
return {
readOnly,
isChatMode,
inputs,
isChatModel,

View File

@@ -2,7 +2,10 @@ import { useCallback, useEffect, useRef } from 'react'
import produce from 'immer'
import { BlockEnum, VarType } from '../../types'
import type { Memory, ValueSelector, Var } from '../../types'
import { useIsChatMode, useWorkflow } from '../../hooks'
import {
useIsChatMode, useNodesReadOnly,
useWorkflow,
} from '../../hooks'
import { useStore } from '../../store'
import type { QuestionClassifierNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
@@ -10,6 +13,7 @@ import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-s
import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const isChatMode = useIsChatMode()
const defaultConfig = useStore(s => s.nodesDefaultConfigs)[payload.type]
const { getBeforeNodesInSameBranch } = useWorkflow()
@@ -133,6 +137,7 @@ const useConfig = (id: string, payload: QuestionClassifierNodeType) => {
}, [])
return {
readOnly,
inputs,
handleModelChanged,
isChatModel,

View File

@@ -7,8 +7,12 @@ import { useStore } from '../../store'
import type { TemplateTransformNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: TemplateTransformNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const defaultConfig = useStore(s => s.nodesDefaultConfigs)[payload.type]
const { inputs, setInputs } = useNodeCrud<TemplateTransformNodeType>(id, payload)
@@ -74,6 +78,7 @@ const useConfig = (id: string, payload: TemplateTransformNodeType) => {
}, [])
return {
readOnly,
inputs,
handleVarListChange,
handleAddVariable,

View File

@@ -15,7 +15,12 @@ import type { Props as FormProps } from '@/app/components/workflow/nodes/_base/c
import { VarType as VarVarType } from '@/app/components/workflow/types'
import type { InputVar, Var } from '@/app/components/workflow/types'
import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: ToolNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { t } = useTranslation()
const language = useLanguage()
@@ -191,6 +196,7 @@ const useConfig = (id: string, payload: ToolNodeType) => {
})
return {
readOnly,
inputs,
currTool,
toolSettingSchema,

View File

@@ -5,8 +5,12 @@ import type { VariableAssignerNodeType } from './types'
import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
import type { ValueSelector, Var } from '@/app/components/workflow/types'
import { VarType } from '@/app/components/workflow/types'
import {
useNodesReadOnly,
} from '@/app/components/workflow/hooks'
const useConfig = (id: string, payload: VariableAssignerNodeType) => {
const { nodesReadOnly: readOnly } = useNodesReadOnly()
const { inputs, setInputs } = useNodeCrud<VariableAssignerNodeType>(id, payload)
const handleOutputTypeChange = useCallback((outputType: string) => {
@@ -47,6 +51,7 @@ const useConfig = (id: string, payload: VariableAssignerNodeType) => {
return true
}, [currVar, inputs.output_type, variables])
return {
readOnly,
inputs,
handleOutputTypeChange,
handleVarListChange,