Skip to content

Commit e3c6ccc

Browse files
committed
feat: make styles property non-enumerable
1 parent 28748ef commit e3c6ccc

File tree

4 files changed

+44
-2
lines changed

4 files changed

+44
-2
lines changed

src/extendReactClass.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,17 @@ export default (Component: Object, defaultStyles: Object, options: Object) => {
2222
if (this.props.styles) {
2323
styles = this.props.styles;
2424
} else if (_.isObject(defaultStyles)) {
25-
this.props = _.assign({}, this.props, {
26-
styles: defaultStyles
25+
const props = Object.assign({}, this.props);
26+
27+
Object.defineProperty(props, 'styles', {
28+
configurable: true,
29+
enumerable: false,
30+
value: defaultStyles,
31+
writable: false
2732
});
2833

34+
this.props = props;
35+
2936
propsChanged = true;
3037
styles = defaultStyles;
3138
} else {

src/wrapStatelessFunction.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ export default (Component: Function, defaultStyles: Object, options: Object): Fu
2020
styles: defaultStyles
2121
});
2222

23+
Object.defineProperty(useProps, 'styles', {
24+
configurable: true,
25+
enumerable: false,
26+
value: defaultStyles,
27+
writable: false
28+
});
29+
2330
styles = defaultStyles;
2431
} else {
2532
useProps = props;

tests/extendReactClass.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,24 @@ describe('extendReactClass', () => {
3434

3535
TestUtils.renderIntoDocument(<Component />);
3636
});
37+
it('exposes non-enumerable styles property', (done) => {
38+
let Component;
39+
40+
const styles = {
41+
foo: 'foo-1'
42+
};
43+
44+
Component = class extends React.Component {
45+
render () {
46+
expect(this.props.propertyIsEnumerable('styles')).to.equal(false);
47+
done();
48+
}
49+
};
50+
51+
Component = extendReactClass(Component, styles);
52+
53+
TestUtils.renderIntoDocument(<Component />);
54+
});
3755
it('does not affect the other instance properties', (done) => {
3856
let Component;
3957

tests/wrapStatelessFunction.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ describe('wrapStatelessFunction', () => {
3737
done();
3838
}, styles)();
3939
});
40+
it('exposes non-enumerable styles property', (done) => {
41+
const styles = {
42+
foo: 'foo-1'
43+
};
44+
45+
wrapStatelessFunction((props) => {
46+
expect(props.propertyIsEnumerable('styles')).to.equal(false);
47+
done();
48+
}, styles)();
49+
});
4050
it('does not affect the other instance properties', (done) => {
4151
const styles = {
4252
foo: 'foo-1'

0 commit comments

Comments
 (0)