2018-03-26 23:32:43 +02:00
// @flow
2019-08-27 16:43:42 +02:00
import type { Node } from 'react' ;
import React , { Fragment } from 'react' ;
2018-03-26 23:32:43 +02:00
import classnames from 'classnames' ;
2019-12-18 06:27:08 +01:00
import SideNavigation from 'component/sideNavigation' ;
2019-08-27 16:43:42 +02:00
import Header from 'component/header' ;
2020-05-07 20:44:11 +02:00
import Footer from 'web/component/footer' ;
2020-05-28 12:02:59 +02:00
/* @if TARGET='app' */
import StatusBar from 'component/common/status-bar' ;
/* @endif */
2018-03-26 23:32:43 +02:00
2019-10-21 00:41:28 +02:00
export const MAIN _CLASS = 'main' ;
2018-03-26 23:32:43 +02:00
type Props = {
2019-08-27 16:43:42 +02:00
children : Node | Array < Node > ,
2019-01-09 19:39:05 +01:00
className : ? string ,
2019-08-27 16:43:42 +02:00
autoUpdateDownloaded : boolean ,
isUpgradeAvailable : boolean ,
2019-10-28 15:04:37 +01:00
authPage : boolean ,
2020-02-19 07:31:40 +01:00
noHeader : boolean ,
2020-05-08 18:48:58 +02:00
noFooter : boolean ,
2020-06-01 19:03:19 +02:00
noSideNavigation : boolean ,
2020-07-10 23:04:36 +02:00
backout : {
backLabel ? : string ,
backNavDefault ? : string ,
title : string ,
simpleTitle : string , // Just use the same value as `title` if `title` is already short (~< 10 chars), unless you have a better idea for title overlfow on mobile
} ,
2018-03-26 23:32:43 +02:00
} ;
2019-06-17 22:32:38 +02:00
function Page ( props : Props ) {
2020-06-29 21:54:07 +02:00
const {
children ,
className ,
authPage = false ,
noHeader = false ,
noFooter = false ,
noSideNavigation = false ,
backout ,
} = props ;
2019-06-17 22:32:38 +02:00
2019-08-27 16:43:42 +02:00
return (
< Fragment >
2020-06-29 21:54:07 +02:00
{ ! noHeader && < Header authHeader = { authPage } backout = { backout } / > }
2019-08-27 16:43:42 +02:00
< div className = { classnames ( 'main-wrapper__inner' ) } >
2019-10-21 00:41:28 +02:00
< main className = { classnames ( MAIN _CLASS , className , { 'main--full-width' : authPage } ) } > { children } < / main >
2020-06-01 19:03:19 +02:00
{ ! authPage && ! noSideNavigation && < SideNavigation / > }
2020-05-28 12:02:59 +02:00
{ /* @if TARGET='app' */ }
< StatusBar / >
{ /* @endif */ }
2019-08-27 16:43:42 +02:00
< / div >
2020-05-08 18:48:58 +02:00
{ /* @if TARGET='web' */ }
{ ! noFooter && < Footer / > }
{ /* @endif */ }
2019-08-27 16:43:42 +02:00
< / Fragment >
) ;
2018-05-07 06:50:55 +02:00
}
2018-03-26 23:32:43 +02:00
export default Page ;