Fix change email & reset password buttons. Fix sorting of lists. Fixed admin checkbox bug

This commit is contained in:
John Lyon-Smith
2018-05-14 15:13:48 -07:00
parent 5b4798b196
commit f88bcbdf92
13 changed files with 60 additions and 45 deletions

View File

@@ -23,7 +23,7 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>20180514.0</string> <string>20180514.1</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSAppTransportSecurity</key> <key>NSAppTransportSecurity</key>

View File

@@ -5109,9 +5109,9 @@
} }
}, },
"react-form-binder": { "react-form-binder": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.0.tgz", "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.1.tgz",
"integrity": "sha512-ihqbA3sp8eOOvjN2cSWOC7pfK+ukuRW5+dgpbrDJKnH/wgJ0LSMaJg2d/lX8bc0XO7+KxRJi7mBdizvCT1qhgQ==", "integrity": "sha512-QOIO7dd6s+zvw6V3JdaWbuCKm6OwunOemuvR7ds98nnPoUXXZ3Fv4SLRGkt3GcI97a5PDlWvNAN/9qz571SHjA==",
"requires": { "requires": {
"eventemitter3": "^2.0.3", "eventemitter3": "^2.0.3",
"prop-types": "^15.5.10", "prop-types": "^15.5.10",

View File

@@ -23,7 +23,7 @@
"eventemitter3": "^3.1.0", "eventemitter3": "^3.1.0",
"moment": "^2.22.1", "moment": "^2.22.1",
"react": "^16.3.2", "react": "^16.3.2",
"react-form-binder": "^2.0.0", "react-form-binder": "^2.0.1",
"react-native": "^0.55.4", "react-native": "^0.55.4",
"react-native-fs": "^2.9.12", "react-native-fs": "^2.9.12",
"react-native-image-picker": "^0.26.7", "react-native-image-picker": "^0.26.7",

View File

@@ -1,6 +1,6 @@
export const versionInfo = { export const versionInfo = {
version: '1.0.0', version: '1.0.0',
fullVersion: '1.0.0-20180514.0', fullVersion: '1.0.0-20180514.1',
title: 'Deighton AR System', title: 'Deighton AR System',
copyright: '© 2018, Kingston Software Solutions.', copyright: '© 2018, Kingston Software Solutions.',
supportEmail: 'support@kss.us.com', supportEmail: 'support@kss.us.com',

View File

@@ -1,6 +1,6 @@
export const versionInfo = { export const versionInfo = {
version: '1.0.0', version: '1.0.0',
fullVersion: '1.0.0-20180514.0', fullVersion: '1.0.0-20180514.1',
title: 'Deighton AR System', title: 'Deighton AR System',
copyright: '© 2018, Kingston Software Solutions.', copyright: '© 2018, Kingston Software Solutions.',
supportEmail: 'support@kss.us.com', supportEmail: 'support@kss.us.com',

View File

@@ -18,7 +18,7 @@
minor: 0, minor: 0,
patch: 0, patch: 0,
build: 20180514, build: 20180514,
revision: 0, revision: 1,
sequence: 1, sequence: 1,
tz: "America/Los_Angeles", tz: "America/Los_Angeles",
title: "Deighton AR System", title: "Deighton AR System",

View File

@@ -14167,9 +14167,9 @@
} }
}, },
"react-form-binder": { "react-form-binder": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.0.tgz", "resolved": "https://registry.npmjs.org/react-form-binder/-/react-form-binder-2.0.1.tgz",
"integrity": "sha512-ihqbA3sp8eOOvjN2cSWOC7pfK+ukuRW5+dgpbrDJKnH/wgJ0LSMaJg2d/lX8bc0XO7+KxRJi7mBdizvCT1qhgQ==", "integrity": "sha512-QOIO7dd6s+zvw6V3JdaWbuCKm6OwunOemuvR7ds98nnPoUXXZ3Fv4SLRGkt3GcI97a5PDlWvNAN/9qz571SHjA==",
"requires": { "requires": {
"eventemitter3": "^2.0.3", "eventemitter3": "^2.0.3",
"prop-types": "^15.5.10", "prop-types": "^15.5.10",

View File

@@ -12,7 +12,7 @@
"radium": "^0.22.0", "radium": "^0.22.0",
"react": "^16.2.0", "react": "^16.2.0",
"react-dom": "^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", "react-router-dom": "^4.1.1",
"regexp-pattern": "^1.0.4", "regexp-pattern": "^1.0.4",
"socket.io-client": "^2.0.3" "socket.io-client": "^2.0.3"

View File

@@ -16,7 +16,7 @@ export class MasterDetail extends Component {
updateItem: PropTypes.func.isRequired, updateItem: PropTypes.func.isRequired,
createItem: PropTypes.func.isRequired, createItem: PropTypes.func.isRequired,
deleteItem: PropTypes.func.isRequired, deleteItem: PropTypes.func.isRequired,
sort: PropTypes.func.isRequired, listSort: PropTypes.func.isRequired,
detailCallbacks: PropTypes.object, detailCallbacks: PropTypes.object,
listData: PropTypes.func, listData: PropTypes.func,
children: PropTypes.element, children: PropTypes.element,
@@ -44,7 +44,7 @@ export class MasterDetail extends Component {
this.props this.props
.listItems() .listItems()
.then((list) => { .then((list) => {
this.setState({ items: list.items }) this.setState({ items: list.items.sort(this.props.listSort) })
const { history } = this.props const { history } = this.props
const search = new URLSearchParams(history.location.search) const search = new URLSearchParams(history.location.search)
@@ -68,10 +68,6 @@ export class MasterDetail extends Component {
}) })
} }
get selectedItem() {
return this.state.selectedItem
}
@autobind @autobind
showWait(message) { showWait(message) {
this.setState({ this.setState({
@@ -91,18 +87,22 @@ export class MasterDetail extends Component {
@autobind @autobind
showMessage(message, detail) { showMessage(message, detail) {
this.setState({ this.setState({
icon: "thumb", messageModal: {
message, icon: "thumb",
detail, message,
detail,
},
}) })
} }
@autobind @autobind
showErrorMessage(message, detail) { showErrorMessage(message, detail) {
this.setState({ this.setState({
icon: "hand", messageModal: {
message, icon: "hand",
detail, message,
detail,
},
}) })
} }
@@ -116,6 +116,18 @@ export class MasterDetail extends Component {
}) })
} }
@autobind
hideYesNo() {
this.setState({
yesNoModal: null,
})
}
@autobind
getSelectedItem() {
return this.state.selectedItem
}
@autobind @autobind
removeUnfinishedNewItem() { removeUnfinishedNewItem() {
let items = this.state.items let items = this.state.items
@@ -178,7 +190,7 @@ export class MasterDetail extends Component {
this.setState({ this.setState({
items: this.state.items items: this.state.items
.map((item) => (!item._id ? createdItem : item)) .map((item) => (!item._id ? createdItem : item))
.sort(this.props.sort), .sort(this.props.listSort),
modified: false, modified: false,
selectedItem: createdItem, selectedItem: createdItem,
}) })
@@ -231,9 +243,7 @@ export class MasterDetail extends Component {
} }
} }
this.setState({ this.hideYesNo()
yesNoModal: null,
})
} }
@autobind @autobind
@@ -247,9 +257,7 @@ export class MasterDetail extends Component {
delete this.nextSelectedItem delete this.nextSelectedItem
} }
this.setState({ this.hideYesNo()
yesNoModal: null,
})
} }
@autobind @autobind
@@ -312,7 +320,7 @@ export class MasterDetail extends Component {
color: colorInfo.headerBorder, color: colorInfo.headerBorder,
}} }}
radius={sizeInfo.formBoxRadius}> radius={sizeInfo.formBoxRadius}>
{this.state.selectedItem ? ( {selectedItem ? (
React.createElement(this.props.form, { React.createElement(this.props.form, {
item: selectedItem, item: selectedItem,
onSave: this.handleSave, onSave: this.handleSave,

View File

@@ -20,7 +20,7 @@ export class Teams extends Component {
updateItem={api.updateTeam} updateItem={api.updateTeam}
createItem={api.createTeam} createItem={api.createTeam}
deleteItem={api.deleteTeam} deleteItem={api.deleteTeam}
sort={(a, b) => a.name.localeCompare(b.name)} listSort={(a, b) => a.name.localeCompare(b.name)}
listData={(team) => ({ listData={(team) => ({
icon: "team", icon: "team",
text: team.name, text: team.name,

View File

@@ -57,9 +57,9 @@ export class UserForm extends React.Component {
isValid: true, isValid: true,
}, },
administrator: { administrator: {
isValid: (r, v) => true,
initValue: false,
isDisabled: (r) => api.loggedInUser._id === r._id, // Adding a new user isDisabled: (r) => api.loggedInUser._id === r._id, // Adding a new user
isValid: true,
initValue: false,
alwaysGet: true, alwaysGet: true,
}, },
remove: { remove: {
@@ -274,7 +274,7 @@ export class UserForm extends React.Component {
<BoundCheckbox <BoundCheckbox
label={"Administrator"} label={"Administrator"}
name="administrator" name="administrator"
binder={this.state.binder} binder={binder}
/> />
</Row.Item> </Row.Item>
<Row.Item grow /> <Row.Item grow />

View File

@@ -21,20 +21,21 @@ export class Users extends Component {
@autobind @autobind
handleChangeEmail() { handleChangeEmail() {
this.setState({ this.setState({
changeEmailModal: { oldEmail: this.state.selectedUser.email }, changeEmailModal: { oldEmail: this.masterDetail.getSelectedItem().email },
}) })
} }
@autobind @autobind
handleSendPasswordReset() { handleSendPasswordReset() {
const selectedItem = this.masterDetail.getSelectedItem()
this.setState({ waitModal: "Sending Password Reset Email..." }) this.setState({ waitModal: "Sending Password Reset Email..." })
api api
.sendResetPassword(this.state.selectedUser.email) .sendResetPassword(selectedItem.email)
.then(() => { .then(() => {
this.masterDetail.hideWait() this.masterDetail.hideWait()
this.masterDetail.showMessage( this.masterDetail.showMessage(
`An email has been sent to '${ `An email has been sent to '${
this.masterDetail.selectedItem.email selectedItem.email
}' with instructions on how to reset their password` }' with instructions on how to reset their password`
) )
}) })
@@ -49,14 +50,17 @@ export class Users extends Component {
@autobind @autobind
handleResendEmail() { handleResendEmail() {
const selectedItem = this.masterDetail.getSelectedItem()
this.masterDetail.showWait("Resending Email...") this.masterDetail.showWait("Resending Email...")
api api
.sendConfirmEmail({ existingEmail: this.masterDetail.selectedItem.email }) .sendConfirmEmail({
existingEmail: selectedItem.email,
})
.then(() => { .then(() => {
this.masterDetail.hideWait() this.masterDetail.hideWait()
this.masterDetail.showMessage( this.masterDetail.showMessage(
`An email has been sent to '${ `An email has been sent to '${
this.masterDetail.selectedItem.email selectedItem.email
}' with further instructions.` }' with further instructions.`
) )
}) })
@@ -78,10 +82,13 @@ export class Users extends Component {
this.setState({ this.setState({
waitModal: { message: "Requesting Email Change..." }, waitModal: { message: "Requesting Email Change..." },
}) })
if (this.state.selectedUser) {
const selectedItem = this.masterDetail.getSelectedItem()
if (selectedItem) {
api api
.sendConfirmEmail({ .sendConfirmEmail({
existingEmail: this.state.selectedUser.email, existingEmail: selectedItem.email,
newEmail, newEmail,
}) })
.then(() => { .then(() => {
@@ -116,7 +123,7 @@ export class Users extends Component {
onResendEmail: this.handleResendEmail, onResendEmail: this.handleResendEmail,
onResetPassword: this.handleSendPasswordReset, onResetPassword: this.handleSendPasswordReset,
}} }}
sort={(a, b) => 0} listSort={(a, b) => a.lastName.localeCompare(b.lastName)}
listData={(user) => ({ listData={(user) => ({
icon: user.administrator ? "admin" : "profile", icon: user.administrator ? "admin" : "profile",
text: user.firstName + " " + user.lastName, text: user.firstName + " " + user.lastName,

View File

@@ -1,6 +1,6 @@
export const versionInfo = { export const versionInfo = {
version: '1.0.0', version: '1.0.0',
fullVersion: '1.0.0-20180514.0', fullVersion: '1.0.0-20180514.1',
title: 'Deighton AR System', title: 'Deighton AR System',
copyright: '© 2018, Kingston Software Solutions.', copyright: '© 2018, Kingston Software Solutions.',
supportEmail: 'support@kss.us.com', supportEmail: 'support@kss.us.com',