cspace-ui
Version:
CollectionSpace user interface for browsers
216 lines (184 loc) • 6.11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _get = _interopRequireDefault(require("lodash/get"));
var _reactIntl = require("react-intl");
var _cspaceInput = require("cspace-input");
var _Notification = _interopRequireDefault(require("../notification/Notification"));
var _getErrorDescription = _interopRequireDefault(require("../../helpers/getErrorDescription"));
var _validationHelpers = require("../../helpers/validationHelpers");
var _errorCodes = require("../../constants/errorCodes");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
const {
Button,
LineInput
} = _cspaceInput.components;
const messages = (0, _reactIntl.defineMessages)({
prompt: {
"id": "passwordResetRequestForm.prompt",
"defaultMessage": "Enter your email address to request a password reset."
},
submit: {
"id": "passwordResetRequestForm.submit",
"defaultMessage": "Submit"
},
success: {
"id": "passwordResetRequestForm.success",
"defaultMessage": "An email has been sent to {email}. Follow the instructions in the email to finish resetting your password."
},
error: {
"id": "passwordResetRequestForm.error",
"defaultMessage": "An error occurred while attempting to request the password reset: {detail}"
},
errorNotFound: {
"id": "passwordResetRequestForm.errorNotFound",
"defaultMessage": "Could not locate an account associated with the email {email}."
},
errorMissingEmail: {
"id": "passwordResetRequestForm.errorMissingEmail",
"defaultMessage": "Please enter an email address."
},
errorInvalidEmail: {
"id": "passwordResetRequestForm.errorInvalidEmail",
"defaultMessage": "{email} is not a valid email address."
}
});
const propTypes = {
email: _propTypes.default.string,
requestReset: _propTypes.default.func.isRequired
};
class PasswordResetRequestForm extends _react.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.handleUsernameCommit = this.handleUsernameCommit.bind(this);
this.state = {
isPending: false,
email: props.email
};
}
handleSubmit(event) {
event.preventDefault();
const {
email
} = this.state;
if (!email) {
this.setState({
error: {
code: _errorCodes.ERR_MISSING_EMAIL
}
});
return;
}
if (!(0, _validationHelpers.isValidEmail)(email)) {
this.setState({
error: {
code: _errorCodes.ERR_INVALID_EMAIL
}
});
return;
}
const {
requestReset
} = this.props;
this.setState({
error: null,
isPending: true,
isSuccess: false
});
requestReset(email).then(() => {
this.setState({
error: null,
isPending: false,
isSuccess: true
});
}).catch(error => {
this.setState({
error,
isPending: false,
isSuccess: false
});
});
}
handleUsernameCommit(path, value) {
this.setState({
email: value
});
}
renderError() {
const {
email,
error
} = this.state;
if (!error) {
return undefined;
}
let message;
const values = {
email
};
const {
code
} = error;
if (code === _errorCodes.ERR_INVALID_EMAIL) {
message = messages.errorInvalidEmail;
} else if (code === _errorCodes.ERR_MISSING_EMAIL) {
message = messages.errorMissingEmail;
} else {
const statusCode = (0, _get.default)(error, ['response', 'status']);
if (statusCode === 404) {
message = messages.errorNotFound;
}
}
if (!message) {
message = messages.error;
values.detail = (0, _getErrorDescription.default)(error);
}
return _react.default.createElement(_Notification.default, {
id: "passwordResetRequestForm.error",
items: [{
message,
values
}],
showCloseButton: false,
status: "error"
});
}
render() {
const {
isSuccess,
isPending,
email
} = this.state;
if (isSuccess) {
return _react.default.createElement(_reactIntl.FormattedMessage, _extends({}, messages.success, {
values: {
email
}
}));
}
return _react.default.createElement("form", {
onSubmit: this.handleSubmit
}, _react.default.createElement("p", null, _react.default.createElement("label", {
htmlFor: "email"
}, _react.default.createElement(_reactIntl.FormattedMessage, messages.prompt))), _react.default.createElement("div", null, _react.default.createElement(LineInput, {
autoComplete: "email",
id: "email",
name: "email",
type: "text",
value: email,
onCommit: this.handleUsernameCommit
})), _react.default.createElement(Button, {
type: "submit",
disabled: isPending
}, _react.default.createElement(_reactIntl.FormattedMessage, messages.submit)), this.renderError());
}
}
exports.default = PasswordResetRequestForm;
PasswordResetRequestForm.propTypes = propTypes;