• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Financial-Times / cm-react-components / 4f671a77-556c-4d36-8fa7-9305b9e16335

20 Nov 2025 02:32PM UTC coverage: 72.473% (-1.8%) from 74.23%
4f671a77-556c-4d36-8fa7-9305b9e16335

push

circleci

web-flow
Merge pull request #24 from Financial-Times/UPPSF-6573

Uppsf 6573

317 of 422 branches covered (75.12%)

Branch coverage included in aggregate %.

3 of 12 new or added lines in 4 files covered. (25.0%)

2 existing lines in 1 file now uncovered.

486 of 686 relevant lines covered (70.85%)

8.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/components/Header/Header.js
1
import React, { useEffect } from 'react';
2
import PropTypes from 'prop-types';
3
import oHeaderServices from '@financial-times/o-header-services/main';
4

5
import { SecondaryNavigation } from './SecondaryNavigation';
6
import { MainNavigation } from './MainNavigation';
7
import PublicationSelect from './PublicationSelect';
8

9

10
const Header = ({
×
11
  title,
12
  name,
13
  id,
14
  mainMenuData,
15
  secondaryMenuData,
16
  clientMenuData,
17
  renderProp,
18
  publicationOptions = [],
×
19
  selectedPublication,
20
  handleChangePublication,
21
  publicationClassName = ''
×
22
}) => {
23
  useEffect(() => {
×
24
    oHeaderServices.init();
×
25
  }, []);
26

NEW
27
  const hasPublicationOptions = publicationOptions && publicationOptions.length > 0;
×
28

UNCOV
29
  return (
×
30
    <div className="o-layout__header">
31
      <header className="o-header-services " data-o-component="o-header-services" data-testid="header-component">
32
        <div className="o-header-services__top" style={{ position: 'relative' }}>
33
          <div className="o-header-services__hamburger">
34
            <a className="o-header-services__hamburger-icon" href="/" role="button">
35
              <span className="o-header-services__visually-hidden">Open primary navigation</span>
36
            </a>
37
          </div>
38
          <div className="o-header-services__title">
39
            <a href="/">
40
              <div className="o-header-services__logo" />
41
            </a>
42
            <a className="o-header-services__product-name" href="/">{title}</a>
43
          </div>
44
          {hasPublicationOptions && (
×
45
            <div className="header-publication-select-container">
46
              <PublicationSelect
47
                publicationOptions={publicationOptions}
48
                selectedPublication={selectedPublication}
49
                handleChangePublication={handleChangePublication}
50
                className={publicationClassName}
51
              />
52
            </div>
53
          )}
54
        </div>
55
        <MainNavigation
56
          menuData={mainMenuData}
57
          renderProp={renderProp}
58
        />
59
        {secondaryMenuData && secondaryMenuData.length > 0 && (
×
60
          <SecondaryNavigation
61
            name={name}
62
            id={id}
63
            menuData={secondaryMenuData}
64
            clientMenuData={clientMenuData}
65
            renderProp={renderProp}
66
          />
67
        )}
68
      </header>
69
    </div>
70
  );
71
};
72

73

UNCOV
74
Header.propTypes = {
×
75
  title: PropTypes.string,
76
  name: PropTypes.string,
77
  id: PropTypes.string,
78
  mainMenuData: MainNavigation.propTypes.menuData,
79
  secondaryMenuData: SecondaryNavigation.propTypes.menuData,
80
  clientMenuData: SecondaryNavigation.propTypes.clientMenuData,
81
  renderProp: SecondaryNavigation.propTypes.renderProp,
82
  publicationOptions: PropTypes.array,
83
  selectedPublication: PropTypes.string,
84
  handleChangePublication: PropTypes.func,
85
  publicationClassName: PropTypes.string
86
};
87

88
export default Header;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc