Skip to content

Commit dac4e76

Browse files
authored
Merge pull request #26 from snoh666/master
Add support for root name as jsx element
2 parents e04b92a + f478f55 commit dac4e76

File tree

5 files changed

+16
-3
lines changed

5 files changed

+16
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Or add to your package.json config file:
4141
Name|Type|Default|Description
4242
|:---|:---|:---|:---
4343
`src`|`JSON Object`|None|This property contains your input JSON
44-
`name`|`string` or `false`|"root"|Contains the name of your root node. Use `null` or `false` for no name.
44+
`name`|`string`|`JSX.Element` or `false`|"root"|Contains the name of your root node. Use `null` or `false` for no name.
4545
`theme`|`string`|"rjv-default"|RJV supports base-16 themes. Check out the list of supported themes [in the demo](https://mac-s-g.github.io/react-json-view/demo/dist/). A custom "rjv-default" theme applies by default.
4646
`style`|`object`|`{}`|Style attributes for react-json-view container. Explicit style attributes will override attributes provided by a theme.
4747
`iconStyle`|`string`|"circle"| Style of expand/collapse icons. Accepted values are "circle", triangle" or "square".

dev-server/src/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,13 @@ ReactDom.render(
169169
groupArraysAfterLength={50}
170170
src={getExampleJson4()}
171171
/>
172+
173+
{/* Name as colored react component */}
174+
<JsonViewer
175+
collapsed
176+
name={<span style={{color: "red", fontWeight: 800}}>React Element as name</span>}
177+
src={getExampleJson2()}
178+
/>
172179
</div>,
173180
document.getElementById('app-container')
174181
);

index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export interface ReactJsonViewProps {
1212
*
1313
* Default: "root"
1414
*/
15-
name?: string | null | false;
15+
name?: React.JSX.Element | string | null | false;
1616
/**
1717
* RJV supports base-16 themes. Check out the list of supported themes in the demo.
1818
* A custom "rjv-default" theme applies by default.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
"@babel/plugin-syntax-class-properties": "~7.12.1",
191191
"@babel/plugin-syntax-jsx": "~7.12.1",
192192
"@babel/register": "7.12.10",
193+
"@types/react": "^18.2.20",
193194
"babel-plugin-react-html-attrs": "~2.1.0",
194195
"chai": "~4.2.0",
195196
"css-loader": "~4.3.0",

src/js/components/JsonViewer.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@ import ArrayGroup from './ArrayGroup';
55
export default class extends React.PureComponent {
66
render = () => {
77
const { props } = this;
8-
const namespace = [props.name];
8+
let namespace = [props.name];
99
let ObjectComponent = JsonObject;
10+
if (typeof props.name === 'object' && !Array.isArray(props.name)) {
11+
// Support Classes and Functional Components
12+
const ComponentName = props.name?.displayName || props.name?.name || props.name?.type?.name;
13+
namespace = [ComponentName || 'Anonymous'];
14+
}
1015

1116
if (
1217
Array.isArray(props.src) &&

0 commit comments

Comments
 (0)