@manuscripts/style-guide 1.8.4 → 1.8.6

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.
@@ -79,8 +79,14 @@ const AddNewFootnote = (0, styled_components_1.default)(Button_1.ButtonGroup) `
79
79
  }
80
80
  }
81
81
  `;
82
- const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) => {
83
- const [selections, setSelections] = (0, react_1.useState)(new Map());
82
+ const TableFootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel }) => {
83
+ let selectedNotesMap;
84
+ if (inlineFootnote) {
85
+ const rids = inlineFootnote.attrs.rids;
86
+ const selectedNotes = notes.filter(({ node }) => rids.includes(node.attrs.id));
87
+ selectedNotesMap = new Map(selectedNotes.map(({ node }) => [node.attrs.id, node]));
88
+ }
89
+ const [selections, setSelections] = (0, react_1.useState)(new Map(selectedNotesMap));
84
90
  const toggleSelection = (item) => {
85
91
  const id = item.attrs.id;
86
92
  if (selections.has(id)) {
@@ -100,7 +106,7 @@ const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) => {
100
106
  };
101
107
  return (react_1.default.createElement(Container, null,
102
108
  react_1.default.createElement(NotesContainer, null,
103
- react_1.default.createElement(TableFootnotesList, { notes: notes, isSelected: isSelected, onSelect: toggleSelection })),
109
+ react_1.default.createElement(TableFootnotesList, { notes: notes, inlineFootnote: inlineFootnote, isSelected: isSelected, onSelect: toggleSelection })),
104
110
  react_1.default.createElement(Actions, null,
105
111
  react_1.default.createElement(AddNewFootnote, null,
106
112
  react_1.default.createElement(Button_1.IconTextButton, { onClick: onAdd },
@@ -108,17 +114,38 @@ const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) => {
108
114
  "Add new")),
109
115
  react_1.default.createElement(Button_1.ButtonGroup, null,
110
116
  react_1.default.createElement(Button_1.SecondaryButton, { onClick: onCancel }, "Cancel"),
111
- react_1.default.createElement(Button_1.PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 }, "Insert")))));
117
+ react_1.default.createElement(Button_1.PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 && !inlineFootnote }, inlineFootnote ? 'Update' : 'Insert')))));
112
118
  };
113
119
  exports.TableFootnotesSelector = TableFootnotesSelector;
114
- const TableFootnotesList = ({ notes, isSelected, onSelect }) => {
115
- return (react_1.default.createElement(NotesListContainer, null, notes.map(({ node, index }) => {
116
- var _a;
117
- return (react_1.default.createElement(FootnoteItem, { onClick: () => onSelect(node), key: node.attrs.id },
118
- react_1.default.createElement(StatusIcon, null, isSelected(node) ? (react_1.default.createElement(AddedIcon_1.default, { "data-cy": 'plus-icon-ok', width: 24, height: 24 })) : (react_1.default.createElement(AddIcon_1.default, { "data-cy": 'plus-icon', width: 24, height: 24 }))),
119
- react_1.default.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
120
- })));
120
+ const TableFootnotesList = ({ notes, isSelected, onSelect, inlineFootnote }) => {
121
+ const selectedNotes = [];
122
+ const remainingNotes = [];
123
+ notes.forEach((note) => {
124
+ const isNoteSelected = inlineFootnote && inlineFootnote.attrs.rids.includes(note.node.attrs.id);
125
+ if (isNoteSelected) {
126
+ selectedNotes.push(note);
127
+ }
128
+ else {
129
+ remainingNotes.push(note);
130
+ }
131
+ });
132
+ return (react_1.default.createElement(NotesListContainer, null,
133
+ selectedNotes.map((note) => footnoteItem(note, isSelected, onSelect)),
134
+ selectedNotes.length > 0 && remainingNotes.length > 0 && react_1.default.createElement(Separator, null),
135
+ remainingNotes.map((note) => footnoteItem(note, isSelected, onSelect))));
136
+ };
137
+ const footnoteItem = (note, isSelected, onSelect) => {
138
+ var _a;
139
+ const { node, index } = note;
140
+ return (react_1.default.createElement(FootnoteItem, { onClick: () => onSelect(node), key: node.attrs.id },
141
+ react_1.default.createElement(StatusIcon, null, isSelected(node) ? (react_1.default.createElement(AddedIcon_1.default, { "data-cy": 'plus-icon-ok', width: 24, height: 24 })) : (react_1.default.createElement(AddIcon_1.default, { "data-cy": 'plus-icon', width: 24, height: 24 }))),
142
+ react_1.default.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
121
143
  };
144
+ const Separator = styled_components_1.default.div `
145
+ height: 0;
146
+ border-bottom: 1px solid #e2e2e2;
147
+ margin: 4px 0;
148
+ `;
122
149
  const NotesListContainer = styled_components_1.default.div `
123
150
  padding: ${(props) => props.theme.grid.unit * 6}px
124
151
  ${(props) => props.theme.grid.unit * 5}px;
@@ -36,15 +36,16 @@ const getCapabilities = (project, profile, role, actions) => {
36
36
  createComment: !isViewer(),
37
37
  viewNotes: true,
38
38
  createNotes: !isViewer() && allowed(Actions.addNote),
39
- handleNotes: isOwner() || isEditor() || isWriter(),
39
+ handleNotes: isOwner() || isEditor() || isWriter() || isAnnotator(),
40
40
  viewHistory: false,
41
41
  restoreVersion: isOwner() || isEditor() || isWriter(),
42
42
  downloadFiles: true,
43
- changeDesignation: (isOwner() || isEditor() || isWriter()) &&
43
+ changeDesignation: (isOwner() || isEditor() || isWriter() || isAnnotator()) &&
44
+ allowed(Actions.updateAttachment),
45
+ moveFile: isOwner() || isEditor() || isWriter() || isAnnotator(),
46
+ replaceFile: isOwner() || isEditor() || isWriter() || isAnnotator(),
47
+ uploadFile: (isOwner() || isEditor() || isWriter() || isAnnotator()) &&
44
48
  allowed(Actions.updateAttachment),
45
- moveFile: isOwner() || isEditor() || isWriter(),
46
- replaceFile: isOwner() || isEditor() || isWriter(),
47
- uploadFile: isOwner() || isEditor() || isWriter(),
48
49
  handleQualityReport: isOwner() || isEditor() || isWriter(),
49
50
  setMainManuscript: allowed(Actions.setMainManuscript),
50
51
  rejectTask: isProdEditor(),
@@ -57,7 +58,7 @@ const getCapabilities = (project, profile, role, actions) => {
57
58
  formatArticle: !isViewer(),
58
59
  editArticle: !isViewer(),
59
60
  editMetadata: !(isViewer() || isProofer()) || isAnnotator(),
60
- editCitationsAndRefs: !(isViewer() || isAnnotator() || isProofer()),
61
+ editCitationsAndRefs: !(isViewer() || isProofer()),
61
62
  shareProject: isOwner(),
62
63
  applySaveChanges: !(isAnnotator() || isProofer()),
63
64
  };
@@ -50,8 +50,14 @@ const AddNewFootnote = styled(ButtonGroup) `
50
50
  }
51
51
  }
52
52
  `;
53
- export const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) => {
54
- const [selections, setSelections] = useState(new Map());
53
+ export const TableFootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel }) => {
54
+ let selectedNotesMap;
55
+ if (inlineFootnote) {
56
+ const rids = inlineFootnote.attrs.rids;
57
+ const selectedNotes = notes.filter(({ node }) => rids.includes(node.attrs.id));
58
+ selectedNotesMap = new Map(selectedNotes.map(({ node }) => [node.attrs.id, node]));
59
+ }
60
+ const [selections, setSelections] = useState(new Map(selectedNotesMap));
55
61
  const toggleSelection = (item) => {
56
62
  const id = item.attrs.id;
57
63
  if (selections.has(id)) {
@@ -71,7 +77,7 @@ export const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) =>
71
77
  };
72
78
  return (React.createElement(Container, null,
73
79
  React.createElement(NotesContainer, null,
74
- React.createElement(TableFootnotesList, { notes: notes, isSelected: isSelected, onSelect: toggleSelection })),
80
+ React.createElement(TableFootnotesList, { notes: notes, inlineFootnote: inlineFootnote, isSelected: isSelected, onSelect: toggleSelection })),
75
81
  React.createElement(Actions, null,
76
82
  React.createElement(AddNewFootnote, null,
77
83
  React.createElement(IconTextButton, { onClick: onAdd },
@@ -79,16 +85,37 @@ export const TableFootnotesSelector = ({ notes, onAdd, onInsert, onCancel }) =>
79
85
  "Add new")),
80
86
  React.createElement(ButtonGroup, null,
81
87
  React.createElement(SecondaryButton, { onClick: onCancel }, "Cancel"),
82
- React.createElement(PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 }, "Insert")))));
88
+ React.createElement(PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 && !inlineFootnote }, inlineFootnote ? 'Update' : 'Insert')))));
89
+ };
90
+ const TableFootnotesList = ({ notes, isSelected, onSelect, inlineFootnote }) => {
91
+ const selectedNotes = [];
92
+ const remainingNotes = [];
93
+ notes.forEach((note) => {
94
+ const isNoteSelected = inlineFootnote && inlineFootnote.attrs.rids.includes(note.node.attrs.id);
95
+ if (isNoteSelected) {
96
+ selectedNotes.push(note);
97
+ }
98
+ else {
99
+ remainingNotes.push(note);
100
+ }
101
+ });
102
+ return (React.createElement(NotesListContainer, null,
103
+ selectedNotes.map((note) => footnoteItem(note, isSelected, onSelect)),
104
+ selectedNotes.length > 0 && remainingNotes.length > 0 && React.createElement(Separator, null),
105
+ remainingNotes.map((note) => footnoteItem(note, isSelected, onSelect))));
83
106
  };
84
- const TableFootnotesList = ({ notes, isSelected, onSelect }) => {
85
- return (React.createElement(NotesListContainer, null, notes.map(({ node, index }) => {
86
- var _a;
87
- return (React.createElement(FootnoteItem, { onClick: () => onSelect(node), key: node.attrs.id },
88
- React.createElement(StatusIcon, null, isSelected(node) ? (React.createElement(AddedIcon, { "data-cy": 'plus-icon-ok', width: 24, height: 24 })) : (React.createElement(AddIcon, { "data-cy": 'plus-icon', width: 24, height: 24 }))),
89
- React.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
90
- })));
107
+ const footnoteItem = (note, isSelected, onSelect) => {
108
+ var _a;
109
+ const { node, index } = note;
110
+ return (React.createElement(FootnoteItem, { onClick: () => onSelect(node), key: node.attrs.id },
111
+ React.createElement(StatusIcon, null, isSelected(node) ? (React.createElement(AddedIcon, { "data-cy": 'plus-icon-ok', width: 24, height: 24 })) : (React.createElement(AddIcon, { "data-cy": 'plus-icon', width: 24, height: 24 }))),
112
+ React.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
91
113
  };
114
+ const Separator = styled.div `
115
+ height: 0;
116
+ border-bottom: 1px solid #e2e2e2;
117
+ margin: 4px 0;
118
+ `;
92
119
  const NotesListContainer = styled.div `
93
120
  padding: ${(props) => props.theme.grid.unit * 6}px
94
121
  ${(props) => props.theme.grid.unit * 5}px;
@@ -30,15 +30,16 @@ export const getCapabilities = (project, profile, role, actions) => {
30
30
  createComment: !isViewer(),
31
31
  viewNotes: true,
32
32
  createNotes: !isViewer() && allowed(Actions.addNote),
33
- handleNotes: isOwner() || isEditor() || isWriter(),
33
+ handleNotes: isOwner() || isEditor() || isWriter() || isAnnotator(),
34
34
  viewHistory: false,
35
35
  restoreVersion: isOwner() || isEditor() || isWriter(),
36
36
  downloadFiles: true,
37
- changeDesignation: (isOwner() || isEditor() || isWriter()) &&
37
+ changeDesignation: (isOwner() || isEditor() || isWriter() || isAnnotator()) &&
38
+ allowed(Actions.updateAttachment),
39
+ moveFile: isOwner() || isEditor() || isWriter() || isAnnotator(),
40
+ replaceFile: isOwner() || isEditor() || isWriter() || isAnnotator(),
41
+ uploadFile: (isOwner() || isEditor() || isWriter() || isAnnotator()) &&
38
42
  allowed(Actions.updateAttachment),
39
- moveFile: isOwner() || isEditor() || isWriter(),
40
- replaceFile: isOwner() || isEditor() || isWriter(),
41
- uploadFile: isOwner() || isEditor() || isWriter(),
42
43
  handleQualityReport: isOwner() || isEditor() || isWriter(),
43
44
  setMainManuscript: allowed(Actions.setMainManuscript),
44
45
  rejectTask: isProdEditor(),
@@ -51,7 +52,7 @@ export const getCapabilities = (project, profile, role, actions) => {
51
52
  formatArticle: !isViewer(),
52
53
  editArticle: !isViewer(),
53
54
  editMetadata: !(isViewer() || isProofer()) || isAnnotator(),
54
- editCitationsAndRefs: !(isViewer() || isAnnotator() || isProofer()),
55
+ editCitationsAndRefs: !(isViewer() || isProofer()),
55
56
  shareProject: isOwner(),
56
57
  applySaveChanges: !(isAnnotator() || isProofer()),
57
58
  };
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { FootnoteNode } from '@manuscripts/transform';
16
+ import { FootnoteNode, InlineFootnoteNode } from '@manuscripts/transform';
17
17
  import React from 'react';
18
18
  export type FootnoteWithIndex = {
19
19
  node: FootnoteNode;
@@ -21,6 +21,7 @@ export type FootnoteWithIndex = {
21
21
  };
22
22
  export declare const TableFootnotesSelector: React.FC<{
23
23
  notes: FootnoteWithIndex[];
24
+ inlineFootnote?: InlineFootnoteNode;
24
25
  onAdd: () => void;
25
26
  onInsert: (notes: FootnoteWithIndex[]) => void;
26
27
  onCancel: () => 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.8.4",
4
+ "version": "1.8.6",
5
5
  "repository": "github:Atypon-OpenSource/manuscripts-style-guide",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@manuscripts/assets": "^0.6.4",
36
36
  "@manuscripts/json-schema": "^2.2.7",
37
- "@manuscripts/transform": "^2.1.10",
37
+ "@manuscripts/transform": "2.1.13",
38
38
  "@reach/tabs": "^0.18.0",
39
39
  "date-fns": "^2.29.3",
40
40
  "formik": "^2.2.9",
@@ -103,4 +103,4 @@
103
103
  "@types/react": "^17.0.2",
104
104
  "jackspeak": "2.1.1"
105
105
  }
106
- }
106
+ }