Skip to content

Commit 9b56b3e

Browse files
authored
Merge pull request #420 from 10gen/INT-1160-optimizations
INT-1160: CRUD Optimizations:
2 parents 593eed8 + 71b0b42 commit 9b56b3e

13 files changed

+85
-13
lines changed

src/internal-packages/crud/lib/component/cancel-edit-button.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ class CancelEditButton extends React.Component {
3131
</button>
3232
);
3333
}
34+
35+
/**
36+
* Never needs to re-render.
37+
*/
38+
shouldComponentUpdate() {
39+
return false;
40+
}
3441
}
3542

3643
CancelEditButton.displayName = 'CancelEditButton';

src/internal-packages/crud/lib/component/cancel-insert-button.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ class CancelInsertButton extends React.Component {
3131
</button>
3232
);
3333
}
34+
35+
/**
36+
* Never needs to re-render.
37+
*/
38+
shouldComponentUpdate() {
39+
return false;
40+
}
3441
}
3542

3643
CancelInsertButton.displayName = 'CancelInsertButton';

src/internal-packages/crud/lib/component/clone-document-button.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class CloneDocumentButton extends React.Component {
2828
</button>
2929
);
3030
}
31+
32+
/**
33+
* Never needs to re-render.
34+
*/
35+
shouldComponentUpdate() {
36+
return false;
37+
}
3138
}
3239

3340
CloneDocumentButton.displayName = 'CloneDocumentButton';

src/internal-packages/crud/lib/component/delete-document-button.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class DeleteDocumentButton extends React.Component {
2828
</button>
2929
);
3030
}
31+
32+
/**
33+
* Never needs to re-render.
34+
*/
35+
shouldComponentUpdate() {
36+
return false;
37+
}
3138
}
3239

3340
DeleteDocumentButton.displayName = 'DeleteDocumentButton';

src/internal-packages/crud/lib/component/document.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,14 +257,15 @@ class Document extends React.Component {
257257
* @returns {Array} The editable elements.
258258
*/
259259
editableElements() {
260-
var elements = _.map(this.state.doc.elements, (element) => {
260+
var components = _.map(this.state.doc.elements, (element) => {
261261
return (
262262
<EditableElement key={element.uuid} element={element} />
263263
);
264264
});
265-
var lastElement = elements[elements.length - 1].props.element;
266-
elements.push(<Hotspot key='hotspot' element={lastElement} />);
267-
return elements;
265+
var lastComponent = components[components.length - 1];
266+
var lastElement = lastComponent ? lastComponent.props.element : null;
267+
components.push(<Hotspot key='hotspot' doc={this.state.doc} element={lastElement} />);
268+
return components;
268269
}
269270

270271
/**

src/internal-packages/crud/lib/component/edit-document-button.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class EditDocumentButton extends React.Component {
2828
</button>
2929
);
3030
}
31+
32+
/**
33+
* Never needs to re-render.
34+
*/
35+
shouldComponentUpdate() {
36+
return false;
37+
}
3138
}
3239

3340
EditDocumentButton.displayName = 'EditDocumentButton';

src/internal-packages/crud/lib/component/editable-element.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const RevertAction = require('./revert-action');
88
const RemoveAction = require('./remove-action');
99
const NoAction = require('./no-action');
1010
const Types = require('./types');
11+
const Hotspot = require('./hotspot');
1112

1213
/**
1314
* The added constant.
@@ -167,9 +168,13 @@ class EditableElement extends React.Component {
167168
* @returns {Array} The components.
168169
*/
169170
elementComponents() {
170-
return _.map(this.element.elements, (element) => {
171+
var components = _.map(this.element.elements, (element) => {
171172
return (<EditableElement key={element.uuid} element={element} />);
172173
});
174+
var lastComponent = components[components.length - 1];
175+
var lastElement = lastComponent ? lastComponent.props.element : null;
176+
components.push(<Hotspot key='hotspot' doc={this.element} element={lastElement} />);
177+
return components;
173178
}
174179

175180
/**

src/internal-packages/crud/lib/component/editable-key.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class EditableKey extends React.Component {
9595
*/
9696
handleChange(evt) {
9797
var value = evt.target.value;
98+
this._node.size = value.length;
9899
if (this.isEditable()) {
99100
if (this.element.isDuplicateKey(value)) {
100101
this.setState({ duplicate: true });

src/internal-packages/crud/lib/component/editable-value.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class EditableValue extends React.Component {
4141
<input
4242
ref={(c) => this._node = c}
4343
type='text'
44+
size={this.element.currentValue.length}
4445
className={this.style()}
4546
onBlur={this.handleBlur.bind(this)}
4647
onFocus={this.handleFocus.bind(this)}
@@ -70,6 +71,7 @@ class EditableValue extends React.Component {
7071
*/
7172
handleChange(evt) {
7273
var value = evt.target.value;
74+
this._node.size = value.length;
7375
var currentType = this.element.currentType;
7476
if (_.includes(TypeChecker.castableTypes(value), currentType)) {
7577
this.element.edit(TypeChecker.cast(value, currentType));

src/internal-packages/crud/lib/component/hotspot.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ class Hotspot extends React.Component {
3939
<div className='hotspot' onClick={this.handleClick.bind(this)}></div>
4040
);
4141
}
42+
43+
/**
44+
* Never needs to re-render.
45+
*/
46+
shouldComponentUpdate() {
47+
return false;
48+
}
4249
}
4350

4451
Hotspot.displayName = 'Hotspot';

0 commit comments

Comments
 (0)