@manuscripts/style-guide 1.1.8 → 1.1.9-LEAN-2192-v11
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/dist/cjs/components/Dropdown.js +1 -1
- package/dist/cjs/components/EditorHeader/EditorHeader.js +2 -2
- package/dist/cjs/components/EditorHeader/ProceedView.js +6 -6
- package/dist/cjs/components/FileManager/ConfirmationPopUp.js +73 -4
- package/dist/cjs/components/FileManager/FileManager.js +6 -3
- package/dist/cjs/components/FileManager/FileManagerProvider.js +44 -0
- package/dist/cjs/components/FileManager/FileSectionItem/FileSectionItem.js +1 -1
- package/dist/cjs/components/FileManager/FileSectionItem/ItemActions.js +12 -3
- package/dist/cjs/components/FileManager/FileSectionState.js +1 -1
- package/dist/cjs/lib/capabilities.js +1 -0
- package/dist/es/components/Dropdown.js +1 -1
- package/dist/es/components/EditorHeader/EditorHeader.js +2 -2
- package/dist/es/components/EditorHeader/ProceedView.js +6 -6
- package/dist/es/components/FileManager/ConfirmationPopUp.js +49 -1
- package/dist/es/components/FileManager/FileManager.js +6 -3
- package/dist/es/components/FileManager/FileManagerProvider.js +17 -0
- package/dist/es/components/FileManager/FileSectionItem/FileSectionItem.js +1 -1
- package/dist/es/components/FileManager/FileSectionItem/ItemActions.js +12 -3
- package/dist/es/components/FileManager/FileSectionState.js +1 -1
- package/dist/es/lib/capabilities.js +1 -0
- package/dist/types/components/EditorHeader/EditorHeader.d.ts +1 -0
- package/dist/types/components/EditorHeader/ProceedView.d.ts +2 -1
- package/dist/types/components/FileManager/ConfirmationPopUp.d.ts +5 -1
- package/dist/types/components/FileManager/FileManager.d.ts +1 -0
- package/dist/types/components/FileManager/FileManagerProvider.d.ts +25 -0
- package/dist/types/components/FileManager/FileSectionItem/ItemActions.d.ts +1 -0
- package/dist/types/lib/capabilities.d.ts +1 -0
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ exports.DropdownList = styled_components_1.default.div `
|
|
|
14
14
|
box-shadow: 0 4px 9px rgba(0, 0, 0, 0.3);
|
|
15
15
|
background: ${(props) => props.theme.colors.background.primary};
|
|
16
16
|
width: ${(props) => (props.width ? props.width + 'px' : 'auto')};
|
|
17
|
-
${(props) => props.height && `height: ${props.height}px`};
|
|
17
|
+
${(props) => props.height && `max-height: ${props.height}px`};
|
|
18
18
|
${(props) => (props.direction === 'right' ? ' right: 0' : 'left : 0')};
|
|
19
19
|
top: ${(props) => props.theme.grid.unit * (props.top || 3)}px;
|
|
20
20
|
position: absolute;
|
|
@@ -49,7 +49,7 @@ const MapUserRole = {
|
|
|
49
49
|
Viewer: { label: 'Reading...', icon: __1.ReadingIcon },
|
|
50
50
|
};
|
|
51
51
|
const EditorHeader = ({ handleSnapshot, submission, hasPendingSuggestions, userRole, canCompleteTask, submitProceed, goBack, status, isAnnotator, message, exceptionDialog: ExceptionDialog, disabelProceedNote, }) => {
|
|
52
|
-
var _a, _b, _c;
|
|
52
|
+
var _a, _b, _c, _d;
|
|
53
53
|
const [confirmationDialog, toggleConfirmationDialog] = (0, react_1.useState)(false);
|
|
54
54
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
55
55
|
const [noteValue, setNoteValue] = (0, react_1.useState)('');
|
|
@@ -95,7 +95,7 @@ const EditorHeader = ({ handleSnapshot, submission, hasPendingSuggestions, userR
|
|
|
95
95
|
react_1.default.createElement("span", null, "Dashboard"))),
|
|
96
96
|
handleSnapshot &&
|
|
97
97
|
typeof hasPendingSuggestions == 'boolean' &&
|
|
98
|
-
submission.nextStep && (react_1.default.createElement(ProceedView_1.ProceedView, { isAnnotator: isAnnotator, disable: disable, onTransitionClick: onTransitionClick, hasPendingSuggestions: hasPendingSuggestions, loading: loading, showComplete: showComplete, noteValue: noteValue, currentStepTransition: currentStepTransition, error: error,
|
|
98
|
+
submission.nextStep && (react_1.default.createElement(ProceedView_1.ProceedView, { isAnnotator: isAnnotator, disable: disable, onTransitionClick: onTransitionClick, hasPendingSuggestions: hasPendingSuggestions, loading: loading, showComplete: showComplete, noteValue: noteValue, currentStepTransition: currentStepTransition, error: error, currentStepType: submission.currentStep.type, previousStepType: (_d = submission.previousStep) === null || _d === void 0 ? void 0 : _d.type, nextStepType: submission.nextStep.type, confirmationDialog: confirmationDialog, onNoteChange: disabelProceedNote ? undefined : onNoteChange, continueDialogAction: continueDialogAction, onCancelClick: onCancelClick, message: message })),
|
|
99
99
|
status && (react_1.default.createElement(ChildWrapper, null,
|
|
100
100
|
react_1.default.createElement(__1.SaveStatus, { status: status }))),
|
|
101
101
|
react_1.default.createElement(Spacer, null),
|
|
@@ -46,7 +46,7 @@ const StepDetails = ({ icon, label, description, role }) => (react_1.default.cre
|
|
|
46
46
|
react_1.default.createElement(__1.SecondarySmallText, null,
|
|
47
47
|
"Actor: ",
|
|
48
48
|
role.label))));
|
|
49
|
-
const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loading, showComplete, confirmationDialog,
|
|
49
|
+
const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loading, showComplete, confirmationDialog, previousStepType, currentStepType, nextStepType, isAnnotator, hasPendingSuggestions, error, noteValue, onNoteChange, onCancelClick, continueDialogAction, message: Message, }) => {
|
|
50
50
|
const dialogMessages = (0, react_1.useMemo)(() => hasPendingSuggestions && !isAnnotator
|
|
51
51
|
? {
|
|
52
52
|
header: 'The task can not be transitioned to the next step',
|
|
@@ -62,7 +62,7 @@ const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loadin
|
|
|
62
62
|
: showComplete
|
|
63
63
|
? {
|
|
64
64
|
header: 'Content reassigned successfully',
|
|
65
|
-
message: `to the ${
|
|
65
|
+
message: `to the ${currentStepType.label}`,
|
|
66
66
|
actions: {
|
|
67
67
|
primary: {
|
|
68
68
|
action: onCancelClick,
|
|
@@ -87,7 +87,7 @@ const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loadin
|
|
|
87
87
|
showComplete,
|
|
88
88
|
continueDialogAction,
|
|
89
89
|
onCancelClick,
|
|
90
|
-
|
|
90
|
+
currentStepType,
|
|
91
91
|
hasPendingSuggestions,
|
|
92
92
|
isAnnotator,
|
|
93
93
|
]);
|
|
@@ -100,10 +100,10 @@ const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loadin
|
|
|
100
100
|
(loading && (react_1.default.createElement(__1.LoadingOverlay, null,
|
|
101
101
|
react_1.default.createElement(Message, { isCentered: true }, "Proceeding with your submission\u2026")))) || (react_1.default.createElement(__1.Dialog, { isOpen: confirmationDialog && !loading, category: __1.Category.confirmation, header: dialogMessages.header, message: dialogMessages.message, actions: dialogMessages.actions },
|
|
102
102
|
(showComplete && (react_1.default.createElement(Grid, null,
|
|
103
|
-
react_1.default.createElement(StepDetails, Object.assign({},
|
|
103
|
+
previousStepType && (react_1.default.createElement(StepDetails, Object.assign({}, previousStepType, { icon: react_1.default.createElement(react_1.default.Fragment, null,
|
|
104
104
|
react_1.default.createElement(__1.TaskStepDoneIcon, null),
|
|
105
|
-
react_1.default.createElement(Line, null)) })),
|
|
106
|
-
react_1.default.createElement(StepDetails, Object.assign({},
|
|
105
|
+
react_1.default.createElement(Line, null)) }))),
|
|
106
|
+
react_1.default.createElement(StepDetails, Object.assign({}, currentStepType))))) ||
|
|
107
107
|
((!hasPendingSuggestions || isAnnotator) && onNoteChange && (react_1.default.createElement(TextAreaWrapper, null,
|
|
108
108
|
react_1.default.createElement(EditorHeader_1.MediumTextArea, { value: noteValue, onChange: onNoteChange, rows: 5, placeholder: 'Add any additional comment here...' })))),
|
|
109
109
|
error && (react_1.default.createElement(AlertMessage_1.AlertMessage, { type: AlertMessage_1.AlertMessageType.error, hideCloseButton: true }, error))))));
|
|
@@ -1,11 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
4
33
|
};
|
|
5
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ConfirmationPopUp = void 0;
|
|
7
|
-
const
|
|
35
|
+
exports.MoveFilePopup = exports.ConfirmationPopUp = void 0;
|
|
36
|
+
const json_schema_1 = require("@manuscripts/json-schema");
|
|
37
|
+
const transform_1 = require("@manuscripts/transform");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
8
39
|
const Dialog_1 = require("../Dialog");
|
|
40
|
+
const FileManagerProvider_1 = require("./FileManagerProvider");
|
|
41
|
+
const FileSectionState_1 = require("./FileSectionState");
|
|
42
|
+
const util_1 = require("./util");
|
|
9
43
|
const ConfirmationPopUp = ({ popupHeader, popUpMessage, isOpen, handleClose, handleMove }) => {
|
|
10
44
|
return (react_1.default.createElement(Dialog_1.Dialog, { isOpen: isOpen, category: Dialog_1.Category.confirmation, header: popupHeader, message: popUpMessage, actions: {
|
|
11
45
|
primary: {
|
|
@@ -19,3 +53,38 @@ const ConfirmationPopUp = ({ popupHeader, popUpMessage, isOpen, handleClose, han
|
|
|
19
53
|
} }));
|
|
20
54
|
};
|
|
21
55
|
exports.ConfirmationPopUp = ConfirmationPopUp;
|
|
56
|
+
const MoveFilePopup = ({ dispatch, }) => {
|
|
57
|
+
const { moveFilePopup: { isOpen, fileSection, attachmentId }, saveModel, deleteModel, modelMap, getAttachments, setMoveFilePopupData, } = (0, react_1.useContext)(FileManagerProvider_1.FileManagerContext);
|
|
58
|
+
const isSupplement = fileSection === util_1.FileSectionType.Supplements;
|
|
59
|
+
const message = {
|
|
60
|
+
popupHeader: `Are you sure you want to move this file to “${(!isSupplement && 'Supplements') || 'Other files'}”?`,
|
|
61
|
+
popUpMessage: `The file will be removed from the “${(isSupplement && 'Supplements') || 'Other files'}” and added to “${(!isSupplement && 'Supplements') || 'Other files'}”.`,
|
|
62
|
+
};
|
|
63
|
+
const closePopup = (0, react_1.useCallback)(() => setMoveFilePopupData({
|
|
64
|
+
isOpen: false,
|
|
65
|
+
fileSection: fileSection,
|
|
66
|
+
}), [fileSection, setMoveFilePopupData]);
|
|
67
|
+
const showSuccessMessage = (0, react_1.useCallback)(() => dispatch(FileSectionState_1.actions.HANDLE_SUCCESS_MESSAGE(`File moved to ${(isSupplement && 'Other files') || 'Supplements'}.`, fileSection)), [dispatch, fileSection, isSupplement]);
|
|
68
|
+
const moveToSupplement = (0, react_1.useCallback)(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
closePopup();
|
|
70
|
+
const attachment = getAttachments().find(({ id }) => id === attachmentId);
|
|
71
|
+
if (!attachment) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const model = (0, transform_1.buildSupplementaryMaterial)(attachment.name, `attachment:${attachment.id}`);
|
|
75
|
+
yield saveModel(Object.assign(Object.assign({}, model), { title: attachment.name, href: `attachment:${attachment.id}` }));
|
|
76
|
+
showSuccessMessage();
|
|
77
|
+
}), [getAttachments, saveModel, showSuccessMessage, closePopup, attachmentId]);
|
|
78
|
+
const moveSupplementToOtherFiles = (0, react_1.useCallback)(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
closePopup();
|
|
80
|
+
const model = (0, transform_1.getModelsByType)(modelMap, json_schema_1.ObjectTypes.Supplement).find(({ href }) => (href === null || href === void 0 ? void 0 : href.replace('attachment:', '')) === attachmentId);
|
|
81
|
+
if (!model) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
yield deleteModel(model._id);
|
|
85
|
+
showSuccessMessage();
|
|
86
|
+
}), [attachmentId, closePopup, deleteModel, modelMap, showSuccessMessage]);
|
|
87
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
88
|
+
react_1.default.createElement(exports.ConfirmationPopUp, Object.assign({ isOpen: isOpen }, message, { handleMove: () => (!isSupplement && moveToSupplement()) || moveSupplementToOtherFiles(), handleClose: closePopup }))));
|
|
89
|
+
};
|
|
90
|
+
exports.MoveFilePopup = MoveFilePopup;
|
|
@@ -43,6 +43,8 @@ const react_tooltip_1 = __importDefault(require("react-tooltip"));
|
|
|
43
43
|
const index_1 = require("../../index");
|
|
44
44
|
const Inspector_1 = require("../Inspector");
|
|
45
45
|
const InspectorSection_1 = require("../InspectorSection");
|
|
46
|
+
const ConfirmationPopUp_1 = require("./ConfirmationPopUp");
|
|
47
|
+
const FileManagerProvider_1 = require("./FileManagerProvider");
|
|
46
48
|
const DraggableFileSectionItem_1 = require("./FileSectionItem/DraggableFileSectionItem");
|
|
47
49
|
const DragLayer_1 = require("./FileSectionItem/DragLayer");
|
|
48
50
|
const FileSectionItem_1 = require("./FileSectionItem/FileSectionItem");
|
|
@@ -52,7 +54,7 @@ const InlineFilesSection_1 = require("./InlineFilesSection");
|
|
|
52
54
|
const TooltipDiv_1 = require("./TooltipDiv");
|
|
53
55
|
const util_1 = require("./util");
|
|
54
56
|
exports.PermissionsContext = (0, react_1.createContext)(null);
|
|
55
|
-
const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileManagement: { getAttachments, replace, upload }, addAttachmentToState, }) => {
|
|
57
|
+
const FileManager = ({ modelMap, saveModel, deleteModel, enableDragAndDrop, can, fileManagement: { getAttachments, replace, upload }, addAttachmentToState, }) => {
|
|
56
58
|
const [state, dispatch] = (0, react_1.useReducer)(FileSectionState_1.reducer, (0, FileSectionState_1.getInitialState)());
|
|
57
59
|
const handleReplaceFile = (0, react_1.useCallback)((attachmentId, name, file) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
60
|
dispatch(FileSectionState_1.actions.HANDLE_UPLOAD_ACTION());
|
|
@@ -136,7 +138,7 @@ const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileManageme
|
|
|
136
138
|
});
|
|
137
139
|
return filesItems;
|
|
138
140
|
};
|
|
139
|
-
return (react_1.default.createElement(
|
|
141
|
+
return (react_1.default.createElement(FileManagerProvider_1.FileManagerProvider, { saveModel: saveModel, modelMap: modelMap, deleteModel: deleteModel, getAttachments: getAttachments },
|
|
140
142
|
react_1.default.createElement(DragLayer_1.DragLayer, null),
|
|
141
143
|
react_1.default.createElement(exports.PermissionsContext.Provider, { value: can },
|
|
142
144
|
react_1.default.createElement(InspectorSection_1.InspectorSection, { title: 'Files', contentStyles: { margin: '24px' } },
|
|
@@ -163,6 +165,7 @@ const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileManageme
|
|
|
163
165
|
react_1.default.createElement(Inspector_1.InspectorTabPanel, null,
|
|
164
166
|
react_1.default.createElement(FilesSection_1.FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFileWithSupplement, fileSection: index_1.FileSectionType.Supplements, filesItem: getFileSectionExternalFile(index_1.FileSectionType.Supplements), state: state, dispatch: dispatch })),
|
|
165
167
|
react_1.default.createElement(Inspector_1.InspectorTabPanel, null,
|
|
166
|
-
react_1.default.createElement(FilesSection_1.FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: index_1.FileSectionType.OtherFile, filesItem: getFileSectionExternalFile(index_1.FileSectionType.OtherFile), state: state, dispatch: dispatch })))))
|
|
168
|
+
react_1.default.createElement(FilesSection_1.FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: index_1.FileSectionType.OtherFile, filesItem: getFileSectionExternalFile(index_1.FileSectionType.OtherFile), state: state, dispatch: dispatch }))))),
|
|
169
|
+
react_1.default.createElement(ConfirmationPopUp_1.MoveFilePopup, { dispatch: dispatch }))));
|
|
167
170
|
};
|
|
168
171
|
exports.FileManager = FileManager;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.FileManagerProvider = exports.FileManagerContext = void 0;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
exports.FileManagerContext = (0, react_1.createContext)({
|
|
29
|
+
saveModel: () => '',
|
|
30
|
+
moveFilePopup: { isOpen: false },
|
|
31
|
+
setMoveFilePopupData: () => '',
|
|
32
|
+
});
|
|
33
|
+
const FileManagerProvider = ({ children, saveModel, deleteModel, modelMap, getAttachments }) => {
|
|
34
|
+
const [moveFilePopup, setMoveFilePopupData] = (0, react_1.useState)({ isOpen: false });
|
|
35
|
+
return (react_1.default.createElement(exports.FileManagerContext.Provider, { value: {
|
|
36
|
+
saveModel,
|
|
37
|
+
deleteModel,
|
|
38
|
+
modelMap,
|
|
39
|
+
getAttachments,
|
|
40
|
+
moveFilePopup,
|
|
41
|
+
setMoveFilePopupData,
|
|
42
|
+
} }, children));
|
|
43
|
+
};
|
|
44
|
+
exports.FileManagerProvider = FileManagerProvider;
|
|
@@ -36,7 +36,7 @@ const FileSectionItem = ({ fileSection, externalFile, title, showAttachmentName
|
|
|
36
36
|
handleDownload && handleReplace && (react_1.default.createElement(Dropdown_1.DropdownContainer, { ref: wrapperRef },
|
|
37
37
|
react_1.default.createElement(exports.ActionsIcon, { onClick: toggleOpen, type: "button", "aria-label": "Download or Replace", "aria-pressed": isOpen },
|
|
38
38
|
react_1.default.createElement(dots_icon_1.default, null)),
|
|
39
|
-
isOpen && (react_1.default.createElement(ItemActions_1.ItemActions, { fileSection: fileSection, replaceAttachmentHandler: handleReplace, showReplaceAction: showReplaceAction, downloadAttachmentHandler: handleDownload, handleSupplementReplace: handleSupplementReplace, attachmentId: externalFile.id, fileName: externalFile.name, publicUrl: externalFile.link, hideActionList: toggleOpen, dispatch: dispatch }))))));
|
|
39
|
+
isOpen && (react_1.default.createElement(ItemActions_1.ItemActions, { fileSection: fileSection, isMainManuscript: isMainManuscript, replaceAttachmentHandler: handleReplace, showReplaceAction: showReplaceAction, downloadAttachmentHandler: handleDownload, handleSupplementReplace: handleSupplementReplace, attachmentId: externalFile.id, fileName: externalFile.name, publicUrl: externalFile.link, hideActionList: toggleOpen, dispatch: dispatch }))))));
|
|
40
40
|
};
|
|
41
41
|
exports.FileSectionItem = FileSectionItem;
|
|
42
42
|
const IconCloseButton = styled_components_1.default.button `
|
|
@@ -36,11 +36,13 @@ exports.ItemActions = void 0;
|
|
|
36
36
|
const react_1 = __importStar(require("react"));
|
|
37
37
|
const Dropdown_1 = require("../../Dropdown");
|
|
38
38
|
const FileManager_1 = require("../FileManager");
|
|
39
|
+
const FileManagerProvider_1 = require("../FileManagerProvider");
|
|
39
40
|
const FileSectionState_1 = require("../FileSectionState");
|
|
40
41
|
const ItemsAction_1 = require("../ItemsAction");
|
|
41
42
|
const util_1 = require("../util");
|
|
42
|
-
const ItemActions = ({ fileSection, downloadAttachmentHandler, replaceAttachmentHandler, handleSupplementReplace, detachAttachmnetHandler, handleUpdateInline, attachmentId, fileName, publicUrl, hideActionList, dispatch, dropDownClassName, showReplaceAction, }) => {
|
|
43
|
+
const ItemActions = ({ fileSection, isMainManuscript, downloadAttachmentHandler, replaceAttachmentHandler, handleSupplementReplace, detachAttachmnetHandler, handleUpdateInline, attachmentId, fileName, publicUrl, hideActionList, dispatch, dropDownClassName, showReplaceAction, }) => {
|
|
43
44
|
const can = (0, react_1.useContext)(FileManager_1.PermissionsContext);
|
|
45
|
+
const { setMoveFilePopupData } = (0, react_1.useContext)(FileManagerProvider_1.FileManagerContext);
|
|
44
46
|
const canBeReplaced = showReplaceAction == undefined || showReplaceAction;
|
|
45
47
|
const fileInputRef = (0, react_1.useRef)(null);
|
|
46
48
|
const [selectedFile, setSelectedFile] = (0, react_1.useState)();
|
|
@@ -71,13 +73,20 @@ const ItemActions = ({ fileSection, downloadAttachmentHandler, replaceAttachment
|
|
|
71
73
|
fileInputRef.current.click();
|
|
72
74
|
}
|
|
73
75
|
};
|
|
74
|
-
return (react_1.default.createElement(Dropdown_1.DropdownList, { direction: 'right', className: dropDownClassName, width:
|
|
76
|
+
return (react_1.default.createElement(Dropdown_1.DropdownList, { direction: 'right', className: dropDownClassName, width: 200, height: 120, top: 5, onClick: hideActionList },
|
|
75
77
|
react_1.default.createElement(ItemsAction_1.ActionsItem, { onClick: () => {
|
|
76
78
|
publicUrl !== undefined ? downloadAttachmentHandler(publicUrl) : {};
|
|
77
79
|
} }, "Download"),
|
|
78
80
|
(can === null || can === void 0 ? void 0 : can.replaceFile) && canBeReplaced && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
79
81
|
react_1.default.createElement(ItemsAction_1.ActionsItem, { onClick: openFileDialog }, "Replace"),
|
|
80
82
|
react_1.default.createElement("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: (e) => handleChange(e), value: '' }))),
|
|
81
|
-
(can === null || can === void 0 ? void 0 : can.editArticle) && detachAttachmnetHandler && (react_1.default.createElement(ItemsAction_1.ActionsItem, { onClick: () => detachAttachmnetHandler() }, "Detach"))
|
|
83
|
+
(can === null || can === void 0 ? void 0 : can.editArticle) && detachAttachmnetHandler && (react_1.default.createElement(ItemsAction_1.ActionsItem, { onClick: () => detachAttachmnetHandler() }, "Detach")),
|
|
84
|
+
!isMainManuscript &&
|
|
85
|
+
fileSection !== util_1.FileSectionType.Inline &&
|
|
86
|
+
(can === null || can === void 0 ? void 0 : can.moveFile) && (react_1.default.createElement(ItemsAction_1.ActionsItem, { onClick: () => setMoveFilePopupData({ isOpen: true, attachmentId, fileSection }) },
|
|
87
|
+
"Move to",
|
|
88
|
+
' ',
|
|
89
|
+
(fileSection === util_1.FileSectionType.OtherFile && 'Supplements') ||
|
|
90
|
+
'Other files'))));
|
|
82
91
|
};
|
|
83
92
|
exports.ItemActions = ItemActions;
|
|
@@ -33,7 +33,7 @@ const reducer = (state, action) => {
|
|
|
33
33
|
}, successMessage: action.successMoveMessage, isShowSuccessMessage: false });
|
|
34
34
|
}
|
|
35
35
|
case ActionTypes.HANDLE_UPLOAD_ACTION: {
|
|
36
|
-
return Object.assign(Object.assign({}, state), { isUploadFile: true, isShowSuccessMessage: false, successMessage: '' });
|
|
36
|
+
return Object.assign(Object.assign({}, state), { isUploadFile: true, isShowSuccessMessage: false, fileUploadedSuccessfullySection: undefined, successMessage: '' });
|
|
37
37
|
}
|
|
38
38
|
case ActionTypes.HANDLE_CANCEL_UPLOAD: {
|
|
39
39
|
return Object.assign({}, state);
|
|
@@ -40,6 +40,7 @@ const getCapabilities = (project, profile, role, actions) => {
|
|
|
40
40
|
downloadFiles: true,
|
|
41
41
|
changeDesignation: (isOwner() || isEditor() || isWriter()) &&
|
|
42
42
|
allowed(Actions.updateAttachment),
|
|
43
|
+
moveFile: isOwner() || isEditor() || isWriter(),
|
|
43
44
|
replaceFile: isOwner() || isEditor() || isWriter(),
|
|
44
45
|
uploadFile: isOwner() || isEditor() || isWriter(),
|
|
45
46
|
handleQualityReport: isOwner() || isEditor() || isWriter(),
|
|
@@ -8,7 +8,7 @@ export const DropdownList = styled.div `
|
|
|
8
8
|
box-shadow: 0 4px 9px rgba(0, 0, 0, 0.3);
|
|
9
9
|
background: ${(props) => props.theme.colors.background.primary};
|
|
10
10
|
width: ${(props) => (props.width ? props.width + 'px' : 'auto')};
|
|
11
|
-
${(props) => props.height && `height: ${props.height}px`};
|
|
11
|
+
${(props) => props.height && `max-height: ${props.height}px`};
|
|
12
12
|
${(props) => (props.direction === 'right' ? ' right: 0' : 'left : 0')};
|
|
13
13
|
top: ${(props) => props.theme.grid.unit * (props.top || 3)}px;
|
|
14
14
|
position: absolute;
|
|
@@ -20,7 +20,7 @@ const MapUserRole = {
|
|
|
20
20
|
Viewer: { label: 'Reading...', icon: ReadingIcon },
|
|
21
21
|
};
|
|
22
22
|
export const EditorHeader = ({ handleSnapshot, submission, hasPendingSuggestions, userRole, canCompleteTask, submitProceed, goBack, status, isAnnotator, message, exceptionDialog: ExceptionDialog, disabelProceedNote, }) => {
|
|
23
|
-
var _a, _b, _c;
|
|
23
|
+
var _a, _b, _c, _d;
|
|
24
24
|
const [confirmationDialog, toggleConfirmationDialog] = useState(false);
|
|
25
25
|
const [loading, setLoading] = useState(false);
|
|
26
26
|
const [noteValue, setNoteValue] = useState('');
|
|
@@ -66,7 +66,7 @@ export const EditorHeader = ({ handleSnapshot, submission, hasPendingSuggestions
|
|
|
66
66
|
React.createElement("span", null, "Dashboard"))),
|
|
67
67
|
handleSnapshot &&
|
|
68
68
|
typeof hasPendingSuggestions == 'boolean' &&
|
|
69
|
-
submission.nextStep && (React.createElement(ProceedView, { isAnnotator: isAnnotator, disable: disable, onTransitionClick: onTransitionClick, hasPendingSuggestions: hasPendingSuggestions, loading: loading, showComplete: showComplete, noteValue: noteValue, currentStepTransition: currentStepTransition, error: error,
|
|
69
|
+
submission.nextStep && (React.createElement(ProceedView, { isAnnotator: isAnnotator, disable: disable, onTransitionClick: onTransitionClick, hasPendingSuggestions: hasPendingSuggestions, loading: loading, showComplete: showComplete, noteValue: noteValue, currentStepTransition: currentStepTransition, error: error, currentStepType: submission.currentStep.type, previousStepType: (_d = submission.previousStep) === null || _d === void 0 ? void 0 : _d.type, nextStepType: submission.nextStep.type, confirmationDialog: confirmationDialog, onNoteChange: disabelProceedNote ? undefined : onNoteChange, continueDialogAction: continueDialogAction, onCancelClick: onCancelClick, message: message })),
|
|
70
70
|
status && (React.createElement(ChildWrapper, null,
|
|
71
71
|
React.createElement(SaveStatus, { status: status }))),
|
|
72
72
|
React.createElement(Spacer, null),
|
|
@@ -17,7 +17,7 @@ const StepDetails = ({ icon, label, description, role }) => (React.createElement
|
|
|
17
17
|
React.createElement(SecondarySmallText, null,
|
|
18
18
|
"Actor: ",
|
|
19
19
|
role.label))));
|
|
20
|
-
export const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loading, showComplete, confirmationDialog,
|
|
20
|
+
export const ProceedView = ({ currentStepTransition, onTransitionClick, disable, loading, showComplete, confirmationDialog, previousStepType, currentStepType, nextStepType, isAnnotator, hasPendingSuggestions, error, noteValue, onNoteChange, onCancelClick, continueDialogAction, message: Message, }) => {
|
|
21
21
|
const dialogMessages = useMemo(() => hasPendingSuggestions && !isAnnotator
|
|
22
22
|
? {
|
|
23
23
|
header: 'The task can not be transitioned to the next step',
|
|
@@ -33,7 +33,7 @@ export const ProceedView = ({ currentStepTransition, onTransitionClick, disable,
|
|
|
33
33
|
: showComplete
|
|
34
34
|
? {
|
|
35
35
|
header: 'Content reassigned successfully',
|
|
36
|
-
message: `to the ${
|
|
36
|
+
message: `to the ${currentStepType.label}`,
|
|
37
37
|
actions: {
|
|
38
38
|
primary: {
|
|
39
39
|
action: onCancelClick,
|
|
@@ -58,7 +58,7 @@ export const ProceedView = ({ currentStepTransition, onTransitionClick, disable,
|
|
|
58
58
|
showComplete,
|
|
59
59
|
continueDialogAction,
|
|
60
60
|
onCancelClick,
|
|
61
|
-
|
|
61
|
+
currentStepType,
|
|
62
62
|
hasPendingSuggestions,
|
|
63
63
|
isAnnotator,
|
|
64
64
|
]);
|
|
@@ -71,10 +71,10 @@ export const ProceedView = ({ currentStepTransition, onTransitionClick, disable,
|
|
|
71
71
|
(loading && (React.createElement(LoadingOverlay, null,
|
|
72
72
|
React.createElement(Message, { isCentered: true }, "Proceeding with your submission\u2026")))) || (React.createElement(Dialog, { isOpen: confirmationDialog && !loading, category: Category.confirmation, header: dialogMessages.header, message: dialogMessages.message, actions: dialogMessages.actions },
|
|
73
73
|
(showComplete && (React.createElement(Grid, null,
|
|
74
|
-
React.createElement(StepDetails, Object.assign({},
|
|
74
|
+
previousStepType && (React.createElement(StepDetails, Object.assign({}, previousStepType, { icon: React.createElement(React.Fragment, null,
|
|
75
75
|
React.createElement(TaskStepDoneIcon, null),
|
|
76
|
-
React.createElement(Line, null)) })),
|
|
77
|
-
React.createElement(StepDetails, Object.assign({},
|
|
76
|
+
React.createElement(Line, null)) }))),
|
|
77
|
+
React.createElement(StepDetails, Object.assign({}, currentStepType))))) ||
|
|
78
78
|
((!hasPendingSuggestions || isAnnotator) && onNoteChange && (React.createElement(TextAreaWrapper, null,
|
|
79
79
|
React.createElement(MediumTextArea, { value: noteValue, onChange: onNoteChange, rows: 5, placeholder: 'Add any additional comment here...' })))),
|
|
80
80
|
error && (React.createElement(AlertMessage, { type: AlertMessageType.error, hideCloseButton: true }, error))))));
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { ObjectTypes } from '@manuscripts/json-schema';
|
|
11
|
+
import { buildSupplementaryMaterial, getModelsByType, } from '@manuscripts/transform';
|
|
12
|
+
import React, { useCallback, useContext } from 'react';
|
|
2
13
|
import { Category, Dialog } from '../Dialog';
|
|
14
|
+
import { FileManagerContext } from './FileManagerProvider';
|
|
15
|
+
import { actions } from './FileSectionState';
|
|
16
|
+
import { FileSectionType } from './util';
|
|
3
17
|
export const ConfirmationPopUp = ({ popupHeader, popUpMessage, isOpen, handleClose, handleMove }) => {
|
|
4
18
|
return (React.createElement(Dialog, { isOpen: isOpen, category: Category.confirmation, header: popupHeader, message: popUpMessage, actions: {
|
|
5
19
|
primary: {
|
|
@@ -12,3 +26,37 @@ export const ConfirmationPopUp = ({ popupHeader, popUpMessage, isOpen, handleClo
|
|
|
12
26
|
},
|
|
13
27
|
} }));
|
|
14
28
|
};
|
|
29
|
+
export const MoveFilePopup = ({ dispatch, }) => {
|
|
30
|
+
const { moveFilePopup: { isOpen, fileSection, attachmentId }, saveModel, deleteModel, modelMap, getAttachments, setMoveFilePopupData, } = useContext(FileManagerContext);
|
|
31
|
+
const isSupplement = fileSection === FileSectionType.Supplements;
|
|
32
|
+
const message = {
|
|
33
|
+
popupHeader: `Are you sure you want to move this file to “${(!isSupplement && 'Supplements') || 'Other files'}”?`,
|
|
34
|
+
popUpMessage: `The file will be removed from the “${(isSupplement && 'Supplements') || 'Other files'}” and added to “${(!isSupplement && 'Supplements') || 'Other files'}”.`,
|
|
35
|
+
};
|
|
36
|
+
const closePopup = useCallback(() => setMoveFilePopupData({
|
|
37
|
+
isOpen: false,
|
|
38
|
+
fileSection: fileSection,
|
|
39
|
+
}), [fileSection, setMoveFilePopupData]);
|
|
40
|
+
const showSuccessMessage = useCallback(() => dispatch(actions.HANDLE_SUCCESS_MESSAGE(`File moved to ${(isSupplement && 'Other files') || 'Supplements'}.`, fileSection)), [dispatch, fileSection, isSupplement]);
|
|
41
|
+
const moveToSupplement = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
closePopup();
|
|
43
|
+
const attachment = getAttachments().find(({ id }) => id === attachmentId);
|
|
44
|
+
if (!attachment) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const model = buildSupplementaryMaterial(attachment.name, `attachment:${attachment.id}`);
|
|
48
|
+
yield saveModel(Object.assign(Object.assign({}, model), { title: attachment.name, href: `attachment:${attachment.id}` }));
|
|
49
|
+
showSuccessMessage();
|
|
50
|
+
}), [getAttachments, saveModel, showSuccessMessage, closePopup, attachmentId]);
|
|
51
|
+
const moveSupplementToOtherFiles = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
closePopup();
|
|
53
|
+
const model = getModelsByType(modelMap, ObjectTypes.Supplement).find(({ href }) => (href === null || href === void 0 ? void 0 : href.replace('attachment:', '')) === attachmentId);
|
|
54
|
+
if (!model) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
yield deleteModel(model._id);
|
|
58
|
+
showSuccessMessage();
|
|
59
|
+
}), [attachmentId, closePopup, deleteModel, modelMap, showSuccessMessage]);
|
|
60
|
+
return (React.createElement(React.Fragment, null,
|
|
61
|
+
React.createElement(ConfirmationPopUp, Object.assign({ isOpen: isOpen }, message, { handleMove: () => (!isSupplement && moveToSupplement()) || moveSupplementToOtherFiles(), handleClose: closePopup }))));
|
|
62
|
+
};
|
|
@@ -14,6 +14,8 @@ import ReactTooltip from 'react-tooltip';
|
|
|
14
14
|
import { FileSectionType, useFiles } from '../../index';
|
|
15
15
|
import { InspectorTab, InspectorTabList, InspectorTabPanel, InspectorTabPanels, InspectorTabs, } from '../Inspector';
|
|
16
16
|
import { InspectorSection } from '../InspectorSection';
|
|
17
|
+
import { MoveFilePopup } from './ConfirmationPopUp';
|
|
18
|
+
import { FileManagerProvider } from './FileManagerProvider';
|
|
17
19
|
import { DraggableFileSectionItem } from './FileSectionItem/DraggableFileSectionItem';
|
|
18
20
|
import { DragLayer } from './FileSectionItem/DragLayer';
|
|
19
21
|
import { FileSectionItem, } from './FileSectionItem/FileSectionItem';
|
|
@@ -23,7 +25,7 @@ import { InlineFilesSection } from './InlineFilesSection';
|
|
|
23
25
|
import { TooltipDiv } from './TooltipDiv';
|
|
24
26
|
import { generateAttachmentsTitles } from './util';
|
|
25
27
|
export const PermissionsContext = createContext(null);
|
|
26
|
-
export const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileManagement: { getAttachments, replace, upload }, addAttachmentToState, }) => {
|
|
28
|
+
export const FileManager = ({ modelMap, saveModel, deleteModel, enableDragAndDrop, can, fileManagement: { getAttachments, replace, upload }, addAttachmentToState, }) => {
|
|
27
29
|
const [state, dispatch] = useReducer(reducer, getInitialState());
|
|
28
30
|
const handleReplaceFile = useCallback((attachmentId, name, file) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
31
|
dispatch(actions.HANDLE_UPLOAD_ACTION());
|
|
@@ -107,7 +109,7 @@ export const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileM
|
|
|
107
109
|
});
|
|
108
110
|
return filesItems;
|
|
109
111
|
};
|
|
110
|
-
return (React.createElement(
|
|
112
|
+
return (React.createElement(FileManagerProvider, { saveModel: saveModel, modelMap: modelMap, deleteModel: deleteModel, getAttachments: getAttachments },
|
|
111
113
|
React.createElement(DragLayer, null),
|
|
112
114
|
React.createElement(PermissionsContext.Provider, { value: can },
|
|
113
115
|
React.createElement(InspectorSection, { title: 'Files', contentStyles: { margin: '24px' } },
|
|
@@ -134,5 +136,6 @@ export const FileManager = ({ modelMap, saveModel, enableDragAndDrop, can, fileM
|
|
|
134
136
|
React.createElement(InspectorTabPanel, null,
|
|
135
137
|
React.createElement(FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFileWithSupplement, fileSection: FileSectionType.Supplements, filesItem: getFileSectionExternalFile(FileSectionType.Supplements), state: state, dispatch: dispatch })),
|
|
136
138
|
React.createElement(InspectorTabPanel, null,
|
|
137
|
-
React.createElement(FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: FileSectionType.OtherFile, filesItem: getFileSectionExternalFile(FileSectionType.OtherFile), state: state, dispatch: dispatch })))))
|
|
139
|
+
React.createElement(FilesSection, { enableDragAndDrop: enableDragAndDrop, handleUpload: handleUploadFile, fileSection: FileSectionType.OtherFile, filesItem: getFileSectionExternalFile(FileSectionType.OtherFile), state: state, dispatch: dispatch }))))),
|
|
140
|
+
React.createElement(MoveFilePopup, { dispatch: dispatch }))));
|
|
138
141
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { createContext, useState } from 'react';
|
|
2
|
+
export const FileManagerContext = createContext({
|
|
3
|
+
saveModel: () => '',
|
|
4
|
+
moveFilePopup: { isOpen: false },
|
|
5
|
+
setMoveFilePopupData: () => '',
|
|
6
|
+
});
|
|
7
|
+
export const FileManagerProvider = ({ children, saveModel, deleteModel, modelMap, getAttachments }) => {
|
|
8
|
+
const [moveFilePopup, setMoveFilePopupData] = useState({ isOpen: false });
|
|
9
|
+
return (React.createElement(FileManagerContext.Provider, { value: {
|
|
10
|
+
saveModel,
|
|
11
|
+
deleteModel,
|
|
12
|
+
modelMap,
|
|
13
|
+
getAttachments,
|
|
14
|
+
moveFilePopup,
|
|
15
|
+
setMoveFilePopupData,
|
|
16
|
+
} }, children));
|
|
17
|
+
};
|
|
@@ -30,7 +30,7 @@ export const FileSectionItem = ({ fileSection, externalFile, title, showAttachme
|
|
|
30
30
|
handleDownload && handleReplace && (React.createElement(DropdownContainer, { ref: wrapperRef },
|
|
31
31
|
React.createElement(ActionsIcon, { onClick: toggleOpen, type: "button", "aria-label": "Download or Replace", "aria-pressed": isOpen },
|
|
32
32
|
React.createElement(DotsIcon, null)),
|
|
33
|
-
isOpen && (React.createElement(ItemActions, { fileSection: fileSection, replaceAttachmentHandler: handleReplace, showReplaceAction: showReplaceAction, downloadAttachmentHandler: handleDownload, handleSupplementReplace: handleSupplementReplace, attachmentId: externalFile.id, fileName: externalFile.name, publicUrl: externalFile.link, hideActionList: toggleOpen, dispatch: dispatch }))))));
|
|
33
|
+
isOpen && (React.createElement(ItemActions, { fileSection: fileSection, isMainManuscript: isMainManuscript, replaceAttachmentHandler: handleReplace, showReplaceAction: showReplaceAction, downloadAttachmentHandler: handleDownload, handleSupplementReplace: handleSupplementReplace, attachmentId: externalFile.id, fileName: externalFile.name, publicUrl: externalFile.link, hideActionList: toggleOpen, dispatch: dispatch }))))));
|
|
34
34
|
};
|
|
35
35
|
const IconCloseButton = styled.button `
|
|
36
36
|
border: none;
|
|
@@ -10,11 +10,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import React, { useContext, useRef, useState, } from 'react';
|
|
11
11
|
import { DropdownList } from '../../Dropdown';
|
|
12
12
|
import { PermissionsContext } from '../FileManager';
|
|
13
|
+
import { FileManagerContext } from '../FileManagerProvider';
|
|
13
14
|
import { actions } from '../FileSectionState';
|
|
14
15
|
import { ActionsItem } from '../ItemsAction';
|
|
15
16
|
import { FileSectionType } from '../util';
|
|
16
|
-
export const ItemActions = ({ fileSection, downloadAttachmentHandler, replaceAttachmentHandler, handleSupplementReplace, detachAttachmnetHandler, handleUpdateInline, attachmentId, fileName, publicUrl, hideActionList, dispatch, dropDownClassName, showReplaceAction, }) => {
|
|
17
|
+
export const ItemActions = ({ fileSection, isMainManuscript, downloadAttachmentHandler, replaceAttachmentHandler, handleSupplementReplace, detachAttachmnetHandler, handleUpdateInline, attachmentId, fileName, publicUrl, hideActionList, dispatch, dropDownClassName, showReplaceAction, }) => {
|
|
17
18
|
const can = useContext(PermissionsContext);
|
|
19
|
+
const { setMoveFilePopupData } = useContext(FileManagerContext);
|
|
18
20
|
const canBeReplaced = showReplaceAction == undefined || showReplaceAction;
|
|
19
21
|
const fileInputRef = useRef(null);
|
|
20
22
|
const [selectedFile, setSelectedFile] = useState();
|
|
@@ -45,12 +47,19 @@ export const ItemActions = ({ fileSection, downloadAttachmentHandler, replaceAtt
|
|
|
45
47
|
fileInputRef.current.click();
|
|
46
48
|
}
|
|
47
49
|
};
|
|
48
|
-
return (React.createElement(DropdownList, { direction: 'right', className: dropDownClassName, width:
|
|
50
|
+
return (React.createElement(DropdownList, { direction: 'right', className: dropDownClassName, width: 200, height: 120, top: 5, onClick: hideActionList },
|
|
49
51
|
React.createElement(ActionsItem, { onClick: () => {
|
|
50
52
|
publicUrl !== undefined ? downloadAttachmentHandler(publicUrl) : {};
|
|
51
53
|
} }, "Download"),
|
|
52
54
|
(can === null || can === void 0 ? void 0 : can.replaceFile) && canBeReplaced && (React.createElement(React.Fragment, null,
|
|
53
55
|
React.createElement(ActionsItem, { onClick: openFileDialog }, "Replace"),
|
|
54
56
|
React.createElement("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: (e) => handleChange(e), value: '' }))),
|
|
55
|
-
(can === null || can === void 0 ? void 0 : can.editArticle) && detachAttachmnetHandler && (React.createElement(ActionsItem, { onClick: () => detachAttachmnetHandler() }, "Detach"))
|
|
57
|
+
(can === null || can === void 0 ? void 0 : can.editArticle) && detachAttachmnetHandler && (React.createElement(ActionsItem, { onClick: () => detachAttachmnetHandler() }, "Detach")),
|
|
58
|
+
!isMainManuscript &&
|
|
59
|
+
fileSection !== FileSectionType.Inline &&
|
|
60
|
+
(can === null || can === void 0 ? void 0 : can.moveFile) && (React.createElement(ActionsItem, { onClick: () => setMoveFilePopupData({ isOpen: true, attachmentId, fileSection }) },
|
|
61
|
+
"Move to",
|
|
62
|
+
' ',
|
|
63
|
+
(fileSection === FileSectionType.OtherFile && 'Supplements') ||
|
|
64
|
+
'Other files'))));
|
|
56
65
|
};
|
|
@@ -29,7 +29,7 @@ export const reducer = (state, action) => {
|
|
|
29
29
|
}, successMessage: action.successMoveMessage, isShowSuccessMessage: false });
|
|
30
30
|
}
|
|
31
31
|
case ActionTypes.HANDLE_UPLOAD_ACTION: {
|
|
32
|
-
return Object.assign(Object.assign({}, state), { isUploadFile: true, isShowSuccessMessage: false, successMessage: '' });
|
|
32
|
+
return Object.assign(Object.assign({}, state), { isUploadFile: true, isShowSuccessMessage: false, fileUploadedSuccessfullySection: undefined, successMessage: '' });
|
|
33
33
|
}
|
|
34
34
|
case ActionTypes.HANDLE_CANCEL_UPLOAD: {
|
|
35
35
|
return Object.assign({}, state);
|
|
@@ -34,6 +34,7 @@ export const getCapabilities = (project, profile, role, actions) => {
|
|
|
34
34
|
downloadFiles: true,
|
|
35
35
|
changeDesignation: (isOwner() || isEditor() || isWriter()) &&
|
|
36
36
|
allowed(Actions.updateAttachment),
|
|
37
|
+
moveFile: isOwner() || isEditor() || isWriter(),
|
|
37
38
|
replaceFile: isOwner() || isEditor() || isWriter(),
|
|
38
39
|
uploadFile: isOwner() || isEditor() || isWriter(),
|
|
39
40
|
handleQualityReport: isOwner() || isEditor() || isWriter(),
|
|
@@ -11,8 +11,9 @@ export declare const ProceedView: React.FC<{
|
|
|
11
11
|
noteValue: string;
|
|
12
12
|
currentStepTransition: SubmissionStepTransition[];
|
|
13
13
|
error: string | undefined;
|
|
14
|
-
|
|
14
|
+
previousStepType: SubmissionStepType | undefined;
|
|
15
15
|
currentStepType: SubmissionStepType;
|
|
16
|
+
nextStepType: SubmissionStepType;
|
|
16
17
|
confirmationDialog: boolean;
|
|
17
18
|
onCancelClick: () => void;
|
|
18
19
|
continueDialogAction: () => Promise<void>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { Dispatch } from 'react';
|
|
2
|
+
import { Action } from './FileSectionState';
|
|
2
3
|
export declare const ConfirmationPopUp: React.FC<{
|
|
3
4
|
popupHeader: string;
|
|
4
5
|
popUpMessage: string;
|
|
@@ -6,3 +7,6 @@ export declare const ConfirmationPopUp: React.FC<{
|
|
|
6
7
|
handleClose: () => void;
|
|
7
8
|
handleMove: () => void;
|
|
8
9
|
}>;
|
|
10
|
+
export declare const MoveFilePopup: React.FC<{
|
|
11
|
+
dispatch: Dispatch<Action>;
|
|
12
|
+
}>;
|
|
@@ -15,6 +15,7 @@ export declare const FileManager: React.FC<{
|
|
|
15
15
|
fileManagement: FileManagement;
|
|
16
16
|
modelMap: Map<string, Model>;
|
|
17
17
|
saveModel: <T extends Model>(model: T | Build<T> | Partial<T>) => Promise<T>;
|
|
18
|
+
deleteModel: (id: string) => Promise<string>;
|
|
18
19
|
enableDragAndDrop: boolean;
|
|
19
20
|
can: Capabilities;
|
|
20
21
|
addAttachmentToState?: (a: FileAttachment) => void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Model } from '@manuscripts/json-schema';
|
|
2
|
+
import { Build } from '@manuscripts/transform';
|
|
3
|
+
import React, { Dispatch, SetStateAction } from 'react';
|
|
4
|
+
import { FileAttachment } from './FileSectionItem/FileSectionItem';
|
|
5
|
+
import { FileSectionType } from './util';
|
|
6
|
+
type MoveFilePopup = {
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
fileSection?: FileSectionType;
|
|
9
|
+
attachmentId?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const FileManagerContext: React.Context<{
|
|
12
|
+
saveModel: <T extends Model>(model: T | Build<T> | Partial<T>) => Promise<T>;
|
|
13
|
+
deleteModel: (id: string) => Promise<string>;
|
|
14
|
+
modelMap: Map<string, Model>;
|
|
15
|
+
getAttachments: () => FileAttachment[];
|
|
16
|
+
moveFilePopup: MoveFilePopup;
|
|
17
|
+
setMoveFilePopupData: Dispatch<SetStateAction<MoveFilePopup>>;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const FileManagerProvider: React.FC<{
|
|
20
|
+
saveModel: <T extends Model>(model: T | Build<T> | Partial<T>) => Promise<T>;
|
|
21
|
+
deleteModel: (id: string) => Promise<string>;
|
|
22
|
+
modelMap: Map<string, Model>;
|
|
23
|
+
getAttachments: () => FileAttachment[];
|
|
24
|
+
}>;
|
|
25
|
+
export {};
|
|
@@ -5,6 +5,7 @@ import { FileSectionType } from '../util';
|
|
|
5
5
|
import { FileAttachment } from './FileSectionItem';
|
|
6
6
|
export declare const ItemActions: React.FC<{
|
|
7
7
|
fileSection: FileSectionType;
|
|
8
|
+
isMainManuscript?: boolean;
|
|
8
9
|
downloadAttachmentHandler: (url: string) => void;
|
|
9
10
|
replaceAttachmentHandler: Replace;
|
|
10
11
|
detachAttachmnetHandler?: () => void;
|
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.1.
|
|
4
|
+
"version": "1.1.9-LEAN-2192-v11",
|
|
5
5
|
"repository": "github:Atypon-OpenSource/manuscripts-style-guide",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"main": "dist/cjs",
|