@pie-element/hotspot 9.3.4-next.3 → 10.0.0-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.
Files changed (103) hide show
  1. package/configure/lib/DeleteWidget.js +30 -43
  2. package/configure/lib/DeleteWidget.js.map +1 -1
  3. package/configure/lib/button.js +26 -45
  4. package/configure/lib/button.js.map +1 -1
  5. package/configure/lib/buttons/circle.js +20 -27
  6. package/configure/lib/buttons/circle.js.map +1 -1
  7. package/configure/lib/buttons/polygon.js +26 -33
  8. package/configure/lib/buttons/polygon.js.map +1 -1
  9. package/configure/lib/buttons/rectangle.js +26 -33
  10. package/configure/lib/buttons/rectangle.js.map +1 -1
  11. package/configure/lib/defaults.js +2 -3
  12. package/configure/lib/defaults.js.map +1 -1
  13. package/configure/lib/hotspot-circle.js +132 -198
  14. package/configure/lib/hotspot-circle.js.map +1 -1
  15. package/configure/lib/hotspot-container.js +250 -355
  16. package/configure/lib/hotspot-container.js.map +1 -1
  17. package/configure/lib/hotspot-drawable.js +360 -472
  18. package/configure/lib/hotspot-drawable.js.map +1 -1
  19. package/configure/lib/hotspot-palette.js +92 -139
  20. package/configure/lib/hotspot-palette.js.map +1 -1
  21. package/configure/lib/hotspot-polygon.js +212 -317
  22. package/configure/lib/hotspot-polygon.js.map +1 -1
  23. package/configure/lib/hotspot-rectangle.js +128 -192
  24. package/configure/lib/hotspot-rectangle.js.map +1 -1
  25. package/configure/lib/icons.js.map +1 -1
  26. package/configure/lib/image-konva.js +46 -86
  27. package/configure/lib/image-konva.js.map +1 -1
  28. package/configure/lib/index.js +162 -222
  29. package/configure/lib/index.js.map +1 -1
  30. package/configure/lib/root.js +301 -393
  31. package/configure/lib/root.js.map +1 -1
  32. package/configure/lib/shapes/circle.js +69 -101
  33. package/configure/lib/shapes/circle.js.map +1 -1
  34. package/configure/lib/shapes/index.js +4 -12
  35. package/configure/lib/shapes/index.js.map +1 -1
  36. package/configure/lib/shapes/polygon.js +64 -96
  37. package/configure/lib/shapes/polygon.js.map +1 -1
  38. package/configure/lib/shapes/rectagle.js +69 -101
  39. package/configure/lib/shapes/rectagle.js.map +1 -1
  40. package/configure/lib/shapes/utils.js +2 -8
  41. package/configure/lib/shapes/utils.js.map +1 -1
  42. package/configure/lib/upload-control.js +25 -52
  43. package/configure/lib/upload-control.js.map +1 -1
  44. package/configure/lib/utils.js +84 -137
  45. package/configure/lib/utils.js.map +1 -1
  46. package/configure/package.json +11 -10
  47. package/configure/src/__tests__/hotspot-container.test.js +50 -19
  48. package/configure/src/__tests__/hotspot-drawable.test.js +55 -34
  49. package/configure/src/__tests__/index.test.js +167 -5
  50. package/configure/src/__tests__/root.test.js +89 -63
  51. package/configure/src/button.jsx +12 -20
  52. package/configure/src/hotspot-circle.jsx +5 -18
  53. package/configure/src/hotspot-container.jsx +82 -98
  54. package/configure/src/hotspot-drawable.jsx +43 -45
  55. package/configure/src/hotspot-palette.jsx +45 -37
  56. package/configure/src/hotspot-polygon.jsx +4 -20
  57. package/configure/src/hotspot-rectangle.jsx +4 -17
  58. package/configure/src/index.js +12 -2
  59. package/configure/src/root.jsx +85 -79
  60. package/configure/src/upload-control.jsx +6 -16
  61. package/controller/lib/defaults.js +2 -3
  62. package/controller/lib/defaults.js.map +1 -1
  63. package/controller/lib/index.js +151 -205
  64. package/controller/lib/index.js.map +1 -1
  65. package/controller/lib/utils.js +14 -34
  66. package/controller/lib/utils.js.map +1 -1
  67. package/controller/package.json +2 -2
  68. package/lib/hotspot/circle.js +110 -169
  69. package/lib/hotspot/circle.js.map +1 -1
  70. package/lib/hotspot/container.js +174 -260
  71. package/lib/hotspot/container.js.map +1 -1
  72. package/lib/hotspot/icons.js.map +1 -1
  73. package/lib/hotspot/image-konva-tooltip.js +65 -112
  74. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  75. package/lib/hotspot/index.js +135 -198
  76. package/lib/hotspot/index.js.map +1 -1
  77. package/lib/hotspot/polygon.js +150 -214
  78. package/lib/hotspot/polygon.js.map +1 -1
  79. package/lib/hotspot/rectangle.js +128 -185
  80. package/lib/hotspot/rectangle.js.map +1 -1
  81. package/lib/index.js +187 -256
  82. package/lib/index.js.map +1 -1
  83. package/lib/session-updater.js +12 -18
  84. package/lib/session-updater.js.map +1 -1
  85. package/package.json +14 -11
  86. package/src/__tests__/container.test.jsx +27 -175
  87. package/src/__tests__/index.test.js +70 -30
  88. package/src/hotspot/circle.jsx +2 -13
  89. package/src/hotspot/container.jsx +35 -50
  90. package/src/hotspot/index.jsx +16 -28
  91. package/src/hotspot/polygon.jsx +4 -13
  92. package/src/hotspot/rectangle.jsx +5 -15
  93. package/src/index.js +21 -12
  94. package/configure/src/__tests__/DeleteWidget.test.js +0 -64
  95. package/configure/src/__tests__/__snapshots__/hotspot-container.test.js.snap +0 -192
  96. package/configure/src/__tests__/__snapshots__/hotspot-drawable.test.js.snap +0 -562
  97. package/configure/src/__tests__/__snapshots__/root.test.js.snap +0 -469
  98. package/src/__tests__/__snapshots__/container.test.jsx.snap +0 -264
  99. package/src/__tests__/__snapshots__/index.test.js.snap +0 -81
  100. package/src/__tests__/__snapshots__/polygon.test.jsx.snap +0 -192
  101. package/src/__tests__/__snapshots__/rectangle.test.jsx.snap +0 -127
  102. package/src/__tests__/polygon.test.jsx +0 -230
  103. package/src/__tests__/rectangle.test.jsx +0 -232
@@ -1,230 +0,0 @@
1
- import React from 'react';
2
- import { shallow } from 'enzyme';
3
- import toJson from 'enzyme-to-json';
4
- import Konva from 'konva';
5
- import { Line } from 'react-konva';
6
-
7
- import { shallowChild } from '@pie-lib/test-utils';
8
-
9
- import Polygon from '../hotspot/polygon';
10
- import ImageComponent from '../hotspot/image-konva-tooltip';
11
- import { faCorrect, faWrong } from '../hotspot/icons';
12
-
13
- Konva.isBrowser = false;
14
-
15
- describe('Polygon', () => {
16
- let onClick, wrapper;
17
-
18
- const mkWrapper = (opts = {}) => {
19
- opts = {
20
- classes: { base: 'base' },
21
- height: 200,
22
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
23
- id: '1',
24
- isCorrect: false,
25
- isEvaluateMode: false,
26
- evaluateText: null,
27
- disabled: false,
28
- outlineColor: 'blue',
29
- selected: false,
30
- points: [
31
- { x: 94, y: 4 },
32
- { x: 89, y: 4 },
33
- { x: 36, y: 40 },
34
- ],
35
- ...opts,
36
- };
37
-
38
- return shallow(<Polygon {...opts} onClick={onClick} />);
39
- };
40
-
41
- beforeEach(() => {
42
- onClick = jest.fn();
43
- wrapper = mkWrapper();
44
- });
45
-
46
- describe('snapshots', () => {
47
- describe('outline color', () => {
48
- it('renders', () => {
49
- const wrapper = mkWrapper({ outlineColor: 'red' });
50
- expect(toJson(wrapper)).toMatchSnapshot();
51
- });
52
- });
53
-
54
- describe('outline width', () => {
55
- it('renders with default border width', () => {
56
- const wrapper = mkWrapper();
57
- expect(toJson(wrapper)).toMatchSnapshot();
58
- });
59
-
60
- it('renders with given border width', () => {
61
- const wrapper = mkWrapper({ strokeWidth: 10 });
62
- expect(toJson(wrapper)).toMatchSnapshot();
63
- });
64
- });
65
-
66
- describe('hotspot color', () => {
67
- it('renders', () => {
68
- const wrapper = mkWrapper({ hotspotColor: 'rgba(217, 30, 24, 0.65)' });
69
- expect(toJson(wrapper)).toMatchSnapshot();
70
- });
71
- });
72
-
73
- describe('evaluate with correct answer', () => {
74
- it('renders', () => {
75
- const wrapper = mkWrapper({ isEvaluateMode: true, isCorrect: true, evaluateText: 'Correctly\nselected' });
76
- expect(toJson(wrapper)).toMatchSnapshot();
77
- });
78
- });
79
- });
80
-
81
- describe('in evaluate mode', () => {
82
- const defaultModel = {
83
- height: 200,
84
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
85
- id: '1',
86
- isCorrect: false,
87
- isEvaluateMode: true,
88
- evaluateText: null,
89
- disabled: true,
90
- outlineColor: 'blue',
91
- strokeWidth: 5,
92
- selected: false,
93
- points: [
94
- { x: 94, y: 4 },
95
- { x: 89, y: 4 },
96
- { x: 36, y: 40 },
97
- ],
98
- markAsCorrect: false,
99
- showCorrectEnabled: false,
100
- onClick,
101
- };
102
-
103
- const getComponents = (model) => {
104
- const testWrapper = shallowChild(
105
- Polygon,
106
- {
107
- ...defaultModel,
108
- ...model,
109
- },
110
- 1,
111
- );
112
- const polygonComponent = testWrapper();
113
- const lineComponent = polygonComponent.find(Line);
114
- return {
115
- polygonComponent,
116
- lineComponent,
117
- };
118
- };
119
-
120
- describe('when correctly selected', () => {
121
- const { polygonComponent, lineComponent } = getComponents({
122
- selected: true,
123
- isCorrect: true,
124
- });
125
-
126
- it('should have a blue outline', () => {
127
- expect(lineComponent.prop('stroke')).toEqual('blue');
128
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
129
- });
130
-
131
- it('should have a green checkmark icon', () => {
132
- const imgComponent = polygonComponent.find(ImageComponent);
133
- expect(imgComponent.length).toEqual(1);
134
- expect(imgComponent.prop('src')).toEqual(faCorrect);
135
- });
136
- });
137
-
138
- describe('when correctly not selected', () => {
139
- const { polygonComponent, lineComponent } = getComponents({
140
- selected: false,
141
- isCorrect: true,
142
- });
143
-
144
- it('should have no outline', () => {
145
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
146
- });
147
-
148
- it('should have no icon', () => {
149
- const imgComponent = polygonComponent.find(ImageComponent);
150
- expect(imgComponent.length).toEqual(0);
151
- });
152
- });
153
-
154
- describe('when incorrectly selected', () => {
155
- const { polygonComponent, lineComponent } = getComponents({
156
- selected: true,
157
- isCorrect: false,
158
- });
159
-
160
- it('should have a red outline', () => {
161
- expect(lineComponent.prop('stroke')).toEqual('red');
162
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
163
- });
164
-
165
- it('should have a red x icon', () => {
166
- const imgComponent = polygonComponent.find(ImageComponent);
167
- expect(imgComponent.length).toEqual(1);
168
- expect(imgComponent.prop('src')).toEqual(faWrong);
169
- });
170
- });
171
-
172
- describe('when incorrectly not selected', () => {
173
- const { polygonComponent, lineComponent } = getComponents({
174
- selected: false,
175
- isCorrect: false,
176
- });
177
-
178
- it('should have no outline', () => {
179
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
180
- });
181
-
182
- it('should have a red x icon', () => {
183
- const imgComponent = polygonComponent.find(ImageComponent);
184
- expect(imgComponent.length).toEqual(1);
185
- expect(imgComponent.prop('src')).toEqual(faWrong);
186
- });
187
- });
188
-
189
- describe('when showing correct answer (showCorrectEnabled = true)', () => {
190
- it('should have a green outline', () => {
191
- const { lineComponent } = getComponents({
192
- showCorrectEnabled: true,
193
- markAsCorrect: true,
194
- });
195
- expect(lineComponent.prop('stroke')).toEqual('green');
196
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
197
- });
198
-
199
- it('should have a green checkmark icon', () => {
200
- const { polygonComponent } = getComponents({
201
- showCorrectEnabled: true,
202
- markAsCorrect: true,
203
- });
204
- const imgComponent = polygonComponent.find(ImageComponent);
205
- expect(imgComponent.prop('src')).toEqual(faCorrect);
206
- });
207
-
208
- it('should not be selected if the answer is incorrect', () => {
209
- const { lineComponent } = getComponents({
210
- showCorrectEnabled: true,
211
- markAsCorrect: false,
212
- selected: true,
213
- isCorrect: false,
214
- });
215
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
216
- });
217
-
218
- it('should not render an icon if the answer is incorrect', () => {
219
- const { polygonComponent } = getComponents({
220
- showCorrectEnabled: true,
221
- markAsCorrect: false,
222
- selected: true,
223
- isCorrect: false,
224
- });
225
- const imgComponent = polygonComponent.find(ImageComponent);
226
- expect(imgComponent.length).toEqual(0);
227
- });
228
- });
229
- });
230
- });
@@ -1,232 +0,0 @@
1
- import React from 'react';
2
- import { shallow } from 'enzyme';
3
- import toJson from 'enzyme-to-json';
4
- import Konva from 'konva';
5
- import { Rect } from 'react-konva';
6
-
7
- import { shallowChild } from '@pie-lib/test-utils';
8
-
9
- import Rectangle from '../hotspot/rectangle';
10
- import ImageComponent from '../hotspot/image-konva-tooltip';
11
- import { faCorrect, faWrong } from '../hotspot/icons';
12
-
13
- global.MutationObserver = class {
14
- constructor(callback) {}
15
- disconnect() {}
16
- observe(element, initObject) {}
17
- };
18
-
19
- Konva.isBrowser = false;
20
-
21
- describe('Rectangle', () => {
22
- let onClick, wrapper;
23
-
24
- const mkWrapper = (opts = {}) => {
25
- opts = {
26
- classes: { base: 'base' },
27
- height: 200,
28
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
29
- id: '1',
30
- isCorrect: false,
31
- isEvaluateMode: false,
32
- evaluateText: null,
33
- disabled: false,
34
- outlineColor: 'blue',
35
- selected: false,
36
- width: 300,
37
- x: 5,
38
- y: 5,
39
- ...opts,
40
- };
41
-
42
- return shallow(<Rectangle {...opts} onClick={onClick} />);
43
- };
44
-
45
- beforeEach(() => {
46
- onClick = jest.fn();
47
- wrapper = mkWrapper();
48
- });
49
-
50
- describe('snapshots', () => {
51
- describe('outline color', () => {
52
- it('renders', () => {
53
- const wrapper = mkWrapper({ outlineColor: 'red' });
54
- expect(toJson(wrapper)).toMatchSnapshot();
55
- });
56
- });
57
-
58
- describe('outline width', () => {
59
- it('renders with default border width', () => {
60
- const wrapper = mkWrapper();
61
- expect(toJson(wrapper)).toMatchSnapshot();
62
- });
63
-
64
- it('renders with given border width', () => {
65
- const wrapper = mkWrapper({ strokeWidth: 10 });
66
- expect(toJson(wrapper)).toMatchSnapshot();
67
- });
68
- });
69
-
70
- describe('hotspot color', () => {
71
- it('renders', () => {
72
- const wrapper = mkWrapper({ hotspotColor: 'rgba(217, 30, 24, 0.65)' });
73
- expect(toJson(wrapper)).toMatchSnapshot();
74
- });
75
- });
76
-
77
- describe('evaluate with correct answer', () => {
78
- it('renders', () => {
79
- const wrapper = mkWrapper({ isEvaluateMode: true, isCorrect: true, evaluateText: 'Correctly\nselected' });
80
- expect(toJson(wrapper)).toMatchSnapshot();
81
- });
82
- });
83
- });
84
-
85
- describe('in evaluate mode', () => {
86
- const defaultModel = {
87
- onClick,
88
- id: '1',
89
- height: 200,
90
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
91
- disabled: true,
92
- width: 300,
93
- x: 5,
94
- y: 5,
95
- selected: false,
96
- isCorrect: false,
97
- isEvaluateMode: true,
98
- evaluateText: null,
99
- strokeWidth: 5,
100
- outlineColor: 'blue',
101
- markAsCorrect: false,
102
- showCorrectEnabled: false,
103
- };
104
-
105
- const getComponents = (model) => {
106
- const testWrapper = shallowChild(
107
- Rectangle,
108
- {
109
- ...defaultModel,
110
- ...model,
111
- },
112
- 1,
113
- );
114
- const rectangleComponent = testWrapper();
115
- const rectComponent = rectangleComponent.find(Rect);
116
- return {
117
- rectangleComponent,
118
- rectComponent,
119
- };
120
- };
121
-
122
- describe('when correctly selected', () => {
123
- const { rectangleComponent, rectComponent } = getComponents({
124
- selected: true,
125
- isCorrect: true,
126
- });
127
-
128
- it('should have a blue outline', () => {
129
- expect(rectComponent.prop('stroke')).toEqual('blue');
130
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
131
- });
132
-
133
- it('should have a green checkmark icon', () => {
134
- const imgComponent = rectangleComponent.find(ImageComponent);
135
- expect(imgComponent.length).toEqual(1);
136
- expect(imgComponent.prop('src')).toEqual(faCorrect);
137
- });
138
- });
139
-
140
- describe('when correctly not selected', () => {
141
- const { rectangleComponent, rectComponent } = getComponents({
142
- selected: false,
143
- isCorrect: true,
144
- });
145
-
146
- it('should have no outline', () => {
147
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
148
- });
149
-
150
- it('should have no icon', () => {
151
- const imgComponent = rectangleComponent.find(ImageComponent);
152
- expect(imgComponent.length).toEqual(0);
153
- });
154
- });
155
-
156
- describe('when incorrectly selected', () => {
157
- const { rectangleComponent, rectComponent } = getComponents({
158
- selected: true,
159
- isCorrect: false,
160
- });
161
-
162
- it('should have a red outline', () => {
163
- expect(rectComponent.prop('stroke')).toEqual('red');
164
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
165
- });
166
-
167
- it('should have a red x icon', () => {
168
- const imgComponent = rectangleComponent.find(ImageComponent);
169
- expect(imgComponent.length).toEqual(1);
170
- expect(imgComponent.prop('src')).toEqual(faWrong);
171
- });
172
- });
173
-
174
- describe('when incorrectly not selected', () => {
175
- const { rectangleComponent, rectComponent } = getComponents({
176
- selected: false,
177
- isCorrect: false,
178
- });
179
-
180
- it('should have no outline', () => {
181
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
182
- });
183
-
184
- it('should have a red x icon', () => {
185
- const imgComponent = rectangleComponent.find(ImageComponent);
186
- expect(imgComponent.length).toEqual(1);
187
- expect(imgComponent.prop('src')).toEqual(faWrong);
188
- });
189
- });
190
-
191
- describe('when showing correct answer (showCorrectEnabled = true)', () => {
192
- it('should have a green outline', () => {
193
- const { rectComponent } = getComponents({
194
- showCorrectEnabled: true,
195
- markAsCorrect: true,
196
- });
197
- expect(rectComponent.prop('stroke')).toEqual('green');
198
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
199
- });
200
-
201
- it('should have a green checkmark icon', () => {
202
- const { rectangleComponent } = getComponents({
203
- showCorrectEnabled: true,
204
- markAsCorrect: true,
205
- });
206
- const imgComponent = rectangleComponent.find(ImageComponent);
207
- expect(imgComponent.prop('src')).toEqual(faCorrect);
208
- });
209
-
210
- it('should not be selected if the answer is incorrect', () => {
211
- const { rectComponent } = getComponents({
212
- showCorrectEnabled: true,
213
- markAsCorrect: false,
214
- selected: true,
215
- isCorrect: false,
216
- });
217
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
218
- });
219
-
220
- it('should not render an icon if the answer is incorrect', () => {
221
- const { rectangleComponent } = getComponents({
222
- showCorrectEnabled: true,
223
- markAsCorrect: false,
224
- selected: true,
225
- isCorrect: false,
226
- });
227
- const imgComponent = rectangleComponent.find(ImageComponent);
228
- expect(imgComponent.length).toEqual(0);
229
- });
230
- });
231
- });
232
- });