@manuscripts/article-editor 3.1.48-datasource-cleanup.0 → 3.1.48
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/EditorApp.js +7 -15
- package/dist/cjs/EditorApp.js.map +1 -1
- package/dist/cjs/components/inspector/SnapshotsDropdown.js +57 -33
- package/dist/cjs/components/inspector/SnapshotsDropdown.js.map +1 -1
- package/dist/cjs/components/projects/ManuscriptPageContainer.js +1 -0
- package/dist/cjs/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/cjs/hooks/use-connect-editor.js +1 -1
- package/dist/cjs/hooks/use-connect-editor.js.map +1 -1
- package/dist/cjs/hooks/use-create-editor.js +14 -3
- package/dist/cjs/hooks/use-create-editor.js.map +1 -1
- package/dist/cjs/hooks/use-handle-snapshot.js +2 -2
- package/dist/cjs/hooks/use-handle-snapshot.js.map +1 -1
- package/dist/cjs/lib/api/collaboration.js +25 -0
- package/dist/cjs/lib/api/collaboration.js.map +1 -0
- package/dist/cjs/lib/api/index.js +29 -0
- package/dist/cjs/lib/api/index.js.map +1 -0
- package/dist/cjs/postgres-data/Api.js +83 -0
- package/dist/cjs/postgres-data/Api.js.map +1 -0
- package/dist/cjs/{api/ApiSource.js → postgres-data/PsSource.js} +32 -17
- package/dist/cjs/postgres-data/PsSource.js.map +1 -0
- package/dist/cjs/{api → postgres-data}/buildData.js +7 -29
- package/dist/cjs/postgres-data/buildData.js.map +1 -0
- package/dist/cjs/{api → postgres-data}/buildUtilities.js +6 -5
- package/dist/cjs/postgres-data/buildUtilities.js.map +1 -0
- package/dist/cjs/postgres-data/savingUtilities.js.map +1 -0
- package/dist/cjs/quarterback/QuarterbackStepsExchanger.js +145 -0
- package/dist/cjs/quarterback/QuarterbackStepsExchanger.js.map +1 -0
- package/dist/cjs/quarterback/api/document.js +43 -0
- package/dist/cjs/quarterback/api/document.js.map +1 -0
- package/dist/cjs/quarterback/api/loadDoc.js +108 -0
- package/dist/cjs/quarterback/api/loadDoc.js.map +1 -0
- package/dist/cjs/quarterback/api/methods.js +147 -0
- package/dist/cjs/quarterback/api/methods.js.map +1 -0
- package/dist/cjs/{lib/doc.js → quarterback/getDocWithoutTrackContent.js} +8 -7
- package/dist/cjs/quarterback/getDocWithoutTrackContent.js.map +1 -0
- package/dist/cjs/quarterback/types.js +3 -0
- package/dist/cjs/quarterback/types.js.map +1 -0
- package/dist/cjs/store/DataSourceStrategy.js +11 -3
- package/dist/cjs/store/DataSourceStrategy.js.map +1 -1
- package/dist/cjs/store/Store.js.map +1 -1
- package/dist/es/EditorApp.js +7 -15
- package/dist/es/EditorApp.js.map +1 -1
- package/dist/es/components/inspector/SnapshotsDropdown.js +59 -35
- package/dist/es/components/inspector/SnapshotsDropdown.js.map +1 -1
- package/dist/es/components/projects/ManuscriptPageContainer.js +1 -0
- package/dist/es/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/es/hooks/use-connect-editor.js +1 -1
- package/dist/es/hooks/use-connect-editor.js.map +1 -1
- package/dist/es/hooks/use-create-editor.js +14 -3
- package/dist/es/hooks/use-create-editor.js.map +1 -1
- package/dist/es/hooks/use-handle-snapshot.js +1 -1
- package/dist/es/hooks/use-handle-snapshot.js.map +1 -1
- package/dist/es/lib/api/collaboration.js +18 -0
- package/dist/es/lib/api/collaboration.js.map +1 -0
- package/dist/{cjs/api/types.js → es/lib/api/index.js} +3 -4
- package/dist/es/lib/api/index.js.map +1 -0
- package/dist/es/postgres-data/Api.js +77 -0
- package/dist/es/postgres-data/Api.js.map +1 -0
- package/dist/es/{api/ApiSource.js → postgres-data/PsSource.js} +31 -15
- package/dist/es/postgres-data/PsSource.js.map +1 -0
- package/dist/es/{api → postgres-data}/buildData.js +7 -29
- package/dist/es/postgres-data/buildData.js.map +1 -0
- package/dist/es/{api → postgres-data}/buildUtilities.js +6 -5
- package/dist/es/postgres-data/buildUtilities.js.map +1 -0
- package/dist/es/postgres-data/savingUtilities.js.map +1 -0
- package/dist/es/quarterback/QuarterbackStepsExchanger.js +118 -0
- package/dist/es/quarterback/QuarterbackStepsExchanger.js.map +1 -0
- package/dist/es/quarterback/api/document.js +32 -0
- package/dist/es/quarterback/api/document.js.map +1 -0
- package/dist/es/quarterback/api/loadDoc.js +81 -0
- package/dist/es/quarterback/api/loadDoc.js.map +1 -0
- package/dist/es/quarterback/api/methods.js +137 -0
- package/dist/es/quarterback/api/methods.js.map +1 -0
- package/dist/es/{lib/doc.js → quarterback/getDocWithoutTrackContent.js} +6 -6
- package/dist/es/quarterback/getDocWithoutTrackContent.js.map +1 -0
- package/dist/es/quarterback/types.js +2 -0
- package/dist/es/quarterback/types.js.map +1 -0
- package/dist/es/store/DataSourceStrategy.js +11 -3
- package/dist/es/store/DataSourceStrategy.js.map +1 -1
- package/dist/es/store/Store.js.map +1 -1
- package/dist/types/lib/api/collaboration.d.ts +17 -0
- package/dist/{es/api/types.js → types/lib/api/index.d.ts} +2 -3
- package/dist/types/{api → postgres-data}/Api.d.ts +5 -13
- package/dist/types/{api/ApiSource.d.ts → postgres-data/PsSource.d.ts} +4 -3
- package/dist/types/postgres-data/buildData.d.ts +3 -0
- package/dist/types/{api → postgres-data}/buildUtilities.d.ts +1 -1
- package/dist/types/{api/StepsExchanger.d.ts → quarterback/QuarterbackStepsExchanger.d.ts} +21 -18
- package/dist/types/quarterback/api/document.d.ts +20 -0
- package/dist/types/quarterback/api/loadDoc.d.ts +18 -0
- package/dist/types/quarterback/api/methods.d.ts +38 -0
- package/dist/types/quarterback/getDocWithoutTrackContent.d.ts +3 -0
- package/dist/types/{api → quarterback}/types.d.ts +48 -9
- package/dist/types/store/DataSourceStrategy.d.ts +5 -2
- package/dist/types/store/Store.d.ts +5 -4
- package/package.json +4 -3
- package/dist/cjs/api/Api.js +0 -137
- package/dist/cjs/api/Api.js.map +0 -1
- package/dist/cjs/api/ApiSource.js.map +0 -1
- package/dist/cjs/api/StepsExchanger.js +0 -95
- package/dist/cjs/api/StepsExchanger.js.map +0 -1
- package/dist/cjs/api/buildData.js.map +0 -1
- package/dist/cjs/api/buildUtilities.js.map +0 -1
- package/dist/cjs/api/savingUtilities.js.map +0 -1
- package/dist/cjs/api/types.js.map +0 -1
- package/dist/cjs/lib/doc.js.map +0 -1
- package/dist/es/api/Api.js +0 -131
- package/dist/es/api/Api.js.map +0 -1
- package/dist/es/api/ApiSource.js.map +0 -1
- package/dist/es/api/StepsExchanger.js +0 -90
- package/dist/es/api/StepsExchanger.js.map +0 -1
- package/dist/es/api/buildData.js.map +0 -1
- package/dist/es/api/buildUtilities.js.map +0 -1
- package/dist/es/api/savingUtilities.js.map +0 -1
- package/dist/es/api/types.js.map +0 -1
- package/dist/es/lib/doc.js.map +0 -1
- package/dist/types/api/buildData.d.ts +0 -3
- package/dist/types/lib/doc.d.ts +0 -17
- /package/dist/cjs/{api → postgres-data}/savingUtilities.js +0 -0
- /package/dist/es/{api → postgres-data}/savingUtilities.js +0 -0
- /package/dist/types/{api → postgres-data}/savingUtilities.d.ts +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PsSource.js","sourceRoot":"","sources":["../../../src/postgres-data/PsSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,CAAC,OAAO,OAAO,QAAQ;IAM3B,YAAY,KAAuB;QASnC,gBAAW,GAAgB,CAAC,KAAY,EAAE,EAAE;YAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAA;QACzD,CAAC,CAAA;QAED,UAAK,GAAc,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACjD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;aACnC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YACjC,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;YAEvC,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,SAAS,EAAE;gBAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,GAAG,CACV,CAAA;gBACD,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE;oBAChC,IAAI,CAAC,IAAI,GAAG;wBACV,GAAG,IAAI,CAAC,IAAI;wBACZ,GAAG,EAAE,GAAG,CAAC,GAAG;wBACZ,iBAAiB,EAAE,GAAG,CAAC,OAAO;wBAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,YAAY,EAAE,IAAI,GAAG,EAA8B;qBACpD,CAAA;iBACF;aACF;YAED,IAAI,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9C,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,SAAS,EACT,YAAY,EACZ,IAAI,CAAC,IAAI,CAAC,GAAG,EACb,IAAI,CAAC,GAAG,CACT,CAAA;gBACD,IAAI,CAAC,IAAI,GAAG;oBACV,GAAG,IAAI,CAAC,IAAI;oBACZ,GAAG,IAAI;iBACR,CAAA;gBACD,IAAI,CAAC,SAAS,GAAG,cAAc,CAC7B,SAAS,EACT,YAAY,EACZ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EACf,QAAQ,EACR,IAAI,CAAC,GAAG,CACT,CAAA;aACF;YACD,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACrD,CAAC,CAAA;QACD,gBAAW,GAAG,CAAC,KAAY,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA,CAAC,uCAAuC;QAC3D,CAAC,CAAA;QACD,gBAAW,GAAG,CAAC,QAAqB,EAAE,EAAE;YACtC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;QAC7B,CAAC,CAAA;QA/DC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,aAAa;QACb,4BAA4B;QAC5B,oGAAoG;QACpG,yBAAyB;IAC3B,CAAC;CA0DF"}
|
@@ -10,9 +10,8 @@
|
|
10
10
|
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2019 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
import { ObjectTypes, } from '@manuscripts/json-schema';
|
13
|
-
import { schema } from '@manuscripts/transform';
|
14
13
|
import { getUserRole } from '../lib/roles';
|
15
|
-
import {
|
14
|
+
import { TokenData } from '../store/TokenData';
|
16
15
|
const getIdModels = async (api, projectID, manuscriptID) => {
|
17
16
|
const models = await api.getManuscript(projectID, manuscriptID);
|
18
17
|
let project;
|
@@ -30,24 +29,13 @@ const getIdModels = async (api, projectID, manuscriptID) => {
|
|
30
29
|
}
|
31
30
|
return [project, manuscript];
|
32
31
|
};
|
33
|
-
const
|
34
|
-
const response = await api.getDocument(projectID, manuscriptID);
|
35
|
-
if (!response) {
|
36
|
-
throw new Error('Document not found');
|
37
|
-
}
|
38
|
-
return {
|
39
|
-
doc: schema.nodeFromJSON(response.doc),
|
40
|
-
version: response.version,
|
41
|
-
snapshots: response.snapshots,
|
42
|
-
};
|
43
|
-
};
|
44
|
-
const getManuscriptData = async (templateID, api) => {
|
32
|
+
const getManuscriptData = async (api, prototype) => {
|
45
33
|
const data = {};
|
46
34
|
const [sectionCategories, cslLocale, template] = await Promise.all([
|
47
35
|
api.getSectionCategories(),
|
48
36
|
// TODO:: config this!
|
49
37
|
api.getCSLLocale('en-US'),
|
50
|
-
api.getTemplate(
|
38
|
+
api.getTemplate(prototype),
|
51
39
|
]);
|
52
40
|
const bundle = await api.getBundle(template);
|
53
41
|
data.sectionCategories = sectionCategories || [];
|
@@ -70,34 +58,24 @@ const getUserData = async (projectID, user, api) => {
|
|
70
58
|
collaboratorsById: profilesById,
|
71
59
|
};
|
72
60
|
};
|
73
|
-
export const buildData = async (projectID, manuscriptID,
|
61
|
+
export const buildData = async (projectID, manuscriptID, doc, api) => {
|
74
62
|
const user = await api.getUser();
|
75
63
|
if (!user) {
|
76
64
|
return {};
|
77
65
|
}
|
78
|
-
const
|
79
|
-
const state = await getManuscriptData(
|
66
|
+
const manuscriptNode = doc;
|
67
|
+
const state = await getManuscriptData(api, manuscriptNode.attrs.prototype);
|
80
68
|
const [project, manuscript] = await getIdModels(api, projectID, manuscriptID);
|
81
69
|
const role = project ? getUserRole(project, user.userID) : null;
|
82
70
|
const users = await getUserData(projectID, user, api);
|
83
|
-
const stepsExchanger = new StepsExchanger(projectID, manuscriptID, doc.version, api);
|
84
|
-
stepsExchanger.isThrottling.onChange((value) => {
|
85
|
-
updateState({
|
86
|
-
preventUnload: value,
|
87
|
-
});
|
88
|
-
});
|
89
|
-
api.listenToSteps(projectID, manuscriptID, (version, steps, clientIDs) => stepsExchanger.receiveSteps(version, steps, clientIDs));
|
90
|
-
const beforeUnload = () => stepsExchanger.flush();
|
91
71
|
return {
|
92
72
|
user,
|
93
73
|
userRole: role,
|
94
74
|
...users,
|
95
75
|
...state,
|
96
|
-
...doc,
|
97
|
-
stepsExchanger,
|
98
76
|
project,
|
99
77
|
manuscript,
|
100
|
-
|
78
|
+
tokenData: new TokenData(),
|
101
79
|
};
|
102
80
|
};
|
103
81
|
//# sourceMappingURL=buildData.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"buildData.js","sourceRoot":"","sources":["../../../src/postgres-data/buildData.ts"],"names":[],"mappings":"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"}
|
@@ -70,13 +70,15 @@ export const buildUtilities = (projectID, manuscriptID, getState, updateState, a
|
|
70
70
|
const createSnapshot = async () => {
|
71
71
|
const state = getState();
|
72
72
|
const snapshots = state.snapshots;
|
73
|
-
|
74
|
-
|
73
|
+
const snapshotsMap = state.snapshotsMap;
|
74
|
+
if (!snapshots || !snapshotsMap) {
|
75
|
+
throw new Error('Unable to create snapshot due to incomplete data');
|
75
76
|
}
|
76
|
-
const
|
77
|
-
const { snapshot, ...label } =
|
77
|
+
const data = await api.createSnapshot(projectID, manuscriptID);
|
78
|
+
const { snapshot, ...label } = data.snapshot;
|
78
79
|
updateState({
|
79
80
|
snapshots: [...snapshots, label],
|
81
|
+
snapshotsMap: snapshotsMap.set(label.id, data.snapshot),
|
80
82
|
});
|
81
83
|
};
|
82
84
|
const refreshProject = async () => {
|
@@ -102,7 +104,6 @@ export const buildUtilities = (projectID, manuscriptID, getState, updateState, a
|
|
102
104
|
saveDoc,
|
103
105
|
createSnapshot,
|
104
106
|
refreshProject,
|
105
|
-
getSnapshot: api.getSnapshot,
|
106
107
|
};
|
107
108
|
};
|
108
109
|
//# sourceMappingURL=buildUtilities.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"buildUtilities.js","sourceRoot":"","sources":["../../../src/postgres-data/buildUtilities.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"savingUtilities.js","sourceRoot":"","sources":["../../../src/postgres-data/savingUtilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,IAAI,OAAe,CAAA;IAEnB,OAAO,CACL,EAAa,EACb,QAAQ,GAAG,IAAI,EACf,KAAK,GAAG,KAAK,EACb,MAAmB,EACnB,EAAE;QACF,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,EAAE,EAAE,CAAA;YACJ,MAAM,IAAI,MAAM,EAAE,CAAA;QACpB,CAAC,CAAA;QACD,IAAI,KAAK,EAAE;YACT,MAAM,EAAE,CAAA;YACR,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAM;SACP;QAED,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,CAAA;QACV,CAAC,EAAE,QAAQ,CAAC,CAAA;QAEZ,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,CAAA;YACR,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,MAAM,EAAU,CAAA;IAEhC,OAAO,CAAC,EAAa,EAAE,QAAQ,GAAG,IAAI,EAAE,EAAE;QACxC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB,SAAS,CAAC,OAAO,EAAE,CAAA;YACnB,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC,CAAA;YACD,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACvC,SAAS,CAAC,OAAO,EAAE,CAAA;gBACnB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACpC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAA;YACrB,CAAC,EAAE,QAAQ,CAAC,CAAA;SACb;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}
|
@@ -0,0 +1,118 @@
|
|
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) 2022 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { CollabProvider } from '@manuscripts/body-editor';
|
13
|
+
import { schema } from '@manuscripts/transform';
|
14
|
+
import { Step } from 'prosemirror-transform';
|
15
|
+
import { saveWithDebounce } from '../postgres-data/savingUtilities';
|
16
|
+
import * as docApi from './api/document';
|
17
|
+
class QuarterbackStepsExchanger extends CollabProvider {
|
18
|
+
constructor(docId, projectId, startingVersion, applySteps, getStepsSince, listenToSteps, authToken, throttlingControl) {
|
19
|
+
if (QuarterbackStepsExchanger._instance) {
|
20
|
+
return QuarterbackStepsExchanger._instance;
|
21
|
+
}
|
22
|
+
super();
|
23
|
+
this.reconcileAttempts = 0;
|
24
|
+
this.reconcileAttemptsMax = 20;
|
25
|
+
QuarterbackStepsExchanger._instance = this;
|
26
|
+
this.applySteps = applySteps;
|
27
|
+
this.docId = docId;
|
28
|
+
this.projectId = projectId;
|
29
|
+
this.throttlingControl = throttlingControl;
|
30
|
+
this.currentVersion = startingVersion;
|
31
|
+
this.debounce = saveWithDebounce();
|
32
|
+
this.getStepsSince = getStepsSince;
|
33
|
+
this.sendSteps = this.sendSteps.bind(this);
|
34
|
+
this.throttlingControl(false, this.flushOnExit.bind(this));
|
35
|
+
listenToSteps(projectId, docId, (version, jsonSteps, clientIDs) => {
|
36
|
+
if (!jsonSteps) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
const steps = this.hydrateSteps(jsonSteps);
|
40
|
+
if (steps.length) {
|
41
|
+
this.newStepsListener();
|
42
|
+
}
|
43
|
+
});
|
44
|
+
}
|
45
|
+
destroy() {
|
46
|
+
QuarterbackStepsExchanger._instance = null;
|
47
|
+
}
|
48
|
+
hydrateSteps(jsonSteps) {
|
49
|
+
return jsonSteps.map((s) => Step.fromJSON(schema, s));
|
50
|
+
}
|
51
|
+
async sendSteps(version, steps, clientID, flush = false) {
|
52
|
+
// Apply and accumulate new steps
|
53
|
+
const stepsJSON = [];
|
54
|
+
steps.forEach((step) => {
|
55
|
+
stepsJSON.push(step.toJSON());
|
56
|
+
});
|
57
|
+
this.currentVersion = version;
|
58
|
+
this.flushImmediate = this.debounce(async () => {
|
59
|
+
const result = await this.applySteps(this.projectId, this.docId, {
|
60
|
+
steps: stepsJSON,
|
61
|
+
version,
|
62
|
+
clientID,
|
63
|
+
});
|
64
|
+
if (result &&
|
65
|
+
'err' in result &&
|
66
|
+
'code' in result &&
|
67
|
+
result.code === 409 &&
|
68
|
+
this.reconcileAttempts < this.reconcileAttemptsMax) {
|
69
|
+
// debugger
|
70
|
+
console.warn('Attempting Reconciliation');
|
71
|
+
this.newStepsListener();
|
72
|
+
this.reconcileAttempts++;
|
73
|
+
}
|
74
|
+
else {
|
75
|
+
this.reconcileAttempts = 0;
|
76
|
+
}
|
77
|
+
}, 1200, flush, () => {
|
78
|
+
this.throttlingControl(false);
|
79
|
+
});
|
80
|
+
if (!flush) {
|
81
|
+
this.throttlingControl(true);
|
82
|
+
}
|
83
|
+
return Promise.resolve();
|
84
|
+
}
|
85
|
+
flushOnExit() {
|
86
|
+
this.flushImmediate && this.flushImmediate();
|
87
|
+
}
|
88
|
+
onNewSteps(listener) {
|
89
|
+
this.newStepsListener = listener;
|
90
|
+
}
|
91
|
+
async stepsSince(version) {
|
92
|
+
// retrieve the steps since the number of version given
|
93
|
+
const res = await this.getStepsSince(this.projectId, this.docId, version);
|
94
|
+
if (res) {
|
95
|
+
return {
|
96
|
+
steps: this.hydrateSteps(res.steps),
|
97
|
+
clientIDs: res.clientIDs,
|
98
|
+
version: res.version,
|
99
|
+
};
|
100
|
+
}
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
export const stepsExchanger = (docId, projectId, lastVersion, authToken, throttlingControl, isAuthed = true) => {
|
105
|
+
if (!isAuthed) {
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
const applySteps = async (projectId, docId, payload) => docApi.applySteps(projectId, docId, authToken, payload);
|
109
|
+
const getStepsSince = async (projectId, docId, version) => {
|
110
|
+
const resp = await docApi.stepsSince(projectId, docId, version, authToken);
|
111
|
+
if ('data' in resp) {
|
112
|
+
return resp.data;
|
113
|
+
}
|
114
|
+
};
|
115
|
+
return new QuarterbackStepsExchanger(docId, projectId, lastVersion, applySteps, getStepsSince, docApi.listenStepUpdates, authToken, throttlingControl);
|
116
|
+
};
|
117
|
+
export default QuarterbackStepsExchanger;
|
118
|
+
//# sourceMappingURL=QuarterbackStepsExchanger.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"QuarterbackStepsExchanger.js","sourceRoot":"","sources":["../../../src/quarterback/QuarterbackStepsExchanger.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,32 @@
|
|
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) 2022 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { del, get, listen, post, put } from './methods';
|
13
|
+
export const getDocument = (projectID, manuscriptID, authToken) => get(`doc/${projectID}/manuscript/${manuscriptID}`, authToken, 'Fetching document failed');
|
14
|
+
export const createDocument = (payload, authToken) => post(`doc/${payload.project_model_id}/manuscript/${payload.manuscript_model_id}`, authToken, payload, 'Creating document failed');
|
15
|
+
export const getTransformVersion = (authToken) => get('doc/version', authToken, 'Fetching transform version failed');
|
16
|
+
export const updateDocument = (projectID, manuscriptID, authToken, payload) => put(`doc/${projectID}/manuscript/${manuscriptID}`, authToken, payload, 'Updating document failed');
|
17
|
+
export const deleteDocument = (projectID, manuscriptID, authToken) => del(`doc/${projectID}/manuscript/${manuscriptID}`, authToken, 'Deleting document failed');
|
18
|
+
export const applySteps = (projectId, docId, authToken, payload) => post(`doc/${projectId}/manuscript/${docId}/steps`, authToken, payload, 'Creating document failed');
|
19
|
+
export const stepsSince = (projectId, docId, version, authToken) => get(`doc/${projectId}/manuscript/${docId}/version/${version}`, authToken, `Fetching steps since version ${version}`);
|
20
|
+
export const listenStepUpdates = (projectID, manuscriptID, dataListener) => {
|
21
|
+
const listener = (event) => {
|
22
|
+
const data = JSON.parse(event.data);
|
23
|
+
if (typeof data.version != 'undefined' &&
|
24
|
+
data.steps &&
|
25
|
+
Array.isArray(data.steps) &&
|
26
|
+
data.clientIDs) {
|
27
|
+
dataListener(data.version, data.steps, data.clientIDs);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
listen(`doc/${projectID}/manuscript/${manuscriptID}/listen`, listener);
|
31
|
+
};
|
32
|
+
//# sourceMappingURL=document.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../../src/quarterback/api/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAiB,EACjB,YAAoB,EACpB,SAAiB,EACjB,EAAE,CACF,GAAG,CACD,OAAO,SAAS,eAAe,YAAY,EAAE,EAC7C,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA0B,EAAE,SAAiB,EAAE,EAAE,CAC9E,IAAI,CACF,OAAO,OAAO,CAAC,gBAAgB,eAAe,OAAO,CAAC,mBAAmB,EAAE,EAC3E,SAAS,EACT,OAAO,EACP,0BAA0B,CAC3B,CAAA;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,EAAE,CACvD,GAAG,CACD,aAAa,EACb,SAAS,EACT,mCAAmC,CACpC,CAAA;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,YAAoB,EACpB,SAAiB,EACjB,OAA+B,EAC/B,EAAE,CACF,GAAG,CACD,OAAO,SAAS,eAAe,YAAY,EAAE,EAC7C,SAAS,EACT,OAAO,EACP,0BAA0B,CAC3B,CAAA;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,YAAoB,EACpB,SAAiB,EACjB,EAAE,CACF,GAAG,CACD,OAAO,SAAS,eAAe,YAAY,EAAE,EAC7C,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,KAAa,EACb,SAAiB,EACjB,OAAqB,EACrB,EAAE,CACF,IAAI,CACF,OAAO,SAAS,eAAe,KAAK,QAAQ,EAC5C,SAAS,EACT,OAAO,EACP,0BAA0B,CAC3B,CAAA;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,KAAa,EACb,OAAe,EACf,SAAiB,EACjB,EAAE,CACF,GAAG,CACD,OAAO,SAAS,eAAe,KAAK,YAAY,OAAO,EAAE,EACzD,SAAS,EACT,gCAAgC,OAAO,EAAE,CAC1C,CAAA;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,SAAiB,EACjB,YAAoB,EACpB,YAA8E,EAC9E,EAAE;IACF,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnC,IACE,OAAO,IAAI,CAAC,OAAO,IAAI,WAAW;YAClC,IAAI,CAAC,KAAK;YACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,SAAS,EACd;YACA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SACvD;IACH,CAAC,CAAA;IAED,MAAM,CAAC,OAAO,SAAS,eAAe,YAAY,SAAS,EAAE,QAAQ,CAAC,CAAA;AACxE,CAAC,CAAA"}
|
@@ -0,0 +1,81 @@
|
|
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) 2022 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { getVersion, schema } from '@manuscripts/transform';
|
13
|
+
import { updateDocument } from './document';
|
14
|
+
import * as docApi from './document';
|
15
|
+
export async function loadDoc(manuscriptID, projectID, authToken, existingDoc) {
|
16
|
+
const resp = await docApi.getTransformVersion(authToken);
|
17
|
+
if ('data' in resp && resp.data.transformVersion !== getVersion()) {
|
18
|
+
console.warn(`Warning! Manuscripts-transform (Frontend: ${getVersion()}) version is different on manuscripts-api (${resp.data.transformVersion})`);
|
19
|
+
}
|
20
|
+
const found = await docApi.getDocument(projectID, manuscriptID, authToken);
|
21
|
+
let doc;
|
22
|
+
let version = 0;
|
23
|
+
let snapshots = [];
|
24
|
+
if ('data' in found) {
|
25
|
+
let empty = true;
|
26
|
+
for (const _ in found.data.doc) {
|
27
|
+
empty = false;
|
28
|
+
break;
|
29
|
+
}
|
30
|
+
if (empty) {
|
31
|
+
if (!existingDoc) {
|
32
|
+
throw new Error('Unable to produce valid doc as neither model based verions nor history have a valid version');
|
33
|
+
}
|
34
|
+
await docApi.updateDocument(projectID, manuscriptID, authToken, {
|
35
|
+
doc: existingDoc.toJSON(),
|
36
|
+
schema_version: getVersion(),
|
37
|
+
});
|
38
|
+
}
|
39
|
+
snapshots = found.data.snapshots;
|
40
|
+
doc = found.data.doc;
|
41
|
+
version = found.data.version;
|
42
|
+
}
|
43
|
+
else if ('err' in found && found.code === 404) {
|
44
|
+
// Create an empty doc that will be replaced with whatever document is currently being edited
|
45
|
+
const res = await docApi.createDocument({
|
46
|
+
manuscript_model_id: manuscriptID,
|
47
|
+
project_model_id: projectID,
|
48
|
+
doc: {},
|
49
|
+
schema_version: getVersion(),
|
50
|
+
}, authToken);
|
51
|
+
if ('data' in res) {
|
52
|
+
doc = res.data.doc;
|
53
|
+
version = res.data.version;
|
54
|
+
snapshots = res.data.snapshots;
|
55
|
+
}
|
56
|
+
if ('err' in res) {
|
57
|
+
console.error('Unable to create new document: ' + res.err);
|
58
|
+
}
|
59
|
+
const update = await updateDocument(projectID, manuscriptID, authToken, {
|
60
|
+
doc: existingDoc?.toJSON(),
|
61
|
+
schema_version: getVersion(),
|
62
|
+
});
|
63
|
+
if ('err' in update) {
|
64
|
+
console.error('Unable to create new document: ' + update.err);
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
const found = await docApi.getDocument(projectID, manuscriptID, authToken);
|
68
|
+
if ('data' in found && found.data.doc && found.data.version >= 0) {
|
69
|
+
doc = found.data.doc;
|
70
|
+
version = found.data.version;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
if (doc !== null &&
|
75
|
+
typeof doc === 'object' &&
|
76
|
+
Object.keys(doc).length !== 0) {
|
77
|
+
return { doc: schema.nodeFromJSON(doc), version, snapshots };
|
78
|
+
}
|
79
|
+
return undefined;
|
80
|
+
}
|
81
|
+
//# sourceMappingURL=loadDoc.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"loadDoc.js","sourceRoot":"","sources":["../../../../src/quarterback/api/loadDoc.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,137 @@
|
|
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) 2022 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { getConfig } from '../../config';
|
13
|
+
export const DEFAULT_HEADERS = {
|
14
|
+
Accept: 'application/json',
|
15
|
+
'Content-Type': 'application/json',
|
16
|
+
};
|
17
|
+
export function getAuthHeader(authToken) {
|
18
|
+
return authToken && { Authorization: `Bearer ${authToken}` };
|
19
|
+
}
|
20
|
+
export async function wrappedFetch(path, options, defaultError = 'Request failed') {
|
21
|
+
let resp;
|
22
|
+
const config = getConfig();
|
23
|
+
try {
|
24
|
+
resp = await fetch(`${config.api.url}/${path}`, options);
|
25
|
+
}
|
26
|
+
catch (err) {
|
27
|
+
// Must be a connection error (?)
|
28
|
+
console.error(err);
|
29
|
+
return { err: 'Connection error', code: 550 };
|
30
|
+
}
|
31
|
+
let data;
|
32
|
+
const contentType = resp.headers.get('Content-Type');
|
33
|
+
if (!contentType || contentType.includes('application/json')) {
|
34
|
+
data = await resp.json();
|
35
|
+
}
|
36
|
+
else if (contentType.includes('application/octet-stream')) {
|
37
|
+
data = await resp.arrayBuffer();
|
38
|
+
}
|
39
|
+
if (!resp.ok) {
|
40
|
+
console.error(data?.message || defaultError);
|
41
|
+
return {
|
42
|
+
err: data?.message || defaultError,
|
43
|
+
code: resp.status,
|
44
|
+
};
|
45
|
+
}
|
46
|
+
return { data };
|
47
|
+
}
|
48
|
+
export function get(path, authToken, defaultError, headers = {
|
49
|
+
...DEFAULT_HEADERS,
|
50
|
+
...getAuthHeader(authToken),
|
51
|
+
}) {
|
52
|
+
return wrappedFetch(path, {
|
53
|
+
method: 'GET',
|
54
|
+
headers,
|
55
|
+
}, defaultError);
|
56
|
+
}
|
57
|
+
export function post(path, authToken, payload, defaultError, headers = {
|
58
|
+
...DEFAULT_HEADERS,
|
59
|
+
...getAuthHeader(authToken),
|
60
|
+
}) {
|
61
|
+
return wrappedFetch(path, {
|
62
|
+
method: 'POST',
|
63
|
+
headers,
|
64
|
+
body: JSON.stringify(payload),
|
65
|
+
}, defaultError);
|
66
|
+
}
|
67
|
+
export function put(path, authToken, payload, defaultError, headers = {
|
68
|
+
...DEFAULT_HEADERS,
|
69
|
+
...getAuthHeader(authToken),
|
70
|
+
}) {
|
71
|
+
return wrappedFetch(path, {
|
72
|
+
method: 'PUT',
|
73
|
+
headers,
|
74
|
+
body: JSON.stringify(payload),
|
75
|
+
}, defaultError);
|
76
|
+
}
|
77
|
+
export function del(path, authToken, defaultError, headers = {
|
78
|
+
...DEFAULT_HEADERS,
|
79
|
+
...getAuthHeader(authToken),
|
80
|
+
}) {
|
81
|
+
return wrappedFetch(path, {
|
82
|
+
method: 'DELETE',
|
83
|
+
headers,
|
84
|
+
}, defaultError);
|
85
|
+
}
|
86
|
+
export async function listen(path, listener) {
|
87
|
+
const config = getConfig();
|
88
|
+
let ws;
|
89
|
+
const reconnectDelay = 1500;
|
90
|
+
const onOpen = async () => {
|
91
|
+
console.log('WebSocket Connection Opened Ok');
|
92
|
+
};
|
93
|
+
const onClose = (event) => {
|
94
|
+
console.warn('WebSocket closed, reconnecting:', event.code, event.reason);
|
95
|
+
closeWebSocket();
|
96
|
+
rejoin();
|
97
|
+
};
|
98
|
+
const onError = (event) => {
|
99
|
+
console.error('WebSocket error, reconnecting:', event);
|
100
|
+
closeWebSocket();
|
101
|
+
rejoin();
|
102
|
+
};
|
103
|
+
const closeWebSocket = () => {
|
104
|
+
try {
|
105
|
+
ws.removeEventListener('open', onOpen);
|
106
|
+
ws.removeEventListener('message', listener);
|
107
|
+
ws.removeEventListener('close', onClose);
|
108
|
+
ws.removeEventListener('error', onError);
|
109
|
+
ws.close();
|
110
|
+
}
|
111
|
+
catch (error) {
|
112
|
+
console.error('Error closing websocket', error);
|
113
|
+
}
|
114
|
+
};
|
115
|
+
const rejoin = () => {
|
116
|
+
if (ws) {
|
117
|
+
closeWebSocket();
|
118
|
+
}
|
119
|
+
setTimeout(join, reconnectDelay);
|
120
|
+
};
|
121
|
+
const join = () => {
|
122
|
+
const wsUrl = `${config.api.url.replace('http', 'ws')}/${path}`;
|
123
|
+
try {
|
124
|
+
ws = new WebSocket(wsUrl);
|
125
|
+
ws.addEventListener('open', onOpen);
|
126
|
+
ws.addEventListener('message', listener);
|
127
|
+
ws.addEventListener('close', onClose);
|
128
|
+
ws.addEventListener('error', onError);
|
129
|
+
}
|
130
|
+
catch (error) {
|
131
|
+
rejoin();
|
132
|
+
}
|
133
|
+
};
|
134
|
+
window.addEventListener('beforeunload', closeWebSocket);
|
135
|
+
join();
|
136
|
+
}
|
137
|
+
//# sourceMappingURL=methods.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../../src/quarterback/api/methods.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
export function filterUnchangedContent(node) {
|
2
2
|
const r = [];
|
3
3
|
node.forEach((child) => {
|
4
4
|
const { attrs } = child;
|
@@ -12,9 +12,9 @@ const filterUnchangedContent = (node) => {
|
|
12
12
|
}
|
13
13
|
});
|
14
14
|
return r;
|
15
|
-
}
|
16
|
-
export
|
17
|
-
const doc = state
|
15
|
+
}
|
16
|
+
export function getDocWithoutTrackContent(state) {
|
17
|
+
const { doc } = state;
|
18
18
|
return doc.type.create(doc.attrs, filterUnchangedContent(doc), doc.marks);
|
19
|
-
}
|
20
|
-
//# sourceMappingURL=
|
19
|
+
}
|
20
|
+
//# sourceMappingURL=getDocWithoutTrackContent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"getDocWithoutTrackContent.js","sourceRoot":"","sources":["../../../src/quarterback/getDocWithoutTrackContent.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,sBAAsB,CAAC,IAAoB;IACzD,MAAM,CAAC,GAAqB,EAAE,CAAA;IAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;QACvB,MAAM,EAAE,GAAiC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAA;QACtE,IACE,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,SAAS,EACvE;YACA,CAAC,CAAC,IAAI,CACJ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CACpB,KAAK,CAAC,IAAI,IAAI,EAAE,EAChB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAC5D,CACF,CAAA;SACF;aAAM,IAAI,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC3C,CAAC,CAAC,IAAI,CACJ,KAAK,CAAC,IAAI,CAAC,MAAM,CACf,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAC/B,sBAAsB,CAAC,KAAK,CAAC,EAC7B,KAAK,CAAC,KAAK,CACZ,CACF,CAAA;SACF;IACH,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA4B;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IACrB,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;AAC3E,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/quarterback/types.ts"],"names":[],"mappings":""}
|
@@ -10,11 +10,19 @@
|
|
10
10
|
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2019 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
export class BasicSource {
|
13
|
-
constructor(
|
14
|
-
this.build = (
|
13
|
+
constructor(fileManagement, projectID, manuscriptID, files, permittedActions, userID, authToken) {
|
14
|
+
this.build = (state, next) => {
|
15
15
|
next({ ...this.data });
|
16
16
|
};
|
17
|
-
this.data =
|
17
|
+
this.data = {
|
18
|
+
fileManagement,
|
19
|
+
projectID,
|
20
|
+
manuscriptID,
|
21
|
+
files,
|
22
|
+
permittedActions,
|
23
|
+
userID,
|
24
|
+
authToken,
|
25
|
+
};
|
18
26
|
}
|
19
27
|
}
|
20
28
|
//# sourceMappingURL=DataSourceStrategy.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DataSourceStrategy.js","sourceRoot":"","sources":["../../../src/store/DataSourceStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
1
|
+
{"version":3,"file":"DataSourceStrategy.js","sourceRoot":"","sources":["../../../src/store/DataSourceStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,MAAM,OAAO,WAAW;IAEtB,YACE,cAA8B,EAC9B,SAAiB,EACjB,YAAoB,EACpB,KAAuB,EACvB,gBAA0B,EAC1B,MAA2B,EAC3B,SAA8B;QAahC,UAAK,GAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACxB,CAAC,CAAA;QAbC,IAAI,CAAC,IAAI,GAAG;YACV,cAAc;YACd,SAAS;YACT,YAAY;YACZ,KAAK;YACL,gBAAgB;YAChB,MAAM;YACN,SAAS;SACV,CAAA;IACH,CAAC;CAKF"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../../../src/store/Store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
1
|
+
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../../../src/store/Store.ts"],"names":[],"mappings":"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"}
|