From a6f8f5d0d4d1a40d59196782e1d83eb698441be6 Mon Sep 17 00:00:00 2001 From: iseulde Date: Mon, 18 Feb 2019 11:59:19 +0100 Subject: [PATCH 1/2] Fix undo after pattern --- .../editor/src/components/rich-text/index.js | 21 ++++++++++++------- .../src/components/rich-text/patterns.js | 5 +---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/editor/src/components/rich-text/index.js b/packages/editor/src/components/rich-text/index.js index d6be0a622307e..3ca992296e4fb 100644 --- a/packages/editor/src/components/rich-text/index.js +++ b/packages/editor/src/components/rich-text/index.js @@ -133,9 +133,7 @@ export class RichText extends Component { this.savedContent = value; this.patterns = getPatterns( { onReplace, - onCreateUndoLevel: this.onCreateUndoLevel, valueToFormat: this.valueToFormat, - onChange: this.onChange, } ); this.enterPatterns = getBlockTransforms( 'from' ) .filter( ( { type } ) => type === 'enter' ); @@ -395,10 +393,7 @@ export class RichText extends Component { } let { selectedFormat } = this.state; - const { formats, text, start, end } = this.patterns.reduce( - ( accumlator, transform ) => transform( accumlator ), - this.createRecord() - ); + const { formats, text, start, end } = this.createRecord(); if ( this.formatPlaceholder ) { formats[ this.state.start ] = formats[ this.state.start ] || []; @@ -420,10 +415,22 @@ export class RichText extends Component { delete formats[ this.state.start ]; } - this.onChange( { formats, text, start, end, selectedFormat }, { + const change = { formats, text, start, end, selectedFormat }; + + this.onChange( change, { withoutHistory: true, } ); + const transformed = this.patterns.reduce( + ( accumlator, transform ) => transform( accumlator ), + change + ); + + if ( transformed !== change ) { + this.onCreateUndoLevel(); + this.onChange( { ...transformed, selectedFormat } ); + } + // Create an undo level when input stops for over a second. this.props.clearTimeout( this.onInput.timeout ); this.onInput.timeout = this.props.setTimeout( this.onCreateUndoLevel, 1000 ); diff --git a/packages/editor/src/components/rich-text/patterns.js b/packages/editor/src/components/rich-text/patterns.js index a9e9a8010149d..a1d5794cca828 100644 --- a/packages/editor/src/components/rich-text/patterns.js +++ b/packages/editor/src/components/rich-text/patterns.js @@ -10,7 +10,7 @@ import { slice, } from '@wordpress/rich-text'; -export function getPatterns( { onReplace, valueToFormat, onCreateUndoLevel, onChange } ) { +export function getPatterns( { onReplace, valueToFormat } ) { const prefixTransforms = getBlockTransforms( 'from' ) .filter( ( { type } ) => type === 'prefix' ); @@ -40,7 +40,6 @@ export function getPatterns( { onReplace, valueToFormat, onCreateUndoLevel, onCh const content = valueToFormat( slice( record, start, text.length ) ); const block = transformation.transform( content ); - onCreateUndoLevel(); onReplace( [ block ] ); return record; @@ -70,8 +69,6 @@ export function getPatterns( { onReplace, valueToFormat, onCreateUndoLevel, onCh return record; } - onChange( record ); - record = remove( record, startIndex, startIndex + 1 ); record = remove( record, endIndex, endIndex + 1 ); record = applyFormat( record, { type: 'code' }, startIndex, endIndex ); From 86960986a1ebf3025461c06847cb7268383ad060 Mon Sep 17 00:00:00 2001 From: iseulde Date: Mon, 18 Feb 2019 14:00:08 +0100 Subject: [PATCH 2/2] Update e2e test --- packages/e2e-tests/specs/blocks/__snapshots__/list.test.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/specs/blocks/__snapshots__/list.test.js.snap b/packages/e2e-tests/specs/blocks/__snapshots__/list.test.js.snap index efc3b6d274373..119fce765c5f4 100644 --- a/packages/e2e-tests/specs/blocks/__snapshots__/list.test.js.snap +++ b/packages/e2e-tests/specs/blocks/__snapshots__/list.test.js.snap @@ -76,7 +76,7 @@ exports[`List can be created by using an asterisk at the start of a paragraph bl exports[`List can undo asterisk transform 1`] = ` " -

1.

+

1.

" `;