@uiw/react-json-view 2.0.0-alpha.28 → 2.0.0-alpha.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -710,6 +710,45 @@ export default function Demo() {
710
710
  }
711
711
  ```
712
712
 
713
+ ## Default Collapse/Expand
714
+
715
+ ```tsx mdx:preview
716
+ import React from 'react';
717
+ import JsonView from '@uiw/react-json-view';
718
+ const object = {
719
+ string: 'Lorem ipsum dolor sit amet',
720
+ integer: 42,
721
+ float: 114.514,
722
+ object: {
723
+ 'first-child': true,
724
+ 'second-child': false,
725
+ 'last-child': null,
726
+ },
727
+ nestedArray: [
728
+ [1, 2],
729
+ [3, 4],
730
+ ],
731
+ }
732
+ export default function Demo() {
733
+ return (
734
+ <JsonView
735
+ value={object}
736
+ collapsed={2}
737
+ shouldExpandNodeInitially={(isExpanded, { value, keys, level }) => {
738
+ if (keys.length > 0 && keys[0] == "object") {
739
+ return true
740
+ }
741
+ return isExpanded
742
+ }}
743
+ style={{
744
+ '--w-rjv-background-color': '#ffffff',
745
+ }}
746
+ >
747
+ </JsonView>
748
+ )
749
+ }
750
+ ```
751
+
713
752
  ## Modify Icon Style
714
753
 
715
754
  Use built-in default icons.
@@ -840,17 +879,17 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
840
879
  enableClipboard?: boolean;
841
880
  /** When set to true, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth. @default false */
842
881
  collapsed?: boolean | number;
882
+ /** Determine whether the node should be expanded on the first render, or you can use collapsed to control the level of expansion (by default, the root is expanded). */
883
+ shouldExpandNodeInitially?: (
884
+ isExpanded: boolean,
885
+ props: { value?: T; keys: (number | string)[]; level: number },
886
+ ) => boolean;
843
887
  /** Whether to highlight updates. @default true */
844
888
  highlightUpdates?: boolean;
845
889
  /** Shorten long JSON strings, Set to `0` to disable this feature @default 30 */
846
890
  shortenTextAfterLength?: number;
847
891
  /** Callback function for when a treeNode is expanded or collapsed */
848
- onExpand?: (props: {
849
- expand: boolean;
850
- value?: T;
851
- keyid: string;
852
- keyName?: string | number;
853
- }) => void;
892
+ onExpand?: (props: { expand: boolean; value?: T; keyid: string; keyName?: string | number }) => void;
854
893
  /** Fires event when you copy */
855
894
  onCopied?: (text: string, value?: T) => void;
856
895
  }
package/cjs/Container.js CHANGED
@@ -63,7 +63,8 @@ var Container = exports.Container = /*#__PURE__*/(0, _react.forwardRef)(function
63
63
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_NestedClose.NestedClose, {
64
64
  expandKey: subkeyid,
65
65
  value: value,
66
- level: level
66
+ level: level,
67
+ keys: keys
67
68
  })]
68
69
  }));
69
70
  });
@@ -35,9 +35,18 @@ var KeyValues = exports.KeyValues = function KeyValues(props) {
35
35
  var _useStore = (0, _store.useStore)(),
36
36
  objectSortKeys = _useStore.objectSortKeys,
37
37
  indentWidth = _useStore.indentWidth,
38
- collapsed = _useStore.collapsed;
38
+ collapsed = _useStore.collapsed,
39
+ shouldExpandNodeInitially = _useStore.shouldExpandNodeInitially;
39
40
  var isMyArray = Array.isArray(value);
40
- var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
41
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
42
+ var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : defaultExpanded;
43
+ if (expands[expandKey] === undefined && shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
44
+ value: value,
45
+ keys: keys,
46
+ level: level
47
+ })) {
48
+ return null;
49
+ }
41
50
  if (isExpanded) {
42
51
  return null;
43
52
  }
@@ -2,6 +2,7 @@ interface NestedCloseProps<T extends object> {
2
2
  value?: T;
3
3
  expandKey: string;
4
4
  level: number;
5
+ keys?: (string | number)[];
5
6
  }
6
7
  export declare const NestedClose: {
7
8
  <T extends object>(props: NestedCloseProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -12,14 +12,25 @@ var NestedClose = exports.NestedClose = function NestedClose(props) {
12
12
  var _expands$expandKey;
13
13
  var value = props.value,
14
14
  expandKey = props.expandKey,
15
- level = props.level;
15
+ level = props.level,
16
+ _props$keys = props.keys,
17
+ keys = _props$keys === void 0 ? [] : _props$keys;
16
18
  var expands = (0, _Expands.useExpandsStore)();
17
19
  var isArray = Array.isArray(value);
18
20
  var _useStore = (0, _store.useStore)(),
19
- collapsed = _useStore.collapsed;
21
+ collapsed = _useStore.collapsed,
22
+ shouldExpandNodeInitially = _useStore.shouldExpandNodeInitially;
20
23
  var isMySet = value instanceof Set;
21
- var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
24
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
25
+ var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : defaultExpanded;
22
26
  var len = Object.keys(value).length;
27
+ if (expands[expandKey] === undefined && shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
28
+ value: value,
29
+ keys: keys,
30
+ level: level
31
+ })) {
32
+ return null;
33
+ }
23
34
  if (isExpanded || len === 0) {
24
35
  return null;
25
36
  }
@@ -22,7 +22,8 @@ var NestedOpen = exports.NestedOpen = function NestedOpen(props) {
22
22
  var _expands$expandKey;
23
23
  var keyName = props.keyName,
24
24
  expandKey = props.expandKey,
25
- keys = props.keys,
25
+ _props$keys = props.keys,
26
+ keys = _props$keys === void 0 ? [] : _props$keys,
26
27
  initialValue = props.initialValue,
27
28
  value = props.value,
28
29
  parentValue = props.parentValue,
@@ -31,11 +32,21 @@ var NestedOpen = exports.NestedOpen = function NestedOpen(props) {
31
32
  var dispatchExpands = (0, _Expands.useExpandsDispatch)();
32
33
  var _useStore = (0, _store.useStore)(),
33
34
  onExpand = _useStore.onExpand,
34
- collapsed = _useStore.collapsed;
35
+ collapsed = _useStore.collapsed,
36
+ shouldExpandNodeInitially = _useStore.shouldExpandNodeInitially;
35
37
  var isArray = Array.isArray(value);
36
38
  var isMySet = value instanceof Set;
37
- var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
39
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
38
40
  var isObject = (0, _typeof2["default"])(value) === 'object';
41
+ var isExpanded = (_expands$expandKey = expands[expandKey]) !== null && _expands$expandKey !== void 0 ? _expands$expandKey : defaultExpanded;
42
+ var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
43
+ value: value,
44
+ keys: keys,
45
+ level: level
46
+ });
47
+ if (expands[expandKey] === undefined && shouldExpand !== undefined) {
48
+ isExpanded = shouldExpand;
49
+ }
39
50
  var click = function click() {
40
51
  var opt = {
41
52
  expand: !isExpanded,
package/cjs/index.d.ts CHANGED
@@ -48,6 +48,12 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
48
48
  enableClipboard?: boolean;
49
49
  /** When set to true, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth. @default false */
50
50
  collapsed?: boolean | number;
51
+ /** Determine whether the node should be expanded on the first render, or you can use collapsed to control the level of expansion (by default, the root is expanded). */
52
+ shouldExpandNodeInitially?: (isExpanded: boolean, props: {
53
+ value?: T;
54
+ keys: (number | string)[];
55
+ level: number;
56
+ }) => boolean;
51
57
  /** Whether to highlight updates. @default true */
52
58
  highlightUpdates?: boolean;
53
59
  /** Shorten long JSON strings, Set to `0` to disable this feature @default 30 */
package/cjs/index.js CHANGED
@@ -110,7 +110,7 @@ Object.keys(_symbol).forEach(function (key) {
110
110
  }
111
111
  });
112
112
  });
113
- var _excluded = ["className", "style", "value", "children", "collapsed", "indentWidth", "displayObjectSize", "shortenTextAfterLength", "highlightUpdates", "enableClipboard", "displayDataTypes", "objectSortKeys", "onExpand", "onCopied"];
113
+ var _excluded = ["className", "style", "value", "children", "collapsed", "shouldExpandNodeInitially", "indentWidth", "displayObjectSize", "shortenTextAfterLength", "highlightUpdates", "enableClipboard", "displayDataTypes", "objectSortKeys", "onExpand", "onCopied"];
114
114
  var JsonView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
115
115
  var _props$className = props.className,
116
116
  className = _props$className === void 0 ? '' : _props$className,
@@ -118,6 +118,7 @@ var JsonView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
118
118
  value = props.value,
119
119
  children = props.children,
120
120
  collapsed = props.collapsed,
121
+ shouldExpandNodeInitially = props.shouldExpandNodeInitially,
121
122
  _props$indentWidth = props.indentWidth,
122
123
  indentWidth = _props$indentWidth === void 0 ? 15 : _props$indentWidth,
123
124
  _props$displayObjectS = props.displayObjectSize,
@@ -148,6 +149,7 @@ var JsonView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
148
149
  value: value,
149
150
  objectSortKeys: objectSortKeys,
150
151
  indentWidth: indentWidth,
152
+ shouldExpandNodeInitially: shouldExpandNodeInitially,
151
153
  displayObjectSize: displayObjectSize,
152
154
  collapsed: collapsed,
153
155
  enableClipboard: enableClipboard,
package/cjs/store.d.ts CHANGED
@@ -12,6 +12,7 @@ export interface InitialState<T extends object> {
12
12
  enableClipboard?: JsonViewProps<T>['enableClipboard'];
13
13
  highlightUpdates?: JsonViewProps<T>['highlightUpdates'];
14
14
  collapsed?: JsonViewProps<T>['collapsed'];
15
+ shouldExpandNodeInitially?: JsonViewProps<T>['shouldExpandNodeInitially'];
15
16
  indentWidth?: number;
16
17
  }
17
18
  export declare const initialState: InitialState<object>;
package/esm/Container.js CHANGED
@@ -52,7 +52,8 @@ export var Container = /*#__PURE__*/forwardRef((props, ref) => {
52
52
  }), /*#__PURE__*/_jsx(NestedClose, {
53
53
  expandKey: subkeyid,
54
54
  value: value,
55
- level: level
55
+ level: level,
56
+ keys: keys
56
57
  })]
57
58
  }));
58
59
  });
@@ -24,10 +24,19 @@ export var KeyValues = props => {
24
24
  var {
25
25
  objectSortKeys,
26
26
  indentWidth,
27
- collapsed
27
+ collapsed,
28
+ shouldExpandNodeInitially
28
29
  } = useStore();
29
30
  var isMyArray = Array.isArray(value);
30
- var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
31
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
32
+ var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : defaultExpanded;
33
+ if (expands[expandKey] === undefined && shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
34
+ value,
35
+ keys,
36
+ level
37
+ })) {
38
+ return null;
39
+ }
31
40
  if (isExpanded) {
32
41
  return null;
33
42
  }
@@ -2,6 +2,7 @@ interface NestedCloseProps<T extends object> {
2
2
  value?: T;
3
3
  expandKey: string;
4
4
  level: number;
5
+ keys?: (string | number)[];
5
6
  }
6
7
  export declare const NestedClose: {
7
8
  <T extends object>(props: NestedCloseProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -7,16 +7,26 @@ export var NestedClose = props => {
7
7
  var {
8
8
  value,
9
9
  expandKey,
10
- level
10
+ level,
11
+ keys = []
11
12
  } = props;
12
13
  var expands = useExpandsStore();
13
14
  var isArray = Array.isArray(value);
14
15
  var {
15
- collapsed
16
+ collapsed,
17
+ shouldExpandNodeInitially
16
18
  } = useStore();
17
19
  var isMySet = value instanceof Set;
18
- var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
20
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
21
+ var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : defaultExpanded;
19
22
  var len = Object.keys(value).length;
23
+ if (expands[expandKey] === undefined && shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
24
+ value,
25
+ keys,
26
+ level
27
+ })) {
28
+ return null;
29
+ }
20
30
  if (isExpanded || len === 0) {
21
31
  return null;
22
32
  }
@@ -14,7 +14,7 @@ export var NestedOpen = props => {
14
14
  var {
15
15
  keyName,
16
16
  expandKey,
17
- keys,
17
+ keys = [],
18
18
  initialValue,
19
19
  value,
20
20
  parentValue,
@@ -24,12 +24,22 @@ export var NestedOpen = props => {
24
24
  var dispatchExpands = useExpandsDispatch();
25
25
  var {
26
26
  onExpand,
27
- collapsed
27
+ collapsed,
28
+ shouldExpandNodeInitially
28
29
  } = useStore();
29
30
  var isArray = Array.isArray(value);
30
31
  var isMySet = value instanceof Set;
31
- var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
32
+ var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;
32
33
  var isObject = typeof value === 'object';
34
+ var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : defaultExpanded;
35
+ var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(isExpanded, {
36
+ value,
37
+ keys,
38
+ level
39
+ });
40
+ if (expands[expandKey] === undefined && shouldExpand !== undefined) {
41
+ isExpanded = shouldExpand;
42
+ }
33
43
  var click = () => {
34
44
  var opt = {
35
45
  expand: !isExpanded,
package/esm/index.d.ts CHANGED
@@ -48,6 +48,12 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
48
48
  enableClipboard?: boolean;
49
49
  /** When set to true, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth. @default false */
50
50
  collapsed?: boolean | number;
51
+ /** Determine whether the node should be expanded on the first render, or you can use collapsed to control the level of expansion (by default, the root is expanded). */
52
+ shouldExpandNodeInitially?: (isExpanded: boolean, props: {
53
+ value?: T;
54
+ keys: (number | string)[];
55
+ level: number;
56
+ }) => boolean;
51
57
  /** Whether to highlight updates. @default true */
52
58
  highlightUpdates?: boolean;
53
59
  /** Shorten long JSON strings, Set to `0` to disable this feature @default 30 */
package/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["className", "style", "value", "children", "collapsed", "indentWidth", "displayObjectSize", "shortenTextAfterLength", "highlightUpdates", "enableClipboard", "displayDataTypes", "objectSortKeys", "onExpand", "onCopied"];
3
+ var _excluded = ["className", "style", "value", "children", "collapsed", "shouldExpandNodeInitially", "indentWidth", "displayObjectSize", "shortenTextAfterLength", "highlightUpdates", "enableClipboard", "displayDataTypes", "objectSortKeys", "onExpand", "onCopied"];
4
4
  import { forwardRef } from 'react';
5
5
  import { Provider } from './store';
6
6
  import { Container } from './Container';
@@ -45,6 +45,7 @@ var JsonView = /*#__PURE__*/forwardRef((props, ref) => {
45
45
  value,
46
46
  children,
47
47
  collapsed,
48
+ shouldExpandNodeInitially,
48
49
  indentWidth = 15,
49
50
  displayObjectSize = true,
50
51
  shortenTextAfterLength = 30,
@@ -69,6 +70,7 @@ var JsonView = /*#__PURE__*/forwardRef((props, ref) => {
69
70
  value,
70
71
  objectSortKeys,
71
72
  indentWidth,
73
+ shouldExpandNodeInitially,
72
74
  displayObjectSize,
73
75
  collapsed,
74
76
  enableClipboard,
package/esm/store.d.ts CHANGED
@@ -12,6 +12,7 @@ export interface InitialState<T extends object> {
12
12
  enableClipboard?: JsonViewProps<T>['enableClipboard'];
13
13
  highlightUpdates?: JsonViewProps<T>['highlightUpdates'];
14
14
  collapsed?: JsonViewProps<T>['collapsed'];
15
+ shouldExpandNodeInitially?: JsonViewProps<T>['shouldExpandNodeInitially'];
15
16
  indentWidth?: number;
16
17
  }
17
18
  export declare const initialState: InitialState<object>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uiw/react-json-view",
3
- "version": "2.0.0-alpha.28",
3
+ "version": "2.0.0-alpha.29",
4
4
  "description": "JSON viewer for react.",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",