From 6f0b8460447ef04fe27e7c72b973e21b6113f796 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Mon, 31 May 2021 20:29:12 +0530 Subject: [PATCH 01/12] passing down required field info --- src/dashboard/Data/Browser/Browser.react.js | 4 ++-- src/dashboard/Data/Browser/BrowserTable.react.js | 5 +++-- src/lib/ColumnPreferences.js | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/dashboard/Data/Browser/Browser.react.js b/src/dashboard/Data/Browser/Browser.react.js index 7fafa2f704..ff3f87cebb 100644 --- a/src/dashboard/Data/Browser/Browser.react.js +++ b/src/dashboard/Data/Browser/Browser.react.js @@ -1029,11 +1029,11 @@ class Browser extends DashboardView { if (this.state.isUnique) { columns = {}; } - classes.get(className).forEach(({ type, targetClass }, name) => { + classes.get(className).forEach(({ type, targetClass, required }, name) => { if (name === 'objectId' || this.state.isUnique && name !== this.state.uniqueField) { return; } - const info = { type }; + const info = { type, required: !!required }; if (targetClass) { info.targetClass = targetClass; } diff --git a/src/dashboard/Data/Browser/BrowserTable.react.js b/src/dashboard/Data/Browser/BrowserTable.react.js index f68853ac59..fda594600c 100644 --- a/src/dashboard/Data/Browser/BrowserTable.react.js +++ b/src/dashboard/Data/Browser/BrowserTable.react.js @@ -98,7 +98,7 @@ export default class BrowserTable extends React.Component { } } - let headers = this.props.order.map(({ name, width, visible, preventSort }) => ( + let headers = this.props.order.map(({ name, width, visible, preventSort, required }) => ( { width: width, name: name, @@ -106,7 +106,8 @@ export default class BrowserTable extends React.Component { targetClass: this.props.columns[name].targetClass, order: ordering.col === name ? ordering.direction : null, visible, - preventSort + preventSort, + required } )); let editor = null; diff --git a/src/lib/ColumnPreferences.js b/src/lib/ColumnPreferences.js index 667dcf576a..86324a6dc6 100644 --- a/src/lib/ColumnPreferences.js +++ b/src/lib/ColumnPreferences.js @@ -87,14 +87,14 @@ export function getOrder(cols, appId, className, defaultPrefs) { for (let name in cols) { requested[name] = true; if (!seen[name]) { - order.push({ name: name, width: DEFAULT_WIDTH, visible: !defaultPrefs }); + order.push({ name: name, width: DEFAULT_WIDTH, visible: !defaultPrefs, required: cols[name]['required'] }); seen[name] = true; updated = true; } } let filtered = []; for (let i = 0; i < order.length; i++) { - const { name, visible } = order[i]; + const { name, visible, required } = order[i]; // If "visible" attribute is not defined, sets to true // and updates the cached preferences. @@ -102,6 +102,10 @@ export function getOrder(cols, appId, className, defaultPrefs) { order[i].visible = true; updated = true; } + // If "required" attribute is not defined, set it to false + if (typeof required === 'undefined') { + order[i].required = false; + } if (requested[name]) { filtered.push(order[i]); } else { From 1f0ed4d820b42a76df8b6cb9bc6e1bc36bfdbb0f Mon Sep 17 00:00:00 2001 From: sadakchap Date: Mon, 31 May 2021 20:33:22 +0530 Subject: [PATCH 02/12] showing * for required columns --- .../DataBrowserHeader/DataBrowserHeader.react.js | 4 ++-- src/components/DataBrowserHeader/DataBrowserHeader.scss | 9 ++++++++- .../DataBrowserHeaderBar/DataBrowserHeaderBar.react.js | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/components/DataBrowserHeader/DataBrowserHeader.react.js b/src/components/DataBrowserHeader/DataBrowserHeader.react.js index 44d32162a0..c6573959ca 100644 --- a/src/components/DataBrowserHeader/DataBrowserHeader.react.js +++ b/src/components/DataBrowserHeader/DataBrowserHeader.react.js @@ -54,7 +54,7 @@ const dataBrowserHeaderSource = { })) class DataBrowserHeader extends React.Component { render() { - let { connectDragSource, connectDropTarget, name, type, targetClass, order, style, isDragging, isOver } = this.props; + let { connectDragSource, connectDropTarget, name, type, targetClass, order, style, isDragging, isOver, required } = this.props; let classes = [styles.header, unselectable]; if (order) { classes.push(styles[order]); @@ -67,7 +67,7 @@ class DataBrowserHeader extends React.Component { } return connectDragSource(connectDropTarget(
-
{name}
+
{name} {required && *}
{targetClass ? `${type} <${targetClass}>` : type}
)); diff --git a/src/components/DataBrowserHeader/DataBrowserHeader.scss b/src/components/DataBrowserHeader/DataBrowserHeader.scss index 2510ca6255..aa11edd908 100644 --- a/src/components/DataBrowserHeader/DataBrowserHeader.scss +++ b/src/components/DataBrowserHeader/DataBrowserHeader.scss @@ -20,15 +20,21 @@ } .name { + position: relative; color: white; font-size: 12px; height: 22px; line-height: 22px; - margin-right: 8px; + padding-right: 8px; float: left; max-width: 100%; overflow: hidden; text-overflow: ellipsis; + & span { + position: absolute; + top: -6px; + right: 0; + } } .type { @@ -38,6 +44,7 @@ line-height: 22px; overflow: hidden; text-overflow: ellipsis; + margin-left: 8px; } .ascending { diff --git a/src/components/DataBrowserHeaderBar/DataBrowserHeaderBar.react.js b/src/components/DataBrowserHeaderBar/DataBrowserHeaderBar.react.js index 04007d4426..218561e33a 100644 --- a/src/components/DataBrowserHeaderBar/DataBrowserHeaderBar.react.js +++ b/src/components/DataBrowserHeaderBar/DataBrowserHeaderBar.react.js @@ -27,7 +27,7 @@ export default class DataBrowserHeaderBar extends React.Component { ]; - headers.forEach(({ width, name, type, targetClass, order, visible, preventSort }, i) => { + headers.forEach(({ width, name, type, targetClass, order, visible, preventSort, required }, i) => { if (!visible) return; let wrapStyle = { width }; if (i % 2) { @@ -57,6 +57,7 @@ export default class DataBrowserHeaderBar extends React.Component { targetClass={targetClass} order={order} index={i} + required={required} moveDataBrowserHeader={this.props.handleDragDrop}/> ); From 7ad17ed8cc50c727ed253bda834c766d429e8047 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Mon, 31 May 2021 20:35:32 +0530 Subject: [PATCH 03/12] marked required columns for standard classes --- src/dashboard/Data/Browser/Browser.react.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/dashboard/Data/Browser/Browser.react.js b/src/dashboard/Data/Browser/Browser.react.js index ff3f87cebb..27659161e7 100644 --- a/src/dashboard/Data/Browser/Browser.react.js +++ b/src/dashboard/Data/Browser/Browser.react.js @@ -1034,6 +1034,12 @@ class Browser extends DashboardView { return; } const info = { type, required: !!required }; + if (className === '_User' && (name === 'username' || name === 'password')) { + info.required = true; + } + if (className === '_Role' && (name === 'name' || name === 'ACL')) { + info.required = true; + } if (targetClass) { info.targetClass = targetClass; } From 50846f22bc2d06bc4483c30acdb51f49a2f370c1 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Thu, 3 Jun 2021 20:09:55 +0530 Subject: [PATCH 04/12] showing required for new row --- src/components/BrowserCell/BrowserCell.react.js | 6 ++++-- src/components/BrowserRow/BrowserRow.react.js | 2 ++ .../DataBrowserHeader/DataBrowserHeader.react.js | 4 ++-- src/components/DataBrowserHeader/DataBrowserHeader.scss | 9 +-------- .../DataBrowserHeaderBar/DataBrowserHeaderBar.react.js | 3 +-- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index f640ea058e..9d56a73048 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -214,12 +214,12 @@ export default class BrowserCell extends Component { //#endregion render() { - let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, row, col, field, onEditSelectedRow, readonly } = this.props; + let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, row, col, field, onEditSelectedRow, readonly, isRequired } = this.props; let content = value; this.copyableValue = content; let classes = [styles.cell, unselectable]; if (hidden) { - content = '(hidden)'; + content = row < 0 && isRequired ? '(required)' : '(hidden)'; classes.push(styles.empty); } else if (value === undefined) { if (type === 'ACL') { @@ -228,6 +228,8 @@ export default class BrowserCell extends Component { this.copyableValue = content = '(undefined)'; classes.push(styles.empty); } + content = row < 0 && isRequired ? '(required)' : content; + row < 0 && classes.push(styles.empty); } else if (value === null) { this.copyableValue = content = '(null)'; classes.push(styles.empty); diff --git a/src/components/BrowserRow/BrowserRow.react.js b/src/components/BrowserRow/BrowserRow.react.js index da8302e5e9..653457711e 100644 --- a/src/components/BrowserRow/BrowserRow.react.js +++ b/src/components/BrowserRow/BrowserRow.react.js @@ -58,6 +58,7 @@ export default class BrowserRow extends Component { hidden = true; } } + let isRequired = columns[name].required; return (