All files / modules/30-delegates/components/CreateDelegateConfigWizard/steps DelegateConfigScriptStep.tsx

82.61% Statements 19/23
65.63% Branches 21/32
50% Functions 2/4
82.61% Lines 19/23

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              2x 2x 2x 2x 2x 2x         2x                     2x 1x 1x 1x   1x       1x 1x             1x     1x       1x     1x                                 2x  
/*
 * 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, { useState } from 'react'
import set from 'lodash-es/set'
import { useParams } from 'react-router-dom'
import { Button, Layout, Container, Heading, Text } from '@wings-software/uicore'
import { Color } from '@harness/design-system'
import { useStrings } from 'framework/strings'
import type { DelegateProfileDetailsNg } from 'services/cd-ng'
import type { ProjectPathProps } from '@common/interfaces/RouteInterfaces'
import type { dataObj } from '../CreateDelegateConfigWizard'
 
import css from './DelegateConfigSteps.module.scss'
 
interface DelegateConfigScopeStepProps {
  name: string
  previousStep?: (data: dataObj) => void
  onFinish: (data: DelegateProfileDetailsNg) => void
  closeModal?: () => void
  onSuccess?: () => void
  prevStepData?: dataObj
}
 
const DelegateConfigScopeStep: React.FC<DelegateConfigScopeStepProps> = ({ previousStep, onFinish, prevStepData }) => {
  const { getString } = useStrings()
  const { orgIdentifier, projectIdentifier } = useParams<ProjectPathProps>()
  const [script, setScript] = useState(prevStepData?.script || '')
 
  const onPreviousStep = (): void => {
    previousStep?.({ ...prevStepData, script })
  }
 
  const createDelegateProfile = () => {
    const delegateProfileData = {
      identifier: prevStepData?.identifier,
      name: prevStepData?.name,
      description: prevStepData?.description,
      selectors: Object.keys(prevStepData?.tags || {}),
      startupScript: script
    }
    Iif (orgIdentifier) {
      set(delegateProfileData, 'orgIdentifier', orgIdentifier)
    }
    Iif (projectIdentifier) {
      set(delegateProfileData, 'projectIdentifier', projectIdentifier)
    }
 
    onFinish(delegateProfileData)
  }
 
  return (
    <Layout.Vertical className={css.stepContainer} padding="xxlarge">
      <Container>
        <Heading level={2} color={Color.GREY_800} margin={{ bottom: 'xxlarge' }}>
          {getString('delegates.newDelegateConfigWizard.scriptTitle')}
        </Heading>
        <Text>{getString('script')}</Text>
        <textarea className={css.scriptTextarea} onChange={event => setScript(event.target.value)} value={script} />
      </Container>
      <Layout.Horizontal spacing="xsmall">
        <Button type="button" text={getString('back')} onClick={onPreviousStep} />
        <Button type="button" intent="primary" text={getString('finish')} onClick={createDelegateProfile} />
      </Layout.Horizontal>
    </Layout.Vertical>
  )
}
 
export default DelegateConfigScopeStep