stitch-ui
Version:
39 lines (35 loc) • 843 B
JavaScript
import JSON5 from "json5";
import { Record } from "immutable";
import { toJSON } from "../util";
export default class JSONState extends Record({
dirty: false,
input: "",
error: null,
data: undefined
}) {
static fromRaw(raw, defaultInputVal) {
let out = new JSONState({
dirty: false,
input: toJSON(raw),
error: null,
data: raw
});
if (!out.input) {
out = out.set("input", toJSON(defaultInputVal));
}
return out;
}
discardChanges(defaultInputVal) {
return JSONState.fromRaw(this.data, defaultInputVal);
}
parseInput() {
try {
const parsedRaw = JSON5.parse(this.input);
return this.set("input", toJSON(parsedRaw))
.set("error", null)
.set("data", parsedRaw);
} catch (err) {
return this.set("error", "Invalid JSON");
}
}
}