-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathindex.js
More file actions
85 lines (71 loc) · 2.55 KB
/
index.js
File metadata and controls
85 lines (71 loc) · 2.55 KB
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
/** @jsx React.DOM */
var React = require('react/addons');
var EditorContainer = require('./components/EditorContainer');
var MainContainer = require('./components/MainContainer');
var SettingsContainer = require('./components/SettingsContainer');
var DataStore = require('./DataStore');
var Utils = require('./Utils');
var CHART_TYPES = ['line', 'bar'];
var icons = require('!!raw!./icons/svg-icons-all.svg');
var App = React.createClass({
getInitialState: function () {
return {
settingsIsOpen: false,
settingsIsSharing: false,
currentChartType: 'line',
url: ''
};
},
newData: function (data) {
this.props.store.update(data);
this.setState({ settingsIsSharing: false, url: ''});
Utils.setUrl('');
ga('send', 'event', 'user', 'update');
},
resetData: function () {
this.props.store.resetData();
this.setState({ settingsIsSharing: false, url: ''});
Utils.setUrl('');
ga('send', 'event', 'user', 'reset');
},
shareUrl: function () {
var url = Utils.setUrl(this.props.store.getData());
var fullUrl = window.location.origin + '/' + url;
this.setState({ settingsIsSharing: true, url: fullUrl });
ga('send', 'event', 'user', 'share', url);
},
openSettings: function () {
this.setState({ settingsIsOpen: true });
},
switchChartType: function (toType) {
this.setState({ currentChartType: toType });
},
closeSettings: function (evt) {
if (this.state.settingsIsOpen) this.setState({ settingsIsOpen: false });
},
render: function () {
var cx = React.addons.classSet;
var AppClasses = cx({
'App': true,
'is-dimmed': this.state.settingsIsOpen
});
return (
<div className="OuterContainer">
<span dangerouslySetInnerHTML={{__html: icons}}/>
<div className={AppClasses} onClick={this.closeSettings}>
<EditorContainer store={this.props.store} newData={this.newData} />
<MainContainer store={this.props.store} openSettings={this.openSettings} currentChartType={this.state.currentChartType} />
</div>
<SettingsContainer isOpen={this.state.settingsIsOpen}
isSharing={this.state.settingsIsSharing}
types={CHART_TYPES}
switchChartType={this.switchChartType}
resetData={this.resetData}
shareUrl={this.shareUrl}
url={this.state.url} />
</div>
);
}
});
var store = new DataStore('chartpad');
React.render(<App store={store} />, document.body);