All files / modules/75-cf/hooks useGovernance.tsx

95.24% Statements 20/21
75% Branches 12/16
75% Functions 3/4
95% Lines 19/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              16x 16x 16x 16x   16x 16x 16x                 16x 135x   135x   135x   135x     3x     135x   135x 1x 1x     135x                         135x              
/*
 * 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 { useParams } from 'react-router-dom'
import React, { useState } from 'react'
import { useModalHook } from '@harness/use-modal'
import { EvaluationModal } from '@governance/EvaluationModal'
import type { ModulePathParams, ProjectPathProps } from '@common/interfaces/RouteInterfaces'
import { useFeatureFlag } from '@common/hooks/useFeatureFlag'
import { FeatureFlag } from '@common/featureFlags'
import { useStrings } from 'framework/strings'
 
export interface UseGovernancePayload {
  isGovernanceEnabled: boolean
  governanceError: any
  handleError: (error: any) => void
  isGovernanceError(err: any): boolean
}
 
export const useGovernance = (): UseGovernancePayload => {
  const { getString } = useStrings()
 
  const OPA_FF_GOVERNANCE = useFeatureFlag(FeatureFlag.OPA_FF_GOVERNANCE)
 
  const isGovernanceEnabled = !!OPA_FF_GOVERNANCE
 
  const { accountId: accountIdentifier } = useParams<ProjectPathProps & ModulePathParams>()
 
  function isGovernanceError(err: any): boolean {
    return !!err?.data?.details?.governanceMetadata
  }
 
  const [governanceError, setGovernanceError] = useState<any>()
 
  const handleError = (error: any): void => {
    setGovernanceError(error.details?.governanceMetadata)
    showErrorModal()
  }
 
  const [showErrorModal] = useModalHook(
    () => (
      <EvaluationModal
        accountId={accountIdentifier}
        key={governanceError.id}
        module="cf"
        metadata={governanceError}
        headingErrorMessage={getString('cf.policyEvaluations.failedToSave')}
      />
    ),
    [governanceError]
  )
 
  return {
    isGovernanceEnabled,
    governanceError,
    handleError,
    isGovernanceError
  }
}