Skip to content

Commit 46e041c

Browse files
committed
closes mac-s-g#137
1 parent 4895f50 commit 46e041c

File tree

7 files changed

+51
-5
lines changed

7 files changed

+51
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ Name|Type|Default|Description
4848
`indentWidth`|`integer`|4|Set the indent-width for nested objects
4949
`collapsed`|`boolean` or `integer`|`false`|When set to `true`, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth.
5050
`collapseStringsAfterLength`|`integer`|`false`|When an integer value is assigned, strings will be cut off at that length. Collapsed strings are followed by an ellipsis. String content can be expanded and collapsed by clicking on the string value.
51+
`shouldCollapse`|`(delete)=>{}`|`false`|Callback function to provide control over what objects and arrays should be collapsed by default. An object is passed to the callback containing `name`, `src`, `type` ("array" or "object") and `namespace`.
5152
`groupArraysAfterLength`|`integer`|`100`|When an integer value is assigned, arrays will be displayed in groups by count of the value. Groups are displayed with brakcet notation and can be expanded and collapsed by clickong on the brackets.
5253
`enableClipboard`|`boolean` or `(copy)=>{}`|`true`|When prop is not `false`, the user can copy objects and arrays to clipboard by clicking on the clipboard icon. Copy callbacks are supported.
5354
`displayObjectSize`|`boolean`|`true`|When set to `true`, objects and arrays are labeled with size

demo/dist/main.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev-server/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ ReactDom.render(
3939
enableClipboard={copy => {
4040
console.log("you copied to clipboard!", copy)
4141
}}
42+
collapsed={false}
43+
shouldCollapse={({src, type}) => type === 'array' && src.indexOf('test') > -1}
4244
/>
4345

4446
<br />

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "react-json-view",
33
"description": "Interactive react component for displaying javascript arrays and JSON objects.",
4-
"version": "1.14.3",
4+
"version": "1.15.0",
55
"main": "dist/main.js",
66
"files": [
77
"dist/"

src/js/components/DataTypes/Object.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ class rjvObject extends React.Component {
4242
|| (props.collapsed !== true
4343
&& props.collapsed > props.depth)
4444
)
45+
&& (
46+
!props.shouldCollapse
47+
|| props.shouldCollapse({
48+
name: props.name,
49+
src: props.src,
50+
type: toType(props.src),
51+
namespace: props.namespace
52+
}) === false
53+
)
4554
//initialize closed if object has no items
4655
&& size !== 0
4756
);
@@ -128,7 +137,7 @@ class rjvObject extends React.Component {
128137
{expanded ? this.getObjectMetaData(src) : null}
129138
</span>
130139
)
131-
}
140+
}
132141

133142
const IconComponent = expanded ? ExpandedIcon : CollapsedIcon
134143

@@ -216,7 +225,7 @@ class rjvObject extends React.Component {
216225
namespace={namespace.concat(variable.name)}
217226
parent_type={object_type}
218227
{...props}
219-
/>);
228+
/>);
220229
} else if (variable.type == 'array') {
221230
let ObjectComponent = JsonObject
222231

src/js/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default class extends React.Component {
4141
theme: 'rjv-default',
4242
collapsed: false,
4343
collapseStringsAfterLength: false,
44+
shouldCollapse: false,
4445
groupArraysAfterLength: 100,
4546
indentWidth: 4,
4647
enableClipboard: true,

test/tests/js/components/DataTypes/Object-test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,4 +292,37 @@ describe("<JsonObject />", function() {
292292

293293
expect(wrapper.find(".node-ellipsis")).to.have.length(0)
294294
})
295+
296+
it("should collapse at shouldCollapse logic", function() {
297+
let src = { prop1: 1, prop2: 2, prop3: 3}
298+
299+
const wrapper = shallow(
300+
<JsonObject
301+
src={src}
302+
theme="rjv-default"
303+
namespace={["root"]}
304+
collapsed={false}
305+
shouldCollapse={() => true}
306+
/>
307+
)
308+
309+
expect(wrapper.state("expanded")).to.equal(false)
310+
})
311+
312+
it("should expand based on shouldCollapse logic", function() {
313+
let src = { prop1: 1, prop2: 2, prop3: 3}
314+
315+
const wrapper = shallow(
316+
<JsonObject
317+
src={src}
318+
theme="rjv-default"
319+
namespace={["root"]}
320+
collapsed={false}
321+
shouldCollapse={() => false}
322+
/>
323+
)
324+
325+
expect(wrapper.state("expanded")).to.equal(true)
326+
})
327+
295328
})

0 commit comments

Comments
 (0)