| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | 
                        - import { useCallback, useMemo } from 'react'
 - import produce from 'immer'
 - import { useStoreApi } from 'reactflow'
 - import { isEqual } from 'lodash-es'
 - import { VarType } from '../../types'
 - import type { ValueSelector, Var } from '../../types'
 - import { type AssignerNodeType, WriteMode } from './types'
 - import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud'
 - import {
 -   useIsChatMode,
 -   useNodesReadOnly,
 -   useWorkflow,
 -   useWorkflowVariables,
 - } from '@/app/components/workflow/hooks'
 - 
 - const useConfig = (id: string, payload: AssignerNodeType) => {
 -   const { nodesReadOnly: readOnly } = useNodesReadOnly()
 -   const isChatMode = useIsChatMode()
 - 
 -   const store = useStoreApi()
 -   const { getBeforeNodesInSameBranch } = useWorkflow()
 - 
 -   const {
 -     getNodes,
 -   } = store.getState()
 -   const currentNode = getNodes().find(n => n.id === id)
 -   const isInIteration = payload.isInIteration
 -   const iterationNode = isInIteration ? getNodes().find(n => n.id === currentNode!.parentId) : null
 -   const availableNodes = useMemo(() => {
 -     return getBeforeNodesInSameBranch(id)
 -   }, [getBeforeNodesInSameBranch, id])
 -   const { inputs, setInputs } = useNodeCrud<AssignerNodeType>(id, payload)
 - 
 -   const { getCurrentVariableType } = useWorkflowVariables()
 -   const assignedVarType = getCurrentVariableType({
 -     parentNode: iterationNode,
 -     valueSelector: inputs.assigned_variable_selector || [],
 -     availableNodes,
 -     isChatMode,
 -     isConstant: false,
 -   })
 - 
 -   const isSupportAppend = useCallback((varType: VarType) => {
 -     return [VarType.arrayString, VarType.arrayNumber, VarType.arrayObject].includes(varType)
 -   }, [])
 - 
 -   const isCurrSupportAppend = useMemo(() => isSupportAppend(assignedVarType), [assignedVarType, isSupportAppend])
 - 
 -   const handleAssignedVarChanges = useCallback((variable: ValueSelector | string) => {
 -     const newInputs = produce(inputs, (draft) => {
 -       draft.assigned_variable_selector = variable as ValueSelector
 -       draft.input_variable_selector = []
 - 
 -       const newVarType = getCurrentVariableType({
 -         parentNode: iterationNode,
 -         valueSelector: draft.assigned_variable_selector || [],
 -         availableNodes,
 -         isChatMode,
 -         isConstant: false,
 -       })
 - 
 -       if (inputs.write_mode === WriteMode.Append && !isSupportAppend(newVarType))
 -         draft.write_mode = WriteMode.Overwrite
 -     })
 -     setInputs(newInputs)
 -   }, [inputs, setInputs, getCurrentVariableType, iterationNode, availableNodes, isChatMode, isSupportAppend])
 - 
 -   const writeModeTypes = [WriteMode.Overwrite, WriteMode.Append, WriteMode.Clear]
 - 
 -   const handleWriteModeChange = useCallback((writeMode: WriteMode) => {
 -     return () => {
 -       const newInputs = produce(inputs, (draft) => {
 -         draft.write_mode = writeMode
 -         if (inputs.write_mode === WriteMode.Clear)
 -           draft.input_variable_selector = []
 -       })
 -       setInputs(newInputs)
 -     }
 -   }, [inputs, setInputs])
 - 
 -   const toAssignedVarType = useMemo(() => {
 -     const { write_mode } = inputs
 -     if (write_mode === WriteMode.Overwrite)
 -       return assignedVarType
 -     if (write_mode === WriteMode.Append) {
 -       if (assignedVarType === VarType.arrayString)
 -         return VarType.string
 -       if (assignedVarType === VarType.arrayNumber)
 -         return VarType.number
 -       if (assignedVarType === VarType.arrayObject)
 -         return VarType.object
 -     }
 -     return VarType.string
 -   }, [assignedVarType, inputs])
 - 
 -   const filterAssignedVar = useCallback((varPayload: Var, selector: ValueSelector) => {
 -     return selector.join('.').startsWith('conversation')
 -   }, [])
 - 
 -   const filterToAssignedVar = useCallback((varPayload: Var, selector: ValueSelector) => {
 -     if (isEqual(selector, inputs.assigned_variable_selector))
 -       return false
 - 
 -     if (inputs.write_mode === WriteMode.Overwrite) {
 -       return varPayload.type === assignedVarType
 -     }
 -     else if (inputs.write_mode === WriteMode.Append) {
 -       switch (assignedVarType) {
 -         case VarType.arrayString:
 -           return varPayload.type === VarType.string
 -         case VarType.arrayNumber:
 -           return varPayload.type === VarType.number
 -         case VarType.arrayObject:
 -           return varPayload.type === VarType.object
 -         default:
 -           return false
 -       }
 -     }
 -     return true
 -   }, [inputs.assigned_variable_selector, inputs.write_mode, assignedVarType])
 - 
 -   const handleToAssignedVarChange = useCallback((value: ValueSelector | string) => {
 -     const newInputs = produce(inputs, (draft) => {
 -       draft.input_variable_selector = value as ValueSelector
 -     })
 -     setInputs(newInputs)
 -   }, [inputs, setInputs])
 - 
 -   return {
 -     readOnly,
 -     inputs,
 -     handleAssignedVarChanges,
 -     assignedVarType,
 -     isSupportAppend: isCurrSupportAppend,
 -     writeModeTypes,
 -     handleWriteModeChange,
 -     filterAssignedVar,
 -     filterToAssignedVar,
 -     handleToAssignedVarChange,
 -     toAssignedVarType,
 -   }
 - }
 - 
 - export default useConfig
 
 
  |