ChangePasswordForm.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { PureComponent, MouseEvent } from 'react';
  2. import config from 'app/core/config';
  3. import { Button, LinkButton } from '@grafana/ui';
  4. import { ChangePasswordFields } from 'app/core/utils/UserProvider';
  5. import { PasswordInput } from 'app/core/components/PasswordInput/PasswordInput';
  6. export interface Props {
  7. isSaving: boolean;
  8. onChangePassword: (payload: ChangePasswordFields) => void;
  9. }
  10. export interface State {
  11. oldPassword: string;
  12. newPassword: string;
  13. confirmNew: string;
  14. }
  15. export class ChangePasswordForm extends PureComponent<Props, State> {
  16. constructor(props: Props) {
  17. super(props);
  18. this.state = {
  19. oldPassword: '',
  20. newPassword: '',
  21. confirmNew: '',
  22. };
  23. }
  24. onOldPasswordChange = (oldPassword: string) => {
  25. this.setState({ oldPassword });
  26. };
  27. onNewPasswordChange = (newPassword: string) => {
  28. this.setState({ newPassword });
  29. };
  30. onConfirmPasswordChange = (confirmNew: string) => {
  31. this.setState({ confirmNew });
  32. };
  33. onSubmitChangePassword = (event: MouseEvent<HTMLInputElement>) => {
  34. event.preventDefault();
  35. this.props.onChangePassword({ ...this.state });
  36. };
  37. render() {
  38. const { oldPassword, newPassword, confirmNew } = this.state;
  39. const { isSaving } = this.props;
  40. const { ldapEnabled, authProxyEnabled } = config;
  41. if (ldapEnabled || authProxyEnabled) {
  42. return <p>You cannot change password when ldap or auth proxy authentication is enabled.</p>;
  43. }
  44. return (
  45. <form name="userForm" className="gf-form-group">
  46. <div className="gf-form max-width-30">
  47. <PasswordInput label="Old Password" onChange={this.onOldPasswordChange} value={oldPassword} />
  48. </div>
  49. <div className="gf-form max-width-30">
  50. <PasswordInput label="New Password" onChange={this.onNewPasswordChange} value={newPassword} />
  51. </div>
  52. <div className="gf-form max-width-30">
  53. <PasswordInput label="Confirm Password" onChange={this.onConfirmPasswordChange} value={confirmNew} />
  54. </div>
  55. <div className="gf-form-button-row">
  56. <Button variant="primary" onClick={this.onSubmitChangePassword} disabled={isSaving}>
  57. Change Password
  58. </Button>
  59. <LinkButton variant="transparent" href={`${config.appSubUrl}/profile`}>
  60. Cancel
  61. </LinkButton>
  62. </div>
  63. </form>
  64. );
  65. }
  66. }
  67. export default ChangePasswordForm;