@pie-lib/graphing 2.14.22-next.0 → 2.15.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -75
- package/NEXT.CHANGELOG.json +1 -0
- package/package.json +14 -7
- package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +237 -0
- package/src/__tests__/__snapshots__/graph.test.jsx.snap +211 -0
- package/src/__tests__/__snapshots__/grid.test.jsx.snap +54 -0
- package/src/__tests__/__snapshots__/labels.test.jsx.snap +30 -0
- package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +45 -0
- package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +7 -0
- package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +13 -0
- package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +14 -0
- package/src/__tests__/graph-with-controls.test.jsx +147 -0
- package/src/__tests__/graph.test.jsx +230 -0
- package/src/__tests__/grid.test.jsx +20 -0
- package/src/__tests__/labels.test.jsx +38 -0
- package/src/__tests__/mark-label.test.jsx +68 -0
- package/src/__tests__/toggle-bar.test.jsx +36 -0
- package/src/__tests__/tool-menu.test.jsx +29 -0
- package/src/__tests__/undo-redo.test.jsx +25 -0
- package/src/__tests__/use-debounce.test.js +21 -0
- package/src/__tests__/utils.js +38 -0
- package/src/__tests__/utils.test.js +151 -0
- package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +33 -0
- package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +122 -0
- package/src/axis/__tests__/arrow.test.jsx +39 -0
- package/src/axis/__tests__/axes.test.jsx +220 -0
- package/src/axis/axes.jsx +5 -5
- package/src/container/index.jsx +2 -4
- package/src/coordinates-label.jsx +4 -3
- package/src/graph-with-controls.jsx +8 -10
- package/src/graph.jsx +22 -10
- package/src/grid.jsx +8 -10
- package/src/index.js +2 -2
- package/src/key-legend.jsx +145 -0
- package/src/label-svg-icon.jsx +39 -0
- package/src/labels.jsx +2 -1
- package/src/mark-label.jsx +149 -52
- package/src/toggle-bar.jsx +1 -2
- package/src/tool-menu.jsx +3 -26
- package/src/tools/absolute/__tests__/component.test.jsx +54 -0
- package/src/tools/absolute/component.jsx +23 -0
- package/src/tools/absolute/index.js +31 -0
- package/src/tools/circle/__tests__/__snapshots__/bg-circle.test.jsx.snap +46 -0
- package/src/tools/circle/__tests__/__snapshots__/component.test.jsx.snap +293 -0
- package/src/tools/circle/__tests__/bg-circle.test.jsx +28 -0
- package/src/tools/circle/__tests__/component.test.jsx +228 -0
- package/src/tools/circle/bg-circle.jsx +5 -4
- package/src/tools/circle/component.jsx +22 -8
- package/src/tools/exponential/__tests__/component.test.jsx +54 -0
- package/src/tools/exponential/component.jsx +23 -0
- package/src/tools/exponential/index.js +39 -0
- package/src/tools/index.js +38 -5
- package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +20 -0
- package/src/tools/line/__tests__/component.test.jsx +36 -0
- package/src/tools/line/component.jsx +2 -1
- package/src/tools/parabola/__tests__/component.test.jsx +49 -0
- package/src/tools/parabola/component.jsx +7 -6
- package/src/tools/point/__tests__/__snapshots__/component.test.jsx.snap +40 -0
- package/src/tools/point/__tests__/component.test.jsx +66 -0
- package/src/tools/point/component.jsx +12 -6
- package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +415 -0
- package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +45 -0
- package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +52 -0
- package/src/tools/polygon/__tests__/component.test.jsx +226 -0
- package/src/tools/polygon/__tests__/index.test.js +65 -0
- package/src/tools/polygon/__tests__/line.test.jsx +25 -0
- package/src/tools/polygon/__tests__/polygon.test.jsx +44 -0
- package/src/tools/polygon/component.jsx +39 -11
- package/src/tools/polygon/line.jsx +15 -7
- package/src/tools/polygon/polygon.jsx +7 -3
- package/src/tools/ray/__tests__/__snapshots__/component.test.jsx.snap +23 -0
- package/src/tools/ray/__tests__/component.test.jsx +29 -0
- package/src/tools/ray/component.jsx +2 -1
- package/src/tools/segment/__tests__/__snapshots__/component.test.jsx.snap +14 -0
- package/src/tools/segment/__tests__/component.test.jsx +28 -0
- package/src/tools/segment/component.jsx +2 -1
- package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +27 -0
- package/src/tools/shared/__tests__/arrow-head.test.jsx +34 -0
- package/src/tools/shared/icons/CorrectSVG.jsx +22 -0
- package/src/tools/shared/icons/IncorrectSVG.jsx +20 -0
- package/src/tools/shared/icons/MissingSVG.jsx +21 -0
- package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +360 -0
- package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +58 -0
- package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +63 -0
- package/src/tools/shared/line/__tests__/index.test.jsx +255 -0
- package/src/tools/shared/line/__tests__/line-path.test.jsx +53 -0
- package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +73 -0
- package/src/tools/shared/line/index.jsx +39 -13
- package/src/tools/shared/line/line-path.jsx +18 -7
- package/src/tools/shared/line/with-root-edge.jsx +10 -3
- package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +56 -0
- package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +44 -0
- package/src/tools/shared/point/__tests__/arrow-point.test.jsx +87 -0
- package/src/tools/shared/point/__tests__/base-point.test.jsx +84 -0
- package/src/tools/shared/point/arrow-point.jsx +4 -1
- package/src/tools/shared/point/arrow.jsx +4 -1
- package/src/tools/shared/point/base-point.jsx +28 -3
- package/src/tools/shared/point/index.jsx +7 -2
- package/src/tools/shared/styles.js +8 -3
- package/src/tools/sine/__tests__/component.test.jsx +51 -0
- package/src/tools/sine/component.jsx +7 -7
- package/src/tools/vector/__tests__/__snapshots__/component.test.jsx.snap +12 -0
- package/src/tools/vector/__tests__/component.test.jsx +26 -0
- package/src/tools/vector/component.jsx +2 -1
- package/src/undo-redo.jsx +0 -1
- package/src/utils.js +1 -1
- package/legacy.png +0 -0
- package/lib/axis/arrow.js +0 -115
- package/lib/axis/arrow.js.map +0 -1
- package/lib/axis/axes.js +0 -415
- package/lib/axis/axes.js.map +0 -1
- package/lib/axis/index.js +0 -26
- package/lib/axis/index.js.map +0 -1
- package/lib/bg.js +0 -139
- package/lib/bg.js.map +0 -1
- package/lib/container/actions.js +0 -24
- package/lib/container/actions.js.map +0 -1
- package/lib/container/index.js +0 -166
- package/lib/container/index.js.map +0 -1
- package/lib/container/marks.js +0 -27
- package/lib/container/marks.js.map +0 -1
- package/lib/container/middleware.js +0 -25
- package/lib/container/middleware.js.map +0 -1
- package/lib/container/reducer.js +0 -25
- package/lib/container/reducer.js.map +0 -1
- package/lib/coordinates-label.js +0 -107
- package/lib/coordinates-label.js.map +0 -1
- package/lib/graph-with-controls.js +0 -366
- package/lib/graph-with-controls.js.map +0 -1
- package/lib/graph.js +0 -354
- package/lib/graph.js.map +0 -1
- package/lib/grid-setup.js +0 -462
- package/lib/grid-setup.js.map +0 -1
- package/lib/grid.js +0 -184
- package/lib/grid.js.map +0 -1
- package/lib/index.js +0 -51
- package/lib/index.js.map +0 -1
- package/lib/labels.js +0 -298
- package/lib/labels.js.map +0 -1
- package/lib/mark-label.js +0 -210
- package/lib/mark-label.js.map +0 -1
- package/lib/toggle-bar.js +0 -337
- package/lib/toggle-bar.js.map +0 -1
- package/lib/tool-menu.js +0 -132
- package/lib/tool-menu.js.map +0 -1
- package/lib/tools/circle/bg-circle.js +0 -172
- package/lib/tools/circle/bg-circle.js.map +0 -1
- package/lib/tools/circle/component.js +0 -387
- package/lib/tools/circle/component.js.map +0 -1
- package/lib/tools/circle/index.js +0 -51
- package/lib/tools/circle/index.js.map +0 -1
- package/lib/tools/index.js +0 -79
- package/lib/tools/index.js.map +0 -1
- package/lib/tools/line/component.js +0 -102
- package/lib/tools/line/component.js.map +0 -1
- package/lib/tools/line/index.js +0 -16
- package/lib/tools/line/index.js.map +0 -1
- package/lib/tools/parabola/component.js +0 -33
- package/lib/tools/parabola/component.js.map +0 -1
- package/lib/tools/parabola/index.js +0 -63
- package/lib/tools/parabola/index.js.map +0 -1
- package/lib/tools/point/component.js +0 -181
- package/lib/tools/point/component.js.map +0 -1
- package/lib/tools/point/index.js +0 -32
- package/lib/tools/point/index.js.map +0 -1
- package/lib/tools/polygon/component.js +0 -505
- package/lib/tools/polygon/component.js.map +0 -1
- package/lib/tools/polygon/index.js +0 -106
- package/lib/tools/polygon/index.js.map +0 -1
- package/lib/tools/polygon/line.js +0 -151
- package/lib/tools/polygon/line.js.map +0 -1
- package/lib/tools/polygon/polygon.js +0 -162
- package/lib/tools/polygon/polygon.js.map +0 -1
- package/lib/tools/ray/component.js +0 -101
- package/lib/tools/ray/component.js.map +0 -1
- package/lib/tools/ray/index.js +0 -16
- package/lib/tools/ray/index.js.map +0 -1
- package/lib/tools/segment/component.js +0 -74
- package/lib/tools/segment/component.js.map +0 -1
- package/lib/tools/segment/index.js +0 -16
- package/lib/tools/segment/index.js.map +0 -1
- package/lib/tools/shared/arrow-head.js +0 -70
- package/lib/tools/shared/arrow-head.js.map +0 -1
- package/lib/tools/shared/line/index.js +0 -567
- package/lib/tools/shared/line/index.js.map +0 -1
- package/lib/tools/shared/line/line-path.js +0 -145
- package/lib/tools/shared/line/line-path.js.map +0 -1
- package/lib/tools/shared/line/with-root-edge.js +0 -144
- package/lib/tools/shared/line/with-root-edge.js.map +0 -1
- package/lib/tools/shared/point/arrow-point.js +0 -113
- package/lib/tools/shared/point/arrow-point.js.map +0 -1
- package/lib/tools/shared/point/arrow.js +0 -96
- package/lib/tools/shared/point/arrow.js.map +0 -1
- package/lib/tools/shared/point/base-point.js +0 -139
- package/lib/tools/shared/point/base-point.js.map +0 -1
- package/lib/tools/shared/point/index.js +0 -94
- package/lib/tools/shared/point/index.js.map +0 -1
- package/lib/tools/shared/styles.js +0 -49
- package/lib/tools/shared/styles.js.map +0 -1
- package/lib/tools/shared/types.js +0 -23
- package/lib/tools/shared/types.js.map +0 -1
- package/lib/tools/sine/component.js +0 -42
- package/lib/tools/sine/component.js.map +0 -1
- package/lib/tools/sine/index.js +0 -63
- package/lib/tools/sine/index.js.map +0 -1
- package/lib/tools/vector/component.js +0 -87
- package/lib/tools/vector/component.js.map +0 -1
- package/lib/tools/vector/index.js +0 -16
- package/lib/tools/vector/index.js.map +0 -1
- package/lib/undo-redo.js +0 -124
- package/lib/undo-redo.js.map +0 -1
- package/lib/use-debounce.js +0 -32
- package/lib/use-debounce.js.map +0 -1
- package/lib/utils.js +0 -307
- package/lib/utils.js.map +0 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { shallow } from 'enzyme';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { graphProps } from '../../__tests__/utils';
|
|
4
|
+
|
|
5
|
+
import Axes, { RawXAxis, RawYAxis, firstNegativeValue, sharedValues } from '../axes';
|
|
6
|
+
|
|
7
|
+
describe('RawXAxis', () => {
|
|
8
|
+
let w;
|
|
9
|
+
let onChange = jest.fn();
|
|
10
|
+
const wrapper = (extras) => {
|
|
11
|
+
const defaults = {
|
|
12
|
+
classes: {},
|
|
13
|
+
className: 'className',
|
|
14
|
+
onChange,
|
|
15
|
+
graphProps: graphProps(),
|
|
16
|
+
includeArrows: {
|
|
17
|
+
left: true,
|
|
18
|
+
right: true,
|
|
19
|
+
up: true,
|
|
20
|
+
down: true,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
const props = { ...defaults, ...extras };
|
|
24
|
+
return shallow(<RawXAxis {...props} />);
|
|
25
|
+
};
|
|
26
|
+
describe('snapshot', () => {
|
|
27
|
+
it('renders', () => {
|
|
28
|
+
w = wrapper();
|
|
29
|
+
expect(w).toMatchSnapshot();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
describe('RawYAxis', () => {
|
|
35
|
+
let w;
|
|
36
|
+
let onChange = jest.fn();
|
|
37
|
+
const wrapper = (extras) => {
|
|
38
|
+
const defaults = {
|
|
39
|
+
classes: {},
|
|
40
|
+
className: 'className',
|
|
41
|
+
onChange,
|
|
42
|
+
graphProps: graphProps(),
|
|
43
|
+
includeArrows: {
|
|
44
|
+
left: true,
|
|
45
|
+
right: true,
|
|
46
|
+
up: true,
|
|
47
|
+
down: true,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
const props = { ...defaults, ...extras };
|
|
51
|
+
return shallow(<RawYAxis {...props} />);
|
|
52
|
+
};
|
|
53
|
+
describe('snapshot', () => {
|
|
54
|
+
it('renders', () => {
|
|
55
|
+
w = wrapper();
|
|
56
|
+
expect(w).toMatchSnapshot();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const customScaleMock = (distance) => {
|
|
62
|
+
const fn = jest.fn((n) => n * distance);
|
|
63
|
+
fn.invert = jest.fn((n) => n * distance);
|
|
64
|
+
return fn;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
describe.only('Axes', () => {
|
|
68
|
+
let w;
|
|
69
|
+
let onChange = jest.fn();
|
|
70
|
+
|
|
71
|
+
const customGraphProps = {
|
|
72
|
+
...graphProps(),
|
|
73
|
+
domain: {
|
|
74
|
+
min: -2,
|
|
75
|
+
max: 2,
|
|
76
|
+
labelStep: 1,
|
|
77
|
+
step: 1,
|
|
78
|
+
},
|
|
79
|
+
range: {
|
|
80
|
+
min: -2,
|
|
81
|
+
max: 2,
|
|
82
|
+
step: 1,
|
|
83
|
+
labelStep: 1,
|
|
84
|
+
},
|
|
85
|
+
scale: {
|
|
86
|
+
x: customScaleMock(200),
|
|
87
|
+
y: customScaleMock(150),
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const wrapper = (extras) => {
|
|
92
|
+
const defaults = {
|
|
93
|
+
classes: {},
|
|
94
|
+
className: 'className',
|
|
95
|
+
onChange,
|
|
96
|
+
graphProps: customGraphProps,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const props = { ...defaults, ...extras };
|
|
100
|
+
return shallow(<Axes {...props} />);
|
|
101
|
+
};
|
|
102
|
+
describe('xValues', () => {
|
|
103
|
+
it('renders', () => {
|
|
104
|
+
w = wrapper();
|
|
105
|
+
const result = w.instance().xValues();
|
|
106
|
+
expect(result).toEqual({
|
|
107
|
+
columnTicksValues: expect.arrayContaining([-2, -1, 0, 1, 2]),
|
|
108
|
+
distanceFromOriginToFirstNegativeX: 150,
|
|
109
|
+
firstNegativeX: -1,
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('yValues', () => {
|
|
114
|
+
it('renders', () => {
|
|
115
|
+
w = wrapper();
|
|
116
|
+
const result = w.instance().yValues();
|
|
117
|
+
expect(result).toEqual({
|
|
118
|
+
rowTickValues: expect.arrayContaining([-2, -1, 0, 1, 2]),
|
|
119
|
+
distanceFromOriginToFirstNegativeY: 200,
|
|
120
|
+
firstNegativeY: -1,
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('firstNegativeValue should return undefiend for undefined interval', () => {
|
|
127
|
+
const interval = undefined;
|
|
128
|
+
const result = firstNegativeValue(interval);
|
|
129
|
+
expect(result).toEqual(undefined);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
describe('firstNegativeValue should return undefiend for empty interval', () => {
|
|
133
|
+
const interval = [];
|
|
134
|
+
const result = firstNegativeValue(interval);
|
|
135
|
+
expect(result).toEqual(undefined);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
describe('firstNegativeValue should return undefined if there is no negative in interval array', () => {
|
|
139
|
+
const interval = [1, 5, 7, 4, 5];
|
|
140
|
+
const result = firstNegativeValue(interval);
|
|
141
|
+
expect(result).toEqual(undefined);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
describe('firstNegativeValue should return first negative number from interval', () => {
|
|
145
|
+
const interval = [1, 5, 7, -2, 4, 5, -1];
|
|
146
|
+
const result = firstNegativeValue(interval);
|
|
147
|
+
expect(result).toEqual(-2);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe('skipValue should be empty array if firstNegativeValue for one of the axes is undefined', () => {
|
|
151
|
+
// x
|
|
152
|
+
const intervalX = [1, 2, 3, 4, 5, 6];
|
|
153
|
+
const firstNegativeX = firstNegativeValue(intervalX);
|
|
154
|
+
const distanceFromOriginToFirstNegativeX = -22;
|
|
155
|
+
|
|
156
|
+
// y
|
|
157
|
+
const intervalY = [-1, -2, 1, 2, 3, 4, 5, 6];
|
|
158
|
+
const firstNegativeY = firstNegativeValue(intervalY);
|
|
159
|
+
const distanceFromOriginToFirstNegativeY = -22;
|
|
160
|
+
|
|
161
|
+
const deltaAllowance = 5;
|
|
162
|
+
|
|
163
|
+
const result = sharedValues(
|
|
164
|
+
firstNegativeX,
|
|
165
|
+
firstNegativeY,
|
|
166
|
+
distanceFromOriginToFirstNegativeX,
|
|
167
|
+
distanceFromOriginToFirstNegativeY,
|
|
168
|
+
deltaAllowance,
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
expect(result).toEqual([]);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe('skipValue should be empty array if firstNegativeX and firstNegativeY are equal but they do not overlap', () => {
|
|
175
|
+
// x
|
|
176
|
+
const intervalX = [-1, -2, 1, 2, 3, 4, 5, 6];
|
|
177
|
+
const firstNegativeX = firstNegativeValue(intervalX);
|
|
178
|
+
const distanceFromOriginToFirstNegativeX = -7;
|
|
179
|
+
|
|
180
|
+
// y
|
|
181
|
+
const intervalY = [-1, -2, 1, 2, 3, 4, 5, 6];
|
|
182
|
+
const firstNegativeY = firstNegativeValue(intervalY);
|
|
183
|
+
const distanceFromOriginToFirstNegativeY = -22;
|
|
184
|
+
|
|
185
|
+
const deltaAllowance = 5;
|
|
186
|
+
|
|
187
|
+
const result = sharedValues(
|
|
188
|
+
firstNegativeX,
|
|
189
|
+
firstNegativeY,
|
|
190
|
+
distanceFromOriginToFirstNegativeX,
|
|
191
|
+
distanceFromOriginToFirstNegativeY,
|
|
192
|
+
deltaAllowance,
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
expect(result).toEqual([]);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
describe('skipValue should be -1 if firstNegativeX and firstNegativeY are equal and they overlap', () => {
|
|
199
|
+
// x
|
|
200
|
+
const intervalX = [-1, -2, 1, 2, 3, 4, 5, 6];
|
|
201
|
+
const firstNegativeX = firstNegativeValue(intervalX);
|
|
202
|
+
const distanceFromOriginToFirstNegativeX = -20;
|
|
203
|
+
|
|
204
|
+
// y
|
|
205
|
+
const intervalY = [-1, -2, 1, 2, 3, 4, 5, 6];
|
|
206
|
+
const firstNegativeY = firstNegativeValue(intervalY);
|
|
207
|
+
const distanceFromOriginToFirstNegativeY = -22;
|
|
208
|
+
|
|
209
|
+
const deltaAllowance = 5;
|
|
210
|
+
|
|
211
|
+
const result = sharedValues(
|
|
212
|
+
firstNegativeX,
|
|
213
|
+
firstNegativeY,
|
|
214
|
+
distanceFromOriginToFirstNegativeX,
|
|
215
|
+
distanceFromOriginToFirstNegativeY,
|
|
216
|
+
deltaAllowance,
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
expect(result).toEqual([-1]);
|
|
220
|
+
});
|
package/src/axis/axes.jsx
CHANGED
|
@@ -23,16 +23,16 @@ const AxisDefaultProps = {
|
|
|
23
23
|
|
|
24
24
|
const axisStyles = (theme) => ({
|
|
25
25
|
line: {
|
|
26
|
-
stroke: color.
|
|
27
|
-
strokeWidth:
|
|
26
|
+
stroke: color.defaults.PRIMARY,
|
|
27
|
+
strokeWidth: 3,
|
|
28
28
|
},
|
|
29
29
|
arrow: {
|
|
30
|
-
fill: color.
|
|
30
|
+
fill: color.defaults.PRIMARY,
|
|
31
31
|
},
|
|
32
32
|
tick: {
|
|
33
|
-
fill: color.
|
|
33
|
+
fill: color.defaults.PRIMARY,
|
|
34
34
|
'& > line': {
|
|
35
|
-
stroke: color.
|
|
35
|
+
stroke: color.defaults.PRIMARY,
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
38
|
labelFontSize: {
|
package/src/container/index.jsx
CHANGED
|
@@ -8,7 +8,7 @@ import PropTypes from 'prop-types';
|
|
|
8
8
|
import isEqual from 'lodash/isEqual';
|
|
9
9
|
import { ActionCreators } from 'redux-undo';
|
|
10
10
|
import GraphWithControls from '../graph-with-controls';
|
|
11
|
-
import { lastActionMiddleware
|
|
11
|
+
import { lastActionMiddleware } from './middleware';
|
|
12
12
|
|
|
13
13
|
const mapStateToProps = (s) => ({
|
|
14
14
|
marks: s.marks.present,
|
|
@@ -58,11 +58,9 @@ class Root extends React.Component {
|
|
|
58
58
|
onStoreChange = () => {
|
|
59
59
|
const { marks, onChangeMarks } = this.props;
|
|
60
60
|
const storeState = this.store.getState();
|
|
61
|
-
const lastAction = getLastAction();
|
|
62
|
-
const isUndoOperation = lastAction.type.includes('UNDO') || lastAction.type.includes('REDO');
|
|
63
61
|
|
|
64
62
|
if (!isEqual(storeState.marks.present, marks)) {
|
|
65
|
-
onChangeMarks(storeState.marks.present
|
|
63
|
+
onChangeMarks(storeState.marks.present);
|
|
66
64
|
}
|
|
67
65
|
};
|
|
68
66
|
|
|
@@ -12,7 +12,7 @@ const styles = (theme) => ({
|
|
|
12
12
|
fontSize: theme.typography.fontSize,
|
|
13
13
|
borderRadius: '8px',
|
|
14
14
|
background: theme.palette.common.white,
|
|
15
|
-
color: color.
|
|
15
|
+
color: color.defaults.PRIMARY_DARK,
|
|
16
16
|
},
|
|
17
17
|
inputLabel: {
|
|
18
18
|
padding: 0,
|
|
@@ -20,8 +20,9 @@ const styles = (theme) => ({
|
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
export const getLabelPosition = (graphProps, x, y, labelLength) => {
|
|
23
|
-
const { scale, domain } = graphProps;
|
|
24
|
-
|
|
23
|
+
const { scale, domain, range } = graphProps;
|
|
24
|
+
// treat corner cases for maximum and minimum
|
|
25
|
+
const topShift = y === range.min ? 16 : y === range.max ? 0 : 8;
|
|
25
26
|
const leftShift = 10;
|
|
26
27
|
const rightEdge = scale.x(x) + labelLength + leftShift;
|
|
27
28
|
|
|
@@ -89,9 +89,8 @@ export class GraphWithControls extends React.Component {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
changeCurrentTool = (tool, tools) =>
|
|
93
|
-
|
|
94
|
-
toggleLabelMode = () => this.setState((state) => ({ labelModeEnabled: !state.labelModeEnabled }));
|
|
92
|
+
changeCurrentTool = (tool, tools) =>
|
|
93
|
+
this.setState({ currentTool: tools.find((t) => t.type === tool), labelModeEnabled: tool === 'label' });
|
|
95
94
|
|
|
96
95
|
render() {
|
|
97
96
|
let { currentTool, labelModeEnabled } = this.state;
|
|
@@ -123,7 +122,9 @@ export class GraphWithControls extends React.Component {
|
|
|
123
122
|
showTitle,
|
|
124
123
|
title,
|
|
125
124
|
titlePlaceholder,
|
|
126
|
-
language
|
|
125
|
+
language,
|
|
126
|
+
removeIncompleteTool,
|
|
127
|
+
limitLabeling,
|
|
127
128
|
} = this.props;
|
|
128
129
|
let { backgroundMarks, marks, toolbarTools } = this.props;
|
|
129
130
|
|
|
@@ -151,13 +152,12 @@ export class GraphWithControls extends React.Component {
|
|
|
151
152
|
draggableTools={draggableTools}
|
|
152
153
|
labelModeEnabled={labelModeEnabled}
|
|
153
154
|
onChange={(tool) => this.changeCurrentTool(tool, tools)}
|
|
154
|
-
onToggleLabelMode={this.toggleLabelMode}
|
|
155
155
|
toolbarTools={toolbarTools}
|
|
156
156
|
onChangeTools={onChangeTools}
|
|
157
157
|
language={language}
|
|
158
158
|
/>
|
|
159
159
|
|
|
160
|
-
{!disabled && <UndoRedo onUndo={onUndo} onRedo={onRedo} onReset={onReset} language={language}/>}
|
|
160
|
+
{!disabled && <UndoRedo onUndo={onUndo} onRedo={onRedo} onReset={onReset} language={language} />}
|
|
161
161
|
</React.Fragment>
|
|
162
162
|
);
|
|
163
163
|
|
|
@@ -198,6 +198,8 @@ export class GraphWithControls extends React.Component {
|
|
|
198
198
|
title={title}
|
|
199
199
|
titlePlaceholder={titlePlaceholder}
|
|
200
200
|
tools={tools}
|
|
201
|
+
removeIncompleteTool={removeIncompleteTool}
|
|
202
|
+
limitLabeling={limitLabeling}
|
|
201
203
|
/>
|
|
202
204
|
</div>
|
|
203
205
|
);
|
|
@@ -216,10 +218,6 @@ const styles = (theme) => ({
|
|
|
216
218
|
padding: theme.spacing.unit,
|
|
217
219
|
color: color.text(),
|
|
218
220
|
backgroundColor: color.primaryLight(),
|
|
219
|
-
borderTop: `solid 1px ${color.primaryDark()}`,
|
|
220
|
-
borderBottom: `solid 0px ${color.primaryDark()}`,
|
|
221
|
-
borderLeft: `solid 1px ${color.primaryDark()}`,
|
|
222
|
-
borderRight: `solid 1px ${color.primaryDark()}`,
|
|
223
221
|
'& button': {
|
|
224
222
|
fontSize: theme.typography.fontSize,
|
|
225
223
|
},
|
package/src/graph.jsx
CHANGED
|
@@ -39,6 +39,7 @@ export const graphPropTypes = {
|
|
|
39
39
|
showTitle: PropTypes.bool,
|
|
40
40
|
title: PropTypes.string,
|
|
41
41
|
tools: PropTypes.array,
|
|
42
|
+
limitLabeling: PropTypes.bool,
|
|
42
43
|
};
|
|
43
44
|
|
|
44
45
|
const getMaskSize = (size) => ({
|
|
@@ -48,7 +49,7 @@ const getMaskSize = (size) => ({
|
|
|
48
49
|
height: size.height + 46,
|
|
49
50
|
});
|
|
50
51
|
|
|
51
|
-
export const removeBuildingToolIfCurrentToolDiffers = ({ marks, currentTool }) => {
|
|
52
|
+
export const removeBuildingToolIfCurrentToolDiffers = ({ marks, currentTool, onChangeMarks, removeIncompleteTool }) => {
|
|
52
53
|
const buildingMark = marks.filter((m) => m.building)[0];
|
|
53
54
|
let newMarks = cloneDeep(marks);
|
|
54
55
|
|
|
@@ -59,7 +60,9 @@ export const removeBuildingToolIfCurrentToolDiffers = ({ marks, currentTool }) =
|
|
|
59
60
|
newMarks.splice(index, 1);
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
|
-
|
|
63
|
+
if (removeIncompleteTool && !isEqual(newMarks, marks)) {
|
|
64
|
+
onChangeMarks(newMarks);
|
|
65
|
+
}
|
|
63
66
|
return newMarks;
|
|
64
67
|
};
|
|
65
68
|
|
|
@@ -116,7 +119,7 @@ export class Graph extends React.Component {
|
|
|
116
119
|
const { onChangeMarks, marks } = this.props;
|
|
117
120
|
let newMarks = cloneDeep(marks);
|
|
118
121
|
|
|
119
|
-
if (!update.building && isDuplicatedMark(update, marks)) {
|
|
122
|
+
if (!update || (!update.building && isDuplicatedMark(update, marks))) {
|
|
120
123
|
return;
|
|
121
124
|
}
|
|
122
125
|
|
|
@@ -140,15 +143,15 @@ export class Graph extends React.Component {
|
|
|
140
143
|
};
|
|
141
144
|
|
|
142
145
|
onBgClick = (point) => {
|
|
143
|
-
const { x, y } = point;
|
|
146
|
+
const { x, y } = point || {};
|
|
144
147
|
const { labelModeEnabled, currentTool, marks } = this.props;
|
|
145
148
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (labelModeEnabled || !currentTool) {
|
|
149
|
+
if (labelModeEnabled || !currentTool || [null, undefined].includes(x) || [null, undefined].includes(y)) {
|
|
149
150
|
return;
|
|
150
151
|
}
|
|
151
152
|
|
|
153
|
+
log('[onBgClick] x,y: ', x, y);
|
|
154
|
+
|
|
152
155
|
const buildingMark = marks.filter((m) => m.building)[0];
|
|
153
156
|
let updatedMark;
|
|
154
157
|
|
|
@@ -177,6 +180,7 @@ export class Graph extends React.Component {
|
|
|
177
180
|
labels,
|
|
178
181
|
labelModeEnabled,
|
|
179
182
|
labelsPlaceholders,
|
|
183
|
+
limitLabeling,
|
|
180
184
|
showLabels,
|
|
181
185
|
showPixelGuides,
|
|
182
186
|
showTitle,
|
|
@@ -184,15 +188,22 @@ export class Graph extends React.Component {
|
|
|
184
188
|
onChangeLabels,
|
|
185
189
|
onChangeTitle,
|
|
186
190
|
mathMlOptions = {},
|
|
191
|
+
onChangeMarks,
|
|
192
|
+
removeIncompleteTool,
|
|
187
193
|
} = this.props;
|
|
188
194
|
let { marks } = this.props;
|
|
189
195
|
|
|
190
196
|
const graphProps = createGraphProps(domain, range, size, () => this.rootNode);
|
|
191
197
|
|
|
192
198
|
const maskSize = getMaskSize(size);
|
|
193
|
-
const common = { graphProps, labelModeEnabled };
|
|
199
|
+
const common = { graphProps, labelModeEnabled, limitLabeling };
|
|
194
200
|
|
|
195
|
-
marks = removeBuildingToolIfCurrentToolDiffers({
|
|
201
|
+
marks = removeBuildingToolIfCurrentToolDiffers({
|
|
202
|
+
marks: marks || [],
|
|
203
|
+
currentTool,
|
|
204
|
+
onChangeMarks,
|
|
205
|
+
removeIncompleteTool,
|
|
206
|
+
});
|
|
196
207
|
|
|
197
208
|
return (
|
|
198
209
|
<Root
|
|
@@ -233,6 +244,7 @@ export class Graph extends React.Component {
|
|
|
233
244
|
key={`${markType}-${index}-bg`}
|
|
234
245
|
mark={{ ...m, disabled: true, isBackground: true }}
|
|
235
246
|
labelNode={this.state.labelNode}
|
|
247
|
+
onClick={this.onBgClick}
|
|
236
248
|
{...common}
|
|
237
249
|
/>
|
|
238
250
|
);
|
|
@@ -263,7 +275,7 @@ export class Graph extends React.Component {
|
|
|
263
275
|
x="0"
|
|
264
276
|
y="0"
|
|
265
277
|
{...size}
|
|
266
|
-
style={{ pointerEvents: 'none' }}
|
|
278
|
+
style={{ pointerEvents: 'none', fontSize: '14px' }}
|
|
267
279
|
/>
|
|
268
280
|
</g>
|
|
269
281
|
</g>
|
package/src/grid.jsx
CHANGED
|
@@ -2,7 +2,6 @@ import React from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import * as vx from '@vx/grid';
|
|
4
4
|
import { types } from '@pie-lib/plot';
|
|
5
|
-
import { color } from '@pie-lib/render-ui';
|
|
6
5
|
import { withStyles } from '@material-ui/core/styles';
|
|
7
6
|
import { getTickValues } from './utils';
|
|
8
7
|
|
|
@@ -78,7 +77,7 @@ export class Grid extends React.Component {
|
|
|
78
77
|
};
|
|
79
78
|
|
|
80
79
|
render() {
|
|
81
|
-
const {
|
|
80
|
+
const { graphProps } = this.props;
|
|
82
81
|
const {
|
|
83
82
|
scale,
|
|
84
83
|
size: { height, width },
|
|
@@ -95,6 +94,9 @@ export class Grid extends React.Component {
|
|
|
95
94
|
displayAdditionalGrid,
|
|
96
95
|
} = this.getAdditionalGridProps(rowTickValues, columnTickValues);
|
|
97
96
|
|
|
97
|
+
const additionalGridStroke =
|
|
98
|
+
domain.labelStep * 2 === domain.step || range.labelStep * 2 === range.step ? '#9FA8DA' : '#7985CB';
|
|
99
|
+
|
|
98
100
|
return (
|
|
99
101
|
<>
|
|
100
102
|
<vx.Grid
|
|
@@ -103,7 +105,7 @@ export class Grid extends React.Component {
|
|
|
103
105
|
yScale={scale.y}
|
|
104
106
|
width={width}
|
|
105
107
|
height={height}
|
|
106
|
-
|
|
108
|
+
stroke="#E1E6EC"
|
|
107
109
|
rowTickValues={rowTickValues}
|
|
108
110
|
columnTickValues={columnTickValues}
|
|
109
111
|
/>
|
|
@@ -113,14 +115,14 @@ export class Grid extends React.Component {
|
|
|
113
115
|
scale={scale.y}
|
|
114
116
|
width={width}
|
|
115
117
|
tickValues={rowTickLabelValues}
|
|
116
|
-
stroke={
|
|
118
|
+
stroke={additionalGridStroke}
|
|
117
119
|
strokeDasharray={rowStrokeDasharray}
|
|
118
120
|
/>
|
|
119
121
|
<vx.GridColumns
|
|
120
122
|
scale={scale.x}
|
|
121
123
|
height={height}
|
|
122
124
|
tickValues={columnTickLabelValues}
|
|
123
|
-
stroke={
|
|
125
|
+
stroke={additionalGridStroke}
|
|
124
126
|
strokeDasharray={columnStrokeDasharray}
|
|
125
127
|
/>
|
|
126
128
|
</>
|
|
@@ -130,8 +132,4 @@ export class Grid extends React.Component {
|
|
|
130
132
|
}
|
|
131
133
|
}
|
|
132
134
|
|
|
133
|
-
export default withStyles(() => ({
|
|
134
|
-
grid: {
|
|
135
|
-
stroke: 'purple', // TODO hardcoded color
|
|
136
|
-
},
|
|
137
|
-
}))(Grid);
|
|
135
|
+
export default withStyles(() => ({}))(Grid);
|
package/src/index.js
CHANGED
|
@@ -3,5 +3,5 @@ import GraphContainer from './container';
|
|
|
3
3
|
import GridSetup from './grid-setup';
|
|
4
4
|
import * as tools from './tools';
|
|
5
5
|
import ToolMenu from './tool-menu';
|
|
6
|
-
|
|
7
|
-
export { Graph, GraphContainer, GridSetup, ToolMenu, tools };
|
|
6
|
+
import KeyLegend from './key-legend';
|
|
7
|
+
export { Graph, GraphContainer, GridSetup, ToolMenu, tools, KeyLegend };
|