From f88bcbdf928482a09892ab026874a01d5a8db1bc Mon Sep 17 00:00:00 2001 From: John Lyon-Smith Date: Mon, 14 May 2018 15:13:48 -0700 Subject: [PATCH] Fix change email & reset password buttons. Fix sorting of lists. Fixed admin checkbox bug --- mobile/ios/DeightonAR/Info.plist | 2 +- mobile/package-lock.json | 6 +-- mobile/package.json | 2 +- mobile/src/version.js | 2 +- server/src/version.js | 2 +- version.json5 | 2 +- website/package-lock.json | 6 +-- website/package.json | 2 +- website/src/MasterDetail/MasterDetail.js | 48 ++++++++++++++---------- website/src/Teams/Teams.js | 2 +- website/src/Users/UserForm.js | 6 +-- website/src/Users/Users.js | 23 ++++++++---- website/src/version.js | 2 +- 13 files changed, 60 insertions(+), 45 deletions(-) diff --git a/mobile/ios/DeightonAR/Info.plist b/mobile/ios/DeightonAR/Info.plist index 2e34cc7..ee16434 100644 --- a/mobile/ios/DeightonAR/Info.plist +++ b/mobile/ios/DeightonAR/Info.plist @@ -23,7 +23,7 @@ CFBundleSignature ???? CFBundleVersion - 20180514.0 + 20180514.1 LSRequiresIPhoneOS NSAppTransportSecurity diff --git a/mobile/package-lock.json b/mobile/package-lock.json index f23fdcc..5467cf3 100644 --- a/mobile/package-lock.json +++ b/mobile/package-lock.json @@ -5109,9 +5109,9 @@ } }, "react-form-binder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.0.tgz", - "integrity": "sha512-ihqbA3sp8eOOvjN2cSWOC7pfK+ukuRW5+dgpbrDJKnH/wgJ0LSMaJg2d/lX8bc0XO7+KxRJi7mBdizvCT1qhgQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.1.tgz", + "integrity": "sha512-QOIO7dd6s+zvw6V3JdaWbuCKm6OwunOemuvR7ds98nnPoUXXZ3Fv4SLRGkt3GcI97a5PDlWvNAN/9qz571SHjA==", "requires": { "eventemitter3": "^2.0.3", "prop-types": "^15.5.10", diff --git a/mobile/package.json b/mobile/package.json index 360885b..921e928 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -23,7 +23,7 @@ "eventemitter3": "^3.1.0", "moment": "^2.22.1", "react": "^16.3.2", - "react-form-binder": "^2.0.0", + "react-form-binder": "^2.0.1", "react-native": "^0.55.4", "react-native-fs": "^2.9.12", "react-native-image-picker": "^0.26.7", diff --git a/mobile/src/version.js b/mobile/src/version.js index 7b61b6f..f6b250d 100644 --- a/mobile/src/version.js +++ b/mobile/src/version.js @@ -1,6 +1,6 @@ export const versionInfo = { version: '1.0.0', - fullVersion: '1.0.0-20180514.0', + fullVersion: '1.0.0-20180514.1', title: 'Deighton AR System', copyright: '© 2018, Kingston Software Solutions.', supportEmail: 'support@kss.us.com', diff --git a/server/src/version.js b/server/src/version.js index 7b61b6f..f6b250d 100644 --- a/server/src/version.js +++ b/server/src/version.js @@ -1,6 +1,6 @@ export const versionInfo = { version: '1.0.0', - fullVersion: '1.0.0-20180514.0', + fullVersion: '1.0.0-20180514.1', title: 'Deighton AR System', copyright: '© 2018, Kingston Software Solutions.', supportEmail: 'support@kss.us.com', diff --git a/version.json5 b/version.json5 index 85e40c2..aa5c338 100644 --- a/version.json5 +++ b/version.json5 @@ -18,7 +18,7 @@ minor: 0, patch: 0, build: 20180514, - revision: 0, + revision: 1, sequence: 1, tz: "America/Los_Angeles", title: "Deighton AR System", diff --git a/website/package-lock.json b/website/package-lock.json index b8e9ebb..28ee973 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -14167,9 +14167,9 @@ } }, "react-form-binder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.0.tgz", - "integrity": "sha512-ihqbA3sp8eOOvjN2cSWOC7pfK+ukuRW5+dgpbrDJKnH/wgJ0LSMaJg2d/lX8bc0XO7+KxRJi7mBdizvCT1qhgQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.1.tgz", + "integrity": "sha512-QOIO7dd6s+zvw6V3JdaWbuCKm6OwunOemuvR7ds98nnPoUXXZ3Fv4SLRGkt3GcI97a5PDlWvNAN/9qz571SHjA==", "requires": { "eventemitter3": "^2.0.3", "prop-types": "^15.5.10", diff --git a/website/package.json b/website/package.json index 16d0b20..d281d17 100644 --- a/website/package.json +++ b/website/package.json @@ -12,7 +12,7 @@ "radium": "^0.22.0", "react": "^16.2.0", "react-dom": "^16.2.0", - "react-form-binder": "^2.0.0", + "react-form-binder": "^2.0.1", "react-router-dom": "^4.1.1", "regexp-pattern": "^1.0.4", "socket.io-client": "^2.0.3" diff --git a/website/src/MasterDetail/MasterDetail.js b/website/src/MasterDetail/MasterDetail.js index ebdd2fe..4918631 100644 --- a/website/src/MasterDetail/MasterDetail.js +++ b/website/src/MasterDetail/MasterDetail.js @@ -16,7 +16,7 @@ export class MasterDetail extends Component { updateItem: PropTypes.func.isRequired, createItem: PropTypes.func.isRequired, deleteItem: PropTypes.func.isRequired, - sort: PropTypes.func.isRequired, + listSort: PropTypes.func.isRequired, detailCallbacks: PropTypes.object, listData: PropTypes.func, children: PropTypes.element, @@ -44,7 +44,7 @@ export class MasterDetail extends Component { this.props .listItems() .then((list) => { - this.setState({ items: list.items }) + this.setState({ items: list.items.sort(this.props.listSort) }) const { history } = this.props const search = new URLSearchParams(history.location.search) @@ -68,10 +68,6 @@ export class MasterDetail extends Component { }) } - get selectedItem() { - return this.state.selectedItem - } - @autobind showWait(message) { this.setState({ @@ -91,18 +87,22 @@ export class MasterDetail extends Component { @autobind showMessage(message, detail) { this.setState({ - icon: "thumb", - message, - detail, + messageModal: { + icon: "thumb", + message, + detail, + }, }) } @autobind showErrorMessage(message, detail) { this.setState({ - icon: "hand", - message, - detail, + messageModal: { + icon: "hand", + message, + detail, + }, }) } @@ -116,6 +116,18 @@ export class MasterDetail extends Component { }) } + @autobind + hideYesNo() { + this.setState({ + yesNoModal: null, + }) + } + + @autobind + getSelectedItem() { + return this.state.selectedItem + } + @autobind removeUnfinishedNewItem() { let items = this.state.items @@ -178,7 +190,7 @@ export class MasterDetail extends Component { this.setState({ items: this.state.items .map((item) => (!item._id ? createdItem : item)) - .sort(this.props.sort), + .sort(this.props.listSort), modified: false, selectedItem: createdItem, }) @@ -231,9 +243,7 @@ export class MasterDetail extends Component { } } - this.setState({ - yesNoModal: null, - }) + this.hideYesNo() } @autobind @@ -247,9 +257,7 @@ export class MasterDetail extends Component { delete this.nextSelectedItem } - this.setState({ - yesNoModal: null, - }) + this.hideYesNo() } @autobind @@ -312,7 +320,7 @@ export class MasterDetail extends Component { color: colorInfo.headerBorder, }} radius={sizeInfo.formBoxRadius}> - {this.state.selectedItem ? ( + {selectedItem ? ( React.createElement(this.props.form, { item: selectedItem, onSave: this.handleSave, diff --git a/website/src/Teams/Teams.js b/website/src/Teams/Teams.js index cf4422e..08f5ca8 100644 --- a/website/src/Teams/Teams.js +++ b/website/src/Teams/Teams.js @@ -20,7 +20,7 @@ export class Teams extends Component { updateItem={api.updateTeam} createItem={api.createTeam} deleteItem={api.deleteTeam} - sort={(a, b) => a.name.localeCompare(b.name)} + listSort={(a, b) => a.name.localeCompare(b.name)} listData={(team) => ({ icon: "team", text: team.name, diff --git a/website/src/Users/UserForm.js b/website/src/Users/UserForm.js index 9f2a5e1..a16d029 100644 --- a/website/src/Users/UserForm.js +++ b/website/src/Users/UserForm.js @@ -57,9 +57,9 @@ export class UserForm extends React.Component { isValid: true, }, administrator: { - isValid: (r, v) => true, - initValue: false, isDisabled: (r) => api.loggedInUser._id === r._id, // Adding a new user + isValid: true, + initValue: false, alwaysGet: true, }, remove: { @@ -274,7 +274,7 @@ export class UserForm extends React.Component { diff --git a/website/src/Users/Users.js b/website/src/Users/Users.js index ea61e75..2a7fa9d 100644 --- a/website/src/Users/Users.js +++ b/website/src/Users/Users.js @@ -21,20 +21,21 @@ export class Users extends Component { @autobind handleChangeEmail() { this.setState({ - changeEmailModal: { oldEmail: this.state.selectedUser.email }, + changeEmailModal: { oldEmail: this.masterDetail.getSelectedItem().email }, }) } @autobind handleSendPasswordReset() { + const selectedItem = this.masterDetail.getSelectedItem() this.setState({ waitModal: "Sending Password Reset Email..." }) api - .sendResetPassword(this.state.selectedUser.email) + .sendResetPassword(selectedItem.email) .then(() => { this.masterDetail.hideWait() this.masterDetail.showMessage( `An email has been sent to '${ - this.masterDetail.selectedItem.email + selectedItem.email }' with instructions on how to reset their password` ) }) @@ -49,14 +50,17 @@ export class Users extends Component { @autobind handleResendEmail() { + const selectedItem = this.masterDetail.getSelectedItem() this.masterDetail.showWait("Resending Email...") api - .sendConfirmEmail({ existingEmail: this.masterDetail.selectedItem.email }) + .sendConfirmEmail({ + existingEmail: selectedItem.email, + }) .then(() => { this.masterDetail.hideWait() this.masterDetail.showMessage( `An email has been sent to '${ - this.masterDetail.selectedItem.email + selectedItem.email }' with further instructions.` ) }) @@ -78,10 +82,13 @@ export class Users extends Component { this.setState({ waitModal: { message: "Requesting Email Change..." }, }) - if (this.state.selectedUser) { + + const selectedItem = this.masterDetail.getSelectedItem() + + if (selectedItem) { api .sendConfirmEmail({ - existingEmail: this.state.selectedUser.email, + existingEmail: selectedItem.email, newEmail, }) .then(() => { @@ -116,7 +123,7 @@ export class Users extends Component { onResendEmail: this.handleResendEmail, onResetPassword: this.handleSendPasswordReset, }} - sort={(a, b) => 0} + listSort={(a, b) => a.lastName.localeCompare(b.lastName)} listData={(user) => ({ icon: user.administrator ? "admin" : "profile", text: user.firstName + " " + user.lastName, diff --git a/website/src/version.js b/website/src/version.js index 7b61b6f..f6b250d 100644 --- a/website/src/version.js +++ b/website/src/version.js @@ -1,6 +1,6 @@ export const versionInfo = { version: '1.0.0', - fullVersion: '1.0.0-20180514.0', + fullVersion: '1.0.0-20180514.1', title: 'Deighton AR System', copyright: '© 2018, Kingston Software Solutions.', supportEmail: 'support@kss.us.com',