mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-15 01:38:59 +05:30
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import React, { MouseEventHandler } from 'react';
|
|
import logger from 'app/services/logger';
|
|
import { disable as disableMFA } from 'app/services/api/mfa';
|
|
import { FormModel } from 'app/components/ui/form';
|
|
|
|
import Context from '../Context';
|
|
import MfaDisableForm from './MfaDisableForm';
|
|
import MfaStatus from './MfaStatus';
|
|
|
|
export default class MfaDisable extends React.Component<
|
|
{
|
|
onSubmit: (form: FormModel, sendData: () => Promise<void>) => Promise<void>;
|
|
onComplete: () => void;
|
|
},
|
|
{
|
|
showForm: boolean;
|
|
}
|
|
> {
|
|
static contextType = Context;
|
|
/* TODO: use declare */ context: React.ContextType<typeof Context>;
|
|
|
|
state = {
|
|
showForm: false,
|
|
};
|
|
|
|
render() {
|
|
const { showForm } = this.state;
|
|
|
|
return showForm ? <MfaDisableForm onSubmit={this.onSubmit} /> : <MfaStatus onProceed={this.onProceed} />;
|
|
}
|
|
|
|
onProceed: MouseEventHandler<HTMLAnchorElement> = (event) => {
|
|
event.preventDefault();
|
|
this.setState({ showForm: true });
|
|
};
|
|
|
|
onSubmit = (form: FormModel) => {
|
|
return this.props
|
|
.onSubmit(form, () => {
|
|
const { totp, password } = form.serialize() as {
|
|
totp: string;
|
|
password?: string;
|
|
};
|
|
|
|
return disableMFA(this.context.userId, totp, password);
|
|
})
|
|
.then(() => this.props.onComplete())
|
|
.catch((resp) => {
|
|
const { errors } = resp || {};
|
|
|
|
if (errors) {
|
|
return Promise.reject(errors);
|
|
}
|
|
|
|
logger.error('MFA: Unexpected disable form result', {
|
|
resp,
|
|
});
|
|
});
|
|
};
|
|
}
|