mirror of
https://github.com/reduxjs/redux-devtools.git
synced 2025-04-26 03:03:42 +03:00
* Remove UNSAFE method from JSONTree * Bump peer dep * Fix types * Remove proptypes * Remove unused * shouldExpandNode => shouldExpandNodeInitially * Cleanup * Update usages * Tighten types * Create four-parrots-poke.md * Format * Fix inspector-monitor types * Fix log-monitor types * Fix rtk-query-monitor types * Fix type
103 lines
2.3 KiB
TypeScript
103 lines
2.3 KiB
TypeScript
import React from 'react';
|
|
import objType from './objType';
|
|
import JSONObjectNode from './JSONObjectNode';
|
|
import JSONArrayNode from './JSONArrayNode';
|
|
import JSONIterableNode from './JSONIterableNode';
|
|
import JSONValueNode from './JSONValueNode';
|
|
import type { CommonInternalProps } from './types';
|
|
|
|
interface Props extends CommonInternalProps {
|
|
value: unknown;
|
|
}
|
|
|
|
export default function JSONNode({
|
|
getItemString,
|
|
keyPath,
|
|
labelRenderer,
|
|
styling,
|
|
value,
|
|
valueRenderer,
|
|
isCustomNode,
|
|
...rest
|
|
}: Props) {
|
|
const nodeType = isCustomNode(value) ? 'Custom' : objType(value);
|
|
|
|
const simpleNodeProps = {
|
|
getItemString,
|
|
key: keyPath[0],
|
|
keyPath,
|
|
labelRenderer,
|
|
nodeType,
|
|
styling,
|
|
value,
|
|
valueRenderer,
|
|
};
|
|
|
|
const nestedNodeProps = {
|
|
...rest,
|
|
...simpleNodeProps,
|
|
data: value,
|
|
isCustomNode,
|
|
};
|
|
|
|
switch (nodeType) {
|
|
case 'Object':
|
|
case 'Error':
|
|
case 'WeakMap':
|
|
case 'WeakSet':
|
|
return <JSONObjectNode {...nestedNodeProps} />;
|
|
case 'Array':
|
|
return <JSONArrayNode {...nestedNodeProps} />;
|
|
case 'Iterable':
|
|
case 'Map':
|
|
case 'Set':
|
|
return <JSONIterableNode {...nestedNodeProps} />;
|
|
case 'String':
|
|
return (
|
|
<JSONValueNode
|
|
{...simpleNodeProps}
|
|
valueGetter={(raw: string) => `"${raw}"`}
|
|
/>
|
|
);
|
|
case 'Number':
|
|
return <JSONValueNode {...simpleNodeProps} />;
|
|
case 'Boolean':
|
|
return (
|
|
<JSONValueNode
|
|
{...simpleNodeProps}
|
|
valueGetter={(raw) => (raw ? 'true' : 'false')}
|
|
/>
|
|
);
|
|
case 'Date':
|
|
return (
|
|
<JSONValueNode
|
|
{...simpleNodeProps}
|
|
valueGetter={(raw) => raw.toISOString()}
|
|
/>
|
|
);
|
|
case 'Null':
|
|
return <JSONValueNode {...simpleNodeProps} valueGetter={() => 'null'} />;
|
|
case 'Undefined':
|
|
return (
|
|
<JSONValueNode {...simpleNodeProps} valueGetter={() => 'undefined'} />
|
|
);
|
|
case 'Function':
|
|
case 'Symbol':
|
|
return (
|
|
<JSONValueNode
|
|
{...simpleNodeProps}
|
|
valueGetter={(raw) => raw.toString()}
|
|
/>
|
|
);
|
|
case 'Custom':
|
|
return <JSONValueNode {...simpleNodeProps} />;
|
|
default:
|
|
return (
|
|
<JSONValueNode
|
|
{...simpleNodeProps}
|
|
valueGetter={() => `<${nodeType}>`}
|
|
/>
|
|
);
|
|
}
|
|
}
|