Skip to content

Commit a599f2d

Browse files
authored
Exclude hidden fields (#1734)
* get column preference correctly from localstorage * refreshing after a column is marked visible * prevent request for always cached fields * prevent request for password at _User * set flag cached & making request if not cached * add cache flag for cached preferences * refetch data on showAll columns
1 parent 3c49967 commit a599f2d

File tree

5 files changed

+52
-9
lines changed

5 files changed

+52
-9
lines changed

src/components/ColumnsConfiguration/ColumnsConfiguration.react.js

+21-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,14 @@ export default class ColumnsConfiguration extends React.Component {
4040
}
4141

4242
showAll() {
43-
this.props.handleColumnsOrder(this.props.order.map(order => ({ ...order, visible: true })));
43+
let shouldReload = false;
44+
let updatedOrder = this.props.order.map(field => {
45+
if (!shouldReload && !field.cached) {
46+
shouldReload = true;
47+
}
48+
return { ...field, visible: true }
49+
});
50+
this.props.handleColumnsOrder(updatedOrder, shouldReload);
4451
}
4552

4653
hideAll() {
@@ -84,7 +91,19 @@ export default class ColumnsConfiguration extends React.Component {
8491
name,
8592
visible
8693
};
87-
handleColumnsOrder(updatedOrder);
94+
let shouldReload = visible;
95+
// these fields are always cached as they are never excluded from server
96+
// therefore no need to make another request.
97+
if (name === 'objectId' || name === 'createdAt' || name === 'updatedAt' || name === 'ACL') {
98+
shouldReload = false;
99+
}
100+
if (this.props.className === '_User' && name === 'password') {
101+
shouldReload = false;
102+
}
103+
if (updatedOrder[index].cached) {
104+
shouldReload = false;
105+
}
106+
handleColumnsOrder(updatedOrder, shouldReload);
88107
}}
89108
handleColumnDragDrop={handleColumnDragDrop} />
90109
})}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -675,12 +675,13 @@ class Browser extends DashboardView {
675675
}
676676

677677
excludeFields(query, className) {
678-
let columns = ColumnPreferences.getPreferences(this.props.params.appId, className);
678+
let columns = ColumnPreferences.getPreferences(this.context.currentApp.applicationId, className);
679679
if (columns) {
680680
columns = columns.filter(clmn => !clmn.visible).map(clmn => clmn.name);
681681
for (let columnsKey in columns) {
682682
query.exclude(columns[columnsKey]);
683683
}
684+
ColumnPreferences.updateCachedColumns(this.context.currentApp.applicationId, className);
684685
}
685686
}
686687

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

+1
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ let BrowserToolbar = ({
219219
handleColumnDragDrop={handleColumnDragDrop}
220220
order={order}
221221
disabled={isPendingEditCloneRows}
222+
className={classNameForEditors}
222223
/>
223224
<div className={styles.toolbarSeparator} />
224225
{onAddRow && (

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,15 @@ export default class DataBrowser extends React.Component {
8787
document.body.removeEventListener('keydown', this.handleKey);
8888
}
8989

90-
updatePreferences(order) {
90+
updatePreferences(order, shouldReload) {
9191
if (this.saveOrderTimeout) {
9292
clearTimeout(this.saveOrderTimeout);
9393
}
9494
let appId = this.context.currentApp.applicationId;
9595
let className = this.props.className;
9696
this.saveOrderTimeout = setTimeout(() => {
9797
ColumnPreferences.updatePreferences(order, appId, className)
98+
shouldReload && this.props.onRefresh();
9899
}, 1000);
99100
}
100101

@@ -262,9 +263,9 @@ export default class DataBrowser extends React.Component {
262263
this.setState({ contextMenuX, contextMenuY, contextMenuItems });
263264
}
264265

265-
handleColumnsOrder(order) {
266+
handleColumnsOrder(order, shouldReload) {
266267
this.setState({ order: [ ...order ] }, () => {
267-
this.updatePreferences(order);
268+
this.updatePreferences(order, shouldReload);
268269
});
269270
}
270271

src/lib/ColumnPreferences.js

+24-3
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export function getColumnSort(sortBy, appId, className) {
7373

7474
export function getOrder(cols, appId, className, defaultPrefs) {
7575

76-
let prefs = getPreferences(appId, className) || [ { name: 'objectId', width: DEFAULT_WIDTH, visible: true } ];
76+
let prefs = getPreferences(appId, className) || [ { name: 'objectId', width: DEFAULT_WIDTH, visible: true, cached: true } ];
7777
if (defaultPrefs) {
7878
prefs = defaultPrefs;
7979
}
@@ -87,21 +87,30 @@ export function getOrder(cols, appId, className, defaultPrefs) {
8787
for (let name in cols) {
8888
requested[name] = true;
8989
if (!seen[name]) {
90-
order.push({ name: name, width: DEFAULT_WIDTH, visible: !defaultPrefs, required: cols[name]['required'] });
90+
order.push({ name: name, width: DEFAULT_WIDTH, visible: !defaultPrefs, required: cols[name]['required'], cached: !defaultPrefs });
9191
seen[name] = true;
9292
updated = true;
9393
}
9494
}
9595
let filtered = [];
9696
for (let i = 0; i < order.length; i++) {
97-
const { name, visible, required } = order[i];
97+
const { name, visible, required, cached } = order[i];
9898

9999
// If "visible" attribute is not defined, sets to true
100100
// and updates the cached preferences.
101101
if (typeof visible === 'undefined') {
102102
order[i].visible = true;
103+
order[i].cached = visible;
103104
updated = true;
104105
}
106+
107+
// If "cached" attribute is not defined, set it to visible attr
108+
// and updates the cached preferences.
109+
if (typeof cached === 'undefined') {
110+
order[i].cached = order[i].visible;
111+
updated = true;
112+
}
113+
105114
// If "required" attribute is not defined, set it to false
106115
if (typeof required === 'undefined') {
107116
order[i].required = false;
@@ -118,6 +127,18 @@ export function getOrder(cols, appId, className, defaultPrefs) {
118127
return filtered;
119128
}
120129

130+
export function updateCachedColumns(appId, className) {
131+
let prefs = getPreferences(appId, className);
132+
let order = [].concat(prefs);
133+
134+
for (let col of order) {
135+
let { visible } = col;
136+
col.cached = visible;
137+
}
138+
updatePreferences(order, appId, className);
139+
return order;
140+
}
141+
121142
function path(appId, className) {
122143
return `ParseDashboard:${VERSION}:${appId}:${className}`;
123144
}

0 commit comments

Comments
 (0)