@ -1,4 +1,5 @@
import React from 'react' ;
import { observer } from 'mobx-react' ;
import { NavModel , NavModelItem } from '../../nav_model_srv' ;
import classNames from 'classnames' ;
import appEvents from 'app/core/app_events' ;
@ -7,49 +8,7 @@ export interface IProps {
model : NavModel ;
}
function TabItem ( tab : NavModelItem ) {
if ( tab . hideFromTabs ) {
return null ;
}
let tabClasses = classNames ( {
'gf-tabs-link' : true ,
active : tab.active ,
} ) ;
return (
< li className = "gf-tabs-item" key = { tab . url } >
< a className = { tabClasses } target = { tab . target } href = { tab . url } >
< i className = { tab . icon } / >
{ tab . text }
< / a >
< / li >
) ;
}
function SelectOption ( navItem : NavModelItem ) {
if ( navItem . hideFromTabs ) {
// TODO: Rename hideFromTabs => hideFromNav
return null ;
}
return (
< option key = { navItem . url } value = { navItem . url } >
{ navItem . text }
< / option >
) ;
}
function Navigation ( { main } : { main : NavModelItem } ) {
return (
< nav >
< SelectNav customCss = "page-header__select-nav" main = { main } / >
< Tabs customCss = "page-header__tabs" main = { main } / >
< / nav >
) ;
}
function SelectNav ( { main , customCss } : { main : NavModelItem ; customCss : string } ) {
const SelectNav = observer ( ( { main , customCss } : { main : NavModelItem ; customCss : string } ) = > {
const defaultSelectedItem = main . children . find ( navItem = > {
return navItem . active === true ;
} ) ;
@ -66,20 +25,62 @@ function SelectNav({ main, customCss }: { main: NavModelItem; customCss: string
{ /* Label to make it clickable */ }
< select
className = "gf-select-nav gf-form-input"
defaultV alue= { defaultSelectedItem . url }
v alue= { defaultSelectedItem . url }
onChange = { gotoUrl }
id = "page-header-select-nav"
>
{ main . children . map ( SelectOption ) }
{ main . children . map ( ( navItem : NavModelItem ) = > {
if ( navItem . hideFromTabs ) {
// TODO: Rename hideFromTabs => hideFromNav
return null ;
}
return (
< option key = { navItem . url } value = { navItem . url } >
{ navItem . text }
< / option >
) ;
} ) }
< / select >
< / div >
) ;
}
} ) ;
function Tabs ( { main , customCss } : { main : NavModelItem ; customCss : string } ) {
return < ul className = { ` gf-tabs ${ customCss } ` } > { main . children . map ( TabItem ) } < / ul > ;
}
const Tabs = observer ( ( { main , customCss } : { main : NavModelItem ; customCss : string } ) = > {
return (
< ul className = { ` gf-tabs ${ customCss } ` } >
{ main . children . map ( ( tab , idx ) = > {
if ( tab . hideFromTabs ) {
return null ;
}
const tabClasses = classNames ( {
'gf-tabs-link' : true ,
active : tab.active ,
} ) ;
return (
< li className = "gf-tabs-item" key = { tab . url } >
< a className = { tabClasses } target = { tab . target } href = { tab . url } >
< i className = { tab . icon } / >
{ tab . text }
< / a >
< / li >
) ;
} ) }
< / ul >
) ;
} ) ;
const Navigation = ( { main } : { main : NavModelItem } ) = > {
return (
< nav >
< SelectNav customCss = "page-header__select-nav" main = { main } / >
< Tabs customCss = "page-header__tabs" main = { main } / >
< / nav >
) ;
} ;
@observer
export default class PageHeader extends React . Component < IProps , any > {
constructor ( props ) {
super ( props ) ;
@ -140,7 +141,6 @@ export default class PageHeader extends React.Component<IProps, any> {
if ( ! model ) {
return null ;
}
return (
< div className = "page-header-canvas" >
< div className = "page-container" >