-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathSettingsContainer.js
More file actions
68 lines (60 loc) · 2.32 KB
/
Copy pathSettingsContainer.js
File metadata and controls
68 lines (60 loc) · 2.32 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
/** @jsx React.DOM */
var React = require('react/addons');
var ChartSelector = require('./ChartSelector');
var SettingsContainer = React.createClass({
propTypes: {
isOpen: React.PropTypes.bool.isRequired,
isSharing: React.PropTypes.bool.isRequired,
types: React.PropTypes.array.isRequired,
switchChartType: React.PropTypes.func.isRequired,
resetData: React.PropTypes.func.isRequired,
shareUrl: React.PropTypes.func.isRequired,
url: React.PropTypes.string.isRequired
},
componentDidUpdate: function () {
setTimeout(function () {
// wait for canvas rendering before getting the image url
var canvas = document.querySelector('canvas');
var url = canvas.toDataURL();
this.refs.download.getDOMNode().href = url;
}.bind(this), 1000);
},
shareUrl: function () {
this.props.shareUrl();
var shareButton = this.refs.share.getDOMNode();
shareButton.classList.add('is-sharing');
setTimeout(function () {
shareButton.classList.remove('is-sharing');
}, 2000);
},
render: function () {
var cx = React.addons.classSet;
var SettingsContainerClasses = cx({
'SettingsContainer': true,
'is-open': this.props.isOpen,
'is-sharing': this.props.isSharing
});
var SettingsInputClasses = cx({
'SettingsContainer-input': true,
'is-sharing': this.props.isSharing
});
return (
<div className={SettingsContainerClasses}>
<div className="SettingsContainer-content">
<ChartSelector switchChartType={this.props.switchChartType} types={this.props.types} />
<button className="SettingsContainer-button SettingsContainer-button--default" onClick={this.props.resetData}>Reset Data</button>
<button id="share"
ref="share"
className="SettingsContainer-button SettingsContainer-button--default SettingsContainer-share"
onClick={this.shareUrl}
data-text="Copy this link">
<span>Share link</span>
</button>
<input ref="shareLink" className={SettingsInputClasses} value={this.props.url}/>
<a className="SettingsContainer-button SettingsContainer-button--blue" download="chartpad.png" ref="download">Download Chart</a>
</div>
</div>
);
}
});
module.exports = SettingsContainer;