Repository URL to install this package:
|
Version:
0.0.15 ▾
|
@skava/packages
/
features
/
Authentication
/
ResetFlow
/
Forms
/
ResetPasswordByEmailOrPhoneForm.js
|
|---|
import * as tslib_1 from "tslib";
import React from 'react';
import { isFunction } from 'exotic';
import { observer } from 'xmobx/mobx-react';
import { oneRouter } from '@skava/router';
import { FormState, ObserverForm } from '@skava/packages/ui/forms';
import { isValidTelephone } from '@skava/packages/ui/forms';
import { ContinueButton } from '@skava/packages/ui';
import { isErrorLikeResponse } from '@skava/is-error-like-response';
import { toastMessage } from '@skava/packages/core/notifications';
import { errorContainer } from '@skava/packages/core/notifications';
import { sessionContainer } from '@skava/packages/core/auth/session/container';
import { userContainer } from '@skava/packages/core/auth/user';
import { wording, errorKeyWords } from '../fixture';
import { toStatus } from '../state/deps';
class ResetPasswordByEmailOrPhone extends FormState {
constructor() {
super(...arguments);
this.name = 'ResetPasswordByEmailOrPhone';
this.inputsList = [
{
identity: 'email',
type: 'text',
value: '',
className: 'reset-password-email-address',
name: 'email',
labelText: wording.email,
maxLength: 50,
wrapperClassName: 'reset-password-email-address-wrapper',
validationType: 'emailOrPhone',
errorMessageFor: 'emailAndPhone',
qa: 'qa-reset-email-textbox',
ariaLabel: wording.enterEmail,
},
];
}
}
const resetPasswordByEmailOrPhone = new ResetPasswordByEmailOrPhone();
function isErrorLikeResponseForUser(response) {
const status = toStatus(response).toLowerCase();
const findErrorResponse = (key) => {
if (status.includes(key)) {
return true;
}
else {
return false;
}
};
const result = errorKeyWords.find(findErrorResponse) || isErrorLikeResponse(response);
return !!result;
}
const fields = ['email'];
let CreateNewPasswordForm = class CreateNewPasswordForm extends ObserverForm {
constructor() {
super(...arguments);
this.shouldResetFormOnUnmount = true;
this.fromResponseToToastMessage = (response) => {
const status = toStatus(response).toLowerCase();
const message = isErrorLikeResponseForUser(response) ? status : toastMessage.unregisteredAccount;
return message;
};
this.updateToastMessageWith = (response) => {
const errorMessage = this.fromResponseToToastMessage(response);
const error = {
errorMessage,
};
errorContainer.setError(error);
};
// @see https://bitbucket.org/skava-admin/reference-store/pull-requests/2043/dev/diff?w=1#Lsrc/views/widgets/Authentication/ResetFlow/wr/ResetPasswordByEmailOrPhone.tsxF92
//
// since mail setup is not done, resetParam is providedin the response of reset by email API
// with the resetParam received, navigation to reset password page is done in the method navigateToResetPassword()
this.navigateToResetPassword = (response) => {
const resetParam = response.resetParam;
if (resetParam) {
// @todo https://bitbucket.org/skava-admin/reference-store/pull-requests/2043/dev/diff?w=1#Lsrc/views/widgets/Authentication/ResetFlow/wr/ResetPasswordByEmailOrPhone.tsxT100
oneRouter.forceUpdate('/signin');
}
};
this.makeResetCall = async (serialized) => {
let response = {};
if (isValidTelephone(serialized.email)) {
const isResetCode = true;
response = await sessionContainer.resetPasswordThroughSms(serialized);
this.updateToastMessageWith(response);
if (isFunction(this.props.onResetSubmit)) {
this.props.onResetSubmit(isResetCode, serialized);
}
}
else {
const { email } = serialized;
const resetByEmailParams = {
email,
};
response = await sessionContainer.resetPasswordThroughEmail(resetByEmailParams);
this.updateToastMessageWith(response);
}
this.navigateToResetPassword(response);
};
this.handleSubmit = (event) => {
// event.persist()
event.preventDefault();
if (this.validateForm()) {
const serialized = this.state.toSerialized();
console.warn(serialized);
this.makeResetCall(serialized);
// this.props.onSecurityCode(serialized);
}
else {
console.warn('Form has invalid inputs!');
}
};
}
getFields(inputState, item) {
const { userinfo } = userContainer;
if (inputState.identity === item && inputState.value !== userinfo[item]) {
inputState.setValue(userinfo[item]);
this.forceUpdate();
}
}
onPrefil(inputState) {
const preFilledFields = fields.map(this.getFields.bind(this, inputState));
}
render() {
return (React.createElement(this.Form, { setRef: this.state.setFormReference, "data-qa": "qa-email-container" },
this.renderInputList(),
React.createElement(ContinueButton, { className: "reset-continue-button", onClick: this.handleSubmit, text: wording.sendResetLink, qa: "qa-reset-password-button" })));
}
};
CreateNewPasswordForm.defaultProps = {
state: resetPasswordByEmailOrPhone,
};
CreateNewPasswordForm = tslib_1.__decorate([
observer
], CreateNewPasswordForm);
export { CreateNewPasswordForm };
export default CreateNewPasswordForm;
//# sourceMappingURL=ResetPasswordByEmailOrPhoneForm.js.map