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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 4x 4x 4x 4x 4x 3x 1x 2x 1x 2x 4x | /*
* 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, { ReactElement } from 'react'
import { IconName, RUNTIME_INPUT_VALUE } from '@wings-software/uicore'
import type { FormikErrors } from 'formik'
import { isEmpty, set } from 'lodash-es'
import { StepProps, StepViewType, ValidateInputSetProps } from '@pipeline/components/AbstractSteps/Step'
import { StepType } from '@pipeline/components/PipelineSteps/PipelineStepInterface'
import { PipelineStep } from '@pipeline/components/PipelineSteps/PipelineStep'
import type { StepElementConfig } from 'services/cd-ng'
import type { StringsMap } from 'stringTypes'
import FlagConfigurationInputSetStep from './FlagConfigurationInputSetStep'
import {
FlagConfigurationStepVariablesView,
FlagConfigurationStepVariablesViewProps
} from './FlagConfigurationStepVariablesView'
import type { FlagConfigurationStepData } from './types'
import FlagConfigurationStepWidget, { FlagConfigurationStepWidgetProps } from './FlagConfigurationStepWidget'
export class FlagConfigurationStep extends PipelineStep<FlagConfigurationStepData> {
protected type = StepType.FlagConfiguration
protected stepName = 'Flag Configuration'
protected stepIcon: IconName = 'flag'
protected stepDescription: keyof StringsMap = 'pipeline.stepDescription.FlagConfiguration'
protected isHarnessSpecific = true
renderStep(props: StepProps<FlagConfigurationStepData>): ReactElement {
switch (props.stepViewType) {
case StepViewType.DeploymentForm:
case StepViewType.InputSet:
return FlagConfigurationStep.renderInputSetView(props)
case StepViewType.InputVariable:
return FlagConfigurationStep.renderVariablesView(props)
default:
return FlagConfigurationStep.renderWidgetView(props)
}
}
private static renderInputSetView({
inputSetData,
stepViewType,
readonly
}: StepProps<FlagConfigurationStepData>): ReactElement {
return (
<FlagConfigurationInputSetStep
existingValues={inputSetData?.allValues}
stepViewType={stepViewType}
readonly={readonly}
template={inputSetData?.template}
pathPrefix={inputSetData?.path || ''}
/>
)
}
private static renderVariablesView({
customStepProps,
initialValues
}: StepProps<FlagConfigurationStepData>): ReactElement {
return (
<FlagConfigurationStepVariablesView
{...(customStepProps as FlagConfigurationStepVariablesViewProps)}
originalData={initialValues}
/>
)
}
private static renderWidgetView({
initialValues,
onUpdate,
stepViewType,
isNewStep,
readonly,
formikRef
}: StepProps<FlagConfigurationStepData>): ReactElement {
return (
<FlagConfigurationStepWidget
initialValues={initialValues}
onUpdate={onUpdate as FlagConfigurationStepWidgetProps['onUpdate']}
stepViewType={stepViewType}
isNewStep={isNewStep}
readonly={readonly}
ref={formikRef}
/>
)
}
validateInputSet({
data,
template,
getString
}: ValidateInputSetProps<FlagConfigurationStepData>): FormikErrors<FlagConfigurationStepData> {
const errors: FormikErrors<FlagConfigurationStepData> = {}
if (template?.spec?.feature === RUNTIME_INPUT_VALUE && isEmpty(data?.spec?.feature)) {
set(errors, 'spec.feature', getString?.('fieldRequired', { field: 'feature' }))
}
if (template?.spec?.instructions === RUNTIME_INPUT_VALUE && isEmpty(data?.spec?.instructions)) {
set(errors, 'spec.instructions', getString?.('fieldRequired', { field: 'instructions' }))
}
return errors
}
protected defaultValues: FlagConfigurationStepData = {
identifier: '',
name: '',
type: '',
timeout: '10m',
spec: {
feature: '',
environment: ''
}
}
processFormData(data: StepElementConfig): FlagConfigurationStepData {
return data as FlagConfigurationStepData
}
}
|