Skip to content

Commit 50fc6f2

Browse files
authored
Merge pull request mac-s-g#101 from mac-s-g/custom-validation-message
Custom validation message
2 parents f4d16e1 + c54c3f6 commit 50fc6f2

File tree

6 files changed

+46
-7
lines changed

6 files changed

+46
-7
lines changed

dev-server/dev-server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ ReactDom.render(
2727
<JsonViewer
2828
src={getExampleJson1()}
2929
theme='railscasts'
30+
validationMessage="You're doing something wrong."
3031
collapseStringsAfterLength={15}
3132
onEdit={(e)=>{console.log(e); if (e.new_value == 'error'){return false;}}}
3233
onDelete={(e)=>{console.log(e);}}

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.11.6",
4+
"version": "1.11.7",
55
"main": "dist/main.js",
66
"files": [
77
"dist/"

src/js/components/ValidationFailure.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Theme from './../themes/getStyle';
1212
export default class extends React.Component {
1313

1414
render() {
15-
const {active, theme, rjvId} = this.props;
15+
const {message, active, theme, rjvId} = this.props;
1616

1717
return active ? (
1818
<div
@@ -25,7 +25,9 @@ export default class extends React.Component {
2525
});
2626
}}
2727
>
28-
<span {...Theme(theme, 'validation-failure-label')}>Validation Error</span>
28+
<span {...Theme(theme, 'validation-failure-label')}>
29+
{message}
30+
</span>
2931
<Clear
3032
{...Theme(theme, 'validation-failure-clear')} />
3133
</div>

src/js/index.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export default class extends React.Component {
4949
onDelete: false,
5050
onAdd: false,
5151
iconStyle: "triangle",
52-
style: {}
52+
style: {},
53+
validationMessage: "Validation Error"
5354
}
5455

5556
getListeners = () => {
@@ -98,6 +99,13 @@ export default class extends React.Component {
9899
}
99100

100101
this.validateInput();
102+
103+
ObjectAttributes.set(
104+
this.rjvId,
105+
'global',
106+
'src',
107+
this.state.src
108+
);
101109
}
102110

103111
//make sure props are passed in as expected
@@ -130,12 +138,16 @@ export default class extends React.Component {
130138
}
131139

132140
render() {
133-
const {addKeyRequest, style, validationFailure, ...props} = this.state;
141+
const {
142+
validationFailure, validationMessage,
143+
addKeyRequest, style, ...props
144+
} = this.state;
134145
//reset key request to false once it's observed
135146
this.state.addKeyRequest = false;
136147
return (<div class="react-json-view"
137148
style={{...Theme(props.theme, 'app-container').style, ...style}} >
138149
<ValidationFailure
150+
message={validationMessage}
139151
active={validationFailure}
140152
theme={props.theme}
141153
rjvId={this.rjvId} />

src/js/stores/ObjectAttributes.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class ObjectAttributes extends EventEmitter {
8888
walk = walk[idx];
8989
}
9090

91+
9192
if (variable_removed) {
9293
if (toType(walk) == 'array') {
9394
walk.splice(name, 1);
@@ -116,9 +117,10 @@ class ObjectAttributes extends EventEmitter {
116117
let idx = copy_namespace.shift();
117118
if (type == 'array') {
118119
result = [...src];
119-
result[idx] = this.deepCopy(src[idx], copy_namespace);
120120
} else if (type == 'object') {
121121
result = {...src};
122+
}
123+
if (idx !== undefined) {
122124
result[idx] = this.deepCopy(src[idx], copy_namespace);
123125
}
124126
return result;

test/tests/js/components/ValidationFailure-test.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {expect} from 'chai';
55
import Index from '/react/src/js/index';
66
import ValidationFailure from '/react/src/js/components/ValidationFailure';
77

8-
98
describe('<ValidationFailure />', function () {
109
const rjvId = 1;
1110

@@ -50,4 +49,27 @@ describe('<ValidationFailure />', function () {
5049
wrapper.find('.validation-failure').simulate('click');
5150
});
5251

52+
it('ValidationFailure disabled with ValidationMessage', function () {
53+
const wrapper = mount(
54+
<Index validationMessage="custom validation" />
55+
);
56+
expect(
57+
wrapper.find('.validation-failure').length
58+
).to.equal(0);
59+
});
60+
61+
it('ValidationFailure touch click event', function () {
62+
const wrapper = mount(
63+
<ValidationFailure
64+
active={true}
65+
theme='rjv-default'
66+
rjvId={rjvId}
67+
message="custom validation"
68+
/>
69+
);
70+
expect(
71+
wrapper.find('.validation-failure').html()
72+
).to.contain('custom validation');
73+
});
74+
5375
});

0 commit comments

Comments
 (0)