diff --git a/ghost/admin/app/adapters/page.js b/ghost/admin/app/adapters/page.js index 568b33cb8b..a98e64d903 100644 --- a/ghost/admin/app/adapters/page.js +++ b/ghost/admin/app/adapters/page.js @@ -1,7 +1,8 @@ import ApplicationAdapter from 'ghost-admin/adapters/application'; +import {ALL_POST_INCLUDES} from './post'; export default class Page extends ApplicationAdapter { - // posts and pages now include everything by default + // posts and pages now include everything except post_revisions by default buildIncludeURL(store, modelName, id, snapshot, requestType, query) { const url = this.buildURL(modelName, id, snapshot, requestType, query); const parsedUrl = new URL(url); @@ -16,6 +17,13 @@ export default class Page extends ApplicationAdapter { parsedUrl.searchParams.append('convert_to_lexical', convertToLexical); } + // on create/update we need to explicitly request post_revisions to be included + // so we can compare and create a new one later if needed but that means we + // have to specify every post include option + if (requestType === 'createRecord' || requestType === 'updateRecord') { + parsedUrl.searchParams.append('include', ALL_POST_INCLUDES); + } + return parsedUrl.toString(); } diff --git a/ghost/admin/app/adapters/post.js b/ghost/admin/app/adapters/post.js index 940b4a5718..0c96b75ffc 100644 --- a/ghost/admin/app/adapters/post.js +++ b/ghost/admin/app/adapters/post.js @@ -1,5 +1,17 @@ import ApplicationAdapter from 'ghost-admin/adapters/application'; +export const ALL_POST_INCLUDES = [ + 'tags', + 'authors', + 'authors.roles', + 'email', + 'tiers', + 'newsletter', + 'count.clicks', + 'post_revisions', + 'post_revisions.author' +].join(','); + export default class Post extends ApplicationAdapter { buildIncludeURL(store, modelName, id, snapshot, requestType, query) { const url = this.buildURL(modelName, id, snapshot, requestType, query); @@ -29,7 +41,14 @@ export default class Post extends ApplicationAdapter { const convertToLexical = snapshot.adapterOptions.convertToLexical; parsedUrl.searchParams.append('convert_to_lexical', convertToLexical); } - + + // on create/update we need to explicitly request post_revisions to be included + // so we can compare and create a new one later if needed but that means we + // have to specify every post include option + if (requestType === 'createRecord' || requestType === 'updateRecord') { + parsedUrl.searchParams.append('include', ALL_POST_INCLUDES); + } + return parsedUrl.toString(); } diff --git a/ghost/admin/app/routes/lexical-editor/edit.js b/ghost/admin/app/routes/lexical-editor/edit.js index 0c29809a9b..2a6079b699 100644 --- a/ghost/admin/app/routes/lexical-editor/edit.js +++ b/ghost/admin/app/routes/lexical-editor/edit.js @@ -1,4 +1,5 @@ import AuthenticatedRoute from 'ghost-admin/routes/authenticated'; +import {ALL_POST_INCLUDES} from '../../adapters/post'; import {pluralize} from 'ember-inflector'; import {inject as service} from '@ember/service'; export default class EditRoute extends AuthenticatedRoute { @@ -28,7 +29,9 @@ export default class EditRoute extends AuthenticatedRoute { let query = { // eslint-disable-next-line camelcase id: post_id, - include: 'tags,authors,authors.roles,email,tiers,newsletter,count.clicks,post_revisions,post_revisions.author' + // we need to explicitly request post_revisions which means we need + // to specify every post include option + include: ALL_POST_INCLUDES }; const records = await this.store.query(modelName, query);