2021-07-16 14:55:33 +10:00
|
|
|
import { applyChange, Diff, revertChange, diff as deepDiff } from "deep-diff";
|
2021-04-16 13:36:14 +10:00
|
|
|
import get from "lodash.get";
|
2021-01-03 10:45:24 +11:00
|
|
|
|
2021-07-16 14:55:33 +10:00
|
|
|
export function applyChanges<LHS>(target: LHS, changes: Diff<LHS>[]) {
|
2021-01-03 10:45:24 +11:00
|
|
|
for (let change of changes) {
|
2021-04-16 13:36:14 +10:00
|
|
|
if (change.path && (change.kind === "E" || change.kind === "A")) {
|
|
|
|
|
// If editing an object or array ensure that the value exists
|
|
|
|
|
const valid = get(target, change.path) !== undefined;
|
|
|
|
|
if (valid) {
|
|
|
|
|
applyChange(target, true, change);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
applyChange(target, true, change);
|
|
|
|
|
}
|
2021-01-03 10:45:24 +11:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-16 14:55:33 +10:00
|
|
|
export function revertChanges<LHS>(target: LHS, changes: Diff<LHS>[]) {
|
2021-02-04 09:11:27 +11:00
|
|
|
for (let change of changes) {
|
|
|
|
|
revertChange(target, true, change);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-03 10:45:24 +11:00
|
|
|
export const diff = deepDiff;
|