diff --git a/src/components/ACLEditor/ACLEditor.react.js b/src/components/ACLEditor/ACLEditor.react.js index 74ffff110b..b690341535 100644 --- a/src/components/ACLEditor/ACLEditor.react.js +++ b/src/components/ACLEditor/ACLEditor.react.js @@ -28,7 +28,7 @@ function validateEntry(text, returnInvalid = true) { const user = text.substring(5); entry = user; - userQuery = new Parse.Query.or( + userQuery = Parse.Query.or( new Parse.Query(Parse.User).equalTo('username', user), new Parse.Query(Parse.User).equalTo('objectId', user) ); @@ -40,7 +40,7 @@ function validateEntry(text, returnInvalid = true) { }; const role = text.substring(5); entry = role; - roleQuery = new Parse.Query.or( + roleQuery = Parse.Query.or( new Parse.Query(Parse.Role).equalTo('name', role), new Parse.Query(Parse.Role).equalTo('objectId', role) ); diff --git a/src/components/PermissionsDialog/PermissionsDialog.react.js b/src/components/PermissionsDialog/PermissionsDialog.react.js index a58fc4ecaa..5187116b4a 100644 --- a/src/components/PermissionsDialog/PermissionsDialog.react.js +++ b/src/components/PermissionsDialog/PermissionsDialog.react.js @@ -597,7 +597,7 @@ export default class PermissionsDialog extends React.Component { transitioning: false, showLevels: false, level: 'Simple', // 'Simple' | 'Advanced' - entryTypes: undefined, + entryTypes: new Map(), perms: Map(perms), // Permissions map keys: uniqueKeys, // Permissions row order pointerPerms: Map(fromJS(pointerPerms)), // Pointer permissions map @@ -612,15 +612,19 @@ export default class PermissionsDialog extends React.Component { async componentDidMount() { // validate existing entries, also preserve their types // to render correct pills and details. - const rows = await Promise.all( + const results = await Promise.allSettled( this.state.keys .filter(key => !['requiresAuthentication', '*'].includes(key)) .map(key => this.props.validateEntry(key)) ); - let entryTypes = new Map({}); + let entryTypes = new Map(); - for (const { entry, type } of rows) { + for (const result of results) { + if (result.status !== 'fulfilled') { + continue; + } + const { entry, type } = result.value; let key; const value = {}; @@ -649,7 +653,9 @@ export default class PermissionsDialog extends React.Component { entryTypes = entryTypes.set(key, value); } - this.setState({ entryTypes }); + this.setState(prevState => ({ + entryTypes: prevState.entryTypes.merge(entryTypes), + })); } toggleField(rowId, type, value) { diff --git a/src/components/ProtectedFieldsDialog/ProtectedFieldsDialog.react.js b/src/components/ProtectedFieldsDialog/ProtectedFieldsDialog.react.js index 001460f332..128edcac4a 100644 --- a/src/components/ProtectedFieldsDialog/ProtectedFieldsDialog.react.js +++ b/src/components/ProtectedFieldsDialog/ProtectedFieldsDialog.react.js @@ -52,7 +52,7 @@ export default class ProtectedFieldsDialog extends React.Component { }); this.state = { - entryTypes: undefined, + entryTypes: new Map(), transitioning: false, columns: columns, protectedFields: new Map(protectedFields || {}), // protected fields map @@ -65,11 +65,17 @@ export default class ProtectedFieldsDialog extends React.Component { async componentDidMount() { // validate existing entries, also preserve their types (to render correct pills). - const rows = await Promise.all(this.state.keys.map(key => this.props.validateEntry(key))); + const results = await Promise.allSettled( + this.state.keys.map(key => this.props.validateEntry(key)) + ); - let entryTypes = new Map({}); + let entryTypes = new Map(); - for (const { entry, type } of rows) { + for (const result of results) { + if (result.status !== 'fulfilled') { + continue; + } + const { entry, type } = result.value; let key; const value = {}; @@ -97,7 +103,9 @@ export default class ProtectedFieldsDialog extends React.Component { entryTypes = entryTypes.set(key, value); } - this.setState({ entryTypes }); + this.setState(prevState => ({ + entryTypes: prevState.entryTypes.merge(entryTypes), + })); } checkEntry(input) { diff --git a/src/dashboard/Data/Browser/SecureFieldsDialog.react.js b/src/dashboard/Data/Browser/SecureFieldsDialog.react.js index c6d80806b1..62ceeaba03 100644 --- a/src/dashboard/Data/Browser/SecureFieldsDialog.react.js +++ b/src/dashboard/Data/Browser/SecureFieldsDialog.react.js @@ -46,7 +46,7 @@ function validateEntry(pointers, text, parseServerSupportsPointerPermissions) { }; const user = text.substring(5); - userQuery = new Parse.Query.or( + userQuery = Parse.Query.or( new Parse.Query(Parse.User).equalTo('username', user), new Parse.Query(Parse.User).equalTo('objectId', user) ); @@ -56,7 +56,7 @@ function validateEntry(pointers, text, parseServerSupportsPointerPermissions) { find: () => Promise.resolve([]), }; const role = text.substring(5); - roleQuery = new Parse.Query.or( + roleQuery = Parse.Query.or( new Parse.Query(Parse.Role).equalTo('name', role), new Parse.Query(Parse.Role).equalTo('objectId', role) ); diff --git a/src/dashboard/Data/Browser/SecurityDialog.react.js b/src/dashboard/Data/Browser/SecurityDialog.react.js index f82952e383..e096c5b686 100644 --- a/src/dashboard/Data/Browser/SecurityDialog.react.js +++ b/src/dashboard/Data/Browser/SecurityDialog.react.js @@ -35,7 +35,7 @@ function validateEntry(pointers, text, parseServerSupportsPointerPermissions) { if (text.startsWith('user:')) { const user = text.substring(5); - userQuery = new Parse.Query.or( + userQuery = Parse.Query.or( new Parse.Query(Parse.User).equalTo('username', user), new Parse.Query(Parse.User).equalTo('objectId', user) ); @@ -46,7 +46,7 @@ function validateEntry(pointers, text, parseServerSupportsPointerPermissions) { } else if (text.startsWith('role:')) { const role = text.substring(5); - roleQuery = new Parse.Query.or( + roleQuery = Parse.Query.or( new Parse.Query(Parse.Role).equalTo('name', role), new Parse.Query(Parse.Role).equalTo('objectId', role) );