Fixed excerpt blur saving non-draft posts

ref https://linear.app/tryghost/issue/PLG-174

- forcing autosave on excerpt blur caused posts to revert to `draft` and save immediately even when they were published/scheduled
- updated the save-on-excerpt-blur to only autosave drafts
- added acceptance tests for title and excerpt change+blur on published posts
This commit is contained in:
Kevin Ansfield 2024-08-19 20:58:40 +01:00
parent d6df261446
commit 19b8674c3a
No known key found for this signature in database
3 changed files with 51 additions and 1 deletions

View File

@ -323,6 +323,13 @@ export default class LexicalEditorController extends Controller {
} }
} }
@task
*saveExcerptTask() {
if (this.post.status === 'draft') {
yield this.autosaveTask.perform();
}
}
// updates local willPublish/Schedule values, does not get applied to // updates local willPublish/Schedule values, does not get applied to
// the post's `status` value until a save is triggered // the post's `status` value until a save is triggered
@action @action

View File

@ -69,7 +69,7 @@
@excerpt={{readonly this.post.customExcerpt}} @excerpt={{readonly this.post.customExcerpt}}
@excerptHasTk={{this.excerptHasTk}} @excerptHasTk={{this.excerptHasTk}}
@setExcerpt={{this.updateExcerpt}} @setExcerpt={{this.updateExcerpt}}
@onExcerptBlur={{perform this.autosaveTask}} @onExcerptBlur={{perform this.saveExcerptTask}}
@excerptErrorMessage={{this.excerptErrorMessage}} @excerptErrorMessage={{this.excerptErrorMessage}}
@body={{readonly this.post.lexicalScratch}} @body={{readonly this.post.lexicalScratch}}
@bodyPlaceholder={{concat "Begin writing your " this.post.displayName "..."}} @bodyPlaceholder={{concat "Begin writing your " this.post.displayName "..."}}

View File

@ -71,4 +71,47 @@ describe('Acceptance: Lexical editor', function () {
// TODO: requires editor to be loading // TODO: requires editor to be loading
it('saves on content change'); it('saves on content change');
}); });
describe('existing post', function () {
it('does not save post on title blur', async function () {
const post = this.server.create('post', {status: 'published'});
const originalTitle = post.title;
await visit('/editor/post/1');
await fillIn('[data-test-editor-title-input]', 'Change test');
await blur('[data-test-editor-title-input]');
expect(find('[data-test-editor-post-status]')).not.to.contain.text('Saved');
expect(post.status, 'post status').to.equal('published');
expect(post.title, 'saved title').to.equal(originalTitle);
await click('[data-test-link="posts"]');
expect(find('[data-test-modal="unsaved-post-changes"]'), 'unsaved changes modal').to.exist;
expect(currentURL(), 'currentURL').to.equal(`/editor/post/1`);
});
it('does not save post on excerpt blur', async function () {
// excerpt is not shown by default
enableLabsFlag(this.server, 'editorExcerpt');
const post = this.server.create('post', {status: 'published'});
const originalExcerpt = post.excerpt;
await visit('/editor/post/1');
await fillIn('[data-test-textarea="excerpt"]', 'Change test');
await blur('[data-test-textarea="excerpt"]');
expect(find('[data-test-editor-post-status]')).not.to.contain.text('Saved');
expect(post.status, 'post status').to.equal('published');
expect(post.excerpt, 'saved excerpt').to.equal(originalExcerpt);
await click('[data-test-link="posts"]');
expect(find('[data-test-modal="unsaved-post-changes"]'), 'unsaved changes modal').to.exist;
expect(currentURL(), 'currentURL').to.equal(`/editor/post/1`);
});
});
}); });