UNPKG

react-plain-json-editor

Version:
98 lines 4.49 kB
"use strict"; 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