PageHeader.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 BreadcrumbItem(item: NavModelItem) {
  8. // return (
  9. // <a className="breadcrumb-item" href={item.url} key={item.id}>
  10. // {item.text}
  11. // </a>
  12. // );
  13. // }
  14. //
  15. // function Breadcrumb(model: NavModel) {
  16. // return (
  17. // <div className="page-nav">
  18. // <div className="page-breadcrumbs">
  19. // <a className="breadcrumb-item active" href="/">
  20. // <i className="fa fa-home" />
  21. // </a>
  22. // {model.breadcrumbs.map(BreadcrumbItem)}
  23. // </div>
  24. // </div>
  25. // );
  26. // }
  27. function TabItem(tab: NavModelItem) {
  28. if (tab.hideFromTabs || tab.divider) {
  29. return (null);
  30. }
  31. let tabClasses = classNames({
  32. 'gf-tabs-link': true,
  33. active: tab.active,
  34. });
  35. return (
  36. <li className="gf-tabs-item" key={tab.url}>
  37. <a className={tabClasses} href={tab.url}>
  38. <i className={tab.icon} />
  39. {tab.text}
  40. </a>
  41. </li>
  42. );
  43. }
  44. function Tabs({main}: {main: NavModelItem}) {
  45. return <ul className="gf-tabs">{main.children.map(TabItem)}</ul>;
  46. }
  47. export default class PageHeader extends React.Component<IProps, any> {
  48. constructor(props) {
  49. super(props);
  50. }
  51. renderHeaderTitle(main) {
  52. return (
  53. <div className="page-header__inner">
  54. <span className="page-header__logo">
  55. {main.icon && <i className={`page-header__icon ${main.icon}`} />}
  56. {main.img && <img className="page-header__img" src={main.img} />}
  57. </span>
  58. <div className="page-header__info-block">
  59. <h1 className="page-header__title">{main.text}</h1>
  60. {main.subTitle && <div className="page-header__sub-title">{main.subTitle}</div>}
  61. {main.subType && (
  62. <div className="page-header__stamps">
  63. <i className={main.subType.icon} />
  64. {main.subType.text}
  65. </div>
  66. )}
  67. </div>
  68. </div>
  69. );
  70. }
  71. render() {
  72. return (
  73. <div className="page-header-canvas">
  74. <div className="page-container">
  75. <div className="page-header">
  76. {this.renderHeaderTitle(this.props.model.main)}
  77. {this.props.model.main.children && <Tabs main={this.props.model.main} />}
  78. </div>
  79. </div>
  80. </div>
  81. );
  82. }
  83. }