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',