All files / modules/70-pipeline/components/Diagram/canvas/RollbackToggleSwitch RollbackToggleSwitch.tsx

68.42% Statements 13/19
50% Branches 18/36
60% Functions 3/5
68.42% Lines 13/19

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              207x 207x 207x 207x 207x 207x                   207x             3x 3x                                                 1x 1x                     1x 1x                                          
/*
 * 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 { ButtonGroup, Button, Text } from '@wings-software/uicore'
import cx from 'classnames'
import { useStrings } from 'framework/strings'
import { StepsType } from '../../Constants'
import css from './RollbackToggleSwitch.module.scss'
 
export interface RollbackToggleSwitchProps {
  active?: StepsType
  style?: React.CSSProperties
  disabled?: boolean
  large?: boolean
  onChange?: (type: StepsType) => void
}
 
export function RollbackToggleSwitch({
  style = {},
  disabled = false,
  large = true,
  active = StepsType.Normal,
  onChange
}: RollbackToggleSwitchProps): React.ReactElement {
  const { getString } = useStrings()
  return (
    <div style={style} className={cx(css.rollbackToggle, { [css.rollbackToggleSmall]: !large })}>
      {large && (
        <Text
          onClick={e => {
            e.stopPropagation()
            if (active === StepsType.Rollback) {
              onChange?.(StepsType.Normal)
            }
          }}
          className={cx({ [css.activeText]: active === StepsType.Rollback })}
        >
          {getString('executionText')}
        </Text>
      )}
      <span className={css.btnRollback}>
        <ButtonGroup className={css.buttonGroup}>
          <Button
            icon="execution"
            active={active === StepsType.Normal}
            tooltip={large ? undefined : getString('executionText')}
            disabled={disabled}
            className={cx(css.btn, { [css.btnSmall]: !large })}
            iconProps={{ size: large ? 12 : 8 }}
            onClick={e => {
              e.stopPropagation()
              onChange?.(StepsType.Normal)
            }}
          />
          <Button
            icon="rollback-execution"
            active={active === StepsType.Rollback}
            tooltip={large ? undefined : getString('rollbackLabel')}
            iconProps={{ size: large ? 12 : 8 }}
            className={cx(css.btn, { [css.btnSmall]: !large })}
            disabled={disabled}
            onClick={e => {
              e.stopPropagation()
              onChange?.(StepsType.Rollback)
            }}
          />
        </ButtonGroup>
      </span>
      {large && (
        <Text
          onClick={e => {
            e.stopPropagation()
            if (active === StepsType.Normal) {
              onChange?.(StepsType.Rollback)
            }
          }}
          className={cx({ [css.activeText]: active === StepsType.Normal })}
        >
          {getString('rollbackLabel')}
        </Text>
      )}
    </div>
  )
}