@gamelearn/arcade-components 2.5.2 → 2.5.6

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);
@@ -135,6 +135,7 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
135
135
  var pauseDate = (0, _react.useRef)(null);
136
136
  var whenCloseFeedbackDate = (0, _react.useRef)(null);
137
137
  var remainingTime = (0, _react.useRef)(null);
138
+ var cheatClue = (0, _react.useRef)(null);
138
139
  var intervalForCountDown = (0, _react.useRef)(null);
139
140
 
140
141
  var _useState13 = (0, _react.useState)(timer),
@@ -169,20 +170,19 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
169
170
  }, area);
170
171
  });
171
172
  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();
173
+ if (!dialogForTimer) {
174
+ var timeout = setInterval(function () {
175
+ setCountDownTime(function (t) {
176
+ if (t > 1) {
177
+ return t - 1;
178
+ }
179
+
180
+ return 0;
181
+ });
182
+ }, 1000);
183
+ intervalForCountDown.current = timeout;
184
184
  }
185
- }, [pause, startCountDown]);
185
+ }, [dialogForTimer]);
186
186
  var handleFinish = (0, _react.useCallback)(function (rewards, success) {
187
187
  if (emitFinish) {
188
188
  emitFinish(rewards, success);
@@ -212,28 +212,31 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
212
212
  remainingTime.current = finalDate.current - pauseDate.current;
213
213
  clearListenerForActualDate();
214
214
  }, [clearListenerForActualDate]);
215
+ var feedbackError = (0, _react.useCallback)(function () {
216
+ setFeedbackData(function () {
217
+ var _info$timerFeedback, _info$timerFeedback2;
218
+
219
+ return {
220
+ show: true,
221
+ success: false,
222
+ text: info !== null && info !== void 0 && (_info$timerFeedback = info.timerFeedback) !== null && _info$timerFeedback !== void 0 && _info$timerFeedback.desc ? info.timerFeedback.desc : '',
223
+ rewards: info === null || info === void 0 ? void 0 : (_info$timerFeedback2 = info.timerFeedback) === null || _info$timerFeedback2 === void 0 ? void 0 : _info$timerFeedback2.rewards
224
+ };
225
+ });
226
+ setTimeExpired(true);
227
+ clearIntervalForCountDown();
228
+ clearListenerForActualDate();
229
+ }, [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
230
  var listenerForActualDate = (0, _react.useCallback)(function () {
216
231
  clearInterval(intervalForActualDate.current);
217
232
  intervalForActualDate.current = setInterval(function () {
218
233
  actualDate.current = Date.now(); // show timerFeedback when finish the time
219
234
 
220
235
  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();
236
+ feedbackError();
234
237
  }
235
238
  }, 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]);
239
+ }, [feedbackError]);
237
240
  (0, _react.useEffect)(function () {
238
241
  if ((areas.length === clickedZones.length || hasClickOnce && clickedZones.length > 0) && !completed) {
239
242
  var _specificFeedbacks$co;
@@ -449,14 +452,26 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
449
452
  }, [clearIntervalForCountDown, timer, startCountDown, firstTryForFrame, listenerForActualDate, emitOpenPopupCounterInfo]);
450
453
  (0, _react.useEffect)(function () {
451
454
  // start automatically the time
452
- if (timer && slideNumber > 0) {
455
+ if (timer && slideNumber > 0 && !cheatClue.current) {
453
456
  if (firstTryForFrame && Object.keys(puzzlesAutoCompleted).length && puzzlesAutoCompleted[slideNumber - 1]) {
454
457
  setDialogForTimer(true);
458
+ cheatClue.current = true;
455
459
  } else {
456
- createStartAndEndDate();
460
+ setDialogForTimer(false);
457
461
  }
458
462
  }
459
463
  }, [createStartAndEndDate, defaultCompleted, firstTryForFrame, puzzlesAutoCompleted, slideNumber, timer]);
464
+ (0, _react.useEffect)(function () {
465
+ if (timer && countDownTime === 0) feedbackError();
466
+ }, [countDownTime, feedbackError, timer]);
467
+ (0, _react.useEffect)(function () {
468
+ if (pause) {
469
+ clearIntervalForCountDown();
470
+ pauseTheCounter();
471
+ } else {
472
+ startCountDown();
473
+ }
474
+ }, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown]);
460
475
  return /*#__PURE__*/_react.default.createElement("div", {
461
476
  className: className
462
477
  }, 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.6",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",
@@ -111,4 +111,4 @@
111
111
  "post-merge": "bash node_modules/@gamelearn/version/scripts/after_version_update.sh -p hooks.config"
112
112
  }
113
113
  }
114
- }
114
+ }