1
|
|
|
import * as mdc from 'material-components-web'; |
2
|
|
|
import React from 'react'; |
3
|
|
|
import ReactDOM from 'react-dom'; |
4
|
|
|
import Model from './TopBar/Model'; |
5
|
|
|
|
6
|
|
|
export interface Adapter { |
7
|
|
|
onGithubClick(): void, |
8
|
|
|
onMenuClick(): void |
9
|
|
|
} |
10
|
|
|
|
11
|
|
|
export interface Properties { |
12
|
|
|
model: Model |
13
|
|
|
adapter: Adapter |
14
|
|
|
} |
15
|
|
|
|
16
|
|
|
interface State { |
17
|
|
|
} |
18
|
|
|
|
19
|
|
|
export default class TopBar extends React.Component<Properties, State> { |
20
|
|
|
topAppBar: mdc.topAppBar.MDCTopAppBar | undefined; |
21
|
|
|
|
22
|
|
|
constructor(props: Properties) { |
23
|
1 |
|
super(props); |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
componentDidMount(): void { |
27
|
|
|
// @ts-ignore |
28
|
1 |
|
this.topAppBar = new mdc.topAppBar.MDCTopAppBar(ReactDOM.findDOMNode(this)); |
29
|
|
|
// @ts-ignore |
30
|
1 |
|
this.topAppBar.listen('MDCTopAppBar:nav', this.props.adapter.onMenuClick); |
31
|
|
|
} |
32
|
|
|
|
33
|
|
|
render(): React.ReactElement { |
34
|
1 |
|
const model: Model = this.props.model; |
35
|
1 |
|
return <header className="mdc-top-app-bar mdc-top-app-bar--fixed"> |
36
|
|
|
<div className="mdc-top-app-bar__row"> |
37
|
|
|
<section className="mdc-top-app-bar__section mdc-top-app-bar__section--align-start"> |
38
|
|
|
<button className="material-icons mdc-top-app-bar__navigation-icon mdc-icon-button">menu</button> |
39
|
|
|
<span className="mdc-top-app-bar__title">{model.title}</span> |
40
|
|
|
</section> |
41
|
|
|
<section className="mdc-top-app-bar__section mdc-top-app-bar__section--align-end" role="toolbar"> |
42
|
|
|
<button |
43
|
|
|
className="mdc-top-app-bar__action-item mdc-icon-button mdc-icon-button" |
44
|
|
|
onClick={this.props.adapter.onGithubClick} |
45
|
|
|
title={model.sourceButtonLabel} |
46
|
|
|
{...{'data-testid': 'github-button'}} |
47
|
|
|
> |
48
|
|
|
<svg |
49
|
|
|
viewBox="0 0 16 16" |
50
|
|
|
version="1.1" |
51
|
|
|
aria-hidden="true" |
52
|
|
|
className="mdc-icon-button__icon" |
53
|
|
|
> |
54
|
|
|
<path |
55
|
|
|
fillRule="evenodd" |
56
|
|
|
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" |
57
|
|
|
/> |
58
|
|
|
</svg> |
59
|
|
|
</button> |
60
|
|
|
</section> |
61
|
|
|
</div> |
62
|
|
|
</header>; |
63
|
|
|
} |
64
|
|
|
} |
65
|
|
|
|