public render()

in src/components/App.tsx [79:151]


  public render () {
    const {
      onHideTree, onShowTree, refToaster, selected, showTree,
      useDarkTheme, onUseDarkTheme, onUseLightTheme
    } = this.props
    const { schema } = this.state

    let node
    if (schema !== null && selected !== null) {
      node = schema.root.lookup(selected)
    } else {
      node = null
    }

    const onToggleTree = showTree ? onHideTree : onShowTree
    const onToggleTheme = useDarkTheme ? onUseLightTheme : onUseDarkTheme
    const header = (
      <header className='app-header'>
        <Navbar>
          <NavbarGroup>
            <NavbarHeading>Schema Registry</NavbarHeading>
            <NavbarDivider/>
            <Button
              className={Classes.MINIMAL}
              icon='diagram-tree'
              onClick={onToggleTree}
              active={showTree}
            />
            <Button
              className={Classes.MINIMAL}
              icon={useDarkTheme ? 'flash' : 'moon'}
              onClick={onToggleTheme}
              active={useDarkTheme}
            />
            <NavbarDivider/>
            {schema ? <TypeSearch nodes={schema.all}/> : <Spinner size={Spinner.SIZE_SMALL}/>}
          </NavbarGroup>
        </Navbar>
      </header>
    )

    const content = node ? (
      <div className='bp3-running-text'>
        <TypeDocs node={node} all={schema ? schema.all : []}/>
      </div>
    ) : (
      <NonIdealState
        icon='help'
        title='No schema type selected'
        description='Find a type by searching or selecting it in the hierarchy tree.'
        action={schema ? <TypeSearch nodes={schema.all}/> : <Spinner/>}
      />
    )

    const main = (
      <main className='app-main'>
        <Toaster ref={refToaster}/>
        <nav className={'app-main-sidebar' + (showTree ? '' : ' hidden')}>
          {schema ? <TypeTree roots={schema.root.nestedArray} selected={selected}/> : <Spinner/>}
        </nav>
        <article className='app-main-content'>
          {content}
        </article>
      </main>
    )

    return (
      <section className={'app' + (useDarkTheme ? ' ' + Classes.DARK : '')}>
        {header}
        {main}
      </section>
    )
  }