@searpent/react-image-annotate 2.0.51 → 2.0.53
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/Annotator/examplePhotos.js +2 -2
- package/Annotator/index.js +87 -170
- package/Annotator/reducers/general-reducer.js +62 -28
- package/MainLayout/index.js +11 -14
- package/PageSelector/index.js +25 -19
- package/PageSelector/page-selector.css +26 -0
- package/package.json +1 -1
|
@@ -778,7 +778,7 @@ var examplePhotos = [{
|
|
|
778
778
|
"key": "mutation",
|
|
779
779
|
"value": "hřensko"
|
|
780
780
|
}],
|
|
781
|
-
"lockedUntil": ""
|
|
781
|
+
"lockedUntil": "2023-01-28T11:35:00.000Z"
|
|
782
782
|
}, {
|
|
783
783
|
"id": "431fc636-d6d1-4e20-a35b-cc7a201c1833",
|
|
784
784
|
"fullsize": {
|
|
@@ -1330,7 +1330,7 @@ var examplePhotos = [{
|
|
|
1330
1330
|
"key": "pageNumber",
|
|
1331
1331
|
"value": "2"
|
|
1332
1332
|
}],
|
|
1333
|
-
"lockedUntil":
|
|
1333
|
+
"lockedUntil": null
|
|
1334
1334
|
}, {
|
|
1335
1335
|
"id": "45f79ec8-fd2e-4ad8-82f6-007a2eec2b97",
|
|
1336
1336
|
"fullsize": {
|
package/Annotator/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
|
3
3
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
4
4
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
|
|
5
5
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
6
|
-
import React, { useEffect, useReducer } from "react";
|
|
6
|
+
import React, { useCallback, useEffect, useReducer } from "react";
|
|
7
7
|
import makeImmutable, { without } from "seamless-immutable";
|
|
8
8
|
import intersection from "lodash/intersection";
|
|
9
9
|
import MainLayout from "../MainLayout";
|
|
@@ -78,8 +78,6 @@ export var Annotator = function Annotator(_ref) {
|
|
|
78
78
|
_ref$clsColors = _ref.clsColors,
|
|
79
79
|
clsColors = _ref$clsColors === void 0 ? {} : _ref$clsColors,
|
|
80
80
|
groupColors = _ref.groupColors,
|
|
81
|
-
onRecalc = _ref.onRecalc,
|
|
82
|
-
onSave = _ref.onSave,
|
|
83
81
|
onSelectedImageChange = _ref.onSelectedImageChange,
|
|
84
82
|
albumMetadata = _ref.albumMetadata,
|
|
85
83
|
metadataConfigs = _ref.metadataConfigs,
|
|
@@ -137,7 +135,8 @@ export var Annotator = function Annotator(_ref) {
|
|
|
137
135
|
return i.lockedUntil;
|
|
138
136
|
}).map(function (i) {
|
|
139
137
|
return i.id;
|
|
140
|
-
}))
|
|
138
|
+
})),
|
|
139
|
+
toSaveImage: null
|
|
141
140
|
}))),
|
|
142
141
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
143
142
|
state = _useReducer2[0],
|
|
@@ -163,98 +162,6 @@ export var Annotator = function Annotator(_ref) {
|
|
|
163
162
|
});
|
|
164
163
|
});
|
|
165
164
|
|
|
166
|
-
var handleSaveClick =
|
|
167
|
-
/*#__PURE__*/
|
|
168
|
-
function () {
|
|
169
|
-
var _ref2 = _asyncToGenerator(
|
|
170
|
-
/*#__PURE__*/
|
|
171
|
-
_regeneratorRuntime.mark(function _callee(e) {
|
|
172
|
-
var createdAt;
|
|
173
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
174
|
-
while (1) {
|
|
175
|
-
switch (_context.prev = _context.next) {
|
|
176
|
-
case 0:
|
|
177
|
-
createdAt = new Date();
|
|
178
|
-
e.preventDefault();
|
|
179
|
-
|
|
180
|
-
if (!onSave) {
|
|
181
|
-
_context.next = 6;
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
_context.next = 5;
|
|
186
|
-
return onSave({
|
|
187
|
-
images: state.images,
|
|
188
|
-
albumMetadata: state.albumMetadata,
|
|
189
|
-
createdAt: createdAt,
|
|
190
|
-
selectedImage: state === null || state === void 0 ? void 0 : state.selectedImage
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
case 5:
|
|
194
|
-
dispatchToReducer({
|
|
195
|
-
type: "IMAGES_SAVED",
|
|
196
|
-
savedAt: createdAt
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
case 6:
|
|
200
|
-
case "end":
|
|
201
|
-
return _context.stop();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}, _callee);
|
|
205
|
-
}));
|
|
206
|
-
|
|
207
|
-
return function handleSaveClick(_x) {
|
|
208
|
-
return _ref2.apply(this, arguments);
|
|
209
|
-
};
|
|
210
|
-
}();
|
|
211
|
-
|
|
212
|
-
var handleRecalcClick =
|
|
213
|
-
/*#__PURE__*/
|
|
214
|
-
function () {
|
|
215
|
-
var _ref3 = _asyncToGenerator(
|
|
216
|
-
/*#__PURE__*/
|
|
217
|
-
_regeneratorRuntime.mark(function _callee2(e) {
|
|
218
|
-
var createdAt;
|
|
219
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
220
|
-
while (1) {
|
|
221
|
-
switch (_context2.prev = _context2.next) {
|
|
222
|
-
case 0:
|
|
223
|
-
createdAt = new Date();
|
|
224
|
-
e.preventDefault();
|
|
225
|
-
|
|
226
|
-
if (!onRecalc) {
|
|
227
|
-
_context2.next = 6;
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
_context2.next = 5;
|
|
232
|
-
return onRecalc({
|
|
233
|
-
images: state.images,
|
|
234
|
-
albumMetadata: state.albumMetadata,
|
|
235
|
-
createdAt: createdAt,
|
|
236
|
-
selectedImage: state === null || state === void 0 ? void 0 : state.selectedImage
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
case 5:
|
|
240
|
-
dispatchToReducer({
|
|
241
|
-
type: "IMAGES_RECALCULATED",
|
|
242
|
-
recalculatedAt: createdAt
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
case 6:
|
|
246
|
-
case "end":
|
|
247
|
-
return _context2.stop();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}, _callee2);
|
|
251
|
-
}));
|
|
252
|
-
|
|
253
|
-
return function handleRecalcClick(_x2) {
|
|
254
|
-
return _ref3.apply(this, arguments);
|
|
255
|
-
};
|
|
256
|
-
}();
|
|
257
|
-
|
|
258
165
|
var handleMetadataChange = function handleMetadataChange(params) {
|
|
259
166
|
dispatchToReducer(_objectSpread({
|
|
260
167
|
type: "UPDATE_METADATA"
|
|
@@ -266,8 +173,15 @@ export var Annotator = function Annotator(_ref) {
|
|
|
266
173
|
type: "ADD_GROUP",
|
|
267
174
|
group: group
|
|
268
175
|
});
|
|
269
|
-
};
|
|
176
|
+
};
|
|
270
177
|
|
|
178
|
+
var handleRecalcClicked = useCallback(function (_ref2) {
|
|
179
|
+
var imageId = _ref2.imageId;
|
|
180
|
+
dispatchToReducer({
|
|
181
|
+
type: "RECALC_CLICKED",
|
|
182
|
+
imageId: imageId
|
|
183
|
+
});
|
|
184
|
+
}, [dispatchToReducer]); // detect on page change if anything changed, if so trigger save and recalc
|
|
271
185
|
|
|
272
186
|
useEffect(function () {
|
|
273
187
|
var selectedImage = state.selectedImage,
|
|
@@ -277,25 +191,51 @@ export var Annotator = function Annotator(_ref) {
|
|
|
277
191
|
if ((lastAction === null || lastAction === void 0 ? void 0 : lastAction.type) === 'SELECT_IMAGE' && selectedImage !== previouslySelectedImage) {
|
|
278
192
|
var _state$images$previou, _state$images$previou2;
|
|
279
193
|
|
|
194
|
+
// save if previously selected image has any changes
|
|
195
|
+
if (((_state$images$previou = state.images[previouslySelectedImage]) === null || _state$images$previou === void 0 ? void 0 : (_state$images$previou2 = _state$images$previou.saveableActions) === null || _state$images$previou2 === void 0 ? void 0 : _state$images$previou2.length) > 0) {
|
|
196
|
+
var _state$images$previou3, _state$images$previou4;
|
|
197
|
+
|
|
198
|
+
// decide wheather recalc is needed
|
|
199
|
+
var triggerRecalc = intersection(reacalcActionsEnum, state.images[previouslySelectedImage].saveableActions).length > 0; // decide whether album metadata should be updated
|
|
200
|
+
|
|
201
|
+
var toSaveMetadata = [];
|
|
202
|
+
|
|
203
|
+
if ((_state$images$previou3 = state.images[previouslySelectedImage]) === null || _state$images$previou3 === void 0 ? void 0 : (_state$images$previou4 = _state$images$previou3.saveableActions) === null || _state$images$previou4 === void 0 ? void 0 : _state$images$previou4.includes("UPDATE_ALBUM_METADATA")) {
|
|
204
|
+
toSaveMetadata = state.albumMetadata;
|
|
205
|
+
} // set this image to be saved
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
dispatchToReducer({
|
|
209
|
+
type: "SAVE_IMAGE",
|
|
210
|
+
image: _objectSpread({}, state.images[previouslySelectedImage]),
|
|
211
|
+
triggerRecalc: triggerRecalc,
|
|
212
|
+
toSaveMetadata: toSaveMetadata
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}, [state.previouslySelectedImage, state.selectedImage, state.images, state, save]); // handle save of image
|
|
217
|
+
|
|
218
|
+
useEffect(function () {
|
|
219
|
+
if (state.toSaveImage !== null) {
|
|
280
220
|
// metadata on album level
|
|
281
221
|
var saveHandler =
|
|
282
222
|
/*#__PURE__*/
|
|
283
223
|
function () {
|
|
284
|
-
var
|
|
224
|
+
var _ref3 = _asyncToGenerator(
|
|
285
225
|
/*#__PURE__*/
|
|
286
|
-
_regeneratorRuntime.mark(function
|
|
287
|
-
var
|
|
226
|
+
_regeneratorRuntime.mark(function _callee(image, triggerRecalc, albumMetadata) {
|
|
227
|
+
var _ref4, lockedUntil;
|
|
288
228
|
|
|
289
|
-
return _regeneratorRuntime.wrap(function
|
|
229
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
290
230
|
while (1) {
|
|
291
|
-
switch (
|
|
231
|
+
switch (_context.prev = _context.next) {
|
|
292
232
|
case 0:
|
|
293
233
|
dispatchToReducer({
|
|
294
234
|
type: "IMAGE_UPDATE_INIT",
|
|
295
235
|
imageId: image.id
|
|
296
236
|
});
|
|
297
|
-
|
|
298
|
-
|
|
237
|
+
_context.prev = 1;
|
|
238
|
+
_context.next = 4;
|
|
299
239
|
return save({
|
|
300
240
|
image: image,
|
|
301
241
|
triggerRecalc: triggerRecalc,
|
|
@@ -303,61 +243,50 @@ export var Annotator = function Annotator(_ref) {
|
|
|
303
243
|
});
|
|
304
244
|
|
|
305
245
|
case 4:
|
|
306
|
-
|
|
307
|
-
lockedUntil =
|
|
246
|
+
_ref4 = _context.sent;
|
|
247
|
+
lockedUntil = _ref4.lockedUntil;
|
|
308
248
|
dispatchToReducer({
|
|
309
249
|
type: "IMAGE_UPDATE_SUCCESS",
|
|
310
250
|
imageId: image.id,
|
|
311
251
|
lockedUntil: lockedUntil
|
|
312
252
|
});
|
|
313
|
-
|
|
253
|
+
_context.next = 12;
|
|
314
254
|
break;
|
|
315
255
|
|
|
316
256
|
case 9:
|
|
317
|
-
|
|
318
|
-
|
|
257
|
+
_context.prev = 9;
|
|
258
|
+
_context.t0 = _context["catch"](1);
|
|
319
259
|
dispatchToReducer({
|
|
320
260
|
type: "IMAGE_UPDATE_FAIL",
|
|
321
261
|
imageId: image.id,
|
|
322
|
-
error:
|
|
262
|
+
error: _context.t0
|
|
323
263
|
});
|
|
324
264
|
|
|
325
265
|
case 12:
|
|
326
266
|
case "end":
|
|
327
|
-
return
|
|
267
|
+
return _context.stop();
|
|
328
268
|
}
|
|
329
269
|
}
|
|
330
|
-
},
|
|
270
|
+
}, _callee, null, [[1, 9]]);
|
|
331
271
|
}));
|
|
332
272
|
|
|
333
|
-
return function saveHandler(
|
|
334
|
-
return
|
|
273
|
+
return function saveHandler(_x, _x2, _x3) {
|
|
274
|
+
return _ref3.apply(this, arguments);
|
|
335
275
|
};
|
|
336
|
-
}();
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
if (((_state$images$previou = state.images[previouslySelectedImage]) === null || _state$images$previou === void 0 ? void 0 : (_state$images$previou2 = _state$images$previou.saveableActions) === null || _state$images$previou2 === void 0 ? void 0 : _state$images$previou2.length) > 0) {
|
|
340
|
-
var _state$images$previou3, _state$images$previou4;
|
|
276
|
+
}();
|
|
341
277
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
if ((_state$images$previou3 = state.images[previouslySelectedImage]) === null || _state$images$previou3 === void 0 ? void 0 : (_state$images$previou4 = _state$images$previou3.saveableActions) === null || _state$images$previou4 === void 0 ? void 0 : _state$images$previou4.includes("UPDATE_ALBUM_METADATA")) {
|
|
348
|
-
toSaveMetadata = state.albumMetadata;
|
|
349
|
-
} // save image
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
saveHandler(_objectSpread({}, state.images[previouslySelectedImage]), triggerRecalc, toSaveMetadata);
|
|
353
|
-
}
|
|
278
|
+
var _state$toSaveImage = state.toSaveImage,
|
|
279
|
+
image = _state$toSaveImage.image,
|
|
280
|
+
triggerRecalc = _state$toSaveImage.triggerRecalc,
|
|
281
|
+
toSaveMetadata = _state$toSaveImage.toSaveMetadata;
|
|
282
|
+
saveHandler(image, triggerRecalc, toSaveMetadata);
|
|
354
283
|
}
|
|
355
|
-
}, [
|
|
284
|
+
}, [save, state.toSaveImage]); // polling of images
|
|
356
285
|
|
|
357
286
|
useEffect(function () {
|
|
358
287
|
if (state.toPollImages.length > 0) {
|
|
359
288
|
var polledImages = state.toPollImages.reduce(function (acc, imageId) {
|
|
360
|
-
function pollImage(
|
|
289
|
+
function pollImage(_x4, _x5) {
|
|
361
290
|
return _pollImage.apply(this, arguments);
|
|
362
291
|
} // make recursive calling of polling function
|
|
363
292
|
|
|
@@ -365,20 +294,20 @@ export var Annotator = function Annotator(_ref) {
|
|
|
365
294
|
function _pollImage() {
|
|
366
295
|
_pollImage = _asyncToGenerator(
|
|
367
296
|
/*#__PURE__*/
|
|
368
|
-
_regeneratorRuntime.mark(function
|
|
297
|
+
_regeneratorRuntime.mark(function _callee2(fetchImage, imageId) {
|
|
369
298
|
var tries,
|
|
370
|
-
|
|
299
|
+
_ref5,
|
|
371
300
|
image,
|
|
372
|
-
|
|
301
|
+
_args2 = arguments;
|
|
373
302
|
|
|
374
|
-
return _regeneratorRuntime.wrap(function
|
|
303
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
375
304
|
while (1) {
|
|
376
|
-
switch (
|
|
305
|
+
switch (_context2.prev = _context2.next) {
|
|
377
306
|
case 0:
|
|
378
|
-
tries =
|
|
307
|
+
tries = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : 5;
|
|
379
308
|
|
|
380
309
|
if (!(tries === 0)) {
|
|
381
|
-
|
|
310
|
+
_context2.next = 4;
|
|
382
311
|
break;
|
|
383
312
|
}
|
|
384
313
|
|
|
@@ -386,20 +315,20 @@ export var Annotator = function Annotator(_ref) {
|
|
|
386
315
|
type: "IMAGE_POLL_TIMEOUT",
|
|
387
316
|
imageId: imageId
|
|
388
317
|
});
|
|
389
|
-
return
|
|
318
|
+
return _context2.abrupt("return");
|
|
390
319
|
|
|
391
320
|
case 4:
|
|
392
|
-
|
|
321
|
+
_context2.next = 6;
|
|
393
322
|
return fetchImage({
|
|
394
323
|
imageId: imageId
|
|
395
324
|
});
|
|
396
325
|
|
|
397
326
|
case 6:
|
|
398
|
-
|
|
399
|
-
image =
|
|
327
|
+
_ref5 = _context2.sent;
|
|
328
|
+
image = _ref5.image;
|
|
400
329
|
|
|
401
330
|
if (image.lockedUntil) {
|
|
402
|
-
|
|
331
|
+
_context2.next = 11;
|
|
403
332
|
break;
|
|
404
333
|
}
|
|
405
334
|
|
|
@@ -407,25 +336,25 @@ export var Annotator = function Annotator(_ref) {
|
|
|
407
336
|
type: "IMAGE_POLL_SUCCESS",
|
|
408
337
|
image: image
|
|
409
338
|
});
|
|
410
|
-
return
|
|
339
|
+
return _context2.abrupt("return");
|
|
411
340
|
|
|
412
341
|
case 11:
|
|
413
|
-
|
|
342
|
+
_context2.next = 13;
|
|
414
343
|
return sleep(5000);
|
|
415
344
|
|
|
416
345
|
case 13:
|
|
417
|
-
|
|
346
|
+
_context2.next = 15;
|
|
418
347
|
return pollImage(fetchImage, imageId, tries - 1);
|
|
419
348
|
|
|
420
349
|
case 15:
|
|
421
|
-
return
|
|
350
|
+
return _context2.abrupt("return", _context2.sent);
|
|
422
351
|
|
|
423
352
|
case 16:
|
|
424
353
|
case "end":
|
|
425
|
-
return
|
|
354
|
+
return _context2.stop();
|
|
426
355
|
}
|
|
427
356
|
}
|
|
428
|
-
},
|
|
357
|
+
}, _callee2);
|
|
429
358
|
}));
|
|
430
359
|
return _pollImage.apply(this, arguments);
|
|
431
360
|
}
|
|
@@ -438,18 +367,7 @@ export var Annotator = function Annotator(_ref) {
|
|
|
438
367
|
imageIds: polledImages
|
|
439
368
|
});
|
|
440
369
|
}
|
|
441
|
-
}, [fetchImage, state.toPollImages]);
|
|
442
|
-
// useEffect(() => {
|
|
443
|
-
// if (!state.lastAction || !["BEGIN_BOX_TRANSFORM", "CHANGE_REGION", "DELETE_REGION", "DELETE_SELECTED_REGION", "UPDATE_METADATA", "SELECT_CLASSIFICATION"].includes(state.lastAction.type)) { return }
|
|
444
|
-
// if (onImagesChange) {
|
|
445
|
-
// onImagesChange(state.images)
|
|
446
|
-
// }
|
|
447
|
-
// dispatchToReducer({
|
|
448
|
-
// type: "IMAGES_UPDATED",
|
|
449
|
-
// updatedAt: new Date()
|
|
450
|
-
// })
|
|
451
|
-
// }, [onImagesChange, state.images, state.lastAction])
|
|
452
|
-
|
|
370
|
+
}, [fetchImage, state.toPollImages]);
|
|
453
371
|
useEffect(function () {
|
|
454
372
|
if (selectedImage === undefined) return;
|
|
455
373
|
dispatchToReducer({
|
|
@@ -460,10 +378,10 @@ export var Annotator = function Annotator(_ref) {
|
|
|
460
378
|
}, [onImagesChange, selectedImage]);
|
|
461
379
|
if (!images && !videoSrc) return 'Missing required prop "images" or "videoSrc"';
|
|
462
380
|
|
|
463
|
-
var
|
|
464
|
-
|
|
465
|
-
recalcActive =
|
|
466
|
-
saveActive =
|
|
381
|
+
var _ref6 = state.imagesSavedAt < state.imagesUpdatedAt ? [true, true] : [false, false],
|
|
382
|
+
_ref7 = _slicedToArray(_ref6, 2),
|
|
383
|
+
recalcActive = _ref7[0],
|
|
384
|
+
saveActive = _ref7[1];
|
|
467
385
|
|
|
468
386
|
return React.createElement(SettingsProvider, {
|
|
469
387
|
clsColors: clsColors,
|
|
@@ -489,12 +407,11 @@ export var Annotator = function Annotator(_ref) {
|
|
|
489
407
|
hideNotEditingLabel: hideNotEditingLabel,
|
|
490
408
|
showEditor: showEditor,
|
|
491
409
|
showPageSelector: showPageSelector,
|
|
492
|
-
onRecalc: handleRecalcClick,
|
|
493
|
-
onSave: handleSaveClick,
|
|
494
410
|
saveActive: recalcActive,
|
|
495
411
|
recalcActive: saveActive,
|
|
496
412
|
onMetadataChange: handleMetadataChange,
|
|
497
|
-
onAddGroup: handleAddGroup
|
|
413
|
+
onAddGroup: handleAddGroup,
|
|
414
|
+
onRecalcClick: handleRecalcClicked
|
|
498
415
|
}));
|
|
499
416
|
};
|
|
500
417
|
export default Annotator;
|
|
@@ -1266,7 +1266,19 @@ export default (function (state, action) {
|
|
|
1266
1266
|
// )
|
|
1267
1267
|
}
|
|
1268
1268
|
|
|
1269
|
-
case "
|
|
1269
|
+
case "SAVE_IMAGE":
|
|
1270
|
+
{
|
|
1271
|
+
var image = action.image,
|
|
1272
|
+
triggerRecalc = action.triggerRecalc,
|
|
1273
|
+
toSaveMetadata = action.toSaveMetadata;
|
|
1274
|
+
return setIn(state, ["toSaveImage"], {
|
|
1275
|
+
image: image,
|
|
1276
|
+
triggerRecalc: triggerRecalc,
|
|
1277
|
+
toSaveMetadata: toSaveMetadata
|
|
1278
|
+
});
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
case "RECALC_CLICKED":
|
|
1270
1282
|
{
|
|
1271
1283
|
var imageId = action.imageId;
|
|
1272
1284
|
var imageIdx = state.images.findIndex(function (i) {
|
|
@@ -1277,7 +1289,29 @@ export default (function (state, action) {
|
|
|
1277
1289
|
throw new Error("failed to find index of image with id ".concat(imageId));
|
|
1278
1290
|
}
|
|
1279
1291
|
|
|
1280
|
-
|
|
1292
|
+
var _image = _objectSpread({}, state.images[imageIdx]);
|
|
1293
|
+
|
|
1294
|
+
return setIn(state, ["toSaveImage"], {
|
|
1295
|
+
image: _image,
|
|
1296
|
+
triggerRecalc: true,
|
|
1297
|
+
toSaveMetadata: []
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
case "IMAGE_UPDATE_INIT":
|
|
1302
|
+
{
|
|
1303
|
+
var _imageId = action.imageId;
|
|
1304
|
+
|
|
1305
|
+
var _imageIdx = state.images.findIndex(function (i) {
|
|
1306
|
+
return i.id === _imageId;
|
|
1307
|
+
});
|
|
1308
|
+
|
|
1309
|
+
if (_imageIdx < 0) {
|
|
1310
|
+
throw new Error("failed to find index of image with id ".concat(_imageId));
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
state = setIn(state, ["toSaveImage"], null);
|
|
1314
|
+
return setIn(state, ["images", _imageIdx], _objectSpread({}, state.images[_imageIdx], {
|
|
1281
1315
|
lockedUntil: defaultLockedUntil(),
|
|
1282
1316
|
syncError: null,
|
|
1283
1317
|
saveableActions: []
|
|
@@ -1286,23 +1320,23 @@ export default (function (state, action) {
|
|
|
1286
1320
|
|
|
1287
1321
|
case "IMAGE_UPDATE_SUCCESS":
|
|
1288
1322
|
{
|
|
1289
|
-
var
|
|
1323
|
+
var _imageId2 = action.imageId,
|
|
1290
1324
|
lockedUntil = action.lockedUntil;
|
|
1291
1325
|
|
|
1292
|
-
var
|
|
1293
|
-
return i.id ===
|
|
1326
|
+
var _imageIdx2 = state.images.findIndex(function (i) {
|
|
1327
|
+
return i.id === _imageId2;
|
|
1294
1328
|
});
|
|
1295
1329
|
|
|
1296
|
-
if (
|
|
1297
|
-
throw new Error("failed to find index of image with id ".concat(
|
|
1330
|
+
if (_imageIdx2 < 0) {
|
|
1331
|
+
throw new Error("failed to find index of image with id ".concat(_imageId2));
|
|
1298
1332
|
} // if there is lockedUntil set, it means we need to poll for updated
|
|
1299
1333
|
|
|
1300
1334
|
|
|
1301
1335
|
if (lockedUntil) {
|
|
1302
|
-
state = setIn(state, ["toPollImages"], uniq([].concat(_toConsumableArray(state.toPollImages), [
|
|
1336
|
+
state = setIn(state, ["toPollImages"], uniq([].concat(_toConsumableArray(state.toPollImages), [_imageId2])));
|
|
1303
1337
|
}
|
|
1304
1338
|
|
|
1305
|
-
return setIn(state, ["images",
|
|
1339
|
+
return setIn(state, ["images", _imageIdx2], _objectSpread({}, state.images[_imageIdx2], {
|
|
1306
1340
|
lockedUntil: lockedUntil,
|
|
1307
1341
|
syncError: null
|
|
1308
1342
|
}));
|
|
@@ -1310,18 +1344,18 @@ export default (function (state, action) {
|
|
|
1310
1344
|
|
|
1311
1345
|
case "IMAGE_UPDATE_FAIL":
|
|
1312
1346
|
{
|
|
1313
|
-
var
|
|
1347
|
+
var _imageId3 = action.imageId,
|
|
1314
1348
|
error = action.error;
|
|
1315
1349
|
|
|
1316
|
-
var
|
|
1317
|
-
return i.id ===
|
|
1350
|
+
var _imageIdx3 = state.images.findIndex(function (i) {
|
|
1351
|
+
return i.id === _imageId3;
|
|
1318
1352
|
});
|
|
1319
1353
|
|
|
1320
|
-
if (
|
|
1321
|
-
throw new Error("failed to find index of image with id ".concat(
|
|
1354
|
+
if (_imageIdx3 < 0) {
|
|
1355
|
+
throw new Error("failed to find index of image with id ".concat(_imageId3));
|
|
1322
1356
|
}
|
|
1323
1357
|
|
|
1324
|
-
return setIn(state, ["images",
|
|
1358
|
+
return setIn(state, ["images", _imageIdx3], _objectSpread({}, state.images[_imageIdx3], {
|
|
1325
1359
|
lockedUntil: null,
|
|
1326
1360
|
syncError: error
|
|
1327
1361
|
}));
|
|
@@ -1337,35 +1371,35 @@ export default (function (state, action) {
|
|
|
1337
1371
|
|
|
1338
1372
|
case "IMAGE_POLL_SUCCESS":
|
|
1339
1373
|
{
|
|
1340
|
-
var
|
|
1374
|
+
var _image2 = action.image;
|
|
1341
1375
|
|
|
1342
|
-
var
|
|
1343
|
-
return i.id ===
|
|
1376
|
+
var _imageIdx4 = state.images.findIndex(function (i) {
|
|
1377
|
+
return i.id === _image2.id;
|
|
1344
1378
|
});
|
|
1345
1379
|
|
|
1346
|
-
if (
|
|
1347
|
-
throw new Error("failed to find index of image with id ".concat(
|
|
1380
|
+
if (_imageIdx4 < 0) {
|
|
1381
|
+
throw new Error("failed to find index of image with id ".concat(_image2.id));
|
|
1348
1382
|
}
|
|
1349
1383
|
|
|
1350
|
-
return setIn(state, ["images",
|
|
1384
|
+
return setIn(state, ["images", _imageIdx4], _objectSpread({}, state.images[_imageIdx4], {
|
|
1351
1385
|
lockedUntil: null,
|
|
1352
1386
|
syncError: null
|
|
1353
|
-
},
|
|
1387
|
+
}, _image2));
|
|
1354
1388
|
}
|
|
1355
1389
|
|
|
1356
1390
|
case "IMAGE_POLL_TIMEOUT":
|
|
1357
1391
|
{
|
|
1358
|
-
var
|
|
1392
|
+
var _imageId4 = action.imageId;
|
|
1359
1393
|
|
|
1360
|
-
var
|
|
1361
|
-
return i.id ===
|
|
1394
|
+
var _imageIdx5 = state.images.findIndex(function (i) {
|
|
1395
|
+
return i.id === _imageId4;
|
|
1362
1396
|
});
|
|
1363
1397
|
|
|
1364
|
-
if (
|
|
1365
|
-
throw new Error("failed to find index of image with id ".concat(
|
|
1398
|
+
if (_imageIdx5 < 0) {
|
|
1399
|
+
throw new Error("failed to find index of image with id ".concat(_imageId4));
|
|
1366
1400
|
}
|
|
1367
1401
|
|
|
1368
|
-
return setIn(state, ["images",
|
|
1402
|
+
return setIn(state, ["images", _imageIdx5], _objectSpread({}, state.images[_imageIdx5], {
|
|
1369
1403
|
lockedUntil: null,
|
|
1370
1404
|
syncError: new Error("polling timeout")
|
|
1371
1405
|
}));
|
package/MainLayout/index.js
CHANGED
|
@@ -37,7 +37,9 @@ import regionsToBlocks from '../utils/regions-to-blocks';
|
|
|
37
37
|
import PageSelector from "../PageSelector";
|
|
38
38
|
import regionsGroups from '../utils/regions-groups';
|
|
39
39
|
import RightSidebarItemsWrapper from './RightSidebarItemsWrapper';
|
|
40
|
-
import Locker from '../Locker';
|
|
40
|
+
import Locker from '../Locker';
|
|
41
|
+
import { reacalcActionsEnum } from "../utils/saveable-actions-enum";
|
|
42
|
+
import intersection from "lodash/intersection"; // import Fullscreen from "../Fullscreen"
|
|
41
43
|
|
|
42
44
|
var emptyArr = [];
|
|
43
45
|
var theme = createTheme();
|
|
@@ -85,7 +87,7 @@ var EditorWrapper = styled("div")(function (_ref4) {
|
|
|
85
87
|
};
|
|
86
88
|
});
|
|
87
89
|
export var MainLayout = function MainLayout(_ref5) {
|
|
88
|
-
var _state$images$state$s, _state$images$state$s2;
|
|
90
|
+
var _state$images$state$s, _state$images$state$s2, _state$images$state$s3;
|
|
89
91
|
|
|
90
92
|
var state = _ref5.state,
|
|
91
93
|
dispatch = _ref5.dispatch,
|
|
@@ -121,16 +123,13 @@ export var MainLayout = function MainLayout(_ref5) {
|
|
|
121
123
|
showEditor = _ref5$showEditor === void 0 ? false : _ref5$showEditor,
|
|
122
124
|
_ref5$showPageSelecto = _ref5.showPageSelector,
|
|
123
125
|
showPageSelector = _ref5$showPageSelecto === void 0 ? false : _ref5$showPageSelecto,
|
|
124
|
-
_ref5$onRecalc = _ref5.onRecalc,
|
|
125
|
-
onRecalc = _ref5$onRecalc === void 0 ? function () {} : _ref5$onRecalc,
|
|
126
|
-
_ref5$onSave = _ref5.onSave,
|
|
127
|
-
onSave = _ref5$onSave === void 0 ? function () {} : _ref5$onSave,
|
|
128
126
|
_ref5$recalcActive = _ref5.recalcActive,
|
|
129
127
|
recalcActive = _ref5$recalcActive === void 0 ? false : _ref5$recalcActive,
|
|
130
128
|
_ref5$saveActive = _ref5.saveActive,
|
|
131
129
|
saveActive = _ref5$saveActive === void 0 ? false : _ref5$saveActive,
|
|
132
130
|
onMetadataChange = _ref5.onMetadataChange,
|
|
133
|
-
onAddGroup = _ref5.onAddGroup
|
|
131
|
+
onAddGroup = _ref5.onAddGroup,
|
|
132
|
+
onRecalcClick = _ref5.onRecalcClick;
|
|
134
133
|
var classes = useStyles();
|
|
135
134
|
var settings = useSettings();
|
|
136
135
|
var fullScreenHandle = useFullScreenHandle();
|
|
@@ -305,7 +304,8 @@ export var MainLayout = function MainLayout(_ref5) {
|
|
|
305
304
|
})) === null || _i$metadata$find === void 0 ? void 0 : _i$metadata$find.value) || null,
|
|
306
305
|
metadata: i.metadata || [],
|
|
307
306
|
lockedUntil: i.lockedUntil,
|
|
308
|
-
syncError: i.syncError || null
|
|
307
|
+
syncError: i.syncError || null,
|
|
308
|
+
isRecalcReady: intersection(reacalcActionsEnum, state.images[idx].saveableActions).length > 0
|
|
309
309
|
};
|
|
310
310
|
});
|
|
311
311
|
|
|
@@ -316,7 +316,7 @@ export var MainLayout = function MainLayout(_ref5) {
|
|
|
316
316
|
});
|
|
317
317
|
};
|
|
318
318
|
|
|
319
|
-
var isSelectedImageLocked = false;
|
|
319
|
+
var isSelectedImageLocked = ((_state$images$state$s3 = state.images[state.selectedImage]) === null || _state$images$state$s3 === void 0 ? void 0 : _state$images$state$s3.lockedUntil) ? true : false;
|
|
320
320
|
return React.createElement(ThemeProvider, {
|
|
321
321
|
theme: theme
|
|
322
322
|
}, React.createElement(FullScreenContainer, null, React.createElement(FullScreen, {
|
|
@@ -343,12 +343,9 @@ export var MainLayout = function MainLayout(_ref5) {
|
|
|
343
343
|
}, showPageSelector && React.createElement(PageSelector, {
|
|
344
344
|
pages: pages,
|
|
345
345
|
onPageClick: handlePageClick,
|
|
346
|
-
onRecalc: onRecalc,
|
|
347
|
-
onSave: onSave,
|
|
348
|
-
saveActive: saveActive,
|
|
349
|
-
recalcActive: recalcActive,
|
|
350
346
|
onMetadataChange: onMetadataChange,
|
|
351
|
-
metadataConfigs: state.metadataConfigs || []
|
|
347
|
+
metadataConfigs: state.metadataConfigs || [],
|
|
348
|
+
onRecalcClick: onRecalcClick
|
|
352
349
|
}), React.createElement(WorkspaceWrapper, null, React.createElement(Workspace, {
|
|
353
350
|
style: {
|
|
354
351
|
width: "auto"
|
package/PageSelector/index.js
CHANGED
|
@@ -14,11 +14,15 @@ function PageThumbnail(_ref) {
|
|
|
14
14
|
metadata = _ref.metadata,
|
|
15
15
|
showMetadata = _ref.showMetadata,
|
|
16
16
|
imageIndex = _ref.imageIndex,
|
|
17
|
+
imageId = _ref.imageId,
|
|
17
18
|
onMetadataChange = _ref.onMetadataChange,
|
|
18
19
|
_ref$metadataConfigs = _ref.metadataConfigs,
|
|
19
20
|
metadataConfigs = _ref$metadataConfigs === void 0 ? [] : _ref$metadataConfigs,
|
|
20
21
|
isLocked = _ref.isLocked,
|
|
21
|
-
error = _ref.error
|
|
22
|
+
error = _ref.error,
|
|
23
|
+
onRecalcClick = _ref.onRecalcClick,
|
|
24
|
+
_ref$isRecalcReady = _ref.isRecalcReady,
|
|
25
|
+
isRecalcReady = _ref$isRecalcReady === void 0 ? false : _ref$isRecalcReady;
|
|
22
26
|
|
|
23
27
|
var handleChange = function handleChange(e) {
|
|
24
28
|
e.preventDefault();
|
|
@@ -32,6 +36,13 @@ function PageThumbnail(_ref) {
|
|
|
32
36
|
});
|
|
33
37
|
};
|
|
34
38
|
|
|
39
|
+
var handleRecalcClick = function handleRecalcClick(e) {
|
|
40
|
+
e.stopPropagation();
|
|
41
|
+
onRecalcClick({
|
|
42
|
+
imageId: imageId
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
35
46
|
var pageNumber = metadata === null || metadata === void 0 ? void 0 : (_metadata$find = metadata.find) === null || _metadata$find === void 0 ? void 0 : (_metadata$find$call = _metadata$find.call(metadata, function (md) {
|
|
36
47
|
return md.key === 'pageNumber';
|
|
37
48
|
})) === null || _metadata$find$call === void 0 ? void 0 : _metadata$find$call.value;
|
|
@@ -47,7 +58,12 @@ function PageThumbnail(_ref) {
|
|
|
47
58
|
errorMessage: error.message
|
|
48
59
|
}), React.createElement("div", {
|
|
49
60
|
className: "ps-page-thumbnail-image-wrapper"
|
|
50
|
-
}, React.createElement("
|
|
61
|
+
}, isRecalcReady && React.createElement("div", {
|
|
62
|
+
className: "ps-page-thumbnail-recalc-wrapper"
|
|
63
|
+
}, React.createElement("button", {
|
|
64
|
+
className: "recalc-button",
|
|
65
|
+
onClick: handleRecalcClick
|
|
66
|
+
}, "Extract")), React.createElement("img", {
|
|
51
67
|
src: src,
|
|
52
68
|
alt: "",
|
|
53
69
|
className: "ps-page-thumbnail-image"
|
|
@@ -102,12 +118,9 @@ function isLocked(page) {
|
|
|
102
118
|
function PageSelector(_ref3) {
|
|
103
119
|
var pages = _ref3.pages,
|
|
104
120
|
onPageClick = _ref3.onPageClick,
|
|
105
|
-
onRecalc = _ref3.onRecalc,
|
|
106
|
-
onSave = _ref3.onSave,
|
|
107
|
-
recalcActive = _ref3.recalcActive,
|
|
108
|
-
saveActive = _ref3.saveActive,
|
|
109
121
|
onMetadataChange = _ref3.onMetadataChange,
|
|
110
|
-
metadataConfigs = _ref3.metadataConfigs
|
|
122
|
+
metadataConfigs = _ref3.metadataConfigs,
|
|
123
|
+
onRecalcClick = _ref3.onRecalcClick;
|
|
111
124
|
|
|
112
125
|
var _useState = useState(false),
|
|
113
126
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -120,15 +133,7 @@ function PageSelector(_ref3) {
|
|
|
120
133
|
})
|
|
121
134
|
}, React.createElement("div", {
|
|
122
135
|
className: "top-buttons"
|
|
123
|
-
}, React.createElement("
|
|
124
|
-
onClick: onRecalc,
|
|
125
|
-
disabled: !recalcActive,
|
|
126
|
-
className: "info"
|
|
127
|
-
}, "Recalc"), React.createElement("button", {
|
|
128
|
-
onClick: onSave,
|
|
129
|
-
disabled: !saveActive,
|
|
130
|
-
className: "success"
|
|
131
|
-
}, "Save"), React.createElement("div", {
|
|
136
|
+
}, React.createElement("div", {
|
|
132
137
|
className: "show-metadata-wrapper"
|
|
133
138
|
}, React.createElement("label", {
|
|
134
139
|
className: "switch mr-2"
|
|
@@ -158,16 +163,17 @@ function PageSelector(_ref3) {
|
|
|
158
163
|
metadata: page.metadata,
|
|
159
164
|
showMetadata: showMetadata,
|
|
160
165
|
imageIndex: idx,
|
|
166
|
+
imageId: page.id,
|
|
161
167
|
onMetadataChange: onMetadataChange,
|
|
162
|
-
metadataConfigs: metadataConfigs
|
|
168
|
+
metadataConfigs: metadataConfigs,
|
|
169
|
+
onRecalcClick: onRecalcClick,
|
|
170
|
+
isRecalcReady: page.isRecalcReady
|
|
163
171
|
});
|
|
164
172
|
})));
|
|
165
173
|
}
|
|
166
174
|
|
|
167
175
|
PageSelector.defaultProps = {
|
|
168
176
|
onPageClick: function onPageClick() {},
|
|
169
|
-
onRecalc: function onRecalc() {},
|
|
170
|
-
onSave: function onSave() {},
|
|
171
177
|
recalcActive: false,
|
|
172
178
|
saveActive: false,
|
|
173
179
|
pageNumber: undefined
|
|
@@ -235,4 +235,30 @@ input:checked+.slider:before {
|
|
|
235
235
|
|
|
236
236
|
.mr-2 {
|
|
237
237
|
margin-right: 1rem;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.ps-page-thumbnail-recalc-wrapper {
|
|
241
|
+
width: 100%;
|
|
242
|
+
height: 100%;
|
|
243
|
+
background: linear-gradient(rgba(255, 255, 255, 0), #8898aa);
|
|
244
|
+
display: flex;
|
|
245
|
+
justify-content: center;
|
|
246
|
+
align-items: center;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.ps-page-thumbnail-recalc-wrapper>.recalc-button {
|
|
250
|
+
width: 80%;
|
|
251
|
+
height: 40%;
|
|
252
|
+
border: none;
|
|
253
|
+
background-image: linear-gradient(310deg, #377ceb, #a8b8d8);
|
|
254
|
+
color: white;
|
|
255
|
+
font-weight: 400;
|
|
256
|
+
border-radius: 8px !important;
|
|
257
|
+
transition: transform .2s;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.ps-page-thumbnail-recalc-wrapper>.recalc-button:hover {
|
|
261
|
+
cursor: pointer;
|
|
262
|
+
font-weight: 600;
|
|
263
|
+
transform: scale(1.15);
|
|
238
264
|
}
|