Skip to content

Commit 622fb11

Browse files
fix: add translate=no attribute to Editable component to avoid DOM desynchronization (ianstormtaylor#5959)
1 parent d2344ea commit 622fb11

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

.changeset/warm-dolphins-rescue.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'slate-react': patch
3+
---
4+
5+
Adds translate='no' to Editable component to skip DOM from translation

packages/slate-react/src/components/editable.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,7 @@ export const Editable = forwardRef(
10301030
<Component
10311031
role={readOnly ? undefined : 'textbox'}
10321032
aria-multiline={readOnly ? undefined : true}
1033+
translate="no"
10331034
{...attributes}
10341035
// COMPAT: Certain browsers don't support the `beforeinput` event, so we'd
10351036
// have to use hacks to make these replacement-based features work.

packages/slate-react/test/editable.spec.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,5 +200,42 @@ describe('slate-react', () => {
200200
expect(onChange).toHaveBeenCalled()
201201
expect(onSelectionChange).not.toHaveBeenCalled()
202202
})
203+
204+
describe('translate="no"', () => {
205+
test('should have translate="no" attribute', () => {
206+
const editor = withReact(createEditor())
207+
const initialValue = [{ type: 'block', children: [{ text: 'test' }] }]
208+
209+
const { container } = render(
210+
<Slate
211+
editor={editor}
212+
initialValue={initialValue}
213+
onChange={() => {}}
214+
>
215+
<Editable />
216+
</Slate>
217+
)
218+
219+
const editableElement = container.querySelector('[data-slate-editor]')
220+
expect(editableElement?.getAttribute('translate')).toBe('no')
221+
})
222+
test('should allow override of translate attribute', () => {
223+
const editor = withReact(createEditor())
224+
const initialValue = [{ type: 'block', children: [{ text: 'test' }] }]
225+
226+
const { container } = render(
227+
<Slate
228+
editor={editor}
229+
initialValue={initialValue}
230+
onChange={() => {}}
231+
>
232+
<Editable translate="yes" />
233+
</Slate>
234+
)
235+
236+
const editableElement = container.querySelector('[data-slate-editor]')
237+
expect(editableElement?.getAttribute('translate')).toBe('yes')
238+
})
239+
})
203240
})
204241
})

0 commit comments

Comments
 (0)