@searpent/react-image-annotate 2.0.41 → 2.0.43

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.
@@ -77,7 +77,8 @@ export var Annotator = function Annotator(_ref) {
77
77
  onRecalc = _ref.onRecalc,
78
78
  onSave = _ref.onSave,
79
79
  albumMetadata = _ref.albumMetadata,
80
- metadataConfigs = _ref.metadataConfigs;
80
+ metadataConfigs = _ref.metadataConfigs,
81
+ lockedImages = _ref.lockedImages;
81
82
 
82
83
  if (typeof selectedImage === "string") {
83
84
  selectedImage = (images || []).findIndex(function (img) {
@@ -172,7 +173,8 @@ export var Annotator = function Annotator(_ref) {
172
173
  return onSave({
173
174
  images: state.images,
174
175
  albumMetadata: state.albumMetadata,
175
- createdAt: createdAt
176
+ createdAt: createdAt,
177
+ selectedImage: state === null || state === void 0 ? void 0 : state.selectedImage
176
178
  });
177
179
 
178
180
  case 5:
@@ -274,7 +276,8 @@ export var Annotator = function Annotator(_ref) {
274
276
  saveActive: recalcActive,
275
277
  recalcActive: saveActive,
276
278
  onMetadataChange: handleMetadataChange,
277
- onAddGroup: handleAddGroup
279
+ onAddGroup: handleAddGroup,
280
+ lockedImages: lockedImages
278
281
  }));
279
282
  };
280
283
  export default Annotator;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import LockIcon from '@mui/icons-material/Lock';
3
+ import './locker.css';
4
+
5
+ function Locker() {
6
+ return React.createElement("div", {
7
+ className: "locker"
8
+ }, React.createElement(LockIcon, null));
9
+ }
10
+
11
+ export default Locker;
@@ -0,0 +1,21 @@
1
+ .locker {
2
+ position: absolute;
3
+ width: 100%;
4
+ height: 100%;
5
+ opacity: .75;
6
+ animation: skeleton-loading 1s linear infinite alternate;
7
+ z-index: 1000;
8
+ display: flex;
9
+ justify-content: center;
10
+ align-items: center;
11
+ }
12
+
13
+ @keyframes skeleton-loading {
14
+ 0% {
15
+ background-color: hsl(200, 20%, 80%);
16
+ }
17
+
18
+ 100% {
19
+ background-color: hsl(200, 20%, 95%);
20
+ }
21
+ }
@@ -36,7 +36,8 @@ import Editor from "../Editor";
36
36
  import regionsToBlocks from '../utils/regions-to-blocks';
37
37
  import PageSelector from "../PageSelector";
38
38
  import regionsGroups from '../utils/regions-groups';
39
- import RightSidebarItemsWrapper from './RightSidebarItemsWrapper'; // import Fullscreen from "../Fullscreen"
39
+ import RightSidebarItemsWrapper from './RightSidebarItemsWrapper';
40
+ import Locker from '../Locker'; // import Fullscreen from "../Fullscreen"
40
41
 
41
42
  var emptyArr = [];
42
43
  var theme = createTheme();
@@ -84,7 +85,7 @@ var EditorWrapper = styled("div")(function (_ref4) {
84
85
  };
85
86
  });
86
87
  export var MainLayout = function MainLayout(_ref5) {
87
- var _state$images$state$s, _state$images$state$s2;
88
+ var _state$images$state$s, _state$images$state$s2, _state$images$state$s3;
88
89
 
89
90
  var state = _ref5.state,
90
91
  dispatch = _ref5.dispatch,
@@ -129,7 +130,8 @@ export var MainLayout = function MainLayout(_ref5) {
129
130
  _ref5$saveActive = _ref5.saveActive,
130
131
  saveActive = _ref5$saveActive === void 0 ? false : _ref5$saveActive,
131
132
  onMetadataChange = _ref5.onMetadataChange,
132
- onAddGroup = _ref5.onAddGroup;
133
+ onAddGroup = _ref5.onAddGroup,
134
+ lockedImages = _ref5.lockedImages;
133
135
  var classes = useStyles();
134
136
  var settings = useSettings();
135
137
  var fullScreenHandle = useFullScreenHandle();
@@ -296,7 +298,7 @@ export var MainLayout = function MainLayout(_ref5) {
296
298
  var _i$metadata, _i$metadata$find;
297
299
 
298
300
  return {
299
- id: "".concat(idx),
301
+ id: "".concat(i.id),
300
302
  src: i.src,
301
303
  isActive: idx === state.selectedImage,
302
304
  pageNumber: (i === null || i === void 0 ? void 0 : (_i$metadata = i.metadata) === null || _i$metadata === void 0 ? void 0 : (_i$metadata$find = _i$metadata.find(function (md) {
@@ -313,6 +315,7 @@ export var MainLayout = function MainLayout(_ref5) {
313
315
  });
314
316
  };
315
317
 
318
+ var isSelectedImageLocked = lockedImages.includes(state === null || state === void 0 ? void 0 : (_state$images$state$s3 = state.images[state.selectedImage]) === null || _state$images$state$s3 === void 0 ? void 0 : _state$images$state$s3.id);
316
319
  return React.createElement(ThemeProvider, {
317
320
  theme: theme
318
321
  }, React.createElement(FullScreenContainer, null, React.createElement(FullScreen, {
@@ -338,6 +341,7 @@ export var MainLayout = function MainLayout(_ref5) {
338
341
  }
339
342
  }, showPageSelector && React.createElement(PageSelector, {
340
343
  pages: pages,
344
+ lockedImages: lockedImages,
341
345
  onPageClick: handlePageClick,
342
346
  onRecalc: onRecalc,
343
347
  onSave: onSave,
@@ -427,7 +431,7 @@ export var MainLayout = function MainLayout(_ref5) {
427
431
  }].filter(Boolean).filter(function (a) {
428
432
  return a.alwaysShowing || state.enabledTools.includes(a.name);
429
433
  }),
430
- rightSidebarItems: [React.createElement(RightSidebarItemsWrapper, null, [debugModeOn && React.createElement(DebugBox, {
434
+ rightSidebarItems: [React.createElement(RightSidebarItemsWrapper, null, [isSelectedImageLocked && React.createElement(Locker, null), debugModeOn && React.createElement(DebugBox, {
431
435
  state: debugModeOn,
432
436
  lastAction: state.lastAction,
433
437
  key: "debug-box"
@@ -490,7 +494,7 @@ export var MainLayout = function MainLayout(_ref5) {
490
494
  onAddGroup: onAddGroup,
491
495
  key: "groups-editor"
492
496
  })].filter(Boolean))]
493
- }, canvas)), showEditor && React.createElement(EditorWrapper, {
497
+ }, isSelectedImageLocked && React.createElement(Locker, null), canvas)), showEditor && !isSelectedImageLocked && React.createElement(EditorWrapper, {
494
498
  id: "editor-wrapper"
495
499
  }, React.createElement(Editor, {
496
500
  id: "editor",
@@ -2,6 +2,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import React, { useState } from 'react';
3
3
  import classnames from "classnames";
4
4
  import './page-selector.css';
5
+ import Locker from '../Locker';
5
6
 
6
7
  function PageThumbnail(_ref) {
7
8
  var _metadata$find, _metadata$find$call;
@@ -14,7 +15,8 @@ function PageThumbnail(_ref) {
14
15
  imageIndex = _ref.imageIndex,
15
16
  onMetadataChange = _ref.onMetadataChange,
16
17
  _ref$metadataConfigs = _ref.metadataConfigs,
17
- metadataConfigs = _ref$metadataConfigs === void 0 ? [] : _ref$metadataConfigs;
18
+ metadataConfigs = _ref$metadataConfigs === void 0 ? [] : _ref$metadataConfigs,
19
+ isLocked = _ref.isLocked;
18
20
 
19
21
  var handleChange = function handleChange(e) {
20
22
  e.preventDefault();
@@ -35,10 +37,11 @@ function PageThumbnail(_ref) {
35
37
  role: "button",
36
38
  tabIndex: 0,
37
39
  className: classnames('ps-page-thumbnail', {
38
- 'ps-page-thumbnail-is-active': isActive
40
+ 'ps-page-thumbnail-is-active': isActive,
41
+ 'ps-page-thumbnail-disabled': isLocked
39
42
  }),
40
43
  onClick: onClick
41
- }, React.createElement("div", {
44
+ }, isLocked && React.createElement(Locker, null), React.createElement("div", {
42
45
  className: "ps-page-thumbnail-image-wrapper"
43
46
  }, React.createElement("img", {
44
47
  src: src,
@@ -88,7 +91,9 @@ function PageSelector(_ref3) {
88
91
  recalcActive = _ref3.recalcActive,
89
92
  saveActive = _ref3.saveActive,
90
93
  onMetadataChange = _ref3.onMetadataChange,
91
- metadataConfigs = _ref3.metadataConfigs;
94
+ metadataConfigs = _ref3.metadataConfigs,
95
+ _ref3$lockedImages = _ref3.lockedImages,
96
+ lockedImages = _ref3$lockedImages === void 0 ? [] : _ref3$lockedImages;
92
97
 
93
98
  var _useState = useState(false),
94
99
  _useState2 = _slicedToArray(_useState, 2),
@@ -129,6 +134,7 @@ function PageSelector(_ref3) {
129
134
  }, pages.map(function (page, idx) {
130
135
  return React.createElement(PageThumbnail, {
131
136
  key: "".concat(page.id),
137
+ isLocked: lockedImages.includes(page.id),
132
138
  src: page.src,
133
139
  isActive: page.isActive,
134
140
  onClick: function onClick() {
@@ -49,6 +49,10 @@
49
49
  opacity: 1;
50
50
  }
51
51
 
52
+ .ps-page-thumbnail-disabled {
53
+ pointer-events: none;
54
+ }
55
+
52
56
  .ps-page-thumbnail-image-wrapper {
53
57
  width: 100px;
54
58
  height: 100%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searpent/react-image-annotate",
3
- "version": "2.0.41",
3
+ "version": "2.0.43",
4
4
  "dependencies": {
5
5
  "@editorjs/editorjs": "^2.25.0",
6
6
  "@editorjs/paragraph": "^2.8.0",
@@ -59,7 +59,7 @@
59
59
  "storybook": "start-storybook -p 9090 -s public",
60
60
  "build": "npm run build:babel && cp ./package.json ./dist/package.json && cp ./README.md ./dist/README.md",
61
61
  "dist": "npm run build && cd dist && npm publish",
62
- "build:babel": "NODE_ENV=production babel ./src --ignore \"src/**/*.story.js\" --out-dir=./dist && rm dist/index.js && cp dist/lib.js dist/index.js && cp src/PageSelector/page-selector.css dist/PageSelector/ && cp src/Editor/annotation-plugin/annotation.css dist/Editor/annotation-plugin",
62
+ "build:babel": "NODE_ENV=production babel ./src --ignore \"src/**/*.story.js\" --out-dir=./dist && rm dist/index.js && cp dist/lib.js dist/index.js && cp src/PageSelector/page-selector.css dist/PageSelector/ && cp src/Locker/locker.css dist/Locker/ && cp src/Editor/annotation-plugin/annotation.css dist/Editor/annotation-plugin",
63
63
  "build-storybook": "build-storybook",
64
64
  "build:gh-pages": "CI=false react-scripts build && mkdir build/demo && cp build/index.html build/demo/index.html",
65
65
  "gh-pages": "npm run build:gh-pages && gh-pages -d build",