@manuscripts/style-guide 0.31.0 → 0.31.1

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.
@@ -34,6 +34,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
34
34
  exports.FileManager = exports.PermissionsContext = void 0;
35
35
  const react_1 = __importStar(require("react"));
36
36
  const react_tooltip_1 = __importDefault(require("react-tooltip"));
37
+ const inlineFiles_1 = __importDefault(require("../../lib/inlineFiles"));
37
38
  const AlertMessage_1 = require("../AlertMessage");
38
39
  const Inspector_1 = require("../Inspector");
39
40
  const InspectorSection_1 = require("../InspectorSection");
@@ -74,13 +75,24 @@ const FileManager = ({ submissionId, attachments, modelMap, enableDragAndDrop, c
74
75
  const handleDownloadFile = (0, react_1.useCallback)((publicUrl) => {
75
76
  return handleDownload(publicUrl);
76
77
  }, [handleDownload]);
78
+ const inlineFiles = (0, react_1.useMemo)(() => (0, inlineFiles_1.default)(modelMap, attachments), [modelMap.values(), attachments]);
79
+ const inlineAttachmentsIds = (0, react_1.useMemo)(() => {
80
+ const attachmentsIDs = new Set();
81
+ inlineFiles.map(({ attachments }) => {
82
+ if (attachments) {
83
+ attachments.map((attachment) => attachmentsIDs.add(attachment.id));
84
+ }
85
+ });
86
+ return attachmentsIDs;
87
+ }, [inlineFiles]);
77
88
  const getFileSectionExternalFile = (fileSection) => {
78
89
  const isSupplementOrOtherFilesTab = fileSection === util_1.FileSectionType.Supplements ||
79
90
  fileSection === util_1.FileSectionType.OtherFile;
80
91
  const itemsData = attachments.filter((element) => {
81
92
  const designation = util_1.namesWithDesignationMap.get(element.type.label);
82
93
  return (designation !== undefined &&
83
- util_1.designationWithFileSectionsMap.get(designation) === fileSection);
94
+ util_1.designationWithFileSectionsMap.get(designation) === fileSection &&
95
+ !inlineAttachmentsIds.has(element.id));
84
96
  });
85
97
  const itemsDataWithTitle = (0, util_1.generateAttachmentsTitles)(itemsData, fileSection);
86
98
  const filesItems = itemsDataWithTitle.map((element) => {
@@ -130,7 +142,7 @@ const FileManager = ({ submissionId, attachments, modelMap, enableDragAndDrop, c
130
142
  react_1.default.createElement("div", null, "Files excluded from the final submission.")))),
131
143
  react_1.default.createElement(Inspector_1.InspectorTabPanels, { style: { overflowY: 'visible', position: 'relative' } },
132
144
  react_1.default.createElement(Inspector_1.InspectorTabPanel, null,
133
- react_1.default.createElement(InlineFilesSection_1.InlineFilesSection, { modelMap: modelMap, attachments: attachments, submissionId: submissionId, handleReplace: handleReplace, handleDownload: handleDownload, isEditor: enableDragAndDrop, dispatch: dispatch })),
145
+ react_1.default.createElement(InlineFilesSection_1.InlineFilesSection, { inlineFiles: inlineFiles, submissionId: submissionId, handleReplace: handleReplace, handleDownload: handleDownload, isEditor: enableDragAndDrop, dispatch: dispatch })),
134
146
  react_1.default.createElement(Inspector_1.InspectorTabPanel, null,
135
147
  react_1.default.createElement(FilesSection_1.FilesSection, { submissionId: submissionId, enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: util_1.FileSectionType.Supplements, filesItem: getFileSectionExternalFile(util_1.FileSectionType.Supplements), state: state, dispatch: dispatch })),
136
148
  react_1.default.createElement(Inspector_1.InspectorTabPanel, null,
@@ -26,14 +26,12 @@ exports.InlineFilesSection = void 0;
26
26
  const react_1 = __importStar(require("react"));
27
27
  const styled_components_1 = __importDefault(require("styled-components"));
28
28
  const use_dropdown_1 = require("../../hooks/use-dropdown");
29
- const inlineFiles_1 = __importDefault(require("../../lib/inlineFiles"));
30
29
  const dots_icon_1 = __importDefault(require("../icons/dots-icon"));
31
30
  const FileInfo_1 = require("./FileSectionItem/FileInfo");
32
31
  const FileSectionItem_1 = require("./FileSectionItem/FileSectionItem");
33
32
  const ItemActions_1 = require("./FileSectionItem/ItemActions");
34
33
  const util_1 = require("./util");
35
- const InlineFilesSection = ({ submissionId, handleReplace, handleDownload, modelMap, attachments, isEditor, dispatch, }) => {
36
- const inlineFiles = (0, react_1.useMemo)(() => (0, inlineFiles_1.default)(modelMap, attachments), [modelMap, attachments]);
34
+ const InlineFilesSection = ({ submissionId, handleReplace, handleDownload, inlineFiles, isEditor, dispatch, }) => {
37
35
  const onElementClick = (0, react_1.useCallback)((e) => {
38
36
  if (!isEditor) {
39
37
  return;
@@ -7,8 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import React, { createContext, useCallback, useReducer } from 'react';
10
+ import React, { createContext, useCallback, useMemo, useReducer } from 'react';
11
11
  import ReactTooltip from 'react-tooltip';
12
+ import getInlineFiles from '../../lib/inlineFiles';
12
13
  import { AlertMessage, AlertMessageType } from '../AlertMessage';
13
14
  import { InspectorTab, InspectorTabList, InspectorTabPanel, InspectorTabPanels, InspectorTabs, } from '../Inspector';
14
15
  import { InspectorSection } from '../InspectorSection';
@@ -49,13 +50,24 @@ export const FileManager = ({ submissionId, attachments, modelMap, enableDragAnd
49
50
  const handleDownloadFile = useCallback((publicUrl) => {
50
51
  return handleDownload(publicUrl);
51
52
  }, [handleDownload]);
53
+ const inlineFiles = useMemo(() => getInlineFiles(modelMap, attachments), [modelMap.values(), attachments]);
54
+ const inlineAttachmentsIds = useMemo(() => {
55
+ const attachmentsIDs = new Set();
56
+ inlineFiles.map(({ attachments }) => {
57
+ if (attachments) {
58
+ attachments.map((attachment) => attachmentsIDs.add(attachment.id));
59
+ }
60
+ });
61
+ return attachmentsIDs;
62
+ }, [inlineFiles]);
52
63
  const getFileSectionExternalFile = (fileSection) => {
53
64
  const isSupplementOrOtherFilesTab = fileSection === FileSectionType.Supplements ||
54
65
  fileSection === FileSectionType.OtherFile;
55
66
  const itemsData = attachments.filter((element) => {
56
67
  const designation = namesWithDesignationMap.get(element.type.label);
57
68
  return (designation !== undefined &&
58
- designationWithFileSectionsMap.get(designation) === fileSection);
69
+ designationWithFileSectionsMap.get(designation) === fileSection &&
70
+ !inlineAttachmentsIds.has(element.id));
59
71
  });
60
72
  const itemsDataWithTitle = generateAttachmentsTitles(itemsData, fileSection);
61
73
  const filesItems = itemsDataWithTitle.map((element) => {
@@ -105,7 +117,7 @@ export const FileManager = ({ submissionId, attachments, modelMap, enableDragAnd
105
117
  React.createElement("div", null, "Files excluded from the final submission.")))),
106
118
  React.createElement(InspectorTabPanels, { style: { overflowY: 'visible', position: 'relative' } },
107
119
  React.createElement(InspectorTabPanel, null,
108
- React.createElement(InlineFilesSection, { modelMap: modelMap, attachments: attachments, submissionId: submissionId, handleReplace: handleReplace, handleDownload: handleDownload, isEditor: enableDragAndDrop, dispatch: dispatch })),
120
+ React.createElement(InlineFilesSection, { inlineFiles: inlineFiles, submissionId: submissionId, handleReplace: handleReplace, handleDownload: handleDownload, isEditor: enableDragAndDrop, dispatch: dispatch })),
109
121
  React.createElement(InspectorTabPanel, null,
110
122
  React.createElement(FilesSection, { submissionId: submissionId, enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: FileSectionType.Supplements, filesItem: getFileSectionExternalFile(FileSectionType.Supplements), state: state, dispatch: dispatch })),
111
123
  React.createElement(InspectorTabPanel, null,
@@ -1,14 +1,12 @@
1
- import React, { useCallback, useMemo } from 'react';
1
+ import React, { useCallback } from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { useDropdown } from '../../hooks/use-dropdown';
4
- import getInlineFiles from '../../lib/inlineFiles';
5
4
  import DotsIcon from '../icons/dots-icon';
6
5
  import { FileDescription, FileInfoContainer, FileNameTitleContainer, FileTitle, } from './FileSectionItem/FileInfo';
7
6
  import { ActionsIcon, Item, } from './FileSectionItem/FileSectionItem';
8
7
  import { ItemActions } from './FileSectionItem/ItemActions';
9
- import { extensionsWithFileTypesMap, fileTypesWithIconMap } from './util';
10
- export const InlineFilesSection = ({ submissionId, handleReplace, handleDownload, modelMap, attachments, isEditor, dispatch, }) => {
11
- const inlineFiles = useMemo(() => getInlineFiles(modelMap, attachments), [modelMap, attachments]);
8
+ import { extensionsWithFileTypesMap, fileTypesWithIconMap, } from './util';
9
+ export const InlineFilesSection = ({ submissionId, handleReplace, handleDownload, inlineFiles, isEditor, dispatch, }) => {
12
10
  const onElementClick = useCallback((e) => {
13
11
  if (!isEditor) {
14
12
  return;
@@ -1,7 +1,7 @@
1
- import { Model } from '@manuscripts/manuscripts-json-schema';
2
1
  import React, { Dispatch } from 'react';
3
2
  import { SubmissionAttachment } from './FileSectionItem/FileSectionItem';
4
3
  import { Action } from './FileSectionState';
4
+ import { FileType } from './util';
5
5
  export interface ExternalFileRef {
6
6
  url: string;
7
7
  kind?: string;
@@ -9,8 +9,13 @@ export interface ExternalFileRef {
9
9
  }
10
10
  export declare const InlineFilesSection: React.FC<{
11
11
  submissionId: string;
12
- attachments: SubmissionAttachment[];
13
- modelMap: Map<string, Model>;
12
+ inlineFiles: {
13
+ id: string;
14
+ label: string;
15
+ type: FileType;
16
+ caption?: string;
17
+ attachments?: SubmissionAttachment[];
18
+ }[];
14
19
  handleReplace: (submissionId: string, attachmentId: string, name: string, file: File, typeId: string) => Promise<boolean>;
15
20
  handleDownload: (url: string) => void;
16
21
  isEditor: boolean;
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": "0.31.0",
4
+ "version": "0.31.1",
5
5
  "repository": "gitlab:atypon-opensource/manuscripts-style-guide",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",