|
@@ -26,7 +26,13 @@ export default class RevisionCompareContainer extends Container {
|
|
|
recentRevisions: [],
|
|
recentRevisions: [],
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ this.readyRevisions = this.readyRevisions.bind(this);
|
|
|
this.fetchPageRevisionBody = this.fetchPageRevisionBody.bind(this);
|
|
this.fetchPageRevisionBody = this.fetchPageRevisionBody.bind(this);
|
|
|
|
|
+ // this.fetchPageRevisionBodyForFrom = this.fetchPageRevisionBodyForFrom.bind(this);
|
|
|
|
|
+ // this.fetchPageRevisionBodyForTo = this.fetchPageRevisionBodyForTo.bind(this);
|
|
|
|
|
+ this.fetchPageRevisions = this.fetchPageRevisions.bind(this);
|
|
|
|
|
+ // this.appendRevisionToRecentRevisions = this.appendRevisionToRecentRevisions.bind(this);
|
|
|
|
|
+ this.fetchPageRevisionIfExists = this.fetchPageRevisionIfExists.bind(this);
|
|
|
this.handleFromRevisionChange = this.handleFromRevisionChange.bind(this);
|
|
this.handleFromRevisionChange = this.handleFromRevisionChange.bind(this);
|
|
|
this.handleToRevisionChange = this.handleToRevisionChange.bind(this);
|
|
this.handleToRevisionChange = this.handleToRevisionChange.bind(this);
|
|
|
}
|
|
}
|
|
@@ -38,25 +44,31 @@ export default class RevisionCompareContainer extends Container {
|
|
|
return 'RevisionCompareContainer';
|
|
return 'RevisionCompareContainer';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ async readyRevisions() {
|
|
|
|
|
+ const [fromRevisionIdParam, toRevisionIdParam] = this.pageContainer.state.compareRevisionIds || [];
|
|
|
|
|
+
|
|
|
|
|
+ await this.fetchPageRevisions();
|
|
|
|
|
+ await this.fetchPageRevisionIfExists(fromRevisionIdParam);
|
|
|
|
|
+ await this.fetchPageRevisionIfExists(toRevisionIdParam);
|
|
|
|
|
+
|
|
|
|
|
+ const fromRevision = this.state.recentRevisions.find(rev => rev._id === fromRevisionIdParam);
|
|
|
|
|
+ const toRevision = this.state.recentRevisions.find(rev => rev._id === toRevisionIdParam);
|
|
|
|
|
+ this.setState({ fromRevision, toRevision });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* fetch page revision body by revision_id in argument
|
|
* fetch page revision body by revision_id in argument
|
|
|
- * @param {string} fromRevisionId
|
|
|
|
|
- * @param {string} toRevisionId
|
|
|
|
|
|
|
+ * @param {string} revisionId
|
|
|
*/
|
|
*/
|
|
|
- async fetchPageRevisionBody(fromRevisionId, toRevisionId) {
|
|
|
|
|
|
|
+ async fetchPageRevisionBody(revisionId) {
|
|
|
const { pageId, shareLinkId } = this.pageContainer.state;
|
|
const { pageId, shareLinkId } = this.pageContainer.state;
|
|
|
try {
|
|
try {
|
|
|
- const revsAll = [
|
|
|
|
|
- { id: fromRevisionId, key: "fromRevision" },
|
|
|
|
|
- { id: toRevisionId, key: "toRevision" },
|
|
|
|
|
- ];
|
|
|
|
|
- const revs = revsAll.filter(it => it && it.id);
|
|
|
|
|
- for(let it of revs) {
|
|
|
|
|
- const res = await this.appContainer.apiv3Get(`/revisions/${it.id}`, { pageId, shareLinkId });
|
|
|
|
|
- const state = {}
|
|
|
|
|
- state[it.key] = res.data.revision;
|
|
|
|
|
- this.setState(state);
|
|
|
|
|
|
|
+ const res = await this.appContainer.apiv3Get(`/revisions/${revisionId}`, { pageId, shareLinkId });
|
|
|
|
|
+ if (!res || !res.data || !res.data.revision) {
|
|
|
|
|
+ console.log(`cannot get revision: ${res}`);
|
|
|
|
|
+ return null;
|
|
|
}
|
|
}
|
|
|
|
|
+ return res.data.revision;
|
|
|
}
|
|
}
|
|
|
catch (err) {
|
|
catch (err) {
|
|
|
toastError(err);
|
|
toastError(err);
|
|
@@ -65,14 +77,33 @@ export default class RevisionCompareContainer extends Container {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // async fetchPageRevisionBodyForFrom(revisionId) {
|
|
|
|
|
+ // console.log("fetchPageRevisionBodyForFrom is called");
|
|
|
|
|
+ // const fromRevision = await this.fetchPageRevisionBody(revisionId);
|
|
|
|
|
+ // if (fromRevision) {
|
|
|
|
|
+ // this.setState({ fromRevision });
|
|
|
|
|
+ // this.appendRevisionToRecentRevisions(fromRevision);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
|
|
+ // async fetchPageRevisionBodyForTo(revisionId) {
|
|
|
|
|
+ // console.log("fetchPageRevisionBodyForTo is called");
|
|
|
|
|
+ // const toRevision = await this.fetchPageRevisionBody(revisionId);
|
|
|
|
|
+ // if (toRevision) {
|
|
|
|
|
+ // this.setState({ toRevision });
|
|
|
|
|
+ // this.appendRevisionToRecentRevisions(toRevision);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
async fetchPageRevisions() {
|
|
async fetchPageRevisions() {
|
|
|
const { pageId, shareLinkId } = this.pageContainer.state;
|
|
const { pageId, shareLinkId } = this.pageContainer.state;
|
|
|
const page = 1; // The pagination start number is fixed to 1.
|
|
const page = 1; // The pagination start number is fixed to 1.
|
|
|
const res = await this.appContainer.apiv3Get('/revisions/list', {
|
|
const res = await this.appContainer.apiv3Get('/revisions/list', {
|
|
|
- pageId, shareLinkId, page, limit: 100,
|
|
|
|
|
|
|
+ pageId, shareLinkId, page, limit: 2,
|
|
|
});
|
|
});
|
|
|
const recentRevisions = res.data.docs;
|
|
const recentRevisions = res.data.docs;
|
|
|
|
|
|
|
|
|
|
+ // [TODO] delete if no need
|
|
|
res.data.docs.forEach((revision, i) => {
|
|
res.data.docs.forEach((revision, i) => {
|
|
|
const user = revision.author;
|
|
const user = revision.author;
|
|
|
if (user) {
|
|
if (user) {
|
|
@@ -83,18 +114,54 @@ export default class RevisionCompareContainer extends Container {
|
|
|
this.setState({ recentRevisions });
|
|
this.setState({ recentRevisions });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- handleFromRevisionChange(revisionId) {
|
|
|
|
|
- this.setState({
|
|
|
|
|
- fromRevision: revisionId
|
|
|
|
|
- })
|
|
|
|
|
- this.fetchPageRevisionBody(revisionId, this.state.toRevision._id);
|
|
|
|
|
|
|
+ // appendRevisionToRecentRevisions(revision) {
|
|
|
|
|
+ // const newRecentRevisions = this.state.recentRevisions;
|
|
|
|
|
+ // newRecentRevisions.push(revision);
|
|
|
|
|
+ // newRecentRevisions.sort((a, b) => {
|
|
|
|
|
+ // if (a._id < b._id) { return -1; }
|
|
|
|
|
+ // if (a._id > b._id) { return 1; }
|
|
|
|
|
+ // return 0;
|
|
|
|
|
+ // });
|
|
|
|
|
+ // this.setState({ recentRevisions: newRecentRevisions });
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
|
|
+ async fetchPageRevisionIfExists(revisionId) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const revision = await this.fetchPageRevisionBody(revisionId);
|
|
|
|
|
+ if (!revision || this.state.recentRevisions.map(rev => rev._id).includes(revision._id)) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const newRecentRevisions = this.state.recentRevisions;
|
|
|
|
|
+ newRecentRevisions.push(revision);
|
|
|
|
|
+ newRecentRevisions.sort((a, b) => {
|
|
|
|
|
+ if (a._id < b._id) { return -1; }
|
|
|
|
|
+ if (a._id > b._id) { return 1; }
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ });
|
|
|
|
|
+ this.setState({ recentRevisions: newRecentRevisions });
|
|
|
|
|
+ return revision;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (err) {
|
|
|
|
|
+ // If the RevisionId being entered is not correct, no special action will be taken.
|
|
|
|
|
+ // [TODO] ignore default error handling of apiv3ErrorHandler
|
|
|
|
|
+ if (err.length === 1 && err[0].code === 'validation_failed') {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ toastError(err);
|
|
|
|
|
+ this.setState({ errorMessage: err.message });
|
|
|
|
|
+ logger.error(err);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ async handleFromRevisionChange(revisionId) {
|
|
|
|
|
+ const fromRevision = await this.fetchPageRevisionBody(revisionId);
|
|
|
|
|
+ this.setState({ fromRevision })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- handleToRevisionChange(revisionId) {
|
|
|
|
|
- this.setState({
|
|
|
|
|
- toRevision: revisionId
|
|
|
|
|
- })
|
|
|
|
|
- this.fetchPageRevisionBody(this.state.fromRevision._id, revisionId);
|
|
|
|
|
|
|
+ async handleToRevisionChange(revisionId) {
|
|
|
|
|
+ const toRevision = await this.fetchPageRevisionBody(revisionId);
|
|
|
|
|
+ this.setState({ toRevision })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|