Page.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Libraries
  2. import React, { Component } from 'react';
  3. // Components
  4. import PageHeader from '../PageHeader/PageHeader';
  5. import PageContents from './PageContents';
  6. import { CustomScrollbar } from '@grafana/ui';
  7. interface Props {
  8. title: string;
  9. children: JSX.Element[] | JSX.Element;
  10. }
  11. class Page extends Component<Props> {
  12. private bodyClass = 'is-react';
  13. private body = document.getElementsByTagName('body')[0];
  14. private footer = document.getElementsByClassName('footer')[0].cloneNode(true);
  15. private scrollbarElementRef = React.createRef<HTMLDivElement>();
  16. static Header = PageHeader;
  17. static Contents = PageContents;
  18. componentDidMount() {
  19. this.body.classList.add(this.bodyClass);
  20. this.copyFooter();
  21. }
  22. componentWillUnmount() {
  23. this.body.classList.remove(this.bodyClass);
  24. }
  25. copyFooter = () => {
  26. const c = this.scrollbarElementRef.current;
  27. c.append(this.footer);
  28. }
  29. render() {
  30. return (
  31. <div className="page-scrollbar-wrapper">
  32. <CustomScrollbar autoHeightMin={'100%'}>
  33. <div className="page-scrollbar-content" ref={this.scrollbarElementRef}>
  34. {this.props.children}
  35. </div>
  36. </CustomScrollbar>
  37. </div>
  38. );
  39. }
  40. }
  41. export default Page;