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 | 97x 97x 97x 97x 97x 97x 97x 97x 97x 97x 97x 97x 7x 7x 7x 7x 7x 2x 31x 46x 46x 97x | /*
* 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 { Accordion, Formik, MultiTypeInputType } from '@wings-software/uicore'
import * as Yup from 'yup'
import type { FormikProps } from 'formik'
import { getDurationValidationSchema } from '@common/components/MultiTypeDuration/MultiTypeDuration'
import { setFormikRef, StepFormikFowardRef, StepViewType } from '@pipeline/components/AbstractSteps/Step'
import { useStrings } from 'framework/strings'
import { getNameAndIdentifierSchema } from '@pipeline/components/PipelineSteps/Steps/StepsValidateUtils'
import { ShellScriptFormData, variableSchema } from './shellScriptTypes'
import BaseShellScript from './BaseShellScript'
import OptionalConfiguration from './OptionalConfiguration'
import stepCss from '@pipeline/components/PipelineSteps/Steps/Steps.module.scss'
/**
* Spec
* https://harness.atlassian.net/wiki/spaces/CDNG/pages/1203634286/Shell+Script
*/
interface ShellScriptWidgetProps {
initialValues: ShellScriptFormData
onUpdate?: (data: ShellScriptFormData) => void
onChange?: (data: ShellScriptFormData) => void
allowableTypes: MultiTypeInputType[]
readonly?: boolean
stepViewType?: StepViewType
isNewStep?: boolean
}
export function ShellScriptWidget(
{
initialValues,
onUpdate,
onChange,
allowableTypes,
isNewStep = true,
readonly,
stepViewType
}: ShellScriptWidgetProps,
formikRef: StepFormikFowardRef
): JSX.Element {
const { getString } = useStrings()
const defaultSSHSchema = Yup.object().shape({
timeout: getDurationValidationSchema({ minimum: '10s' }).required(getString('validation.timeout10SecMinimum')),
spec: Yup.object().shape({
shell: Yup.string().trim().required(getString('validation.scriptTypeRequired')),
source: Yup.object().shape({
spec: Yup.object().shape({
script: Yup.string().trim().required(getString('cd.scriptRequired'))
})
}),
environmentVariables: variableSchema(getString),
outputVariables: variableSchema(getString)
}),
...getNameAndIdentifierSchema(getString, stepViewType)
})
const values: any = {
...initialValues,
spec: {
...initialValues.spec,
executionTarget: {
...initialValues.spec.executionTarget,
connectorRef: undefined
}
}
}
const validationSchema = defaultSSHSchema
return (
<Formik<ShellScriptFormData>
onSubmit={submit => {
onUpdate?.(submit)
}}
validate={formValues => {
onChange?.(formValues)
}}
formName="shellScriptForm"
initialValues={values}
validationSchema={validationSchema}
>
{(formik: FormikProps<ShellScriptFormData>) => {
// this is required
setFormikRef(formikRef, formik)
return (
<React.Fragment>
<BaseShellScript
isNewStep={isNewStep}
stepViewType={stepViewType}
formik={formik}
readonly={readonly}
allowableTypes={allowableTypes}
/>
<Accordion className={stepCss.accordion}>
<Accordion.Panel
id="optional-config"
summary={getString('common.optionalConfig')}
details={<OptionalConfiguration formik={formik} readonly={readonly} allowableTypes={allowableTypes} />}
/>
</Accordion>
</React.Fragment>
)
}}
</Formik>
)
}
export const ShellScriptWidgetWithRef = React.forwardRef(ShellScriptWidget)
|