@intenda/opus-ui-json-builder
Version:
Provides the `jsonBuilder` component type for use by Opus UI applications.
35 lines • 1.26 kB
JavaScript
const getValueType = value => {
if (Array.isArray(value)) return 'array';else if (!!value && typeof value === 'object') return 'object';
return 'leaf';
};
const getNodeText = (key, value, type, parentIsArray) => {
if (parentIsArray) {
if (type === 'leaf') return value;else if (type === 'array') return '[';
return '{';
}
if (type === 'leaf') return "".concat(key, ": ").concat(value);else if (type === 'array') return "".concat(key, ": [");
return "".concat(key, ": {");
};
const helper = function (json) {
let parentNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
const nodes = Object.entries(json).map(_ref => {
let [k, v] = _ref;
const type = getValueType(v);
const parentIsArray = (parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) === 'array';
const text = getNodeText(k, v, type, parentIsArray);
const node = {
text,
key: k,
value: v,
type,
parentNode,
depth,
obj: json
};
if (!!v && typeof v === 'object') node.children = helper(v, node, depth + 1);
return node;
});
return nodes;
};
export default helper;