aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/settings/user/EditUserForm.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/settings/user/EditUserForm.tsx')
-rw-r--r--src/components/settings/user/EditUserForm.tsx133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/components/settings/user/EditUserForm.tsx b/src/components/settings/user/EditUserForm.tsx
new file mode 100644
index 000000000..3b604a79f
--- /dev/null
+++ b/src/components/settings/user/EditUserForm.tsx
@@ -0,0 +1,133 @@
1import { Component, FormEvent, FormEventHandler, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { Link } from 'react-router-dom';
5import { noop } from 'lodash';
6import Input from '../../ui/input/index';
7import Form from '../../../lib/Form';
8import Button from '../../ui/button';
9import Radio from '../../ui/Radio';
10import Infobox from '../../ui/Infobox';
11import { H2 } from '../../ui/headline';
12
13const messages = defineMessages({
14 headline: {
15 id: 'settings.account.headline',
16 defaultMessage: 'Account',
17 },
18 headlineProfile: {
19 id: 'settings.account.headlineProfile',
20 defaultMessage: 'Update profile',
21 },
22 headlineAccount: {
23 id: 'settings.account.headlineAccount',
24 defaultMessage: 'Account information',
25 },
26 headlinePassword: {
27 id: 'settings.account.headlinePassword',
28 defaultMessage: 'Change password',
29 },
30 successInfo: {
31 id: 'settings.account.successInfo',
32 defaultMessage: 'Your changes have been saved',
33 },
34 buttonSave: {
35 id: 'settings.account.buttonSave',
36 defaultMessage: 'Update profile',
37 },
38});
39
40interface IProps extends WrappedComponentProps {
41 status: string[];
42 form: Form;
43 onSubmit: FormEventHandler<HTMLFormElement>;
44 isSaving: boolean;
45}
46
47@observer
48class EditUserForm extends Component<IProps> {
49 submit(e: FormEvent<HTMLFormElement>): void {
50 e.preventDefault();
51 this.props.form.submit({
52 onSuccess: form => {
53 const values = form.values();
54 this.props.onSubmit(values);
55 },
56 onError: () => {},
57 });
58 }
59
60 render(): ReactElement {
61 const {
62 // user,
63 status,
64 form,
65 isSaving,
66 intl,
67 } = this.props;
68
69 return (
70 <div className="settings__main">
71 <div className="settings__header">
72 <span className="settings__header-item">
73 <Link to="/settings/user">
74 {intl.formatMessage(messages.headline)}
75 </Link>
76 </span>
77 <span className="separator" />
78 <span className="settings__header-item">
79 {intl.formatMessage(messages.headlineProfile)}
80 </span>
81 </div>
82 <div className="settings__body">
83 <form onSubmit={e => this.submit(e)} id="form">
84 {status.length > 0 && status.includes('data-updated') && (
85 <Infobox type="success" icon="checkbox-marked-circle-outline">
86 {intl.formatMessage(messages.successInfo)}
87 </Infobox>
88 )}
89 <H2>{intl.formatMessage(messages.headlineAccount)}</H2>
90 <div className="grid__row">
91 <Input {...form.$('firstname').bind()} focus />
92 <Input {...form.$('lastname').bind()} />
93 </div>
94 <Input {...form.$('email').bind()} />
95 <Radio field={form.$('accountType')} className="" />
96 {form.$('accountType').value === 'company' && (
97 <Input {...form.$('organization').bind()} />
98 )}
99 <H2>{intl.formatMessage(messages.headlinePassword)}</H2>
100 <Input {...form.$('oldPassword').bind()} showPasswordToggle />
101 <Input
102 {...form.$('newPassword').bind()}
103 showPasswordToggle
104 scorePassword
105 />
106 </form>
107 </div>
108 <div className="settings__controls">
109 {/* Save Button */}
110 {isSaving ? (
111 <Button
112 type="submit"
113 label={intl.formatMessage(messages.buttonSave)}
114 loaded={!isSaving}
115 buttonType="secondary"
116 disabled
117 onClick={noop}
118 />
119 ) : (
120 <Button
121 type="submit"
122 label={intl.formatMessage(messages.buttonSave)}
123 htmlForm="form"
124 onClick={noop}
125 />
126 )}
127 </div>
128 </div>
129 );
130 }
131}
132
133export default injectIntl(EditUserForm);