forked from ovidiuch/flatris
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FlatrisStatePersistor.jsx
75 lines (61 loc) · 1.85 KB
/
FlatrisStatePersistor.jsx
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
var React = require('react'),
_ = require('lodash'),
$ = require('jquery'),
ComponentTree = require('react-component-tree'),
FlatrisGame = require('./FlatrisGame.jsx'),
FlatrisStatePreview = require('./FlatrisStatePreview.jsx');
require('./FlatrisStatePersistor.less');
class FlatrisStatePersistor extends ComponentTree.Component {
/**
* Persist Flatris state with local storage.
*/
constructor() {
super();
this.refreshSnapshot = this.refreshSnapshot.bind(this);
this.onUnload = this.onUnload.bind(this);
this.state = {
snapshot: {}
};
this.children = {
flatris: function() {
return {
component: FlatrisGame
};
},
flatrisStatePreview: function() {
return {
component: FlatrisStatePreview,
snapshot: this.state.snapshot
};
}
};
}
render() {
return <div className="flatris-state-persistor">
{this.loadChild('flatris')}
{this.loadChild('flatrisStatePreview')}
</div>
}
componentDidMount() {
$(window).on('unload', this.onUnload);
this._refreshInterval = setInterval(this.refreshSnapshot, 200);
// Unload previous state from local storage if present, otherwise
// a blank Flatris instance will be rendered
var prevState = localStorage.getItem('flatrisState1');
if (prevState) {
ComponentTree.injectState(this.refs.flatris, JSON.parse(prevState));
}
}
componentWillUnmount() {
$(window).off('unload', this.onUnload);
clearInterval(this._refreshInterval);
}
refreshSnapshot() {
this.setState({snapshot: ComponentTree.serialize(this.refs.flatris)});
}
onUnload() {
var snapshot = ComponentTree.serialize(this.refs.flatris);
localStorage.setItem('flatrisState1', JSON.stringify(snapshot.state));
}
}
module.exports = FlatrisStatePersistor;