ChangePasswordForm.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. state: State = {
  17. oldPassword: '',
  18. newPassword: '',
  19. confirmNew: '',
  20. };
  21. onOldPasswordChange = (oldPassword: string) => {
  22. this.setState({ oldPassword });
  23. };
  24. onNewPasswordChange = (newPassword: string) => {
  25. this.setState({ newPassword });
  26. };
  27. onConfirmPasswordChange = (confirmNew: string) => {
  28. this.setState({ confirmNew });
  29. };
  30. onSubmitChangePassword = (event: MouseEvent<HTMLInputElement>) => {
  31. event.preventDefault();
  32. this.props.onChangePassword({ ...this.state });
  33. };
  34. render() {
  35. const { oldPassword, newPassword, confirmNew } = this.state;
  36. const { isSaving } = this.props;
  37. const { ldapEnabled, authProxyEnabled } = config;
  38. if (ldapEnabled || authProxyEnabled) {
  39. return <p>You cannot change password when ldap or auth proxy authentication is enabled.</p>;
  40. }
  41. return (
  42. <form name="userForm" className="gf-form-group">
  43. <div className="gf-form max-width-30">
  44. <PasswordInput label="Old Password" onChange={this.onOldPasswordChange} value={oldPassword} />
  45. </div>
  46. <div className="gf-form max-width-30">
  47. <PasswordInput label="New Password" onChange={this.onNewPasswordChange} value={newPassword} />
  48. </div>
  49. <div className="gf-form max-width-30">
  50. <PasswordInput label="Confirm Password" onChange={this.onConfirmPasswordChange} value={confirmNew} />
  51. </div>
  52. <div className="gf-form-button-row">
  53. <Button variant="primary" onClick={this.onSubmitChangePassword} disabled={isSaving}>
  54. Change Password
  55. </Button>
  56. <LinkButton variant="transparent" href={`${config.appSubUrl}/profile`}>
  57. Cancel
  58. </LinkButton>
  59. </div>
  60. </form>
  61. );
  62. }
  63. }
  64. export default ChangePasswordForm;