react-plain-json-editor
Version:
Provide a simple JSON editor for React
98 lines • 4.49 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PlainJsonEditor = void 0;
var react_1 = __importStar(require("react"));
var useJsonEditor_1 = require("./useJsonEditor");
exports.PlainJsonEditor = function (props) {
var value = props.value, onChange = props.onChange, onSubmit = props.onSubmit, error = props.error, showInnerError = props.showInnerError, submitKeys = props.submitKeys, serializer = props.serializer, deserializer = props.deserializer, formatAfterSubmit = props.formatAfterSubmit, onSerializeError = props.onSerializeError, styles = props.styles;
var _a = react_1.useState(function () { return deserializer(value); }), text = _a[0], setText = _a[1];
var _b = react_1.useState(error), errorText = _b[0], setErrorText = _b[1];
react_1.useEffect(function () {
setErrorText(error);
}, [error]);
var clearErrorText = react_1.useCallback(function () {
setErrorText("");
}, [setErrorText]);
var handleChange = react_1.useCallback(function (e) {
var v = e.target.value;
setText(v);
try {
onChange(serializer(v));
showInnerError && clearErrorText();
}
catch (e) {
onSerializeError(e);
showInnerError && setErrorText(e.name + ":" + e.message);
}
}, [setText, serializer]);
var handleSubmit = react_1.useCallback(function (result) {
try {
onSubmit(result);
if (formatAfterSubmit) {
setText(deserializer(result));
}
showInnerError && clearErrorText();
}
catch (e) {
showInnerError && setErrorText(e.name + ":" + e.message);
}
}, [onSubmit, text]);
var ref = useJsonEditor_1.useJsonEditor({
onSubmit: handleSubmit,
onError: function (e) { showInnerError && setErrorText(e.name + ":" + e.message); },
submitKeys: submitKeys,
serializer: serializer
});
var mergedStyles = react_1.useMemo(function () { return ({
root: __assign({ width: "100vw", height: "50vh" }, styles.root),
textarea: __assign({ backgroundColor: "rgba(255,255,255,0.5)", width: "100%", height: "100%" }, styles.textarea),
error: __assign({ position: "absolute", backgroundColor: "rgba(100,100,100,0.75)", borderRadius: "12px", padding: "12px", color: "white", transform: "translate(-50%,-50%)", top: "50%", left: "50%" }, styles.error)
}); }, [styles]);
return (react_1.default.createElement("div", { style: mergedStyles.root },
react_1.default.createElement("textarea", { ref: ref, style: mergedStyles.textarea, value: text, onChange: handleChange }),
errorText && react_1.default.createElement("div", { style: mergedStyles.error }, errorText)));
};
exports.PlainJsonEditor.defaultProps = {
value: {},
onChange: function (_) { },
onSubmit: function (_) { },
error: "",
showInnerError: true,
submitKeys: ['command+enter', 'ctrl+enter'],
serializer: JSON.parse,
deserializer: function (json) { return JSON.stringify(json, null, 2); },
formatAfterSubmit: true,
onSerializeError: function (e) { },
styles: {}
};
//# sourceMappingURL=PlainJsonEditor.js.map