Skip to content

Commit ec0e944

Browse files
sadakchapmtrezza
andauthored
Cloning Rows (#1697)
* disabled clone rows option for standard classes * providing a way to edit clone rows on error 137 * allowing user to clone rows for standard classes * checking dirty clone objects on failed clone * giving option to clone or cancel per row for failed clone rows * fixed wrapTop for data rows when edit clone row * showing modal Clone menu * disabling other menu item on modal state * clone rows for requried field * showing cloned rows for missing required field error * removing username & authData for User class object * removed null initialization var * removing username while cloning User obj * added clone icon attribution note * added required placehlder text for edit clone rows * clearing required field row after abort add * udpating config file * dynamic update required fields from BrowserRow new * remove requiredColumnFields state var from Browser * Update package-lock.json * disabling all menu options on edit clone row modal state Co-authored-by: Manuel Trezza <[email protected]>
1 parent f265b25 commit ec0e944

12 files changed

+380
-77
lines changed

src/components/BrowserCell/BrowserCell.react.js

+2-2
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;
@@ -333,7 +333,7 @@ export default class BrowserCell extends Component {
333333
classes.push(styles.current);
334334
}
335335

336-
if (markRequiredField && isRequired && !value) {
336+
if (markRequiredFieldRow === row && isRequired && !value) {
337337
classes.push(styles.required);
338338
}
339339

src/components/BrowserFilter/BrowserFilter.react.js

+3
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ export default class BrowserFilter extends React.Component {
144144
if (this.props.filters.size) {
145145
buttonStyle.push(styles.active);
146146
}
147+
if (this.props.disabled) {
148+
buttonStyle.push(styles.disabled);
149+
}
147150
return (
148151
<div className={styles.wrap}>
149152
<div className={buttonStyle.join(' ')} onClick={this.toggle}>

src/components/BrowserFilter/BrowserFilter.scss

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
&:hover svg {
2323
fill: white;
2424
}
25+
26+
&.disabled {
27+
cursor: not-allowed;
28+
color: #66637A;
29+
30+
&:hover svg {
31+
fill: #66637A;
32+
}
33+
}
2534
}
2635

2736
.entry.active {

src/components/BrowserRow/BrowserRow.react.js

+16-3
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,21 @@ 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 } = this.props;
2323
let attributes = obj.attributes;
24+
let requiredCols = [];
25+
Object.entries(columns).reduce((acc, cur) => {
26+
if (cur[1].required) {
27+
acc.push(cur[0]);
28+
}
29+
return acc;
30+
}, requiredCols);
31+
// for dynamically changing required field on _User class
32+
if (obj.className === '_User' && (obj.get('username') !== undefined || obj.get('password') !== undefined)) {
33+
requiredCols = ['username', 'password'];
34+
} else if (obj.className === '_User' && obj.get('authData') !== undefined) {
35+
requiredCols = ['authData'];
36+
}
2437
return (
2538
<div className={styles.tableRow} style={{ minWidth: rowWidth }}>
2639
<span className={styles.checkCell}>
@@ -58,7 +71,7 @@ export default class BrowserRow extends Component {
5871
hidden = true;
5972
}
6073
}
61-
let isRequired = requiredColumnFields && requiredColumnFields.includes(name);
74+
let isRequired = requiredCols.includes(name);
6275
return (
6376
<BrowserCell
6477
key={name}
@@ -82,7 +95,7 @@ export default class BrowserRow extends Component {
8295
value={attr}
8396
hidden={hidden}
8497
isRequired={isRequired}
85-
markRequiredField={markRequiredField}
98+
markRequiredFieldRow={markRequiredFieldRow}
8699
setCopyableValue={setCopyableValue}
87100
setContextMenu={setContextMenu}
88101
onEditSelectedRow={onEditSelectedRow} />

src/components/ColumnsConfiguration/ColumnsConfiguration.react.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,19 @@ export default class ColumnsConfiguration extends React.Component {
4848
}
4949

5050
render() {
51-
const { handleColumnDragDrop, handleColumnsOrder, order } = this.props;
52-
const [ title, entry ] = [styles.title, styles.entry ].map(className => (
51+
const { handleColumnDragDrop, handleColumnsOrder, order, disabled } = this.props;
52+
let [ title, entry ] = [styles.title, styles.entry ].map(className => (
5353
<div className={className} onClick={this.toggle.bind(this)}>
5454
<Icon name='manage-columns' width={14} height={14} />
5555
<span>Manage Columns</span>
5656
</div>
5757
));
58+
if (disabled) {
59+
entry = <div className={styles.entry + ' ' + styles.disabled} onClick={null}>
60+
<Icon name='manage-columns' width={14} height={14} />
61+
<span>Manage Columns</span>
62+
</div>;
63+
}
5864

5965
let popover = null;
6066
if (this.state.open) {

src/components/ColumnsConfiguration/ColumnsConfiguration.scss

+9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212
&:hover svg {
1313
fill: white;
1414
}
15+
16+
&.disabled {
17+
cursor: not-allowed;
18+
color: #66637A;
19+
20+
&:hover svg {
21+
fill: #66637A;
22+
}
23+
}
1524
}
1625

1726
.title {

0 commit comments

Comments
 (0)