Skip to content

Commit 5209ee6

Browse files
committed
added required placehlder text for edit clone rows
1 parent 88a64e1 commit 5209ee6

File tree

4 files changed

+54
-10
lines changed

4 files changed

+54
-10
lines changed

src/components/BrowserCell/BrowserCell.react.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ export default class BrowserCell extends Component {
214214
//#endregion
215215

216216
render() {
217-
let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, row, col, field, onEditSelectedRow, readonly, isRequired, markRequiredField } = this.props;
217+
let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, row, col, field, onEditSelectedRow, readonly, isRequired, markRequiredFieldRow } = this.props;
218218
let content = value;
219219
let isNewRow = row < 0;
220220
this.copyableValue = content;
@@ -331,7 +331,7 @@ export default class BrowserCell extends Component {
331331
classes.push(styles.current);
332332
}
333333

334-
if (markRequiredField && isRequired && !value) {
334+
if (markRequiredFieldRow === row && isRequired && !value) {
335335
classes.push(styles.required);
336336
}
337337

src/components/BrowserRow/BrowserRow.react.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default class BrowserRow extends Component {
1919
}
2020

2121
render() {
22-
const { className, columns, currentCol, isUnique, obj, onPointerClick, order, readOnlyFields, row, rowWidth, selection, selectRow, setCopyableValue, setCurrent, setEditing, setRelation, onEditSelectedRow, setContextMenu, onFilterChange, markRequiredField, requiredColumnFields } = this.props;
22+
const { className, columns, currentCol, isUnique, obj, onPointerClick, order, readOnlyFields, row, rowWidth, selection, selectRow, setCopyableValue, setCurrent, setEditing, setRelation, onEditSelectedRow, setContextMenu, onFilterChange, markRequiredFieldRow, requiredColumnFields } = this.props;
2323
let attributes = obj.attributes;
2424
return (
2525
<div className={styles.tableRow} style={{ minWidth: rowWidth }}>
@@ -82,7 +82,7 @@ export default class BrowserRow extends Component {
8282
value={attr}
8383
hidden={hidden}
8484
isRequired={isRequired}
85-
markRequiredField={markRequiredField}
85+
markRequiredFieldRow={markRequiredFieldRow}
8686
setCopyableValue={setCopyableValue}
8787
setContextMenu={setContextMenu}
8888
onEditSelectedRow={onEditSelectedRow} />

src/dashboard/Data/Browser/Browser.react.js

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class Browser extends DashboardView {
8181
isUnique: false,
8282
uniqueField: null,
8383
keepAddingCols: false,
84-
markRequiredField: false,
84+
markRequiredFieldRow: 0,
8585
requiredColumnFields: []
8686
};
8787

@@ -387,15 +387,15 @@ class Browser extends DashboardView {
387387
if (!obj.get(name)) {
388388
this.showNote("Please enter all required fields", true);
389389
this.setState({
390-
markRequiredField: true
390+
markRequiredFieldRow: -1
391391
});
392392
return;
393393
}
394394
}
395395
}
396396
if (this.state.markRequiredField) {
397397
this.setState({
398-
markRequiredField: false
398+
markRequiredFieldRow: 0
399399
});
400400
}
401401
obj.save(null, { useMasterKey: true }).then(
@@ -462,6 +462,47 @@ class Browser extends DashboardView {
462462
if (!obj) {
463463
return;
464464
}
465+
466+
// check if required fields are missing
467+
const className = this.props.params.className;
468+
let requiredCols = [];
469+
if (className) {
470+
let classColumns = this.props.schema.data.get('classes').get(className);
471+
classColumns.forEach(({ required }, name) => {
472+
if (name === 'objectId' || this.state.isUnique && name !== this.state.uniqueField) {
473+
return;
474+
}
475+
if (!!required) {
476+
requiredCols.push(name);
477+
}
478+
if (className === '_User' && (name === 'username' || name === 'password')) {
479+
if (!obj.get('authData')) {
480+
requiredCols.push(name);
481+
}
482+
}
483+
if (className === '_Role' && (name === 'name' || name === 'ACL')) {
484+
requiredCols.push(name);
485+
}
486+
});
487+
}
488+
if (requiredCols.length) {
489+
for (let idx = 0; idx < requiredCols.length; idx++) {
490+
const name = requiredCols[idx];
491+
if (!obj.get(name)) {
492+
this.showNote("Please enter all required fields", true);
493+
this.setState({
494+
markRequiredFieldRow: rowIndex
495+
});
496+
return;
497+
}
498+
}
499+
}
500+
if (this.state.markRequiredField) {
501+
this.setState({
502+
markRequiredFieldRow: 0
503+
});
504+
}
505+
465506
obj.save(null, { useMasterKey: true }).then((objectSaved) => {
466507
let msg = objectSaved.className + ' with id \'' + objectSaved.id + '\' ' + 'created';
467508
this.showNote(msg, false);
@@ -816,7 +857,7 @@ class Browser extends DashboardView {
816857
obj.set(attr, value);
817858
}
818859

819-
if (isNewObject) {
860+
if (isNewObject || isEditCloneObj) {
820861
// for dynamically changing required placeholder text for _User class new row object
821862
if (obj.className === '_User' && attr === 'authData' && value !== undefined) {
822863
// username & password are not required
@@ -1175,6 +1216,7 @@ class Browser extends DashboardView {
11751216
}
11761217
});
11771218
}
1219+
this.setRequiredColumnFields();
11781220
this.addEditCloneRows(failedSaveObj);
11791221
}
11801222
this.setState({
@@ -1366,7 +1408,7 @@ class Browser extends DashboardView {
13661408
onAbortEditCloneRow={this.abortEditCloneRow}
13671409
onCancelPendingEditRows={this.cancelPendingEditRows}
13681410

1369-
markRequiredField={this.state.markRequiredField}
1411+
markRequiredFieldRow={this.state.markRequiredFieldRow}
13701412
requiredColumnFields={this.state.requiredColumnFields}
13711413
columns={columns}
13721414
className={className}

src/dashboard/Data/Browser/BrowserTable.react.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ export default class BrowserTable extends React.Component {
152152
setCopyableValue={this.props.setCopyableValue}
153153
setContextMenu={this.props.setContextMenu}
154154
onEditSelectedRow={this.props.onEditSelectedRow}
155+
markRequiredFieldRow={this.props.markRequiredFieldRow}
156+
requiredColumnFields={this.props.requiredColumnFields}
155157
/>
156158
<Button
157159
value="Clone"
@@ -201,7 +203,7 @@ export default class BrowserTable extends React.Component {
201203
setCopyableValue={this.props.setCopyableValue}
202204
setContextMenu={this.props.setContextMenu}
203205
onEditSelectedRow={this.props.onEditSelectedRow}
204-
markRequiredField={this.props.markRequiredField}
206+
markRequiredFieldRow={this.props.markRequiredFieldRow}
205207
requiredColumnFields={this.props.requiredColumnFields}
206208
/>
207209
<Button

0 commit comments

Comments
 (0)