Estoy tratando de aplicar negrita al **texto** en el editor slatejs y hasta ahora mis intentos no han tenido éxito.
Encontré esta respuesta que parece ser una posible solución al problema.
Sin embargo, después de modificar esa respuesta, todavía se negó a aplicar negrita.
Intenté agregar match: n => Text.isText(n)
y eso hizo que todo el párrafo estuviera en negrita.
Resultado esperado: **texto** => ** texto **
Resultado real: **texto** => **texto**
¿Cómo puedo modificar esto para que funcione como se esperaba?
const withMarkdown = editor => { const { normalizeNode } = editor; editor.normalizeNode = entry => { const [node, path] = entry; if (!Text.isText(node)) { return normalizeNode([node, path]); } const boldMatch = node.text.match(/([*]{2})(.+?)([*]{2})/); if (!boldMatch) { return normalizeNode([node, path]); } let [searchMatch, asteriskMatch] = boldMatch; const { index: startIndex } = boldMatch; const endIndex = startIndex + searchMatch.length; /* does not apply bold */ Transforms.setNodes(editor, { bold: true }, { at: { anchor: { path, offset: startIndex }, focus: { path, offset: endIndex }, } }) normalizeNode([node, path]); } return editor; }
Editar: Intenté esto y obtuve el resultado esperado, pero junto con eso apareció un error.
Transforms.insertText(editor, searchMatch, { at: { anchor: { path, offset: startIndex }, focus: { path, offset: endIndex }, } }) Transforms.setNodes(editor, { bold: true }, { at: { anchor: { path, offset: startIndex }, focus: { path, offset: endIndex } }, match: n => Text.isText(n), split: true } );
Mensaje de error:
Could not completely normalize the editor after 126 iterations! This is usually due to incorrect normalization logic that leaves a node in an invalid state.
Esto es lo que está pasando en tu código:
**
Dado que esto modifica el nodo actual, volverá a ser parte del próximo pase de normalización. Esto se ejecuta en un bucle infinito, ya que su texto siempre coincidirá.
Veo tres opciones:
**
y solo muestra el texto en negritaonKeyUp
o reemplazando editor.insertText
.