@manuscripts/style-guide 1.7.2 → 1.7.3-LEAN-3181-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.
@@ -35,8 +35,8 @@ const InlineFilesSection_1 = require("./InlineFilesSection");
35
35
  const OtherFilesSection_1 = require("./OtherFilesSection");
36
36
  const SupplementsSection_1 = require("./SupplementsSection");
37
37
  exports.PermissionsContext = (0, react_1.createContext)(null);
38
- const FileManager = ({ files, fileManagement, modelMap, saveModel, deleteModel, enableDragAndDrop, can, }) => {
39
- const { inlineFiles, supplements, otherFiles } = (0, index_1.useFiles)(modelMap, files);
38
+ const FileManager = ({ files, fileManagement, doc, modelMap, saveModel, deleteModel, enableDragAndDrop, can, }) => {
39
+ const { inlineFiles, supplements, otherFiles } = (0, index_1.useFiles)(doc, files);
40
40
  return (react_1.default.createElement(FileManagerProvider_1.FileManagerProvider, { saveModel: saveModel, deleteModel: deleteModel, modelMap: modelMap, fileManagement: fileManagement },
41
41
  react_1.default.createElement(DragLayer_1.DragLayer, null),
42
42
  react_1.default.createElement(exports.PermissionsContext.Provider, { value: can },
@@ -175,6 +175,13 @@ const ReferencesModal = ({ isOpen, onCancel, items, item, citationCounts, onSave
175
175
  setSelection(item);
176
176
  setConfirm(false);
177
177
  };
178
+ const handleDelete = () => {
179
+ if (!selection) {
180
+ return;
181
+ }
182
+ onDelete(selection);
183
+ setSelection(undefined);
184
+ };
178
185
  const handleItemClick = (item) => {
179
186
  const values = valuesRef.current;
180
187
  if (values && selection && !(0, lodash_1.isEqual)(values, (0, exports.normalize)(selection))) {
@@ -214,6 +221,6 @@ const ReferencesModal = ({ isOpen, onCancel, items, item, citationCounts, onSave
214
221
  (citationCounts.get(item._id) || 0) > 0 ? (react_1.default.createElement(CitationCount, { "data-tooltip-id": "citation-count-tooltip" }, citationCounts.get(item._id))) : (react_1.default.createElement(CitationCount, { className: "unused" }, "0"))),
215
222
  react_1.default.createElement(ReferenceLine_1.ReferenceLine, { item: item }))))),
216
223
  react_1.default.createElement(Tooltip_1.Tooltip, { id: "citation-count-tooltip", place: "bottom" }, "Number of times used in the document"))),
217
- react_1.default.createElement(StyledModal_1.ScrollableModalContent, null, selection && (react_1.default.createElement(ReferenceForm_1.ReferenceForm, { values: (0, exports.normalize)(selection), showDelete: !citationCounts.get(selection._id), onChange: handleChange, onCancel: onCancel, onDelete: () => onDelete(selection), onSave: save, actionsRef: actionsRef })))))));
224
+ react_1.default.createElement(StyledModal_1.ScrollableModalContent, null, selection && (react_1.default.createElement(ReferenceForm_1.ReferenceForm, { values: (0, exports.normalize)(selection), showDelete: !citationCounts.get(selection._id), onChange: handleChange, onCancel: onCancel, onDelete: handleDelete, onSave: save, actionsRef: actionsRef })))))));
218
225
  };
219
226
  exports.ReferencesModal = ReferencesModal;
@@ -1,39 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useFiles = void 0;
4
- const json_schema_1 = require("@manuscripts/json-schema");
5
4
  const files_1 = require("../lib/files");
6
5
  const use_deep_compare_1 = require("./use-deep-compare");
7
- const types = [
8
- json_schema_1.ObjectTypes.Section,
9
- json_schema_1.ObjectTypes.FigureElement,
10
- json_schema_1.ObjectTypes.Figure,
11
- json_schema_1.ObjectTypes.Supplement,
12
- json_schema_1.ObjectTypes.ElementsOrder,
13
- ];
14
6
  const getOtherFiles = (inlineFiles, supplements, files) => {
15
7
  const excluded = new Set();
16
8
  inlineFiles.flatMap((f) => f.files).forEach((f) => excluded.add(f.id));
17
9
  supplements.forEach((s) => excluded.add(s.id));
18
10
  return files.filter((f) => !excluded.has(f.id));
19
11
  };
20
- const useFiles = (modelMap, files) => {
21
- const models = [];
22
- for (const [_, model] of modelMap.entries()) {
23
- if (types.includes(model.objectType)) {
24
- models.push(model);
25
- }
26
- }
12
+ const useFiles = (doc, files) => {
27
13
  return (0, use_deep_compare_1.useDeepCompareMemo)(() => {
28
- const inlineFiles = (0, files_1.getInlineFiles)(modelMap, files);
29
- const supplements = (0, files_1.getSupplements)(modelMap, files);
14
+ const inlineFiles = (0, files_1.getInlineFiles)(doc, files);
15
+ const supplements = (0, files_1.getSupplements)(doc, files);
30
16
  const otherFiles = getOtherFiles(inlineFiles, supplements, files);
31
17
  return {
32
18
  inlineFiles,
33
19
  supplements,
34
20
  otherFiles,
35
21
  };
36
- }, [models, files]);
22
+ }, [doc, files]);
37
23
  };
38
24
  exports.useFiles = useFiles;
39
25
  exports.default = exports.useFiles;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSupplements = exports.getInlineFiles = exports.isModelFile = void 0;
4
- const json_schema_1 = require("@manuscripts/json-schema");
4
+ const transform_1 = require("@manuscripts/transform");
5
5
  const util_1 = require("../components/FileManager/util");
6
6
  const isModelFile = (file) => {
7
7
  return file.modelId;
@@ -17,68 +17,55 @@ const MISSING_FILE = {
17
17
  const getFile = (files, id) => {
18
18
  return files.filter((f) => f.id === id)[0] || MISSING_FILE;
19
19
  };
20
- const getFigureFiles = (element, modelMap, files) => {
20
+ const getFigureFiles = (figureElement, files) => {
21
21
  const figureFiles = [];
22
- element.containedObjectIDs.map((id) => {
23
- const model = modelMap.get(id);
24
- if (model && model.objectType === json_schema_1.ObjectTypes.Figure) {
25
- const figure = model;
26
- if (figure.src) {
27
- figureFiles.push(Object.assign(Object.assign({}, getFile(files, figure.src)), { modelId: figure._id }));
28
- }
22
+ figureElement.forEach((node) => {
23
+ if (node.type === transform_1.schema.nodes.figure) {
24
+ figureFiles.push(Object.assign(Object.assign({}, getFile(files, node.attrs.src)), { modelId: figureElement.attrs.id }));
29
25
  }
30
26
  });
31
27
  return figureFiles;
32
28
  };
33
29
  const getSupplementFiles = (supplement, files) => {
34
- if (supplement.href) {
35
- const href = supplement.href;
36
- if (href) {
37
- return [
38
- Object.assign(Object.assign({}, getFile(files, href)), { modelId: supplement._id }),
39
- ];
40
- }
30
+ if (supplement.attrs.href) {
31
+ return [
32
+ Object.assign(Object.assign({}, getFile(files, supplement.attrs.href)), { modelId: supplement.attrs.id }),
33
+ ];
41
34
  }
42
35
  return [];
43
36
  };
44
- const getInlineFiles = (modelMap, files) => {
45
- var _a;
37
+ const getInlineFiles = (doc, files) => {
46
38
  const elements = [];
47
- const orders = getOrderByType(modelMap);
48
- const sections = (0, json_schema_1.getModelsByType)(modelMap, json_schema_1.ObjectTypes.Section);
49
- const graphicalAbstractElementIds = (_a = sections.filter((s) => s.category === 'MPSectionCategory:abstract-graphical')[0]) === null || _a === void 0 ? void 0 : _a.elementIDs;
50
- graphicalAbstractElementIds === null || graphicalAbstractElementIds === void 0 ? void 0 : graphicalAbstractElementIds.map((id) => {
51
- const figure = modelMap.get(id);
52
- if (figure) {
39
+ doc.descendants((node, _, parent) => {
40
+ const isGraphicalAbstractFigure = (parent === null || parent === void 0 ? void 0 : parent.type) === transform_1.schema.nodes.section &&
41
+ (parent === null || parent === void 0 ? void 0 : parent.attrs.category) === 'MPSectionCategory:abstract-graphical';
42
+ if (node.type === transform_1.schema.nodes.figure_element) {
53
43
  elements.push({
54
- modelId: id,
55
- type: util_1.FileType.GraphicalAbstract,
56
- label: 'Graphical Abstract',
57
- files: getFigureFiles(figure, modelMap, files),
44
+ modelId: node.attrs.id,
45
+ type: (isGraphicalAbstractFigure && util_1.FileType.GraphicalAbstract) ||
46
+ util_1.FileType.Figure,
47
+ label: (isGraphicalAbstractFigure && `Graphical Abstract`) ||
48
+ node.attrs.label,
49
+ files: getFigureFiles(node, files),
58
50
  });
51
+ return false;
59
52
  }
60
53
  });
61
- const figures = (0, json_schema_1.getModelsByType)(modelMap, json_schema_1.ObjectTypes.FigureElement);
62
- const figureOrder = orders.get(json_schema_1.ObjectTypes.FigureElement);
63
- if (figureOrder) {
64
- }
65
- figures === null || figures === void 0 ? void 0 : figures.filter((f) => !(graphicalAbstractElementIds === null || graphicalAbstractElementIds === void 0 ? void 0 : graphicalAbstractElementIds.includes(f._id))).map((figure, index) => ({
66
- modelId: figure._id,
67
- type: util_1.FileType.Figure,
68
- label: `Figure ${index + 1}`,
69
- files: getFigureFiles(figure, modelMap, files),
70
- })).forEach((e) => elements.push(e));
71
54
  return elements;
72
55
  };
73
56
  exports.getInlineFiles = getInlineFiles;
74
- const getSupplements = (modelMap, files) => {
75
- const supplements = (0, json_schema_1.getModelsByType)(modelMap, json_schema_1.ObjectTypes.Supplement);
76
- return supplements.flatMap((s) => getSupplementFiles(s, files));
57
+ const getSupplements = (doc, files) => {
58
+ const supplements = [];
59
+ doc.descendants((node) => {
60
+ if (node.type === transform_1.schema.nodes.supplements) {
61
+ node.forEach((child) => {
62
+ if (child.type === transform_1.schema.nodes.supplement) {
63
+ supplements.push(...getSupplementFiles(child, files));
64
+ }
65
+ });
66
+ return false;
67
+ }
68
+ });
69
+ return supplements;
77
70
  };
78
71
  exports.getSupplements = getSupplements;
79
- const getOrderByType = (modelMap) => {
80
- const groups = new Map();
81
- const orders = (0, json_schema_1.getModelsByType)(modelMap, json_schema_1.ObjectTypes.ElementsOrder);
82
- orders.forEach((o) => groups.set(o.elementType, o));
83
- return groups;
84
- };
@@ -9,8 +9,8 @@ import { InlineFilesSection } from './InlineFilesSection';
9
9
  import { OtherFilesSection } from './OtherFilesSection';
10
10
  import { SupplementsSection } from './SupplementsSection';
11
11
  export const PermissionsContext = createContext(null);
12
- export const FileManager = ({ files, fileManagement, modelMap, saveModel, deleteModel, enableDragAndDrop, can, }) => {
13
- const { inlineFiles, supplements, otherFiles } = useFiles(modelMap, files);
12
+ export const FileManager = ({ files, fileManagement, doc, modelMap, saveModel, deleteModel, enableDragAndDrop, can, }) => {
13
+ const { inlineFiles, supplements, otherFiles } = useFiles(doc, files);
14
14
  return (React.createElement(FileManagerProvider, { saveModel: saveModel, deleteModel: deleteModel, modelMap: modelMap, fileManagement: fileManagement },
15
15
  React.createElement(DragLayer, null),
16
16
  React.createElement(PermissionsContext.Provider, { value: can },
@@ -145,6 +145,13 @@ export const ReferencesModal = ({ isOpen, onCancel, items, item, citationCounts,
145
145
  setSelection(item);
146
146
  setConfirm(false);
147
147
  };
148
+ const handleDelete = () => {
149
+ if (!selection) {
150
+ return;
151
+ }
152
+ onDelete(selection);
153
+ setSelection(undefined);
154
+ };
148
155
  const handleItemClick = (item) => {
149
156
  const values = valuesRef.current;
150
157
  if (values && selection && !isEqual(values, normalize(selection))) {
@@ -184,5 +191,5 @@ export const ReferencesModal = ({ isOpen, onCancel, items, item, citationCounts,
184
191
  (citationCounts.get(item._id) || 0) > 0 ? (React.createElement(CitationCount, { "data-tooltip-id": "citation-count-tooltip" }, citationCounts.get(item._id))) : (React.createElement(CitationCount, { className: "unused" }, "0"))),
185
192
  React.createElement(ReferenceLine, { item: item }))))),
186
193
  React.createElement(Tooltip, { id: "citation-count-tooltip", place: "bottom" }, "Number of times used in the document"))),
187
- React.createElement(ScrollableModalContent, null, selection && (React.createElement(ReferenceForm, { values: normalize(selection), showDelete: !citationCounts.get(selection._id), onChange: handleChange, onCancel: onCancel, onDelete: () => onDelete(selection), onSave: save, actionsRef: actionsRef })))))));
194
+ React.createElement(ScrollableModalContent, null, selection && (React.createElement(ReferenceForm, { values: normalize(selection), showDelete: !citationCounts.get(selection._id), onChange: handleChange, onCancel: onCancel, onDelete: handleDelete, onSave: save, actionsRef: actionsRef })))))));
188
195
  };
@@ -1,35 +1,21 @@
1
- import { ObjectTypes } from '@manuscripts/json-schema';
2
1
  import { getInlineFiles, getSupplements, } from '../lib/files';
3
2
  import { useDeepCompareMemo } from './use-deep-compare';
4
- const types = [
5
- ObjectTypes.Section,
6
- ObjectTypes.FigureElement,
7
- ObjectTypes.Figure,
8
- ObjectTypes.Supplement,
9
- ObjectTypes.ElementsOrder,
10
- ];
11
3
  const getOtherFiles = (inlineFiles, supplements, files) => {
12
4
  const excluded = new Set();
13
5
  inlineFiles.flatMap((f) => f.files).forEach((f) => excluded.add(f.id));
14
6
  supplements.forEach((s) => excluded.add(s.id));
15
7
  return files.filter((f) => !excluded.has(f.id));
16
8
  };
17
- export const useFiles = (modelMap, files) => {
18
- const models = [];
19
- for (const [_, model] of modelMap.entries()) {
20
- if (types.includes(model.objectType)) {
21
- models.push(model);
22
- }
23
- }
9
+ export const useFiles = (doc, files) => {
24
10
  return useDeepCompareMemo(() => {
25
- const inlineFiles = getInlineFiles(modelMap, files);
26
- const supplements = getSupplements(modelMap, files);
11
+ const inlineFiles = getInlineFiles(doc, files);
12
+ const supplements = getSupplements(doc, files);
27
13
  const otherFiles = getOtherFiles(inlineFiles, supplements, files);
28
14
  return {
29
15
  inlineFiles,
30
16
  supplements,
31
17
  otherFiles,
32
18
  };
33
- }, [models, files]);
19
+ }, [doc, files]);
34
20
  };
35
21
  export default useFiles;
@@ -1,4 +1,4 @@
1
- import { getModelsByType, ObjectTypes, } from '@manuscripts/json-schema';
1
+ import { schema } from '@manuscripts/transform';
2
2
  import { FileType } from '../components/FileManager/util';
3
3
  export const isModelFile = (file) => {
4
4
  return file.modelId;
@@ -13,66 +13,53 @@ const MISSING_FILE = {
13
13
  const getFile = (files, id) => {
14
14
  return files.filter((f) => f.id === id)[0] || MISSING_FILE;
15
15
  };
16
- const getFigureFiles = (element, modelMap, files) => {
16
+ const getFigureFiles = (figureElement, files) => {
17
17
  const figureFiles = [];
18
- element.containedObjectIDs.map((id) => {
19
- const model = modelMap.get(id);
20
- if (model && model.objectType === ObjectTypes.Figure) {
21
- const figure = model;
22
- if (figure.src) {
23
- figureFiles.push(Object.assign(Object.assign({}, getFile(files, figure.src)), { modelId: figure._id }));
24
- }
18
+ figureElement.forEach((node) => {
19
+ if (node.type === schema.nodes.figure) {
20
+ figureFiles.push(Object.assign(Object.assign({}, getFile(files, node.attrs.src)), { modelId: figureElement.attrs.id }));
25
21
  }
26
22
  });
27
23
  return figureFiles;
28
24
  };
29
25
  const getSupplementFiles = (supplement, files) => {
30
- if (supplement.href) {
31
- const href = supplement.href;
32
- if (href) {
33
- return [
34
- Object.assign(Object.assign({}, getFile(files, href)), { modelId: supplement._id }),
35
- ];
36
- }
26
+ if (supplement.attrs.href) {
27
+ return [
28
+ Object.assign(Object.assign({}, getFile(files, supplement.attrs.href)), { modelId: supplement.attrs.id }),
29
+ ];
37
30
  }
38
31
  return [];
39
32
  };
40
- export const getInlineFiles = (modelMap, files) => {
41
- var _a;
33
+ export const getInlineFiles = (doc, files) => {
42
34
  const elements = [];
43
- const orders = getOrderByType(modelMap);
44
- const sections = getModelsByType(modelMap, ObjectTypes.Section);
45
- const graphicalAbstractElementIds = (_a = sections.filter((s) => s.category === 'MPSectionCategory:abstract-graphical')[0]) === null || _a === void 0 ? void 0 : _a.elementIDs;
46
- graphicalAbstractElementIds === null || graphicalAbstractElementIds === void 0 ? void 0 : graphicalAbstractElementIds.map((id) => {
47
- const figure = modelMap.get(id);
48
- if (figure) {
35
+ doc.descendants((node, _, parent) => {
36
+ const isGraphicalAbstractFigure = (parent === null || parent === void 0 ? void 0 : parent.type) === schema.nodes.section &&
37
+ (parent === null || parent === void 0 ? void 0 : parent.attrs.category) === 'MPSectionCategory:abstract-graphical';
38
+ if (node.type === schema.nodes.figure_element) {
49
39
  elements.push({
50
- modelId: id,
51
- type: FileType.GraphicalAbstract,
52
- label: 'Graphical Abstract',
53
- files: getFigureFiles(figure, modelMap, files),
40
+ modelId: node.attrs.id,
41
+ type: (isGraphicalAbstractFigure && FileType.GraphicalAbstract) ||
42
+ FileType.Figure,
43
+ label: (isGraphicalAbstractFigure && `Graphical Abstract`) ||
44
+ node.attrs.label,
45
+ files: getFigureFiles(node, files),
54
46
  });
47
+ return false;
55
48
  }
56
49
  });
57
- const figures = getModelsByType(modelMap, ObjectTypes.FigureElement);
58
- const figureOrder = orders.get(ObjectTypes.FigureElement);
59
- if (figureOrder) {
60
- }
61
- figures === null || figures === void 0 ? void 0 : figures.filter((f) => !(graphicalAbstractElementIds === null || graphicalAbstractElementIds === void 0 ? void 0 : graphicalAbstractElementIds.includes(f._id))).map((figure, index) => ({
62
- modelId: figure._id,
63
- type: FileType.Figure,
64
- label: `Figure ${index + 1}`,
65
- files: getFigureFiles(figure, modelMap, files),
66
- })).forEach((e) => elements.push(e));
67
50
  return elements;
68
51
  };
69
- export const getSupplements = (modelMap, files) => {
70
- const supplements = getModelsByType(modelMap, ObjectTypes.Supplement);
71
- return supplements.flatMap((s) => getSupplementFiles(s, files));
72
- };
73
- const getOrderByType = (modelMap) => {
74
- const groups = new Map();
75
- const orders = getModelsByType(modelMap, ObjectTypes.ElementsOrder);
76
- orders.forEach((o) => groups.set(o.elementType, o));
77
- return groups;
52
+ export const getSupplements = (doc, files) => {
53
+ const supplements = [];
54
+ doc.descendants((node) => {
55
+ if (node.type === schema.nodes.supplements) {
56
+ node.forEach((child) => {
57
+ if (child.type === schema.nodes.supplement) {
58
+ supplements.push(...getSupplementFiles(child, files));
59
+ }
60
+ });
61
+ return false;
62
+ }
63
+ });
64
+ return supplements;
78
65
  };
@@ -1,4 +1,5 @@
1
1
  import { Build, Model } from '@manuscripts/json-schema';
2
+ import { ManuscriptNode } from '@manuscripts/transform';
2
3
  import React from 'react';
3
4
  import { FileSectionType } from '../../index';
4
5
  import { Capabilities } from '../../lib/capabilities';
@@ -22,6 +23,7 @@ export declare const PermissionsContext: React.Context<Capabilities | null>;
22
23
  export declare const FileManager: React.FC<{
23
24
  files: FileAttachment[];
24
25
  fileManagement: FileManagement;
26
+ doc: ManuscriptNode;
25
27
  modelMap: Map<string, Model>;
26
28
  saveModel: SaveModel;
27
29
  deleteModel: DeleteModel;
@@ -1,6 +1,6 @@
1
- import { Model } from '@manuscripts/json-schema';
1
+ import { ManuscriptNode } from '@manuscripts/transform';
2
2
  import { ElementFiles, FileAttachment, ModelFile } from '../lib/files';
3
- export declare const useFiles: (modelMap: Map<string, Model>, files: FileAttachment[]) => {
3
+ export declare const useFiles: (doc: ManuscriptNode, files: FileAttachment[]) => {
4
4
  inlineFiles: ElementFiles[];
5
5
  supplements: ModelFile[];
6
6
  otherFiles: FileAttachment[];
@@ -1,4 +1,4 @@
1
- import { Model } from '@manuscripts/json-schema';
1
+ import { ManuscriptNode } from '@manuscripts/transform';
2
2
  import { FileType } from '../components/FileManager/util';
3
3
  export type FileDesignation = {
4
4
  id: string;
@@ -20,5 +20,5 @@ export type ElementFiles = {
20
20
  files: ModelFile[];
21
21
  };
22
22
  export declare const isModelFile: (file: FileAttachment) => file is ModelFile;
23
- export declare const getInlineFiles: (modelMap: Map<string, Model>, files: FileAttachment[]) => ElementFiles[];
24
- export declare const getSupplements: (modelMap: Map<string, Model>, files: FileAttachment[]) => ModelFile[];
23
+ export declare const getInlineFiles: (doc: ManuscriptNode, files: FileAttachment[]) => ElementFiles[];
24
+ export declare const getSupplements: (doc: ManuscriptNode, files: FileAttachment[]) => ModelFile[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@manuscripts/style-guide",
3
3
  "description": "Shared components for Manuscripts applications",
4
- "version": "1.7.2",
4
+ "version": "1.7.3-LEAN-3181-0",
5
5
  "repository": "github:Atypon-OpenSource/manuscripts-style-guide",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@manuscripts/assets": "^0.6.4",
36
36
  "@manuscripts/json-schema": "^2.2.2",
37
- "@manuscripts/transform": "2.0.4",
37
+ "@manuscripts/transform": "^2.1.0",
38
38
  "@reach/tabs": "^0.18.0",
39
39
  "date-fns": "^2.29.3",
40
40
  "formik": "^2.2.9",