(sharedRoot: Y.XmlText, editorRoot: Node, op: SetNodeOperation)
| 3 | import { getYTarget } from '@editablejs/yjs-transform' |
| 4 | |
| 5 | export function setNode(sharedRoot: Y.XmlText, editorRoot: Node, op: SetNodeOperation): void { |
| 6 | const { yTarget, textRange, yParent } = getYTarget(sharedRoot, editorRoot, op.path) |
| 7 | |
| 8 | if (yTarget) { |
| 9 | Object.entries(op.newProperties).forEach(([key, value]) => { |
| 10 | if (value === null) { |
| 11 | return yTarget.removeAttribute(key) |
| 12 | } |
| 13 | |
| 14 | yTarget.setAttribute(key, value) |
| 15 | }) |
| 16 | |
| 17 | return Object.entries(op.properties).forEach(([key]) => { |
| 18 | if (!op.newProperties.hasOwnProperty(key)) { |
| 19 | yTarget.removeAttribute(key) |
| 20 | } |
| 21 | }) |
| 22 | } |
| 23 | |
| 24 | const unset = Object.fromEntries(Object.keys(op.properties).map(key => [key, null])) |
| 25 | const newProperties = { ...unset, ...op.newProperties } |
| 26 | |
| 27 | yParent.format(textRange.start, textRange.end - textRange.start, newProperties) |
| 28 | } |
no test coverage detected
searching dependent graphs…