PageHeader.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import { NavModel, NavModelItem } from '../nav_model_srv';
  3. import classNames from 'classnames';
  4. export interface IProps {
  5. model: NavModel;
  6. }
  7. function TabItem(tab: NavModelItem) {
  8. if (tab.hideFromTabs) {
  9. return (null);
  10. }
  11. let tabClasses = classNames({
  12. 'gf-tabs-link': true,
  13. active: tab.active,
  14. });
  15. return (
  16. <li className="gf-tabs-item" key={tab.url}>
  17. <a className={tabClasses} href={tab.url}>
  18. <i className={tab.icon} />
  19. {tab.text}
  20. </a>
  21. </li>
  22. );
  23. }
  24. function Tabs({main}: {main: NavModelItem}) {
  25. return <ul className="gf-tabs">{main.children.map(TabItem)}</ul>;
  26. }
  27. export default class PageHeader extends React.Component<IProps, any> {
  28. constructor(props) {
  29. super(props);
  30. }
  31. renderHeaderTitle(main) {
  32. return (
  33. <div className="page-header__inner">
  34. <span className="page-header__logo">
  35. {main.icon && <i className={`page-header__icon ${main.icon}`} />}
  36. {main.img && <img className="page-header__img" src={main.img} />}
  37. </span>
  38. <div className="page-header__info-block">
  39. <h1 className="page-header__title">{main.text}</h1>
  40. {main.subTitle && <div className="page-header__sub-title">{main.subTitle}</div>}
  41. {main.subType && (
  42. <div className="page-header__stamps">
  43. <i className={main.subType.icon} />
  44. {main.subType.text}
  45. </div>
  46. )}
  47. </div>
  48. </div>
  49. );
  50. }
  51. render() {
  52. return (
  53. <div className="page-header-canvas">
  54. <div className="page-container">
  55. <div className="page-header">
  56. {this.renderHeaderTitle(this.props.model.main)}
  57. {this.props.model.main.children && <Tabs main={this.props.model.main} />}
  58. </div>
  59. </div>
  60. </div>
  61. );
  62. }
  63. }