All files / modules/75-ce/components/COGatewayList useToggleRuleState.tsx

65% Statements 13/20
33.33% Branches 6/18
33.33% Functions 1/3
65% Lines 13/20

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 55x 55x 55x                 55x                         55x                                   55x         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 { isEmpty as _isEmpty } from 'lodash-es'
import { Intent } from '@blueprintjs/core'
import { useConfirmationDialog } from '@wings-software/uicore'
import { useStrings } from 'framework/strings'
import { useToggleAutostoppingRule, Service } from 'services/lw'
 
interface UseToggleAutostoppingRuleProps {
  accountId: string
  serviceData: Service
  onSuccess?: (updatedServiceData: Service) => void
  onFailure?: (error: any) => void
}
 
interface UseToggleAutostoppingRuleReturn {
  triggerToggle: () => void
}
 
const useToggleRuleState = (props: UseToggleAutostoppingRuleProps): UseToggleAutostoppingRuleReturn => {
  const { serviceData, accountId } = props
  const { getString } = useStrings()
  const { mutate: toggleAutoStoppingRule } = useToggleAutostoppingRule({
    account_id: accountId,
    rule_id: (serviceData.id as number).toString(), // eslint-disable-line
    queryParams: {
      accountIdentifier: accountId,
      disable: !serviceData.disabled
    }
  })
 
  const toggleRule = async (isConfirmed: boolean) => {
    if (isConfirmed) {
      try {
        const updatedData = await toggleAutoStoppingRule()
        if (!_isEmpty((updatedData as any).response)) {
          props.onSuccess?.((updatedData as any).response)
        }
      } catch (e) {
        props.onFailure?.(e)
      }
    }
  }
 
  const { openDialog } = useConfirmationDialog({
    titleText: getString(
      serviceData.disabled
        ? 'ce.co.autoStoppingRule.confirm.enableTitle'
        : 'ce.co.autoStoppingRule.confirm.disableTitle',
      { name: serviceData.name }
    ),
    contentText: getString(
      serviceData.disabled
        ? 'ce.co.autoStoppingRule.confirm.enableDialogText'
        : 'ce.co.autoStoppingRule.confirm.disableDialogText'
    ),
    confirmButtonText: getString(serviceData.disabled ? 'enable' : 'ce.co.autoStoppingRule.confirm.disable'),
    cancelButtonText: getString('cancel'),
    intent: Intent.WARNING,
    onCloseDialog: toggleRule
  })
 
  return {
    triggerToggle: () => openDialog()
  }
}
 
export default useToggleRuleState