UNPKG

stitch-ui

Version:

39 lines (35 loc) 843 B
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"); } } }