update-trigger.ts•1.83 kB
import { TypeCompiler } from '@sinclair/typebox/compiler'
import { isNil } from '../../common'
import { FlowAction } from '../actions/action'
import { FlowVersion } from '../flow-version'
import { FlowTrigger, FlowTriggerType } from '../triggers/trigger'
import { flowStructureUtil } from '../util/flow-structure-util'
import { UpdateTriggerRequest } from '.'
const triggerSchemaValidation = TypeCompiler.Compile(FlowTrigger)
function createTrigger(name: string, request: UpdateTriggerRequest, nextAction: FlowAction | undefined): FlowTrigger {
const baseProperties = {
displayName: request.displayName,
name,
valid: false,
nextAction,
}
let trigger: FlowTrigger
switch (request.type) {
case FlowTriggerType.EMPTY:
trigger = {
...baseProperties,
type: FlowTriggerType.EMPTY,
settings: request.settings,
}
break
case FlowTriggerType.PIECE:
trigger = {
...baseProperties,
type: FlowTriggerType.PIECE,
settings: request.settings,
}
break
}
const valid = (isNil(request.valid) ? true : request.valid) && triggerSchemaValidation.Check(trigger)
return {
...trigger,
valid,
}
}
function _updateTrigger(flowVersion: FlowVersion, request: UpdateTriggerRequest): FlowVersion {
const trigger = flowStructureUtil.getStepOrThrow(request.name, flowVersion.trigger)
const updatedTrigger = createTrigger(request.name, request, trigger.nextAction)
return flowStructureUtil.transferFlow(flowVersion, (parentStep) => {
if (parentStep.name === request.name) {
return updatedTrigger
}
return parentStep
})
}
export { _updateTrigger }