-
-
Notifications
You must be signed in to change notification settings - Fork 102
/
connectTransformToTrace.js
95 lines (80 loc) · 2.81 KB
/
connectTransformToTrace.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
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import {getDisplayName} from '../lib';
import {EDITOR_ACTIONS} from './constants';
export default function connectTransformToTrace(WrappedComponent) {
class TransformConnectedComponent extends Component {
constructor(props, context) {
super(props, context);
this.deleteTransform = this.deleteTransform.bind(this);
this.updateTransform = this.updateTransform.bind(this);
this.setLocals(props, context);
}
componentWillReceiveProps(nextProps, nextContext) {
this.setLocals(nextProps, nextContext);
}
setLocals(props, context) {
const {transformIndex} = props;
const {container, fullContainer} = context;
const transforms = container.transforms || [];
const fullTransforms = fullContainer.transforms || [];
this.container = transforms[transformIndex];
this.fullContainer = fullTransforms[transformIndex];
}
getChildContext() {
return {
getValObject: attr =>
!this.context.getValObject ? null : this.context.getValObject(`transforms[].${attr}`),
updateContainer: this.updateTransform,
deleteContainer: this.deleteTransform,
container: this.container,
fullContainer: this.fullContainer,
};
}
updateTransform(update) {
const newUpdate = {};
const {transformIndex} = this.props;
for (const key in update) {
const newkey = `transforms[${transformIndex}].${key}`;
newUpdate[newkey] = update[key];
}
this.context.updateContainer(newUpdate);
}
deleteTransform() {
if (this.context.onUpdate) {
this.context.onUpdate({
type: EDITOR_ACTIONS.DELETE_TRANSFORM,
payload: {
traceIndex: this.context.fullContainer.index,
transformIndex: this.props.transformIndex,
},
});
}
}
render() {
return <WrappedComponent {...this.props} />;
}
}
TransformConnectedComponent.displayName = `TransformConnected${getDisplayName(WrappedComponent)}`;
TransformConnectedComponent.propTypes = {
transformIndex: PropTypes.number.isRequired,
};
TransformConnectedComponent.contextTypes = {
container: PropTypes.object,
fullContainer: PropTypes.object,
data: PropTypes.array,
onUpdate: PropTypes.func,
updateContainer: PropTypes.func,
getValObject: PropTypes.func,
};
TransformConnectedComponent.childContextTypes = {
updateContainer: PropTypes.func,
deleteContainer: PropTypes.func,
container: PropTypes.object,
fullContainer: PropTypes.object,
getValObject: PropTypes.func,
};
const {plotly_editor_traits} = WrappedComponent;
TransformConnectedComponent.plotly_editor_traits = plotly_editor_traits;
return TransformConnectedComponent;
}