@manuscripts/article-editor 1.15.13-LEAN-3524.0 → 1.16.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.
- package/dist/cjs/components/comments/CommentActions.js +59 -0
- package/dist/cjs/components/comments/CommentActions.js.map +1 -0
- package/dist/cjs/components/comments/CommentBody.js +97 -0
- package/dist/cjs/components/comments/CommentBody.js.map +1 -0
- package/dist/cjs/components/comments/CommentResolveButton.js +56 -0
- package/dist/cjs/components/comments/CommentResolveButton.js.map +1 -0
- package/dist/cjs/components/comments/CommentThread.js +122 -0
- package/dist/cjs/components/comments/CommentThread.js.map +1 -0
- package/dist/cjs/components/comments/CommentsPanel.js +137 -0
- package/dist/cjs/components/comments/CommentsPanel.js.map +1 -0
- package/dist/cjs/components/{projects/CommentListPatterns.js → comments/CommentsPlaceholder.js} +15 -83
- package/dist/cjs/components/comments/CommentsPlaceholder.js.map +1 -0
- package/dist/cjs/components/projects/Inspector.js +17 -20
- package/dist/cjs/components/projects/Inspector.js.map +1 -1
- package/dist/cjs/config.js +0 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/comments.js +29 -0
- package/dist/cjs/lib/comments.js.map +1 -0
- package/dist/cjs/lib/user.js +2 -2
- package/dist/cjs/lib/user.js.map +1 -1
- package/dist/cjs/postgres-data/buildData.js +0 -1
- package/dist/cjs/postgres-data/buildData.js.map +1 -1
- package/dist/cjs/store/Store.js.map +1 -1
- package/dist/es/components/comments/CommentActions.js +52 -0
- package/dist/es/components/comments/CommentActions.js.map +1 -0
- package/dist/es/components/comments/CommentBody.js +67 -0
- package/dist/es/components/comments/CommentBody.js.map +1 -0
- package/dist/es/components/comments/CommentResolveButton.js +49 -0
- package/dist/es/components/comments/CommentResolveButton.js.map +1 -0
- package/dist/es/components/comments/CommentThread.js +93 -0
- package/dist/es/components/comments/CommentThread.js.map +1 -0
- package/dist/es/components/comments/CommentsPanel.js +107 -0
- package/dist/es/components/comments/CommentsPanel.js.map +1 -0
- package/dist/es/components/{projects/CommentListPatterns.js → comments/CommentsPlaceholder.js} +9 -53
- package/dist/es/components/comments/CommentsPlaceholder.js.map +1 -0
- package/dist/es/components/projects/Inspector.js +18 -21
- package/dist/es/components/projects/Inspector.js.map +1 -1
- package/dist/es/config.js +0 -1
- package/dist/es/config.js.map +1 -1
- package/dist/es/index.js +5 -5
- package/dist/es/index.js.map +1 -1
- package/dist/es/lib/comments.js +23 -0
- package/dist/es/lib/comments.js.map +1 -0
- package/dist/es/lib/user.js +2 -2
- package/dist/es/lib/user.js.map +1 -1
- package/dist/es/postgres-data/buildData.js +0 -1
- package/dist/es/postgres-data/buildData.js.map +1 -1
- package/dist/es/store/Store.js.map +1 -1
- package/dist/types/components/comments/CommentActions.d.ts +24 -0
- package/dist/types/components/comments/CommentBody.d.ts +21 -0
- package/dist/types/components/comments/CommentResolveButton.d.ts +18 -0
- package/dist/types/components/comments/CommentThread.d.ts +22 -0
- package/dist/types/components/comments/CommentsPanel.d.ts +2 -0
- package/dist/types/components/{projects/CommentList.d.ts → comments/CommentsPlaceholder.d.ts} +3 -2
- package/dist/types/config.d.ts +0 -1
- package/dist/types/{hooks/use-comment-manager.d.ts → lib/comments.d.ts} +10 -20
- package/dist/types/lib/user.d.ts +3 -6
- package/dist/types/store/Store.d.ts +3 -4
- package/package.json +3 -3
- package/dist/cjs/components/projects/CommentList.js +0 -144
- package/dist/cjs/components/projects/CommentList.js.map +0 -1
- package/dist/cjs/components/projects/CommentListPatterns.js.map +0 -1
- package/dist/cjs/components/projects/CommentsTab.js +0 -41
- package/dist/cjs/components/projects/CommentsTab.js.map +0 -1
- package/dist/cjs/hooks/use-comment-manager.js +0 -103
- package/dist/cjs/hooks/use-comment-manager.js.map +0 -1
- package/dist/es/components/projects/CommentList.js +0 -114
- package/dist/es/components/projects/CommentList.js.map +0 -1
- package/dist/es/components/projects/CommentListPatterns.js.map +0 -1
- package/dist/es/components/projects/CommentsTab.js +0 -34
- package/dist/es/components/projects/CommentsTab.js.map +0 -1
- package/dist/es/hooks/use-comment-manager.js +0 -99
- package/dist/es/hooks/use-comment-manager.js.map +0 -1
- package/dist/types/components/projects/CommentListPatterns.d.ts +0 -34
- package/dist/types/components/projects/CommentsTab.d.ts +0 -7
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
|
|
3
|
+
*
|
|
4
|
+
* Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
|
|
5
|
+
*
|
|
6
|
+
* The Original Code is manuscripts-frontend.
|
|
7
|
+
*
|
|
8
|
+
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
|
9
|
+
*
|
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2024 Atypon Systems LLC. All Rights Reserved.
|
|
11
|
+
*/
|
|
12
|
+
import { CommentResolveIcon, Tooltip } from '@manuscripts/style-guide';
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import styled from 'styled-components';
|
|
15
|
+
const Button = styled.button `
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
width: 24px;
|
|
19
|
+
height: 24px;
|
|
20
|
+
border-radius: 12px;
|
|
21
|
+
border: none;
|
|
22
|
+
background: #ffffff;
|
|
23
|
+
padding: 0;
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
|
|
26
|
+
&.resolved {
|
|
27
|
+
background: #f2fbfc;
|
|
28
|
+
border: 1px solid #bce7f6;
|
|
29
|
+
path {
|
|
30
|
+
fill: #1a9bc7;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&:not([disabled]):hover,
|
|
35
|
+
&:not([disabled]):active {
|
|
36
|
+
path {
|
|
37
|
+
fill: #1a9bc7;
|
|
38
|
+
}
|
|
39
|
+
background: #f2fbfc;
|
|
40
|
+
border: 1px solid #c9c9c9;
|
|
41
|
+
}
|
|
42
|
+
`;
|
|
43
|
+
export const CommentResolveButton = ({ comment, onClick, }) => {
|
|
44
|
+
return (React.createElement(React.Fragment, null,
|
|
45
|
+
React.createElement(Button, { className: comment.node.attrs.resolved ? 'resolved' : '', "data-tooltip-id": comment.node.attrs.id, onClick: onClick },
|
|
46
|
+
React.createElement(CommentResolveIcon, null)),
|
|
47
|
+
React.createElement(Tooltip, { id: comment.node.attrs.id, place: "bottom" }, (comment.node.attrs.resolved && 'Unresolve') || 'Resolve')));
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=CommentResolveButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentResolveButton.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentResolveButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B3B,CAAA;AAOD,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,OAAO,CACL;QACE,oBAAC,MAAM,IACL,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,qBACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EACtC,OAAO,EAAE,OAAO;YAEhB,oBAAC,kBAAkB,OAAG,CACf;QACT,oBAAC,OAAO,IAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAC,QAAQ,IAC/C,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,SAAS,CAClD,CACT,CACJ,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { AvatarIcon, RelativeDate, usePermissions, } from '@manuscripts/style-guide';
|
|
2
|
+
import React, { forwardRef, useState } from 'react';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
import { buildAuthorName, getAuthorID } from '../../lib/comments';
|
|
5
|
+
import { useStore } from '../../store';
|
|
6
|
+
import { CommentActions } from './CommentActions';
|
|
7
|
+
import { CommentBody } from './CommentBody';
|
|
8
|
+
const Container = styled.div `
|
|
9
|
+
padding: 16px;
|
|
10
|
+
background-color: ${(props) => (props.isSelected ? '#f2fbfc' : '#ffffff')};
|
|
11
|
+
border: 1px solid ${(props) => (props.isSelected ? '#bce7f6' : '#e2e2e2')};
|
|
12
|
+
border-left-width: 4px;
|
|
13
|
+
margin-bottom: 16px;
|
|
14
|
+
`;
|
|
15
|
+
const CommentHeader = styled.div `
|
|
16
|
+
display: flex;
|
|
17
|
+
margin-bottom: 16px;
|
|
18
|
+
`;
|
|
19
|
+
const CommentMetadata = styled.div `
|
|
20
|
+
flex: 1;
|
|
21
|
+
padding-left: 8px;
|
|
22
|
+
padding-right: 8px;
|
|
23
|
+
`;
|
|
24
|
+
const CommentAuthor = styled.div `
|
|
25
|
+
color: #353535;
|
|
26
|
+
font-weight: 400;
|
|
27
|
+
max-width: 200px;
|
|
28
|
+
white-space: nowrap;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
text-overflow: ellipsis;
|
|
31
|
+
`;
|
|
32
|
+
const CommentTarget = styled.div `
|
|
33
|
+
font-size: 14px;
|
|
34
|
+
color: #353535;
|
|
35
|
+
background-color: #ffeebf;
|
|
36
|
+
padding: 4px 8px;
|
|
37
|
+
margin-top: 16px;
|
|
38
|
+
margin-bottom: 16px;
|
|
39
|
+
`;
|
|
40
|
+
const Timestamp = styled(RelativeDate) `
|
|
41
|
+
font-size: 12px;
|
|
42
|
+
line-height: 16px;
|
|
43
|
+
font-weight: 400;
|
|
44
|
+
color: #6e6e6e;
|
|
45
|
+
`;
|
|
46
|
+
export const CommentThread = forwardRef((props, ref) => {
|
|
47
|
+
const { tree, isSelected, onSelect, onSave, onDelete } = props;
|
|
48
|
+
const can = usePermissions();
|
|
49
|
+
const [{ user, collaboratorsById }] = useStore((state) => ({
|
|
50
|
+
user: state.user,
|
|
51
|
+
collaboratorsById: state.collaboratorsById,
|
|
52
|
+
}));
|
|
53
|
+
const authorID = getAuthorID(tree.comment);
|
|
54
|
+
const authorName = authorID
|
|
55
|
+
? buildAuthorName(collaboratorsById.get(authorID))
|
|
56
|
+
: '';
|
|
57
|
+
const timestamp = tree.comment.node.attrs.contributions?.[0].timestamp;
|
|
58
|
+
const isOwn = authorID === user._id;
|
|
59
|
+
const isResolveEnabled = isOwn
|
|
60
|
+
? can.resolveOwnComment
|
|
61
|
+
: can.resolveOthersComment;
|
|
62
|
+
const isActionsEnabled = isOwn
|
|
63
|
+
? can.handleOwnComments
|
|
64
|
+
: can.handleOthersComments;
|
|
65
|
+
const [isEditing, setEditing] = useState(false);
|
|
66
|
+
const handleEdit = () => setEditing(true);
|
|
67
|
+
const handleSave = (contents) => {
|
|
68
|
+
onSave({
|
|
69
|
+
...tree.comment.node.attrs,
|
|
70
|
+
contents,
|
|
71
|
+
});
|
|
72
|
+
setEditing(false);
|
|
73
|
+
};
|
|
74
|
+
const handleCancel = () => {
|
|
75
|
+
setEditing(false);
|
|
76
|
+
};
|
|
77
|
+
const handleToggleResolve = () => {
|
|
78
|
+
onSave({
|
|
79
|
+
...tree.comment.node.attrs,
|
|
80
|
+
resolved: !tree.comment.node.attrs.resolved,
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
return (React.createElement(Container, { "data-cy": "comment", isSelected: isSelected, ref: ref },
|
|
84
|
+
React.createElement(CommentHeader, { "data-cy": "comment-header" },
|
|
85
|
+
authorName && React.createElement(AvatarIcon, { width: 20, height: 20 }),
|
|
86
|
+
React.createElement(CommentMetadata, null,
|
|
87
|
+
React.createElement(CommentAuthor, null, authorName),
|
|
88
|
+
timestamp && React.createElement(Timestamp, { date: timestamp * 1000 })),
|
|
89
|
+
React.createElement(CommentActions, { comment: tree.comment, isResolveEnabled: isResolveEnabled, isActionsEnabled: isActionsEnabled, onDelete: () => onDelete(tree.comment.node.attrs.id), onEdit: handleEdit, toggleResolve: handleToggleResolve })),
|
|
90
|
+
tree.comment.node.attrs.originalText && (React.createElement(CommentTarget, null, tree.comment.node.attrs.originalText)),
|
|
91
|
+
React.createElement(CommentBody, { comment: tree.comment, isEditing: tree.isNew || isEditing, onSave: handleSave, onCancel: handleCancel, onSelect: onSelect })));
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=CommentThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentThread.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
|
|
3
|
+
*
|
|
4
|
+
* Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
|
|
5
|
+
*
|
|
6
|
+
* The Original Code is manuscripts-frontend.
|
|
7
|
+
*
|
|
8
|
+
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
|
9
|
+
*
|
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2019 Atypon Systems LLC. All Rights Reserved.
|
|
11
|
+
*/
|
|
12
|
+
import { clearCommentSelection, commentsKey, isNodeComment, setCommentSelection, } from '@manuscripts/body-editor';
|
|
13
|
+
import { CheckboxField, CheckboxLabel } from '@manuscripts/style-guide';
|
|
14
|
+
import { skipTracking } from '@manuscripts/track-changes-plugin';
|
|
15
|
+
import { NodeSelection, TextSelection } from 'prosemirror-state';
|
|
16
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
17
|
+
import styled from 'styled-components';
|
|
18
|
+
import { buildCommentTrees } from '../../lib/comments';
|
|
19
|
+
import { useStore } from '../../store';
|
|
20
|
+
import { CommentsPlaceholder } from './CommentsPlaceholder';
|
|
21
|
+
import { CommentThread } from './CommentThread';
|
|
22
|
+
const Header = styled.div `
|
|
23
|
+
display: flex;
|
|
24
|
+
justify-content: flex-end;
|
|
25
|
+
padding: 12px;
|
|
26
|
+
`;
|
|
27
|
+
const CheckboxLabelText = styled.div `
|
|
28
|
+
color: ${(props) => props.theme.colors.text.primary} !important;
|
|
29
|
+
`;
|
|
30
|
+
const scrollIntoView = (element) => {
|
|
31
|
+
const rect = element.getBoundingClientRect();
|
|
32
|
+
if (rect.bottom > window.innerHeight || rect.top < 150) {
|
|
33
|
+
element.scrollIntoView();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const CommentsPanel = () => {
|
|
37
|
+
const [{ view, newCommentID, selectedCommentKey }] = useStore((state) => ({
|
|
38
|
+
view: state.view,
|
|
39
|
+
newCommentID: state.newCommentID,
|
|
40
|
+
selectedCommentKey: state.selectedCommentKey,
|
|
41
|
+
}));
|
|
42
|
+
const [showResolved, setShowResolved] = useState(true);
|
|
43
|
+
const comments = useMemo(() => view?.state ? commentsKey.getState(view.state)?.comments : undefined, [view?.state]);
|
|
44
|
+
const trees = useMemo(() => comments ? buildCommentTrees([...comments.values()], newCommentID) : [], [comments, newCommentID]);
|
|
45
|
+
const selectedRef = useCallback((e) => {
|
|
46
|
+
if (e) {
|
|
47
|
+
scrollIntoView(e);
|
|
48
|
+
}
|
|
49
|
+
}, []);
|
|
50
|
+
const setSelectedComment = (comment) => {
|
|
51
|
+
if (!view) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const tr = view.state.tr;
|
|
55
|
+
setCommentSelection(tr, comment.key, comment.node.attrs.id, false);
|
|
56
|
+
if (isNodeComment(comment)) {
|
|
57
|
+
tr.setSelection(NodeSelection.create(view.state.doc, comment.target.pos));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const range = comment.range;
|
|
61
|
+
const from = range.pos;
|
|
62
|
+
const to = from + range.size;
|
|
63
|
+
tr.setSelection(TextSelection.create(view.state.doc, from, to));
|
|
64
|
+
}
|
|
65
|
+
tr.scrollIntoView();
|
|
66
|
+
view.focus();
|
|
67
|
+
view.dispatch(tr);
|
|
68
|
+
};
|
|
69
|
+
const handleSave = (attrs) => {
|
|
70
|
+
const comment = comments?.get(attrs.id);
|
|
71
|
+
if (!comment) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const tr = view.state.tr;
|
|
75
|
+
tr.setNodeMarkup(comment.pos, undefined, attrs);
|
|
76
|
+
clearCommentSelection(tr);
|
|
77
|
+
view.dispatch(skipTracking(tr));
|
|
78
|
+
};
|
|
79
|
+
const handleDelete = (id) => {
|
|
80
|
+
const comment = comments?.get(id);
|
|
81
|
+
if (!comment) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const tr = view.state.tr;
|
|
85
|
+
tr.delete(comment.pos, comment.pos + comment.node.nodeSize);
|
|
86
|
+
clearCommentSelection(tr);
|
|
87
|
+
view.dispatch(skipTracking(tr));
|
|
88
|
+
};
|
|
89
|
+
const isSelected = (tree) => {
|
|
90
|
+
return tree && selectedCommentKey === tree.comment.key;
|
|
91
|
+
};
|
|
92
|
+
if (!view) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
if (!trees.length) {
|
|
96
|
+
return React.createElement(CommentsPlaceholder, null);
|
|
97
|
+
}
|
|
98
|
+
return (React.createElement(React.Fragment, null,
|
|
99
|
+
React.createElement(Header, null,
|
|
100
|
+
React.createElement(CheckboxLabel, null,
|
|
101
|
+
React.createElement(CheckboxField, { name: 'show-resolved', checked: showResolved, onChange: (e) => setShowResolved(e.target.checked) }),
|
|
102
|
+
React.createElement(CheckboxLabelText, null, "See resolved"))),
|
|
103
|
+
trees
|
|
104
|
+
.filter((c) => showResolved || !c.comment.node.attrs.resolved)
|
|
105
|
+
.map((c, i, a) => (React.createElement(CommentThread, { key: c.comment.node.attrs.id, ref: isSelected(c) && !isSelected(a[i - 1]) ? selectedRef : null, tree: c, isSelected: isSelected(c), onSelect: () => setSelectedComment(c.comment), onSave: handleSave, onDelete: handleDelete })))));
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=CommentsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentsPanel.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentsPanel.tsx"],"names":[],"mappings":"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"}
|
package/dist/es/components/{projects/CommentListPatterns.js → comments/CommentsPlaceholder.js}
RENAMED
|
@@ -7,75 +7,31 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
|
9
9
|
*
|
|
10
|
-
* All portions of the code written by Atypon Systems LLC are Copyright (c)
|
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2024 Atypon Systems LLC. All Rights Reserved.
|
|
11
11
|
*/
|
|
12
|
-
import
|
|
13
|
-
import React, { useCallback } from 'react';
|
|
12
|
+
import React from 'react';
|
|
14
13
|
import styled from 'styled-components';
|
|
15
|
-
|
|
16
|
-
flex: 1;
|
|
17
|
-
overflow-y: auto;
|
|
18
|
-
`;
|
|
19
|
-
export const Thread = styled.div `
|
|
20
|
-
margin: 16px 0;
|
|
21
|
-
`;
|
|
22
|
-
export const Reply = styled.div `
|
|
23
|
-
padding: ${(props) => props.theme.grid.unit * 4}px 0
|
|
24
|
-
${(props) => props.theme.grid.unit * 2}px;
|
|
25
|
-
margin-left: ${(props) => props.theme.grid.unit * 4}px;
|
|
26
|
-
border: 1px solid ${(props) => props.theme.colors.brand.xlight};
|
|
27
|
-
border-top: none;
|
|
28
|
-
`;
|
|
29
|
-
export const PlaceholderContainer = styled.div `
|
|
14
|
+
const Container = styled.div `
|
|
30
15
|
display: flex;
|
|
31
16
|
flex-direction: column;
|
|
32
17
|
align-items: center;
|
|
33
18
|
justify-content: center;
|
|
34
19
|
margin-top: 50px;
|
|
35
20
|
`;
|
|
36
|
-
export const
|
|
21
|
+
export const Message = styled.div `
|
|
37
22
|
font-size: ${(props) => props.theme.font.size.medium};
|
|
38
23
|
font-weight: ${(props) => props.theme.font.weight.light};
|
|
39
24
|
color: ${(props) => props.theme.colors.text.secondary};
|
|
40
25
|
text-align: center;
|
|
41
26
|
margin: ${(props) => props.theme.grid.unit * 5}px;
|
|
42
27
|
`;
|
|
43
|
-
|
|
44
|
-
display: flex;
|
|
45
|
-
align-items: center;
|
|
46
|
-
justify-content: flex-end;
|
|
47
|
-
`;
|
|
48
|
-
export const LabelText = styled.div `
|
|
49
|
-
font-family: ${(props) => props.theme.font.family.sans};
|
|
50
|
-
color: ${(props) => props.theme.colors.text.primary};
|
|
51
|
-
font-size: 14px;
|
|
52
|
-
line-height: 24px;
|
|
53
|
-
`;
|
|
54
|
-
export const Checkbox = styled(CheckboxLabel) `
|
|
55
|
-
div {
|
|
56
|
-
color: ${(props) => props.theme.colors.text.primary};
|
|
57
|
-
}
|
|
58
|
-
`;
|
|
59
|
-
export var CommentFilter;
|
|
60
|
-
(function (CommentFilter) {
|
|
61
|
-
CommentFilter[CommentFilter["ALL"] = 0] = "ALL";
|
|
62
|
-
CommentFilter[CommentFilter["UNRESOLVED"] = 1] = "UNRESOLVED";
|
|
63
|
-
})(CommentFilter || (CommentFilter = {}));
|
|
64
|
-
export const SeeResolvedCheckbox = ({ isEmpty, commentFilter, setCommentFilter, }) => {
|
|
65
|
-
const handleOnSelectChange = useCallback((e) => setCommentFilter(e.target.checked ? CommentFilter.ALL : CommentFilter.UNRESOLVED), [setCommentFilter]);
|
|
66
|
-
return (React.createElement(ActionHeader, null, isEmpty ? null : (React.createElement(Checkbox, null,
|
|
67
|
-
React.createElement(CheckboxField, { checked: commentFilter === CommentFilter.ALL, onChange: handleOnSelectChange }),
|
|
68
|
-
React.createElement(LabelText, null, "See resolved")))));
|
|
69
|
-
};
|
|
70
|
-
export const EmptyCommentsListPlaceholder = () => {
|
|
71
|
-
return (React.createElement(PlaceholderContainer, null,
|
|
72
|
-
React.createElement(EmptyCommentsListGraphic, null),
|
|
73
|
-
React.createElement(PlaceholderMessage, null, "Discuss this manuscript with your collaborators by creating a comment.")));
|
|
74
|
-
};
|
|
75
|
-
const EmptyCommentsListGraphic = () => (React.createElement("svg", { width: "300", height: "300", viewBox: "0 0 300 300", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
28
|
+
const PlaceholderGraphic = () => (React.createElement("svg", { width: "300", height: "300", viewBox: "0 0 300 300", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
76
29
|
React.createElement("rect", { width: "300", height: "300", fill: "url(#pattern0_6815_691)" }),
|
|
77
30
|
React.createElement("defs", null,
|
|
78
31
|
React.createElement("pattern", { id: "pattern0_6815_691", patternContentUnits: "objectBoundingBox", width: "1", height: "1" },
|
|
79
32
|
React.createElement("use", { xlinkHref: "#image0_6815_691", transform: "scale(0.00333333)" })),
|
|
80
33
|
React.createElement("image", { id: "image0_6815_691", width: "300", height: "300", xlinkHref: "data:image/png;base64,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" }))));
|
|
81
|
-
|
|
34
|
+
export const CommentsPlaceholder = () => (React.createElement(Container, null,
|
|
35
|
+
React.createElement(PlaceholderGraphic, null),
|
|
36
|
+
React.createElement(Message, null, "Discuss this manuscript with your collaborators by creating a comment.")));
|
|
37
|
+
//# sourceMappingURL=CommentsPlaceholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentsPlaceholder.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentsPlaceholder.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;CAM3B,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;eAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;iBACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;WAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;;YAE3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CAC/C,CAAA;AAED,MAAM,kBAAkB,GAAa,GAAG,EAAE,CAAC,CACzC,6BACE,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B;IAElC,8BAAM,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,yBAAyB,GAAG;IAChE;QACE,iCACE,EAAE,EAAC,mBAAmB,EACtB,mBAAmB,EAAC,mBAAmB,EACvC,KAAK,EAAC,GAAG,EACT,MAAM,EAAC,GAAG;YAEV,6BAAK,SAAS,EAAC,kBAAkB,EAAC,SAAS,EAAC,mBAAmB,GAAG,CAC1D;QACV,+BACE,EAAE,EAAC,iBAAiB,EACpB,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,SAAS,EAAC,w8hCAAw8hC,GACl9hC,CACG,CACH,CACP,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAa,GAAG,EAAE,CAAC,CACjD,oBAAC,SAAS;IACR,oBAAC,kBAAkB,OAAG;IACtB,oBAAC,OAAO,iFAEE,CACA,CACb,CAAA"}
|
|
@@ -9,16 +9,15 @@
|
|
|
9
9
|
*
|
|
10
10
|
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2023 Atypon Systems LLC. All Rights Reserved.
|
|
11
11
|
*/
|
|
12
|
-
import { findParentNodeWithIdValue } from '@manuscripts/body-editor';
|
|
13
12
|
import { FileManager, usePermissions } from '@manuscripts/style-guide';
|
|
14
|
-
import React, { useEffect,
|
|
13
|
+
import React, { useEffect, useState } from 'react';
|
|
15
14
|
import config from '../../config';
|
|
16
15
|
import { useStore } from '../../store';
|
|
16
|
+
import { CommentsPanel } from '../comments/CommentsPanel';
|
|
17
17
|
import { InspectorContainer, InspectorTab, InspectorTabList, InspectorTabPanel, InspectorTabs, PaddedInspectorTabPanels, } from '../Inspector';
|
|
18
18
|
import Panel from '../Panel';
|
|
19
19
|
import { ResizingInspectorButton } from '../ResizerButtons';
|
|
20
20
|
import { TrackChangesPanel } from '../track-changes/TrackChangesPanel';
|
|
21
|
-
import { CommentsTab } from './CommentsTab';
|
|
22
21
|
import { ContentTab } from './ContentTab';
|
|
23
22
|
const Inspector = ({ editor }) => {
|
|
24
23
|
const [store] = useStore((store) => ({
|
|
@@ -34,6 +33,7 @@ const Inspector = ({ editor }) => {
|
|
|
34
33
|
const comment = store.selectedCommentKey;
|
|
35
34
|
const suggestion = store.selectedSuggestionID;
|
|
36
35
|
const [tabIndex, setTabIndex] = useState(1);
|
|
36
|
+
const CONTENT_TAB_INDEX = 0;
|
|
37
37
|
const COMMENTS_TAB_INDEX = 1;
|
|
38
38
|
const SUGGESTIONS_TAB_INDEX = 2;
|
|
39
39
|
const FILES_TAB_INDEX = 3;
|
|
@@ -47,25 +47,22 @@ const Inspector = ({ editor }) => {
|
|
|
47
47
|
setTabIndex(SUGGESTIONS_TAB_INDEX);
|
|
48
48
|
}
|
|
49
49
|
}, [suggestion, SUGGESTIONS_TAB_INDEX]);
|
|
50
|
-
const selection = useMemo(() => state && findParentNodeWithIdValue(state.selection), [state]);
|
|
51
50
|
const can = usePermissions();
|
|
52
|
-
return (React.createElement(
|
|
53
|
-
React.createElement(
|
|
54
|
-
React.createElement(
|
|
55
|
-
React.createElement(
|
|
56
|
-
React.createElement(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
React.createElement(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// @ts-ignore
|
|
68
|
-
saveModel: store.saveTrackModel, deleteModel: store.deleteTrackModel, fileManagement: store.fileManagement }))))))))));
|
|
51
|
+
return (React.createElement(Panel, { "data-cy": "inspector", name: 'inspector', minSize: 400, direction: 'row', side: 'start', hideWhen: 'max-width: 900px', resizerButton: ResizingInspectorButton },
|
|
52
|
+
React.createElement(InspectorContainer, null,
|
|
53
|
+
React.createElement(InspectorTabs, { index: tabIndex, onChange: setTabIndex },
|
|
54
|
+
React.createElement(InspectorTabList, null,
|
|
55
|
+
React.createElement(InspectorTab, { "data-cy": "content-button" }, "Content"),
|
|
56
|
+
React.createElement(InspectorTab, { "data-cy": "comments-button" }, "Comments"),
|
|
57
|
+
!can.editWithoutTracking && (React.createElement(InspectorTab, { "data-cy": "history-button" }, "History")),
|
|
58
|
+
config.features.fileManagement && (React.createElement(InspectorTab, { "data-cy": "files-button" }, "Files"))),
|
|
59
|
+
React.createElement(PaddedInspectorTabPanels, null,
|
|
60
|
+
React.createElement(InspectorTabPanel, { key: "Content", "data-cy": "content" }, tabIndex === CONTENT_TAB_INDEX && (React.createElement(ContentTab, { state: state, dispatch: dispatch, key: "content" }))),
|
|
61
|
+
React.createElement(InspectorTabPanel, { key: "Comments", "data-cy": "comments" }, tabIndex === COMMENTS_TAB_INDEX && (React.createElement(CommentsPanel, { key: "comments" }))),
|
|
62
|
+
!can.editWithoutTracking && (React.createElement(InspectorTabPanel, { key: "History", "data-cy": "history" }, tabIndex === SUGGESTIONS_TAB_INDEX && (React.createElement(TrackChangesPanel, { key: "track-changes" })))),
|
|
63
|
+
config.features.fileManagement && (React.createElement(InspectorTabPanel, { key: "Files", "data-cy": "files" }, tabIndex === FILES_TAB_INDEX && (React.createElement(FileManager, { can: can, files: store.files, enableDragAndDrop: true, modelMap: store.trackModelMap,
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
saveModel: store.saveTrackModel, deleteModel: store.deleteTrackModel, fileManagement: store.fileManagement })))))))));
|
|
69
66
|
};
|
|
70
67
|
export default Inspector;
|
|
71
68
|
//# sourceMappingURL=Inspector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/components/projects/Inspector.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/components/projects/Inspector.tsx"],"names":[],"mappings":"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"}
|
package/dist/es/config.js
CHANGED
|
@@ -25,7 +25,6 @@ const config = {
|
|
|
25
25
|
headers: {},
|
|
26
26
|
},
|
|
27
27
|
features: {
|
|
28
|
-
productionNotes: isTrue(process.env.FEATURE_PRODUCTION_NOTES),
|
|
29
28
|
footnotes: isTrue(process.env.FEATURE_FOOTNOTES),
|
|
30
29
|
fileManagement: isTrue(process.env.FEATURE_FILE_MANAGEMENT),
|
|
31
30
|
commenting: isTrue(process.env.FEATURE_COMMENTS),
|
package/dist/es/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAE,EAAE;IAC3C,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,GAAuB,EAAE,EAAE;IAC/C,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAE,EAAE;IAC3C,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,GAAuB,EAAE,EAAE;IAC/C,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AA8BD,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;IACjC,SAAS,EAAE;QACT,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;KACpC;IACD,GAAG,EAAE;QACH,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAClD,OAAO,EAAE,EAAE;KACZ;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChD,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3D,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAChD,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACvD,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACvD,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;KACpD;IACD,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,4BAA4B;KACjE;IACD,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAChD,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;KACrD;IACD,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;CACpE,CAAA;AAED,eAAe,MAAgB,CAAA"}
|
package/dist/es/index.js
CHANGED
|
@@ -15,7 +15,7 @@ import decode from 'jwt-decode';
|
|
|
15
15
|
import React, { Suspense, useMemo } from 'react';
|
|
16
16
|
import { LoadingPage } from './components/Loading';
|
|
17
17
|
import tokenHandler from './lib/token';
|
|
18
|
-
import
|
|
18
|
+
import userID from './lib/user-id';
|
|
19
19
|
import Main from './Main';
|
|
20
20
|
import { ThemeProvider } from './theme/ThemeProvider';
|
|
21
21
|
export { ProjectRole } from './lib/roles';
|
|
@@ -25,15 +25,15 @@ const ManuscriptEditor = ({ fileManagement, files, manuscriptID, projectID, perm
|
|
|
25
25
|
if (authToken) {
|
|
26
26
|
tokenHandler.remove();
|
|
27
27
|
tokenHandler.set(authToken); // @TODO actually relogin whe the token changes
|
|
28
|
-
const {
|
|
29
|
-
if (!
|
|
28
|
+
const { userId } = decode(authToken);
|
|
29
|
+
if (!userId) {
|
|
30
30
|
throw new Error('Invalid token');
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
userID.set(userId);
|
|
33
33
|
}
|
|
34
34
|
return () => {
|
|
35
35
|
tokenHandler.remove();
|
|
36
|
-
|
|
36
|
+
userID.remove();
|
|
37
37
|
};
|
|
38
38
|
}, [authToken]);
|
|
39
39
|
return (React.createElement(React.Fragment, null,
|
package/dist/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,iBAAiB,CAAA;AACxB,OAAO,aAAa,CAAA;AAEpB,OAAO,MAAM,MAAM,YAAY,CAAA;AAC/B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,YAAY,MAAM,aAAa,CAAA;AAEtC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,iBAAiB,CAAA;AACxB,OAAO,aAAa,CAAA;AAEpB,OAAO,MAAM,MAAM,YAAY,CAAA;AAC/B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,YAAY,MAAM,aAAa,CAAA;AAEtC,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAQzC,MAAM,gBAAgB,GAA6B,CAAC,EAClD,cAAc,EACd,KAAK,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,SAAS,EAAE;YACb,YAAY,CAAC,MAAM,EAAE,CAAA;YACrB,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA,CAAC,+CAA+C;YAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAe,SAAS,CAAC,CAAA;YAElD,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;aACjC;YAED,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SACnB;QACD,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,MAAM,EAAE,CAAA;YACrB,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,CACL;QACE,oBAAC,aAAa;YACZ,oBAAC,QAAQ,IACP,QAAQ,EAAE,oBAAC,WAAW,IAAC,SAAS,EAAE,QAAQ,iBAA0B;gBAEpE,oBAAC,IAAI,IACH,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,IAAI,EAAE,EAC1B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,GAClB,CACO,CACG;QAChB,6BAAK,EAAE,EAAC,MAAM,GAAO;QACrB,6BAAK,EAAE,EAAC,eAAe,GAAO;QAC9B,6BAAK,EAAE,EAAC,MAAM,GAAO,CACpB,CACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAC3C,gBAAgB,EAChB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACb,mHAAmH;IACnH,mIAAmI;IACnI,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAA,CAAC,sCAAsC;AACtF,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const getAuthorID = (comment) => {
|
|
2
|
+
const contributions = comment.node.attrs.contributions;
|
|
3
|
+
if (!contributions?.length) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
return contributions[0].profileID;
|
|
7
|
+
};
|
|
8
|
+
export const buildCommentTrees = (comments, newCommentID) => {
|
|
9
|
+
return comments.map((c) => ({
|
|
10
|
+
comment: c,
|
|
11
|
+
isNew: newCommentID === c.node.attrs.id,
|
|
12
|
+
children: [],
|
|
13
|
+
}));
|
|
14
|
+
};
|
|
15
|
+
export const buildAuthorName = (user) => {
|
|
16
|
+
if (!user) {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
return [user.bibliographicName.given, user.bibliographicName.family]
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
.join(' ');
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=comments.js.map
|