-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathDevTools.js
82 lines (73 loc) · 1.98 KB
/
DevTools.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
import React, { Component, PropTypes, createElement } from 'react';
import getMonitor from '../utils/getMonitor';
export default class DevTools extends Component {
constructor(props) {
super(props);
this.getMonitor(props);
}
getMonitor(props) {
const monitorElement = getMonitor(props);
this.monitorProps = monitorElement.props;
this.Monitor = monitorElement.type;
const update = this.Monitor.update;
if (update) {
let newMonitorState;
const monitorState = props.monitorState;
if (monitorState && monitorState.__overwritten__ === props.monitor) {
newMonitorState = monitorState;
} else {
newMonitorState = update(this.monitorProps, undefined, {});
if (newMonitorState !== monitorState) {
this.preventRender = true;
}
}
this.dispatch({
type: '@@INIT_MONITOR',
newMonitorState,
update,
monitorProps: this.monitorProps
});
}
}
componentWillUpdate(nextProps) {
if (
nextProps.monitor !== this.props.monitor ||
nextProps.lib !== this.props.lib
) this.getMonitor(nextProps);
}
shouldComponentUpdate(nextProps) {
return (
nextProps.monitor !== this.props.monitor ||
nextProps.liftedState !== this.props.liftedState ||
nextProps.monitorState !== this.props.liftedState ||
nextProps.lib !== this.props.lib
);
}
dispatch = action => {
this.props.dispatch(action);
};
render() {
if (this.preventRender) {
this.preventRender = false;
return null;
}
const liftedState = {
...this.props.liftedState,
monitorState: this.props.monitorState
};
return (
<this.Monitor
dispatch={this.dispatch}
{...liftedState}
{...this.monitorProps}
/>
);
}
}
DevTools.propTypes = {
liftedState: PropTypes.object,
monitorState: PropTypes.object,
dispatch: PropTypes.func.isRequired,
monitor: PropTypes.string,
lib: PropTypes.string
};