All files / modules/75-cf/pages/feature-flags-detail/targeting-rules-tab/components/add-targeting-button AddTargetingButton.tsx

100% Statements 16/16
100% Branches 2/2
100% Functions 4/4
100% Lines 16/16

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              4x 4x 4x 4x 4x 4x 4x   4x                         4x           71x   71x 57x   2x                             2x                             71x                               4x  
/*
 * 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 { Icon, PopoverPosition } from '@blueprintjs/core'
import { ButtonVariation } from '@harness/uicore'
import React, { ReactElement } from 'react'
import { useStrings } from 'framework/strings'
import { FeatureIdentifier } from 'framework/featureStore/FeatureIdentifier'
import RbacOptionsMenuButton from '@rbac/components/RbacOptionsMenuButton/RbacOptionsMenuButton'
import { ResourceType } from '@rbac/interfaces/ResourceType'
 
import { PermissionIdentifier } from '@rbac/interfaces/PermissionIdentifier'
 
import type { Variation } from 'services/cf'
import type { VariationColorMap } from '../../types'
export interface AddTargetingButtonProps {
  targetingDropdownVariations: Variation[]
  addVariation: (newVariation: Variation) => void
  variationColorMap: VariationColorMap
  addPercentageRollout: () => void
  featureDisabled?: boolean
  disabled?: boolean
}
 
const AddTargetingButton = ({
  targetingDropdownVariations,
  variationColorMap,
  addVariation,
  addPercentageRollout
}: AddTargetingButtonProps): ReactElement => {
  const { getString } = useStrings()
 
  const items = [
    ...targetingDropdownVariations.map(variation => ({
      'data-testid': `variation_option_${variation.identifier}`,
      onClick: () => addVariation(variation),
      icon: <Icon icon="full-circle" color={variationColorMap[variation.identifier]} />,
      text: variation.name || variation.identifier,
      permission: {
        resource: { resourceType: ResourceType.FEATUREFLAG },
        permission: PermissionIdentifier.EDIT_FF_FEATUREFLAG
      },
      featuresProps: {
        featuresRequest: {
          featureNames: [FeatureIdentifier.MAUS]
        }
      }
    })),
    {
      'data-testid': 'variation_option_percentage_rollout',
      onClick: () => addPercentageRollout(),
      icon: <Icon icon="percentage" />,
      text: getString('cf.featureFlags.percentageRollout'),
      permission: {
        resource: { resourceType: ResourceType.FEATUREFLAG },
        permission: PermissionIdentifier.EDIT_FF_FEATUREFLAG
      },
      featuresProps: {
        featuresRequest: {
          featureNames: [FeatureIdentifier.MAUS]
        }
      }
    }
  ]
 
  return (
    <RbacOptionsMenuButton
      icon="plus"
      rightIcon="chevron-down"
      variation={ButtonVariation.SECONDARY}
      text={getString('cf.featureFlags.rules.addTargeting')}
      items={items}
      tooltipProps={{
        interactionKind: 'click',
        minimal: true,
        position: PopoverPosition.BOTTOM_LEFT
      }}
    />
  )
}
 
export default AddTargetingButton