@pie-lib/graphing-solution-set 2.34.3-next.0 → 2.34.3-next.155

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.
Files changed (142) hide show
  1. package/CHANGELOG.md +7 -78
  2. package/esm/package.json +3 -0
  3. package/lib/axis/arrow.js +19 -55
  4. package/lib/axis/arrow.js.map +1 -1
  5. package/lib/axis/axes.js +103 -193
  6. package/lib/axis/axes.js.map +1 -1
  7. package/lib/axis/index.js +1 -6
  8. package/lib/axis/index.js.map +1 -1
  9. package/lib/bg.js +21 -49
  10. package/lib/bg.js.map +1 -1
  11. package/lib/container/actions.js +2 -8
  12. package/lib/container/actions.js.map +1 -1
  13. package/lib/container/index.js +14 -60
  14. package/lib/container/index.js.map +1 -1
  15. package/lib/container/marks.js +1 -6
  16. package/lib/container/marks.js.map +1 -1
  17. package/lib/container/middleware.js +2 -8
  18. package/lib/container/middleware.js.map +1 -1
  19. package/lib/container/reducer.js +1 -8
  20. package/lib/container/reducer.js.map +1 -1
  21. package/lib/coordinates-label.js +23 -55
  22. package/lib/coordinates-label.js.map +1 -1
  23. package/lib/graph-with-controls.js +129 -203
  24. package/lib/graph-with-controls.js.map +1 -1
  25. package/lib/graph.js +61 -126
  26. package/lib/graph.js.map +1 -1
  27. package/lib/grid-setup.js +168 -224
  28. package/lib/grid-setup.js.map +1 -1
  29. package/lib/grid.js +29 -74
  30. package/lib/grid.js.map +1 -1
  31. package/lib/index.js +1 -12
  32. package/lib/index.js.map +1 -1
  33. package/lib/labels.js +84 -184
  34. package/lib/labels.js.map +1 -1
  35. package/lib/mark-label.js +39 -88
  36. package/lib/mark-label.js.map +1 -1
  37. package/lib/toggle-bar.js +155 -243
  38. package/lib/toggle-bar.js.map +1 -1
  39. package/lib/tool-menu.js +93 -200
  40. package/lib/tool-menu.js.map +1 -1
  41. package/lib/tools/index.js +2 -7
  42. package/lib/tools/index.js.map +1 -1
  43. package/lib/tools/line/component.js +48 -62
  44. package/lib/tools/line/component.js.map +1 -1
  45. package/lib/tools/line/index.js +1 -6
  46. package/lib/tools/line/index.js.map +1 -1
  47. package/lib/tools/polygon/component.js +76 -173
  48. package/lib/tools/polygon/component.js.map +1 -1
  49. package/lib/tools/polygon/index.js +6 -23
  50. package/lib/tools/polygon/index.js.map +1 -1
  51. package/lib/tools/polygon/line.js +48 -85
  52. package/lib/tools/polygon/line.js.map +1 -1
  53. package/lib/tools/polygon/polygon.js +62 -102
  54. package/lib/tools/polygon/polygon.js.map +1 -1
  55. package/lib/tools/shared/arrow-head.js +7 -20
  56. package/lib/tools/shared/arrow-head.js.map +1 -1
  57. package/lib/tools/shared/line/index.js +89 -185
  58. package/lib/tools/shared/line/index.js.map +1 -1
  59. package/lib/tools/shared/line/line-path.js +71 -95
  60. package/lib/tools/shared/line/line-path.js.map +1 -1
  61. package/lib/tools/shared/line/with-root-edge.js +22 -56
  62. package/lib/tools/shared/line/with-root-edge.js.map +1 -1
  63. package/lib/tools/shared/point/arrow-point.js +18 -45
  64. package/lib/tools/shared/point/arrow-point.js.map +1 -1
  65. package/lib/tools/shared/point/arrow.js +16 -42
  66. package/lib/tools/shared/point/arrow.js.map +1 -1
  67. package/lib/tools/shared/point/base-point.js +44 -58
  68. package/lib/tools/shared/point/base-point.js.map +1 -1
  69. package/lib/tools/shared/point/index.js +38 -52
  70. package/lib/tools/shared/point/index.js.map +1 -1
  71. package/lib/tools/shared/styles.js +8 -31
  72. package/lib/tools/shared/styles.js.map +1 -1
  73. package/lib/tools/shared/types.js +1 -5
  74. package/lib/tools/shared/types.js.map +1 -1
  75. package/lib/undo-redo.js +27 -67
  76. package/lib/undo-redo.js.map +1 -1
  77. package/lib/use-debounce.js +4 -11
  78. package/lib/use-debounce.js.map +1 -1
  79. package/lib/utils.js +56 -131
  80. package/lib/utils.js.map +1 -1
  81. package/package.json +34 -23
  82. package/src/__tests__/graph-with-controls.test.jsx +23 -10
  83. package/src/__tests__/graph.test.jsx +36 -171
  84. package/src/__tests__/grid.test.jsx +9 -6
  85. package/src/__tests__/labels.test.jsx +11 -8
  86. package/src/__tests__/mark-label.test.jsx +15 -17
  87. package/src/__tests__/toggle-bar.test.jsx +46 -17
  88. package/src/__tests__/tool-menu.test.jsx +12 -8
  89. package/src/__tests__/undo-redo.test.jsx +9 -8
  90. package/src/__tests__/utils.js +3 -0
  91. package/src/axis/__tests__/arrow.test.jsx +21 -17
  92. package/src/axis/__tests__/axes.test.jsx +117 -155
  93. package/src/axis/arrow.jsx +7 -12
  94. package/src/axis/axes.jsx +41 -51
  95. package/src/coordinates-label.jsx +13 -18
  96. package/src/graph-with-controls.jsx +90 -93
  97. package/src/grid-setup.jsx +210 -206
  98. package/src/grid.jsx +2 -4
  99. package/src/labels.jsx +83 -124
  100. package/src/mark-label.jsx +14 -25
  101. package/src/toggle-bar.jsx +135 -163
  102. package/src/tool-menu.jsx +136 -195
  103. package/src/tools/line/__tests__/component.test.jsx +7 -7
  104. package/src/tools/line/component.jsx +29 -29
  105. package/src/tools/polygon/__tests__/component.test.jsx +13 -152
  106. package/src/tools/polygon/__tests__/line.test.jsx +7 -9
  107. package/src/tools/polygon/__tests__/polygon.test.jsx +8 -8
  108. package/src/tools/polygon/component.jsx +2 -4
  109. package/src/tools/polygon/line.jsx +26 -24
  110. package/src/tools/polygon/polygon.jsx +35 -40
  111. package/src/tools/shared/__tests__/arrow-head.test.jsx +16 -17
  112. package/src/tools/shared/line/__tests__/index.test.jsx +26 -163
  113. package/src/tools/shared/line/__tests__/line-path.test.jsx +9 -9
  114. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +14 -24
  115. package/src/tools/shared/line/index.jsx +3 -3
  116. package/src/tools/shared/line/line-path.jsx +51 -48
  117. package/src/tools/shared/line/with-root-edge.jsx +1 -1
  118. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +15 -11
  119. package/src/tools/shared/point/__tests__/base-point.test.jsx +14 -11
  120. package/src/tools/shared/point/base-point.jsx +33 -6
  121. package/src/tools/shared/point/index.jsx +30 -32
  122. package/src/undo-redo.jsx +16 -24
  123. package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +0 -114
  124. package/src/__tests__/__snapshots__/graph.test.jsx.snap +0 -213
  125. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -54
  126. package/src/__tests__/__snapshots__/labels.test.jsx.snap +0 -30
  127. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -37
  128. package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +0 -7
  129. package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +0 -35
  130. package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +0 -15
  131. package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +0 -33
  132. package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +0 -122
  133. package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +0 -20
  134. package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +0 -94
  135. package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +0 -44
  136. package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +0 -53
  137. package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +0 -32
  138. package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +0 -360
  139. package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +0 -57
  140. package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +0 -63
  141. package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +0 -55
  142. package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +0 -43
package/src/tool-menu.jsx CHANGED
@@ -1,294 +1,235 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { Typography, Button } from '@material-ui/core';
4
- import Radio from '@material-ui/core/Radio';
5
- import { withStyles } from '@material-ui/core/styles';
3
+ import { Typography, Button, Radio } from '@mui/material';
4
+ import { styled } from '@mui/material/styles';
6
5
 
7
6
  export class ToolMenu extends React.Component {
8
7
  static propTypes = {
9
- classes: PropTypes.object,
10
8
  gssLineData: PropTypes.object,
11
9
  disabled: PropTypes.bool,
12
10
  onChange: PropTypes.func,
13
11
  };
14
12
 
13
+ onChangeRadioValue = (event) => {
14
+ let { gssLineData, onChange } = this.props;
15
+ let oldSelectedTool = gssLineData.selectedTool;
16
+ gssLineData.selectedTool = event.target.value;
17
+ onChange(gssLineData, oldSelectedTool);
18
+ };
19
+
20
+ lineTypeChange = (line, type) => {
21
+ let { gssLineData, onChange } = this.props;
22
+ let oldSelectedTool = gssLineData.selectedTool;
23
+ gssLineData[`line${line}`].lineType = type;
24
+ onChange(gssLineData, oldSelectedTool);
25
+ };
26
+
15
27
  render() {
16
- let { classes, gssLineData, disabled } = this.props;
28
+ const { gssLineData, disabled } = this.props;
17
29
 
18
30
  return (
19
- <div className={classes.selectLineRadioGroup}>
20
- <div className={classes.radioFieldOuter}>
21
- <div className={classes.radioFieldInner}>
22
- <Radio
23
- name={'select-line-radio-buttons'}
24
- onChange={this.onChangeRadioValue}
25
- value={'lineA'}
26
- disabled={!!disabled}
27
- checked={gssLineData.selectedTool === 'lineA'}
28
- className={classes.lineTypeRadio}
29
- />
30
- <Typography className={classes.lineNameFont}>Line A</Typography>
31
- </div>
32
- <div className={classes.radioFieldButtons}>
33
- {gssLineData.lineA.lineType === 'Solid' ? (
34
- <Button
35
- size={'small'}
36
- variant={'contained'}
37
- color={'primary'}
38
- onClick={() => this.lineTypeChange('A', 'Solid')}
39
- className={disabled ? classes.lineTypeButtonLeftSelectedDisabled : classes.lineTypeButtonLeftSelected}
40
- >
41
- &#x2714; Solid
42
- </Button>
43
- ) : (
31
+ <Root>
32
+ <div className="selectLineRadioGroup">
33
+ {/* LINE A */}
34
+ <div className="radioFieldOuter">
35
+ <div className="radioFieldInner">
36
+ <Radio
37
+ name="select-line-radio-buttons"
38
+ onChange={this.onChangeRadioValue}
39
+ value="lineA"
40
+ disabled={!!disabled}
41
+ checked={gssLineData.selectedTool === 'lineA'}
42
+ className="lineTypeRadio"
43
+ />
44
+ <Typography className="lineNameFont">Line A</Typography>
45
+ </div>
46
+ <div className="radioFieldButtons">
44
47
  <Button
45
- size={'small'}
46
- variant={'contained'}
48
+ size="small"
49
+ variant="contained"
50
+ color={gssLineData.lineA.lineType === 'Solid' ? 'primary' : 'inherit'}
47
51
  disabled={!!disabled}
48
52
  onClick={() => this.lineTypeChange('A', 'Solid')}
49
53
  className={
50
- disabled ? classes.lineTypeButtonLeftUnSelectedDisabled : classes.lineTypeButtonLeftUnSelected
54
+ gssLineData.lineA.lineType === 'Solid'
55
+ ? disabled
56
+ ? 'lineTypeButtonLeftSelectedDisabled'
57
+ : 'lineTypeButtonLeftSelected'
58
+ : disabled
59
+ ? 'lineTypeButtonLeftUnSelectedDisabled'
60
+ : 'lineTypeButtonLeftUnSelected'
51
61
  }
52
62
  >
53
- Solid
63
+ {gssLineData.lineA.lineType === 'Solid' && '✔'} Solid
54
64
  </Button>
55
- )}
56
- {gssLineData.lineA.lineType === 'Dashed' ? (
57
- <Button
58
- size={'small'}
59
- variant={'contained'}
60
- color={'primary'}
61
- onClick={() => this.lineTypeChange('A', 'Dashed')}
62
- className={disabled ? classes.lineTypeButtonRightSelectedDisabled : classes.lineTypeButtonRightSelected}
63
- >
64
- &#x2714; Dashed
65
- </Button>
66
- ) : (
65
+
67
66
  <Button
68
- size={'small'}
69
- variant={'contained'}
67
+ size="small"
68
+ variant="contained"
69
+ color={gssLineData.lineA.lineType === 'Dashed' ? 'primary' : 'inherit'}
70
70
  disabled={!!disabled}
71
71
  onClick={() => this.lineTypeChange('A', 'Dashed')}
72
72
  className={
73
- disabled ? classes.lineTypeButtonRightUnSelectedDisabled : classes.lineTypeButtonRightUnSelected
73
+ gssLineData.lineA.lineType === 'Dashed'
74
+ ? disabled
75
+ ? 'lineTypeButtonRightSelectedDisabled'
76
+ : 'lineTypeButtonRightSelected'
77
+ : disabled
78
+ ? 'lineTypeButtonRightUnSelectedDisabled'
79
+ : 'lineTypeButtonRightUnSelected'
74
80
  }
75
81
  >
76
- Dashed
82
+ {gssLineData.lineA.lineType === 'Dashed' && '✔'} Dashed
77
83
  </Button>
78
- )}
79
- </div>
80
- </div>
81
- {gssLineData.numberOfLines === 2 ? (
82
- <div className={classes.radioFieldOuter}>
83
- <div className={classes.radioFieldInner}>
84
- <Radio
85
- name={'select-line-radio-buttons'}
86
- onChange={this.onChangeRadioValue}
87
- value={'lineB'}
88
- disabled={!!disabled}
89
- checked={gssLineData.selectedTool === 'lineB'}
90
- className={classes.lineTypeRadio}
91
- />
92
- <Typography className={classes.lineNameFont}>Line B</Typography>
93
84
  </div>
94
- <div className={classes.radioFieldButtons}>
95
- {gssLineData.lineB.lineType === 'Solid' ? (
96
- <Button
97
- size={'small'}
98
- variant={'contained'}
99
- color={'primary'}
100
- onClick={() => this.lineTypeChange('B', 'Solid')}
101
- className={disabled ? classes.lineTypeButtonLeftSelectedDisabled : classes.lineTypeButtonLeftSelected}
102
- >
103
- &#x2714; Solid
104
- </Button>
105
- ) : (
85
+ </div>
86
+
87
+ {/* LINE B (if applicable) */}
88
+ {gssLineData.numberOfLines === 2 && (
89
+ <div className="radioFieldOuter">
90
+ <div className="radioFieldInner">
91
+ <Radio
92
+ name="select-line-radio-buttons"
93
+ onChange={this.onChangeRadioValue}
94
+ value="lineB"
95
+ disabled={!!disabled}
96
+ checked={gssLineData.selectedTool === 'lineB'}
97
+ className="lineTypeRadio"
98
+ />
99
+ <Typography className="lineNameFont">Line B</Typography>
100
+ </div>
101
+ <div className="radioFieldButtons">
106
102
  <Button
107
- size={'small'}
108
- variant={'contained'}
103
+ size="small"
104
+ variant="contained"
105
+ color={gssLineData.lineB.lineType === 'Solid' ? 'primary' : 'inherit'}
109
106
  disabled={!!disabled}
110
107
  onClick={() => this.lineTypeChange('B', 'Solid')}
111
108
  className={
112
- disabled ? classes.lineTypeButtonLeftUnSelectedDisabled : classes.lineTypeButtonLeftUnSelected
113
- }
114
- >
115
- Solid
116
- </Button>
117
- )}
118
- {gssLineData.lineB.lineType === 'Dashed' ? (
119
- <Button
120
- size={'small'}
121
- variant={'contained'}
122
- color={'primary'}
123
- onClick={() => this.lineTypeChange('B', 'Dashed')}
124
- className={
125
- disabled ? classes.lineTypeButtonRightSelectedDisabled : classes.lineTypeButtonRightSelected
109
+ gssLineData.lineB.lineType === 'Solid'
110
+ ? disabled
111
+ ? 'lineTypeButtonLeftSelectedDisabled'
112
+ : 'lineTypeButtonLeftSelected'
113
+ : disabled
114
+ ? 'lineTypeButtonLeftUnSelectedDisabled'
115
+ : 'lineTypeButtonLeftUnSelected'
126
116
  }
127
117
  >
128
- &#x2714; Dashed
118
+ {gssLineData.lineB.lineType === 'Solid' && '✔'} Solid
129
119
  </Button>
130
- ) : (
120
+
131
121
  <Button
132
- size={'small'}
133
- variant={'contained'}
122
+ size="small"
123
+ variant="contained"
124
+ color={gssLineData.lineB.lineType === 'Dashed' ? 'primary' : 'inherit'}
134
125
  disabled={!!disabled}
135
126
  onClick={() => this.lineTypeChange('B', 'Dashed')}
136
127
  className={
137
- disabled ? classes.lineTypeButtonRightUnSelectedDisabled : classes.lineTypeButtonRightUnSelected
128
+ gssLineData.lineB.lineType === 'Dashed'
129
+ ? disabled
130
+ ? 'lineTypeButtonRightSelectedDisabled'
131
+ : 'lineTypeButtonRightSelected'
132
+ : disabled
133
+ ? 'lineTypeButtonRightUnSelectedDisabled'
134
+ : 'lineTypeButtonRightUnSelected'
138
135
  }
139
136
  >
140
- Dashed
137
+ {gssLineData.lineB.lineType === 'Dashed' && '✔'} Dashed
141
138
  </Button>
142
- )}
139
+ </div>
140
+ </div>
141
+ )}
142
+
143
+ {/* SOLUTION SET */}
144
+ <div className="radioFieldOuter">
145
+ <div className="radioFieldInner">
146
+ <Radio
147
+ name="select-line-radio-buttons"
148
+ onChange={this.onChangeRadioValue}
149
+ value="solutionSet"
150
+ disabled={!!disabled}
151
+ checked={gssLineData.selectedTool === 'solutionSet'}
152
+ className="lineTypeRadio"
153
+ />
154
+ <Typography className="lineNameFont">Solution Set</Typography>
143
155
  </div>
144
- </div>
145
- ) : null}
146
- <div className={classes.radioFieldOuter}>
147
- <div className={classes.radioFieldInner}>
148
- <Radio
149
- name={'select-line-radio-buttons'}
150
- onChange={this.onChangeRadioValue}
151
- value={'solutionSet'}
152
- disabled={!!disabled}
153
- checked={gssLineData.selectedTool === 'solutionSet'}
154
- className={classes.lineTypeRadio}
155
- />
156
- <Typography className={classes.lineNameFont}>Solution Set</Typography>
157
156
  </div>
158
157
  </div>
159
- </div>
158
+ </Root>
160
159
  );
161
160
  }
162
-
163
- onChangeRadioValue = (event) => {
164
- let { gssLineData, onChange } = this.props;
165
- let oldSelectedTool = gssLineData.selectedTool;
166
- gssLineData.selectedTool = event.target.value;
167
- onChange(gssLineData, oldSelectedTool);
168
- };
169
-
170
- lineTypeChange = (line, type) => {
171
- let { gssLineData, onChange } = this.props;
172
- let oldSelectedTool = gssLineData.selectedTool;
173
- gssLineData[`line${line}`].lineType = type;
174
- onChange(gssLineData, oldSelectedTool);
175
- };
176
161
  }
177
162
 
178
- const styles = (theme) => ({
179
- radioButtonClass: {},
180
- selectLineRadioGroup: {
163
+ const Root = styled('div')(() => ({
164
+ '& .selectLineRadioGroup': {
181
165
  display: 'flex',
182
166
  flexWrap: 'wrap',
183
167
  flexDirection: 'row',
184
168
  },
185
- radioFieldInner: {
169
+ '& .radioFieldOuter': {
186
170
  display: 'flex',
187
171
  flexWrap: 'wrap',
188
- flexDirection: 'row',
189
- alignItems: 'center',
172
+ flexDirection: 'column',
190
173
  },
191
- radioFieldOuter: {
174
+ '& .radioFieldInner': {
192
175
  display: 'flex',
193
176
  flexWrap: 'wrap',
194
- flexDirection: 'column',
177
+ flexDirection: 'row',
178
+ alignItems: 'center',
195
179
  },
196
- radioFieldButtons: {
180
+ '& .radioFieldButtons': {
197
181
  display: 'flex',
198
182
  flexWrap: 'wrap',
199
183
  flexDirection: 'row',
200
184
  padding: '0 .9rem',
201
185
  },
202
- lineTypeText: {
203
- marginLeft: '.7rem',
204
- },
205
- lineNameFont: {
186
+ '& .lineNameFont': {
206
187
  fontWeight: 'bold',
207
188
  padding: '0 5px 0 0',
208
189
  },
209
- lineTypeButtonLeftSelected: {
210
- textTransform: 'none',
211
- border: '1px solid #3E4EB1',
212
- borderRadius: '0',
213
- backgroundColor: '#3E4EB1 !important',
214
- borderTopLeftRadius: '4px',
215
- borderBottomLeftRadius: '4px',
216
- color: '#FFFFFF !important',
217
- },
218
- lineTypeButtonLeftUnSelected: {
219
- textTransform: 'none',
220
- border: '1px solid #3E4EB1',
221
- borderRadius: '0',
222
- backgroundColor: '#FFFFFF !important',
223
- borderTopLeftRadius: '4px',
224
- borderBottomLeftRadius: '4px',
225
- color: '#3E4EB1 !important',
190
+ '& .lineTypeRadio': {
191
+ color: '#000000 !important',
226
192
  },
227
- lineTypeButtonRightSelected: {
193
+ '& .lineTypeButtonLeftSelected': {
228
194
  textTransform: 'none',
229
195
  border: '1px solid #3E4EB1',
230
- borderRadius: '0',
231
196
  backgroundColor: '#3E4EB1 !important',
232
- borderTopRightRadius: '4px',
233
- borderBottomRightRadius: '4px',
234
197
  color: '#FFFFFF !important',
198
+ borderRadius: '4px 0 0 4px',
235
199
  },
236
- lineTypeButtonRightUnSelected: {
200
+ '& .lineTypeButtonLeftUnSelected': {
237
201
  textTransform: 'none',
238
202
  border: '1px solid #3E4EB1',
239
- borderRadius: '0',
240
203
  backgroundColor: '#FFFFFF !important',
241
- borderTopRightRadius: '4px',
242
- borderBottomRightRadius: '4px',
243
204
  color: '#3E4EB1 !important',
205
+ borderRadius: '4px 0 0 4px',
244
206
  },
245
- lineTypeRadio: {
246
- color: '#000000 !important',
247
- },
248
- lineTypeButtonLeftSelectedDisabled: {
207
+ '& .lineTypeButtonRightSelected': {
249
208
  textTransform: 'none',
250
209
  border: '1px solid #3E4EB1',
251
- borderRadius: '0',
252
210
  backgroundColor: '#3E4EB1 !important',
253
- borderTopLeftRadius: '4px',
254
- borderBottomLeftRadius: '4px',
255
211
  color: '#FFFFFF !important',
256
- cursor: 'default',
257
- pointerEvents: 'none',
212
+ borderRadius: '0 4px 4px 0',
258
213
  },
259
- lineTypeButtonLeftUnSelectedDisabled: {
214
+ '& .lineTypeButtonRightUnSelected': {
260
215
  textTransform: 'none',
261
216
  border: '1px solid #3E4EB1',
262
- borderRadius: '0',
263
217
  backgroundColor: '#FFFFFF !important',
264
- borderTopLeftRadius: '4px',
265
- borderBottomLeftRadius: '4px',
266
218
  color: '#3E4EB1 !important',
267
- cursor: 'default',
268
- pointerEvents: 'none',
219
+ borderRadius: '0 4px 4px 0',
269
220
  },
270
- lineTypeButtonRightSelectedDisabled: {
271
- textTransform: 'none',
272
- border: '1px solid #3E4EB1',
273
- borderRadius: '0',
221
+ '& .lineTypeButtonLeftSelectedDisabled, & .lineTypeButtonRightSelectedDisabled': {
274
222
  backgroundColor: '#3E4EB1 !important',
275
- borderTopRightRadius: '4px',
276
- borderBottomRightRadius: '4px',
277
223
  color: '#FFFFFF !important',
278
224
  cursor: 'default',
279
225
  pointerEvents: 'none',
280
226
  },
281
- lineTypeButtonRightUnSelectedDisabled: {
282
- textTransform: 'none',
283
- border: '1px solid #3E4EB1',
284
- borderRadius: '0',
227
+ '& .lineTypeButtonLeftUnSelectedDisabled, & .lineTypeButtonRightUnSelectedDisabled': {
285
228
  backgroundColor: '#FFFFFF !important',
286
- borderTopRightRadius: '4px',
287
- borderBottomRightRadius: '4px',
288
229
  color: '#3E4EB1 !important',
289
230
  cursor: 'default',
290
231
  pointerEvents: 'none',
291
232
  },
292
- });
233
+ }));
293
234
 
294
- export default withStyles(styles)(ToolMenu);
235
+ export default ToolMenu;
@@ -1,4 +1,4 @@
1
- import { shallow } from 'enzyme';
1
+ import { render } from '@pie-lib/test-utils';
2
2
  import React from 'react';
3
3
  import { ArrowedLine } from '../component';
4
4
  import { graphProps as getGraphProps } from '../../../__tests__/utils';
@@ -15,9 +15,8 @@ jest.mock('@pie-lib/plot', () => {
15
15
  });
16
16
 
17
17
  describe('ArrowedLine', () => {
18
- let w;
19
18
  let onChange = jest.fn();
20
- const wrapper = (extras) => {
19
+ const renderComponent = (extras) => {
21
20
  const defaults = {
22
21
  classes: {},
23
22
  className: 'className',
@@ -26,11 +25,12 @@ describe('ArrowedLine', () => {
26
25
  graphProps: getGraphProps(),
27
26
  };
28
27
  const props = { ...defaults, ...extras };
29
- return shallow(<ArrowedLine {...props} />);
28
+ return render(<ArrowedLine {...props} />);
30
29
  };
31
- describe('snapshot', () => {
32
- it('renders', () => {
33
- expect(wrapper()).toMatchSnapshot();
30
+ describe('rendering', () => {
31
+ it('renders without crashing', () => {
32
+ const { container } = renderComponent();
33
+ expect(container.firstChild).toBeInTheDocument();
34
34
  });
35
35
  });
36
36
  });
@@ -2,28 +2,33 @@ import { lineToolComponent, lineBase, styles } from '../shared/line';
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { trig, types } from '@pie-lib/plot';
5
- import classNames from 'classnames';
6
- import { withStyles } from '@material-ui/core/styles';
5
+ import { styled } from '@mui/material/styles';
7
6
  import { ArrowMarker, genUid } from '../shared/arrow-head';
8
7
  import { thinnerShapesNeeded, getAdjustedGraphLimits } from '../../utils';
9
8
 
10
- const lineStyles = (theme) => ({
11
- line: styles.line(theme),
12
- dashedLine: styles.dashedLine(theme),
13
- enabledArrow: styles.arrow(theme),
14
- disabledArrow: styles.disabledArrow(theme),
15
- disabled: styles.disabled(theme),
16
- correct: styles.correct(theme, 'stroke'),
17
- correctArrow: styles.correct(theme),
18
- incorrect: styles.incorrect(theme, 'stroke'),
19
- incorrectArrow: styles.incorrect(theme),
20
- missing: styles.missing(theme, 'stroke'),
21
- missingArrow: styles.missing(theme),
22
- });
9
+ const StyledLine = styled('line', {
10
+ shouldForwardProp: (prop) => !['fill', 'disabled', 'correctness'].includes(prop),
11
+ })(({ theme, fill, disabled, correctness }) => ({
12
+ ...(fill === 'Solid' ? styles.line(theme) : styles.dashedLine(theme)),
13
+ ...(disabled && styles.disabled(theme)),
14
+ ...(correctness === 'correct' && styles.correct(theme, 'stroke')),
15
+ ...(correctness === 'incorrect' && styles.incorrect(theme, 'stroke')),
16
+ ...(correctness === 'missing' && styles.missing(theme, 'stroke')),
17
+ }));
18
+
19
+ const StyledArrowMarker = styled(ArrowMarker, {
20
+ shouldForwardProp: (prop) => !['suffix'].includes(prop),
21
+ })(({ theme, suffix }) => ({
22
+ ...(suffix === 'enabled' && styles.arrow(theme)),
23
+ ...(suffix === 'disabled' && styles.disabledArrow(theme)),
24
+ ...(suffix === 'correct' && styles.correct(theme)),
25
+ ...(suffix === 'incorrect' && styles.incorrect(theme)),
26
+ ...(suffix === 'missing' && styles.missing(theme)),
27
+ }));
23
28
 
24
29
  export const ArrowedLine = (props) => {
25
30
  const markerId = genUid();
26
- const { className, classes, correctness, disabled, graphProps, fill = 'Solid', from, to, ...rest } = props;
31
+ const { className, correctness, disabled, graphProps, fill = 'Solid', from, to, ...rest } = props;
27
32
  const { scale } = graphProps;
28
33
  const { domain, range } = getAdjustedGraphLimits(graphProps);
29
34
  const [eFrom, eTo] = trig.edges(domain, range)(from, to);
@@ -32,23 +37,21 @@ export const ArrowedLine = (props) => {
32
37
  return (
33
38
  <g>
34
39
  <defs>
35
- <ArrowMarker
40
+ <StyledArrowMarker
36
41
  size={thinnerShapesNeeded(graphProps) ? 4 : 5}
37
42
  id={`${props.markerId || markerId}-${suffix}`}
38
- className={classNames(classes[`${suffix}Arrow`])}
43
+ suffix={suffix}
39
44
  />
40
45
  </defs>
41
- <line
46
+ <StyledLine
42
47
  x1={scale.x(eFrom.x)}
43
48
  y1={scale.y(eFrom.y)}
44
49
  x2={scale.x(eTo.x)}
45
50
  y2={scale.y(eTo.y)}
46
- className={classNames(
47
- fill === 'Solid' ? classes.line : classes.dashedLine,
48
- disabled && classes.disabled,
49
- classes[correctness],
50
- className,
51
- )}
51
+ fill={fill}
52
+ disabled={disabled}
53
+ correctness={correctness}
54
+ className={className}
52
55
  markerEnd={`url(#${props.markerId || markerId}-${suffix})`}
53
56
  markerStart={`url(#${props.markerId || markerId}-${suffix})`}
54
57
  {...rest}
@@ -59,7 +62,6 @@ export const ArrowedLine = (props) => {
59
62
 
60
63
  ArrowedLine.propTypes = {
61
64
  className: PropTypes.string,
62
- classes: PropTypes.object,
63
65
  fill: PropTypes.string,
64
66
  correctness: PropTypes.string,
65
67
  disabled: PropTypes.bool,
@@ -69,9 +71,7 @@ ArrowedLine.propTypes = {
69
71
  markerId: PropTypes.string,
70
72
  };
71
73
 
72
- const StyledArrowedLine = withStyles(lineStyles)(ArrowedLine);
73
-
74
- const Line = lineBase(StyledArrowedLine);
74
+ const Line = lineBase(ArrowedLine);
75
75
  const Component = lineToolComponent(Line);
76
76
 
77
77
  export default Component;