-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathPopupPageApp.js
127 lines (120 loc) · 3.66 KB
/
PopupPageApp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react'
import Tabs from '../shared/Tabs'
import Pane from '../shared/Pane'
import Page from '../shared/Page'
import Manifest from '../../models/Manifest'
import { connect } from 'react-redux'
import ConfigurationList from './ConfigurationList'
import PropTypes from 'prop-types'
/* The PopupPageApp will be defined below */
class App extends React.Component {
static propTypes = {
currentUrl: PropTypes.string,
actions: PropTypes.objectOf(PropTypes.func).isRequired,
configurations: PropTypes.arrayOf(PropTypes.object).isRequired,
settings: PropTypes.object.isRequired,
manifest: PropTypes.instanceOf(Manifest).isRequired
}
constructor(props) {
super(props)
this.state = {
activeTab: 'apply',
commitHash: false
}
}
toggleLiveMode() {
this.props.actions.toggleLiveMode()
}
updateActiveTab(activeTab) {
this.setState({ activeTab })
}
render() {
const manifest = this.props.manifest
const configurations = this.props.configurations.filter(
(config) => typeof config.deleted_at === 'undefined' && typeof config._deleted === 'undefined'
)
return (
<Page
preferDarkMode={this.props.settings.optionalFeatures.preferDarkMode}
syncDarkMode={this.props.settings.optionalFeatures.syncDarkMode}
>
<Tabs activeTab={this.state.activeTab} onNavigate={(e) => this.updateActiveTab(e)}>
<Pane label="Apply" name="apply">
<ConfigurationList
currentUrl={this.props.currentUrl}
configurations={configurations}
settings={this.props.settings}
actions={this.props.actions}
/>
</Pane>
<Pane label="Help" name="help">
<div>
<b>Author: </b>
{manifest.author()}
</div>
<div>
<b>Homepage: </b>
{manifest.homepage()}
</div>
<div>
<b>Version: </b>
{manifest.version()}
</div>
<div>
<b>Build from </b>
{manifest.buildFromLink()}
</div>
<div>
<b>Report bugs at </b>
{manifest.supportLink()}
</div>
</Pane>
<Pane
link={(e) => {
e.preventDefault()
window.chrome.runtime.openOptionsPage()
}}
label="Dashboard"
/>
</Tabs>
</Page>
)
}
}
const PopupPageApp = connect(
// map state to props
(state) => {
return { configurations: state.configurations, settings: state.settings }
},
// map dispatch to props
(dispatch) => ({
actions: {
setCurrentView: (key) => {
dispatch({ type: 'SET_CURRENT_VIEW', view: key })
},
toggleConfiguration: (id) => {
dispatch({ type: 'TOGGLE_CONFIGURATION', id })
},
toggleDebugMode: () => {
dispatch({ type: 'TOGGLE_DEBUG_MODE' })
},
toggleLiveMode: () => {
dispatch({ type: 'TOGGLE_LIVE_MODE' })
}
}
})
)(App)
export default PopupPageApp