All files / modules/70-pipeline/components/CommonPipelineStages/ApprovalStage ApprovalStageExecution.tsx

66.67% Statements 14/21
6.67% Branches 1/15
20% Functions 1/5
70% Lines 14/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106              1x 1x         1x 1x 1x   1x   1x                             12x 12x 12x 12x 12x 12x 12x                                                                                                                                  
/*
 * Copyright 2022 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import React from 'react'
import ExecutionGraph, {
  ExecutionGraphAddStepEvent,
  ExecutionGraphEditStepEvent,
  ExecutionGraphRefObj
} from '@pipeline/components/PipelineStudio/ExecutionGraph/ExecutionGraph'
import { DrawerTypes } from '@pipeline/components/PipelineStudio/PipelineContext/PipelineActions'
import { usePipelineContext } from '@pipeline/components/PipelineStudio/PipelineContext/PipelineContext'
import { AdvancedPanels } from '@pipeline/components/PipelineStudio/StepCommands/StepCommandTypes'
import type { StageElementWrapper } from '@pipeline/utils/pipelineTypes'
import { useAddStepTemplate } from '@pipeline/hooks/useAddStepTemplate'
 
export function ApprovalStageExecution(): React.ReactElement {
  const {
    state: {
      originalPipeline,
      pipelineView,
      selectionState: { selectedStageId = '' },
      templateTypes
    },
    isReadonly,
    stepsFactory,
    updateStage,
    updatePipelineView,
    getStageFromPipeline,
    setSelectedStepId,
    getStagePathFromPipeline
  } = usePipelineContext()
  const selectedStage = getStageFromPipeline(selectedStageId).stage
  const originalStage = getStageFromPipeline(selectedStageId, originalPipeline).stage
  const executionRef = React.useRef<ExecutionGraphRefObj | null>(null)
  const { addTemplate } = useAddStepTemplate({ executionRef: executionRef.current })
  const stagePath = getStagePathFromPipeline(selectedStageId || '', 'pipeline.stages')
  return (
    <ExecutionGraph
      allowAddGroup={true}
      isReadonly={isReadonly}
      hasDependencies={false}
      stepsFactory={stepsFactory}
      ref={executionRef}
      hasRollback={false}
      pathToStage={`${stagePath}.stage.spec.execution`}
      templateTypes={templateTypes}
      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
      stage={selectedStage!}
      originalStage={originalStage}
      updateStage={(stageData: StageElementWrapper) => {
        if (stageData.stage) updateStage(stageData.stage)
      }}
      onAddStep={(event: ExecutionGraphAddStepEvent) => {
        if (event.isTemplate) {
          addTemplate(event)
        } else {
          updatePipelineView({
            ...pipelineView,
            isDrawerOpened: true,
            drawerData: {
              type: DrawerTypes.AddStep,
              data: {
                paletteData: {
                  entity: event.entity,
                  stepsMap: event.stepsMap,
                  onUpdate: executionRef.current?.stepGroupUpdated,
                  isRollback: false,
                  isParallelNodeClicked: event.isParallel,
                  hiddenAdvancedPanels: [AdvancedPanels.PreRequisites]
                }
              }
            }
          })
        }
      }}
      onEditStep={(event: ExecutionGraphEditStepEvent) => {
        updatePipelineView({
          ...pipelineView,
          isDrawerOpened: true,
          drawerData: {
            type: DrawerTypes.StepConfig,
            data: {
              stepConfig: {
                node: event.node as any,
                stepsMap: event.stepsMap,
                onUpdate: executionRef.current?.stepGroupUpdated,
                isStepGroup: event.isStepGroup,
                isUnderStepGroup: event.isUnderStepGroup,
                addOrEdit: event.addOrEdit,
                hiddenAdvancedPanels: [AdvancedPanels.PreRequisites]
              }
            }
          }
        })
      }}
      onSelectStep={(stepId: string) => {
        setSelectedStepId(stepId)
      }}
    />
  )
}