All files / modules/70-pipeline/components/AbstractSteps StepWidget.tsx

100% Statements 13/13
85.71% Branches 18/21
100% Functions 1/1
100% Lines 13/13

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              162x 162x   162x   162x                                   162x                                   1114x 1114x 157x 957x 1x           956x 956x                                         162x  
/*
 * Copyright 2021 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 { MultiTypeInputType, Text } from '@wings-software/uicore'
 
import { String } from 'framework/strings'
import type { AbstractStepFactory } from './AbstractStepFactory'
import { StepViewType } from './Step'
import type { StepProps, StepFormikFowardRef } from './Step'
import type { StepType } from '../PipelineSteps/PipelineStepInterface'
 
export interface StepWidgetProps<T = unknown, U = unknown> extends Omit<StepProps<T, U>, 'path'> {
  factory: AbstractStepFactory
  type: StepType
  isNewStep?: boolean
  allValues?: T
  template?: T
  path?: string
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  onUpdate?: (data: any) => void
  onChange?: (data: any) => void
  readonly?: boolean
  allowableTypes: MultiTypeInputType[]
}
 
export function StepWidget<T = unknown, U = unknown>(
  {
    factory,
    type,
    initialValues,
    allValues,
    template,
    isNewStep = true,
    path = '',
    stepViewType = StepViewType.Edit,
    onUpdate,
    onChange,
    readonly,
    allowableTypes,
    customStepProps
  }: StepWidgetProps<T, U>,
  formikRef: StepFormikFowardRef<T>
): JSX.Element | null {
  const step = factory?.getStep<T>(type)
  if (!step) {
    return __DEV__ ? <Text intent="warning">Step not found</Text> : null
  } else if (stepViewType === StepViewType.InputVariable && !step.hasStepVariables) {
    return __DEV__ ? (
      <Text intent="warning">
        <String stringID="wip" />
      </Text>
    ) : null
  } else {
    const values = step?.getDefaultValues(initialValues, stepViewType)
    return (
      <>
        {step.renderStep({
          initialValues: values,
          formikRef,
          onUpdate,
          onChange,
          isNewStep,
          stepViewType,
          inputSetData: { template, allValues, path, readonly },
          factory,
          readonly,
          path,
          customStepProps,
          allowableTypes
        })}
      </>
    )
  }
}
 
export const StepWidgetWithFormikRef = React.forwardRef(StepWidget)