All files / modules/75-ci/components/ExtendedPage ExtendedPageHeader.tsx

100% Statements 7/7
60% Branches 3/5
100% Functions 1/1
100% Lines 6/6

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              1x 1x 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 { Heading, Layout, Container } from '@wings-software/uicore'
import React from 'react'
import { Color } from '@harness/design-system'
import css from './ExtendedPageHeader.module.scss'
 
export interface ExtendedPageHeaderProps {
  title: React.ReactNode
  rowOneContent: React.ReactNode
  rowTwoContent: React.ReactNode
  rowThreeContent?: React.ReactNode | null
  toolbar?: React.ReactNode
}
 
/**
 * PageExtendedHeader implements a consistent header for a page header in which title is rendered on
 * the left followed by rowOneContent component/s,
 * then rowTwoContent bellow and toolbar on the right.
 * then rowThreeContent
 * It also has a consistent box-shadow styling.
 */
export const ExtendedPageHeader: React.FC<ExtendedPageHeaderProps> = ({
  title,
  rowOneContent,
  rowTwoContent,
  rowThreeContent = null,
  toolbar
}) => {
  return (
    <Layout.Vertical className={css.container} spacing="small" padding={{ top: 'medium' }}>
      <Layout.Horizontal className={css.row} spacing="medium">
        <Heading level={1} color={Color.GREY_800}>
          {title}
        </Heading>
        {rowOneContent}
      </Layout.Horizontal>
 
      <Layout.Horizontal className={css.row} spacing="xsmall">
        {rowTwoContent}
        {toolbar && <Container className={css.toolbar}>{toolbar}</Container>}
      </Layout.Horizontal>
 
      {rowThreeContent && (
        <Layout.Horizontal className={css.row} spacing="xsmall">
          {rowThreeContent}
        </Layout.Horizontal>
      )}
    </Layout.Vertical>
  )
}