@gamelearn/arcade-components 2.5.2 → 2.5.5

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.
@@ -45,6 +45,23 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
45
45
  selected = _useState2[0],
46
46
  setSelected = _useState2[1];
47
47
 
48
+ var _useState3 = (0, _react.useState)(0),
49
+ _useState4 = _slicedToArray(_useState3, 2),
50
+ index = _useState4[0],
51
+ setIndex = _useState4[1];
52
+
53
+ var _useState5 = (0, _react.useState)({}),
54
+ _useState6 = _slicedToArray(_useState5, 2),
55
+ slidesCompleted = _useState6[0],
56
+ setSlidesCompleted = _useState6[1];
57
+
58
+ var puzzleId = "chained-image-click-puzzle_".concat(index, "_").concat(nodeId);
59
+ var loadPuzzleStatus = (0, _react.useMemo)(function () {
60
+ return emitEvent({
61
+ type: 'loadObjectStatus',
62
+ payload: puzzleId
63
+ });
64
+ }, [emitEvent, puzzleId]);
48
65
  var currentPuzzleProps = {
49
66
  list: list,
50
67
  description: description,
@@ -55,7 +72,12 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
55
72
  soundActions: soundActions,
56
73
  setInfo: setInfo,
57
74
  setSelected: setSelected,
58
- selected: selected
75
+ selected: selected,
76
+ index: index,
77
+ setIndex: setIndex,
78
+ slidesCompleted: slidesCompleted,
79
+ setSlidesCompleted: setSlidesCompleted,
80
+ loadPuzzleStatus: loadPuzzleStatus
59
81
  };
60
82
  var totalCorrects = list.reduce(function (acc, current) {
61
83
  return acc + current.areas.length;
@@ -46,8 +46,6 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
46
46
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
47
47
 
48
48
  var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
49
- var _specificFeedbacks$co2;
50
-
51
49
  var list = _ref.list,
52
50
  description = _ref.description,
53
51
  nodeId = _ref.nodeId,
@@ -58,29 +56,20 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
58
56
  soundActions = _ref.soundActions,
59
57
  setSelected = _ref.setSelected,
60
58
  selected = _ref.selected,
61
- pause = _ref.pause;
59
+ pause = _ref.pause,
60
+ loadPuzzleStatus = _ref.loadPuzzleStatus,
61
+ index = _ref.index,
62
+ setIndex = _ref.setIndex,
63
+ slidesCompleted = _ref.slidesCompleted,
64
+ setSlidesCompleted = _ref.setSlidesCompleted;
62
65
  var accRewards = (0, _react.useRef)([]);
63
66
  var correctClicked = (0, _react.useRef)(0);
64
67
  var currentSelected = (0, _react.useRef)(0);
65
-
66
- var _useState = (0, _react.useState)(0),
67
- _useState2 = _slicedToArray(_useState, 2),
68
- index = _useState2[0],
69
- setIndex = _useState2[1];
70
-
71
- var resolvedItems = (0, _react.useRef)({});
72
68
  var puzzleId = "chained-image-click-puzzle_".concat(index, "_").concat(nodeId);
73
69
 
74
70
  var _soundActions = _slicedToArray(soundActions, 1),
75
71
  playSound = _soundActions[0];
76
72
 
77
- var currentPuzzleStatus = (0, _react.useMemo)(function () {
78
- return emitEvent({
79
- type: 'loadObjectStatus',
80
- payload: puzzleId
81
- });
82
- }, [emitEvent, puzzleId]);
83
-
84
73
  var setRewards = function setRewards(rewards) {
85
74
  accRewards.current = [].concat(_toConsumableArray(accRewards.current), _toConsumableArray(rewards));
86
75
  };
@@ -113,6 +102,8 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
113
102
  var correct = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
114
103
  var finish = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
115
104
 
105
+ var updatedCompleted = _objectSpread({}, slidesCompleted);
106
+
116
107
  if (correct) {
117
108
  var _specificFeedbacks$co;
118
109
 
@@ -135,6 +126,9 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
135
126
  } else {
136
127
  setIndex(index + 1);
137
128
  }
129
+
130
+ updatedCompleted = _objectSpread(_objectSpread({}, updatedCompleted), {}, _defineProperty({}, index, true));
131
+ setSlidesCompleted(updatedCompleted);
138
132
  }
139
133
 
140
134
  setRewards(rw);
@@ -144,18 +138,25 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
144
138
  payload: rw,
145
139
  finish: false
146
140
  });
141
+ emitEvent({
142
+ type: 'failPuzzle'
143
+ });
147
144
 
148
145
  if (currentImageProps.hasClickOrder) {
149
146
  setSelected(selected - correctClicked.current);
150
- correctClicked.current = 0;
147
+
148
+ if (correctClicked.current === 0 && Object.entries(slidesCompleted).length === 0) {
149
+ setSelected(0);
150
+ } else {
151
+ correctClicked.current = 0;
152
+ }
151
153
  }
152
154
 
153
- setSelected(0);
154
- emitEvent({
155
- type: 'failPuzzle'
156
- });
155
+ if (Object.entries(slidesCompleted).length === 0 && currentImageProps.hasClickOrder && !selected) {
156
+ setSelected(0);
157
+ }
157
158
  }
158
- }, [specificFeedbacks === null || specificFeedbacks === void 0 ? void 0 : (_specificFeedbacks$co2 = specificFeedbacks.correctFeedbacks) === null || _specificFeedbacks$co2 === void 0 ? void 0 : _specificFeedbacks$co2.length, currentImageProps.hasClickOnce, currentImageProps.areas.length, currentImageProps.hasClickOrder, index, list.length, handleFinish, emitEvent, setSelected, selected]);
159
+ }, [slidesCompleted, specificFeedbacks, currentImageProps.hasClickOnce, currentImageProps.areas.length, currentImageProps.hasClickOrder, selected, setSelected, index, list.length, setSlidesCompleted, handleFinish, setIndex, emitEvent]);
159
160
 
160
161
  var onResolve = function onResolve() {
161
162
  playSound('score');
@@ -176,16 +177,18 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
176
177
  }));
177
178
  }, [info, puzzleId, setInfo]);
178
179
  (0, _react.useEffect)(function () {
179
- if (currentPuzzleStatus && !resolvedItems.current[puzzleId]) {
180
+ if (loadPuzzleStatus) {
180
181
  onComplete([], true, true);
181
- resolvedItems.current[puzzleId] = true;
182
182
  }
183
- }, [onComplete, puzzleId, currentPuzzleStatus]);
184
- var checkSelectedAreas = (0, _react.useCallback)(function () {
183
+ }, [slidesCompleted, loadPuzzleStatus, onComplete]);
184
+
185
+ var checkSelectedAreas = function checkSelectedAreas() {
185
186
  var areasSelected = currentImageProps.hasClickOnce ? currentImageProps.areas.length : 1;
186
187
  currentSelected.current += areasSelected;
188
+ console.info('checkSelectedAreas', currentSelected.current);
187
189
  setSelected(selected + areasSelected);
188
- }, [currentImageProps.areas.length, currentImageProps.hasClickOnce, selected, setSelected]);
190
+ };
191
+
189
192
  return /*#__PURE__*/_react.default.createElement(_imageClickWrapperComponent.default, _extends({
190
193
  key: index
191
194
  }, currentImageProps, {
@@ -198,7 +201,7 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
198
201
  emitError: setRewards,
199
202
  emitResolve: onResolve,
200
203
  isLast: index + 1 === list.length,
201
- defaultCompleted: currentPuzzleStatus,
204
+ defaultCompleted: slidesCompleted[index] || !!loadPuzzleStatus,
202
205
  hideContinue: !(index + 1 === list.length),
203
206
  handleClick: checkSelectedAreas,
204
207
  emitEvent: emitEvent,
@@ -90,12 +90,12 @@ var ComicComponent = function ComicComponent(_ref) {
90
90
  setStarted(false);
91
91
  setAudioFailed(false);
92
92
 
93
- if (slideCount + 1 < slides.length) {
93
+ if (slideCount + 1 < slides.length && !pause) {
94
94
  setTransition('slide-animation');
95
95
  setCount(slideCount + 1);
96
96
  setStarted(true);
97
97
  }
98
- }, [slideCount, slides === null || slides === void 0 ? void 0 : slides.length]);
98
+ }, [pause, slideCount, slides.length]);
99
99
  var goToPreviousSlide = (0, _react.useCallback)(function () {
100
100
  setStarted(false);
101
101
  setAudioFailed(false);
@@ -169,20 +169,19 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
169
169
  }, area);
170
170
  });
171
171
  var startCountDown = (0, _react.useCallback)(function () {
172
- var timeout = setInterval(function () {
173
- setCountDownTime(function (t) {
174
- return t - 1;
175
- });
176
- }, 1000);
177
- intervalForCountDown.current = timeout;
178
- }, []);
179
- (0, _react.useEffect)(function () {
180
- if (pause) {
181
- clearInterval(intervalForCountDown.current);
182
- } else {
183
- startCountDown();
172
+ if (!dialogForTimer) {
173
+ var timeout = setInterval(function () {
174
+ setCountDownTime(function (t) {
175
+ if (t > 1) {
176
+ return t - 1;
177
+ }
178
+
179
+ return 0;
180
+ });
181
+ }, 1000);
182
+ intervalForCountDown.current = timeout;
184
183
  }
185
- }, [pause, startCountDown]);
184
+ }, [dialogForTimer]);
186
185
  var handleFinish = (0, _react.useCallback)(function (rewards, success) {
187
186
  if (emitFinish) {
188
187
  emitFinish(rewards, success);
@@ -212,28 +211,31 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
212
211
  remainingTime.current = finalDate.current - pauseDate.current;
213
212
  clearListenerForActualDate();
214
213
  }, [clearListenerForActualDate]);
214
+ var feedbackError = (0, _react.useCallback)(function () {
215
+ setFeedbackData(function () {
216
+ var _info$timerFeedback, _info$timerFeedback2;
217
+
218
+ return {
219
+ show: true,
220
+ success: false,
221
+ text: info !== null && info !== void 0 && (_info$timerFeedback = info.timerFeedback) !== null && _info$timerFeedback !== void 0 && _info$timerFeedback.desc ? info.timerFeedback.desc : '',
222
+ rewards: info === null || info === void 0 ? void 0 : (_info$timerFeedback2 = info.timerFeedback) === null || _info$timerFeedback2 === void 0 ? void 0 : _info$timerFeedback2.rewards
223
+ };
224
+ });
225
+ setTimeExpired(true);
226
+ clearIntervalForCountDown();
227
+ clearListenerForActualDate();
228
+ }, [clearIntervalForCountDown, clearListenerForActualDate, (_info$timerFeedback3 = info.timerFeedback) === null || _info$timerFeedback3 === void 0 ? void 0 : _info$timerFeedback3.desc, (_info$timerFeedback4 = info.timerFeedback) === null || _info$timerFeedback4 === void 0 ? void 0 : _info$timerFeedback4.rewards]);
215
229
  var listenerForActualDate = (0, _react.useCallback)(function () {
216
230
  clearInterval(intervalForActualDate.current);
217
231
  intervalForActualDate.current = setInterval(function () {
218
232
  actualDate.current = Date.now(); // show timerFeedback when finish the time
219
233
 
220
234
  if (actualDate.current > finalDate.current) {
221
- setFeedbackData(function () {
222
- var _info$timerFeedback, _info$timerFeedback2;
223
-
224
- return {
225
- show: true,
226
- success: false,
227
- text: info !== null && info !== void 0 && (_info$timerFeedback = info.timerFeedback) !== null && _info$timerFeedback !== void 0 && _info$timerFeedback.desc ? info.timerFeedback.desc : '',
228
- rewards: info === null || info === void 0 ? void 0 : (_info$timerFeedback2 = info.timerFeedback) === null || _info$timerFeedback2 === void 0 ? void 0 : _info$timerFeedback2.rewards
229
- };
230
- });
231
- setTimeExpired(true);
232
- clearIntervalForCountDown();
233
- clearListenerForActualDate();
235
+ feedbackError();
234
236
  }
235
237
  }, 250);
236
- }, [clearListenerForActualDate, clearIntervalForCountDown, (_info$timerFeedback3 = info.timerFeedback) === null || _info$timerFeedback3 === void 0 ? void 0 : _info$timerFeedback3.desc, (_info$timerFeedback4 = info.timerFeedback) === null || _info$timerFeedback4 === void 0 ? void 0 : _info$timerFeedback4.rewards]);
238
+ }, [feedbackError]);
237
239
  (0, _react.useEffect)(function () {
238
240
  if ((areas.length === clickedZones.length || hasClickOnce && clickedZones.length > 0) && !completed) {
239
241
  var _specificFeedbacks$co;
@@ -457,6 +459,17 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
457
459
  }
458
460
  }
459
461
  }, [createStartAndEndDate, defaultCompleted, firstTryForFrame, puzzlesAutoCompleted, slideNumber, timer]);
462
+ (0, _react.useEffect)(function () {
463
+ if (timer && countDownTime === 0) feedbackError();
464
+ }, [countDownTime, feedbackError, timer]);
465
+ (0, _react.useEffect)(function () {
466
+ if (pause) {
467
+ clearIntervalForCountDown();
468
+ pauseTheCounter();
469
+ } else {
470
+ startCountDown();
471
+ }
472
+ }, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown]);
460
473
  return /*#__PURE__*/_react.default.createElement("div", {
461
474
  className: className
462
475
  }, feedbackData.show ? /*#__PURE__*/_react.default.createElement(_FeedbackComponent.default, {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@gamelearn/arcade-components",
3
3
  "author": "Gamelearn",
4
4
  "license": "unlicense",
5
- "version": "2.5.2",
5
+ "version": "2.5.5",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",