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 ;
case 'Array':
return ;
case 'Iterable':
case 'Map':
case 'Set':
return ;
case 'String':
return (
`"${raw}"`}
/>
);
case 'Number':
return ;
case 'Boolean':
return (
(raw ? 'true' : 'false')}
/>
);
case 'Date':
return (
raw.toISOString()}
/>
);
case 'Null':
return 'null'} />;
case 'Undefined':
return (
'undefined'} />
);
case 'Function':
case 'Symbol':
return (
raw.toString()}
/>
);
case 'Custom':
return ;
default:
return (
`<${nodeType}>`}
/>
);
}
}