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}>`} /> ); } }