Implemented patch for TextMode
This commit is contained in:
parent
0c3faa03ea
commit
d755ca9d03
|
@ -1,5 +1,6 @@
|
|||
import { h, Component } from 'preact'
|
||||
import { parseJSON } from './utils/jsonUtils'
|
||||
import { jsonToData, dataToJson, patchData } from './jsonData'
|
||||
|
||||
export default class TextMode extends Component {
|
||||
// TODO: define propTypes
|
||||
|
@ -109,11 +110,23 @@ export default class TextMode extends Component {
|
|||
/**
|
||||
* Apply a JSONPatch to the current JSON document
|
||||
* @param {JSONPatch} actions JSONPatch actions
|
||||
* @return {JSONPatch} Returns a JSONPatch to revert the applied patch
|
||||
* @return {JSONPatchResult} Returns a JSONPatch result containing the
|
||||
* patch, a patch to revert the action, and
|
||||
* an error object which is null when successful
|
||||
*/
|
||||
patch (actions) {
|
||||
// TODO: implement patch
|
||||
throw new Error('Patch not yet implemented')
|
||||
const json = this.get()
|
||||
|
||||
const data = jsonToData(json)
|
||||
const result = patchData(data, actions)
|
||||
|
||||
this.set(dataToJson(result.data))
|
||||
|
||||
return {
|
||||
patch: actions,
|
||||
revert: result.revert,
|
||||
error: result.error
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -236,7 +236,9 @@ export default class TreeMode extends Component {
|
|||
/**
|
||||
* Apply a JSONPatch to the current JSON document
|
||||
* @param {JSONPatch} actions JSONPatch actions
|
||||
* @return {JSONPatch} Returns a JSONPatch to revert the applied patch
|
||||
* @return {JSONPatchResult} Returns a JSONPatch result containing the
|
||||
* patch, a patch to revert the action, and
|
||||
* an error object which is null when successful
|
||||
*/
|
||||
patch (actions) {
|
||||
const result = patchData(this.state.data, actions)
|
||||
|
@ -256,7 +258,11 @@ export default class TreeMode extends Component {
|
|||
historyIndex: 0
|
||||
})
|
||||
|
||||
return result.revert
|
||||
return {
|
||||
patch: actions,
|
||||
revert: result.revert,
|
||||
error: result.error
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -90,7 +90,7 @@ export function toDataPath (data, path) {
|
|||
const index = path[0]
|
||||
const item = data.items[index]
|
||||
if (!item) {
|
||||
throw new Error('Array item ' + index + ' not found')
|
||||
throw new Error('Array item "' + index + '" not found')
|
||||
}
|
||||
|
||||
return ['items', index].concat(toDataPath(item, path.slice(1)))
|
||||
|
|
|
@ -25,6 +25,12 @@
|
|||
* @typedef {Array.<{op: string, path?: string, from?: string, value?: *}>} JSONPatch
|
||||
*
|
||||
* @typedef {{
|
||||
* patch: JSONPatch,
|
||||
* revert: JSONPatch,
|
||||
* error: null | Error
|
||||
* }} JSONPatchResult
|
||||
*
|
||||
* @typedef {{
|
||||
* mode: 'tree' | 'text',
|
||||
* indentation: number | string,
|
||||
* onChange: function (patch: JSONPatch, revert: JSONPatch),
|
||||
|
|
Loading…
Reference in New Issue