@uiw/react-json-view
Version:
JSON viewer for react.
111 lines • 3.46 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import { KayName } from "./KeyValues.js";
import { useExpandsStore, useExpandsDispatch } from "../store/Expands.js";
import { useStore } from "../store.js";
import { Copied } from "./Copied.js";
import { CountInfoExtraComps } from "../section/CountInfoExtra.js";
import { CountInfoComp } from "../section/CountInfo.js";
import { Arrow, BracketsOpen, BracketsClose } from "../symbol/index.js";
import { EllipsisComp } from "../section/Ellipsis.js";
import { SetComp, MapComp } from "../types/index.js";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export var NestedOpen = props => {
var _expands$expandKey;
var {
keyName,
expandKey,
keys = [],
initialValue,
value,
parentValue,
level
} = props;
var expands = useExpandsStore();
var dispatchExpands = useExpandsDispatch();
var {
onExpand,
collapsed,
shouldExpandNodeInitially
} = useStore();
var isArray = Array.isArray(value);
var isMySet = value instanceof Set;
var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
var isObject = typeof value === 'object';
var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : defaultExpanded;
var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(!isExpanded, {
value,
keys,
level
});
if (expands[expandKey] === undefined && shouldExpandNodeInitially && !shouldExpand) {
isExpanded = !shouldExpand;
}
var click = () => {
var opt = {
expand: !isExpanded,
value,
keyid: expandKey,
keyName
};
onExpand && onExpand(opt);
dispatchExpands({
[expandKey]: opt.expand
});
};
var style = {
display: 'inline-flex',
alignItems: 'center'
};
var arrowStyle = {
transform: "rotate(" + (!isExpanded ? '0' : '-90') + "deg)",
transition: 'all 0.3s'
};
var len = Object.keys(value).length;
var showArrow = len !== 0 && (isArray || isMySet || isObject);
var reset = {
style
};
if (showArrow) {
reset.onClick = click;
}
var compProps = {
keyName,
value,
keys,
parentValue
};
return /*#__PURE__*/_jsxs("span", _extends({}, reset, {
children: [showArrow && /*#__PURE__*/_jsx(Arrow, _extends({
style: arrowStyle,
expandKey: expandKey
}, compProps)), (keyName || typeof keyName === 'number') && /*#__PURE__*/_jsx(KayName, _extends({}, compProps)), /*#__PURE__*/_jsx(SetComp, {
value: initialValue,
keyName: keyName
}), /*#__PURE__*/_jsx(MapComp, {
value: initialValue,
keyName: keyName
}), /*#__PURE__*/_jsx(BracketsOpen, _extends({
isBrackets: isArray || isMySet
}, compProps)), /*#__PURE__*/_jsx(EllipsisComp, {
keyName: keyName,
value: value,
isExpanded: isExpanded
}), /*#__PURE__*/_jsx(BracketsClose, _extends({
isVisiable: isExpanded || !showArrow,
isBrackets: isArray || isMySet
}, compProps)), /*#__PURE__*/_jsx(CountInfoComp, {
value: value,
keyName: keyName
}), /*#__PURE__*/_jsx(CountInfoExtraComps, {
value: value,
keyName: keyName
}), /*#__PURE__*/_jsx(Copied, {
keyName: keyName,
value: value,
expandKey: expandKey,
parentValue: parentValue,
keys: keys
})]
}));
};
NestedOpen.displayName = 'JVR.NestedOpen';