All files / modules/75-cd/components/CDExecutionSummary EnvironmentsList.tsx

100% Statements 10/10
80% Branches 4/5
100% Functions 2/2
100% Lines 10/10

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              2x 2x 2x 2x 2x 2x 2x               2x 3x                                                   1x                          
/*
 * 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 React from 'react'
import { Popover, Position } from '@blueprintjs/core'
import { Icon, Layout, Text } from '@wings-software/uicore'
import { FontVariation } from '@harness/design-system'
import cx from 'classnames'
import { String } from 'framework/strings'
import css from './CDExecutionSummary.module.scss'
 
interface EnvironmentsListProps {
  environments: string[]
  className?: string
  limit?: number
}
 
export function EnvironmentsList({ environments, limit = 2, className }: EnvironmentsListProps): React.ReactElement {
  return (
    <div className={cx(css.main, className)}>
      {environments.length > 0 ? (
        <>
          <div className={css.environments}>
            <Icon name="environments" className={css.envIcon} size={14} />
            <Text>{environments.slice(0, limit).join(', ')}</Text>
          </div>
          {environments.length > limit ? (
            <>
              ,&nbsp;
              <Popover
                wrapperTagName="div"
                targetTagName="div"
                interactionKind="hover"
                position={Position.RIGHT}
                className={css.serviceWrapper}
              >
                <String
                  tagName="div"
                  className={cx(css.serviceName, css.count)}
                  stringID={'common.plusNumberNoSpace'}
                  vars={{ number: Math.abs(environments.length - limit) }}
                />
                <Layout.Vertical padding="small">
                  {environments.slice(limit).map((environment, index) => (
                    <Text font={{ variation: FontVariation.FORM_LABEL }} key={index}>
                      {environment}
                    </Text>
                  ))}
                </Layout.Vertical>
              </Popover>
            </>
          ) : null}
        </>
      ) : null}
    </div>
  )
}