chore: change var inspect slice
parent
1593ef0640
commit
8cd8da99d6
@ -1,96 +0,0 @@
|
||||
import type { StateCreator } from 'zustand'
|
||||
import produce from 'immer'
|
||||
import type { NodeTracing } from '@/types/workflow'
|
||||
|
||||
// TODO: Missing var type
|
||||
type NodeVars = NodeTracing
|
||||
|
||||
type CurrentVarsState = {
|
||||
currentNodes: NodeVars[]
|
||||
}
|
||||
|
||||
type CurrentVarsActions = {
|
||||
setCurrentVars: (vars: NodeVars[]) => void
|
||||
getCurrentVars: () => NodeVars[]
|
||||
clearCurrentVars: () => void
|
||||
setCurrentNodeVars: (nodeId: string, payload: NodeVars) => void
|
||||
clearCurrentNodeVars: (nodeId: string) => void
|
||||
getCurrentNodeVars: (nodeId: string) => NodeVars | undefined
|
||||
hasCurrentNodeVars: (nodeId: string) => boolean
|
||||
setCurrentVar: (nodeId: string, key: string, value: any) => void
|
||||
getCurrentVar: (nodeId: string, key: string) => any
|
||||
}
|
||||
|
||||
export type CurrentVarsSliceShape = CurrentVarsState & CurrentVarsActions
|
||||
|
||||
export const createCurrentVarsSlice: StateCreator<CurrentVarsSliceShape> = (set, get) => {
|
||||
return ({
|
||||
currentNodes: [],
|
||||
setCurrentVars: (vars) => {
|
||||
set(() => ({
|
||||
currentNodes: vars,
|
||||
}))
|
||||
},
|
||||
getCurrentVars: () => {
|
||||
return get().currentNodes
|
||||
},
|
||||
clearCurrentVars: () => {
|
||||
set(() => ({
|
||||
currentNodes: [],
|
||||
}))
|
||||
},
|
||||
setCurrentNodeVars: (nodeId, payload) => {
|
||||
set((state) => {
|
||||
const prevNodes = state.currentNodes
|
||||
const nodes = produce(prevNodes, (draft) => {
|
||||
const index = prevNodes.findIndex(node => node.id === nodeId)
|
||||
if (index === -1)
|
||||
draft.push(payload)
|
||||
else
|
||||
draft[index] = payload
|
||||
})
|
||||
|
||||
return {
|
||||
currentNodes: nodes,
|
||||
}
|
||||
})
|
||||
},
|
||||
clearCurrentNodeVars: (nodeId) => {
|
||||
set(produce((state: CurrentVarsSliceShape) => {
|
||||
const nodes = state.currentNodes.filter(node => node.node_id !== nodeId)
|
||||
state.currentNodes = nodes
|
||||
},
|
||||
))
|
||||
},
|
||||
getCurrentNodeVars: (nodeId) => {
|
||||
const nodes = get().currentNodes
|
||||
return nodes.find(node => node.node_id === nodeId)
|
||||
},
|
||||
hasCurrentNodeVars: (nodeId) => {
|
||||
return !!get().getCurrentNodeVars(nodeId)
|
||||
},
|
||||
setCurrentVar: (nodeId, key, value) => {
|
||||
set(produce((state: CurrentVarsSliceShape) => {
|
||||
const nodes = state.currentNodes.map((node) => {
|
||||
if (node.id === nodeId) {
|
||||
return produce(node, (draft) => {
|
||||
if (!draft.outputs)
|
||||
draft.outputs = {}
|
||||
draft.outputs[key] = value
|
||||
})
|
||||
}
|
||||
return node
|
||||
})
|
||||
state.currentNodes = nodes
|
||||
}))
|
||||
},
|
||||
getCurrentVar(nodeId, key) {
|
||||
const node = get().getCurrentNodeVars(nodeId)
|
||||
if (!node)
|
||||
return undefined
|
||||
|
||||
const variable = node.outputs?.[key]
|
||||
return variable
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
import type { StateCreator } from 'zustand'
|
||||
import produce from 'immer'
|
||||
import type { NodeWithVar, VarInInspect } from '@/types/workflow'
|
||||
import type { ValueSelector } from '../../types'
|
||||
|
||||
type InspectVarsState = {
|
||||
currentFocusNodeId: string | null
|
||||
nodes: NodeWithVar[] // the nodes have data
|
||||
conversationVars: VarInInspect[]
|
||||
}
|
||||
|
||||
type InspectVarsActions = {
|
||||
getAllInspectVars: () => NodeWithVar[]
|
||||
clearInspectVars: () => void
|
||||
setNodeInspectVars: (nodeId: string, payload: NodeWithVar) => void
|
||||
clearNodeInspectVars: (nodeId: string) => void
|
||||
getNodeInspectVars: (nodeId: string) => NodeWithVar | undefined
|
||||
hasNodeInspectVars: (nodeId: string) => boolean
|
||||
setInspectVar: (nodeId: string, selector: ValueSelector, value: any) => void
|
||||
getInspectVar: (nodeId: string, selector: ValueSelector) => any
|
||||
}
|
||||
|
||||
export type CurrentVarsSliceShape = InspectVarsState & InspectVarsActions
|
||||
|
||||
export const createInspectVarsSlice: StateCreator<CurrentVarsSliceShape> = (set, get) => {
|
||||
return ({
|
||||
currentFocusNodeId: null,
|
||||
nodes: [],
|
||||
conversationVars: [],
|
||||
getAllInspectVars: () => {
|
||||
return get().nodes
|
||||
},
|
||||
clearInspectVars: () => {
|
||||
set(() => ({
|
||||
nodes: [],
|
||||
}))
|
||||
},
|
||||
setNodeInspectVars: (nodeId, payload) => {
|
||||
set((state) => {
|
||||
const prevNodes = state.nodes
|
||||
const nodes = produce(prevNodes, (draft) => {
|
||||
const index = prevNodes.findIndex(node => node.nodeId === nodeId)
|
||||
if (index === -1)
|
||||
draft.push(payload)
|
||||
else
|
||||
draft[index] = payload
|
||||
})
|
||||
|
||||
return {
|
||||
nodes,
|
||||
}
|
||||
})
|
||||
},
|
||||
clearNodeInspectVars: (nodeId) => {
|
||||
set(produce((state: CurrentVarsSliceShape) => {
|
||||
const nodes = state.nodes.filter(node => node.nodeId !== nodeId)
|
||||
state.nodes = nodes
|
||||
},
|
||||
))
|
||||
},
|
||||
getNodeInspectVars: (nodeId) => {
|
||||
const nodes = get().nodes
|
||||
return nodes.find(node => node.nodeId === nodeId)
|
||||
},
|
||||
hasNodeInspectVars: (nodeId) => {
|
||||
return !!get().getNodeInspectVars(nodeId)
|
||||
},
|
||||
setInspectVar: (nodeId, selector, value) => {
|
||||
set(produce((state: CurrentVarsSliceShape) => {
|
||||
const nodes = state.nodes.map((node) => {
|
||||
if (node.nodeId === nodeId) {
|
||||
return produce(node, (draft) => {
|
||||
const needChangeVarIndex = draft.vars.findIndex((varItem) => {
|
||||
return varItem.selector.join('.') === selector.join('.')
|
||||
})
|
||||
if (needChangeVarIndex !== -1)
|
||||
draft.vars[needChangeVarIndex].value = value
|
||||
})
|
||||
}
|
||||
return node
|
||||
})
|
||||
state.nodes = nodes
|
||||
}))
|
||||
},
|
||||
getInspectVar(nodeId, key) {
|
||||
const node = get().getNodeInspectVars(nodeId)
|
||||
if (!node)
|
||||
return undefined
|
||||
|
||||
const variable = node.vars.find((varItem) => {
|
||||
return varItem.selector.join('.') === key.join('.')
|
||||
})?.value
|
||||
return variable
|
||||
},
|
||||
})
|
||||
}
|
||||
Loading…
Reference in New Issue