@aarhus-university/au-lib-react-components 9.11.2 → 9.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/.eslintrc +18 -18
  2. package/README.md +20 -20
  3. package/babel.config.js +6 -6
  4. package/build/dev.html +328 -328
  5. package/build/umd/all.css +2 -2
  6. package/build/umd/all.js +1 -1
  7. package/build/umd/alphabox.js +1 -1
  8. package/build/umd/auAuth.js +1 -1
  9. package/build/umd/databox.js +2 -2
  10. package/build/umd/databox.js.LICENSE.txt +5 -5
  11. package/build/umd/diagramme.js +1 -1
  12. package/build/umd/flowbox.js +1 -1
  13. package/build/umd/news.js +1 -1
  14. package/build/umd/universe.js +1 -1
  15. package/package.json +60 -60
  16. package/src/all.js +3 -3
  17. package/src/app.js +263 -263
  18. package/src/components/AUAlertComponent.js +158 -158
  19. package/src/components/AUAmountComponent.js +84 -84
  20. package/src/components/AUBannerComponent.js +99 -99
  21. package/src/components/AUCalendarComponent.js +393 -393
  22. package/src/components/AUCollapsibleComponent.js +173 -173
  23. package/src/components/AUDatepickerComponent.js +105 -105
  24. package/src/components/AUDiagrammeComponent.js +310 -310
  25. package/src/components/AUFilterCheckboxComponent.js +122 -122
  26. package/src/components/AUFocusComponent.js +55 -55
  27. package/src/components/AUModalComponent.js +94 -94
  28. package/src/components/AUPaginationComponent.js +103 -103
  29. package/src/components/AUSpinnerComponent.js +125 -125
  30. package/src/components/AutoSuggestComponent.js +132 -132
  31. package/src/components/alphabox/AlphaBoxComponent.js +140 -140
  32. package/src/components/alphabox/AlphaBoxContentComponent.js +125 -125
  33. package/src/components/context/AUUserContextComponent.js +91 -91
  34. package/src/components/context/ImpersonateComponent.js +54 -54
  35. package/src/components/databox/DataBoxAlphabetComponent.js +144 -144
  36. package/src/components/databox/DataBoxAssociationComponent.js +122 -122
  37. package/src/components/databox/DataBoxButtonComponent.js +153 -153
  38. package/src/components/databox/DataBoxComponent.js +297 -297
  39. package/src/components/databox/DataBoxGroupingComponent.js +62 -62
  40. package/src/components/databox/DataBoxSearchResultComponent.js +40 -40
  41. package/src/components/databox/DataBoxStackedAssociationComponent.js +58 -58
  42. package/src/components/databox/DataBoxSuggestionComponent.js +39 -39
  43. package/src/components/delphinus/AUAlertComponent.js +85 -85
  44. package/src/components/delphinus/AUCalendarComponent.js +487 -487
  45. package/src/components/delphinus/AUContentToggleComponent.js +32 -32
  46. package/src/components/delphinus/AUDatepickerComponent.js +164 -164
  47. package/src/components/delphinus/AULoginComponent.js +65 -65
  48. package/src/components/delphinus/AUModalComponent.js +88 -87
  49. package/src/components/delphinus/AUSpinnerComponent.js +114 -114
  50. package/src/components/delphinus/AUSubNavComponent.js +53 -53
  51. package/src/components/delphinus/AUTabbedContentComponent.js +150 -150
  52. package/src/components/delphinus/AUTableComponent.js +28 -28
  53. package/src/components/delphinus/AUToastComponent.js +91 -91
  54. package/src/components/delphinus/AUToolbarComponent.js +48 -48
  55. package/src/components/delphinus/hooks.js +25 -25
  56. package/src/components/flowbox/FlowBoxComponent.js +126 -126
  57. package/src/components/flowbox/FlowBoxPhoneComponent.js +106 -106
  58. package/src/components/form/AUMobilePrefixComponent.js +18 -18
  59. package/src/components/form/AUReceiptComponent.js +40 -40
  60. package/src/components/form/AUSubmitButtonContainerComponent.js +39 -39
  61. package/src/components/news/EventLayout1Component.js +94 -94
  62. package/src/components/news/EventLayout2Component.js +90 -90
  63. package/src/components/news/EventLayout3Component.js +68 -68
  64. package/src/components/news/NewsCategoriesComponent.js +21 -21
  65. package/src/components/news/NewsCollageBannerComponent.js +71 -71
  66. package/src/components/news/NewsCollageBannerRSSComponent.js +79 -79
  67. package/src/components/news/NewsColumnsComponent.js +125 -125
  68. package/src/components/news/NewsLanguageChangeComponent.js +74 -74
  69. package/src/components/news/NewsLayout1Component.js +80 -80
  70. package/src/components/news/NewsLayout2Component.js +80 -80
  71. package/src/components/news/NewsLayout3Component.js +81 -81
  72. package/src/components/news/NewsLayout4Component.js +80 -80
  73. package/src/components/news/NewsLayout5Component.js +61 -61
  74. package/src/components/news/NewsLayout6Component.js +55 -55
  75. package/src/components/news/NewsLayout7Component.js +58 -58
  76. package/src/components/news/NewsLayout8Component.js +57 -57
  77. package/src/components/news/NewsListComponent.js +291 -291
  78. package/src/components/news/NewsPopUpComponent.js +591 -591
  79. package/src/components/news/NewsRSSComponent.js +74 -74
  80. package/src/components/news/NewsSocialComponent.js +104 -104
  81. package/src/components/news/NewsSubHeaderComponent.js +19 -19
  82. package/src/components/password/AUChangePasswordComponent.js +177 -177
  83. package/src/components/password/AUCurrentPasswordComponent.js +72 -72
  84. package/src/components/password/AUNewPasswordComponent.js +143 -143
  85. package/src/components/password/AUPasswordActions.js +101 -101
  86. package/src/components/password/AUPasswordHooks.js +47 -47
  87. package/src/components/password/AUPasswordReducer.js +78 -78
  88. package/src/components/password/AUPasswordRequirementsComponent.js +29 -29
  89. package/src/components/profile/AUProfileActions.js +128 -128
  90. package/src/components/profile/AUProfileAvatar2016Component.js +99 -99
  91. package/src/components/profile/AUProfileAvatarComponent.js +83 -83
  92. package/src/components/profile/AUProfileAvatarV2Component.js +91 -91
  93. package/src/components/profile/AUProfileAvatarV3Component.js +79 -79
  94. package/src/components/profile/AUProfileContainerComponent.js +283 -283
  95. package/src/components/profile/AUProfileHooks.js +30 -30
  96. package/src/components/profile/AUProfileItemComponent.js +54 -54
  97. package/src/components/profile/AUProfileLanguageComponent.js +131 -131
  98. package/src/components/profile/AUProfileLoginComponent.js +41 -41
  99. package/src/components/profile/AUProfileMailComponent.js +307 -302
  100. package/src/components/profile/AUProfileMobileComponent.js +164 -164
  101. package/src/components/profile/AUProfileNameComponent.js +253 -253
  102. package/src/components/profile/AUProfileNextOfKinComponent.js +216 -216
  103. package/src/components/profile/AUProfileReducer.js +230 -230
  104. package/src/components/profile/AUProfileWidgetComponent.js +95 -95
  105. package/src/components/profile/AUProfileWidgetV2Component.js +116 -116
  106. package/src/components/profile/AUProfileWidgetV3Component.js +120 -116
  107. package/src/components/universe/StaffTopComponent.js +362 -362
  108. package/src/components/universe/StudentTopComponent.js +137 -137
  109. package/src/components/universe/UniverseContainerComponent.js +62 -62
  110. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  111. package/src/config/webpack.dev.config.js +47 -47
  112. package/src/config/webpack.umd.config.js +85 -85
  113. package/src/index.js +6 -6
  114. package/src/lib/au-alphabox.js +102 -102
  115. package/src/lib/au-auth.js +227 -227
  116. package/src/lib/au-databox.js +403 -403
  117. package/src/lib/au-diagramme.js +87 -87
  118. package/src/lib/au-flowbox.js +95 -95
  119. package/src/lib/au-news.js +371 -371
  120. package/src/lib/helpers.js +216 -216
  121. package/src/lib/i18n.js +601 -599
  122. package/src/lib/menu.js +10 -10
  123. package/src/lib/tracking.js +65 -65
  124. package/src/lib/universe.js +9 -9
  125. package/src/lib/urlHandler.js +63 -63
  126. package/src/lib/validation.js +181 -181
  127. package/src/lib/wrapping.js +16 -16
  128. package/src/styles/_settings.scss +10 -10
  129. package/src/styles/alert.scss +39 -39
  130. package/src/styles/alphabox.scss +208 -208
  131. package/src/styles/app.scss +13 -13
  132. package/src/styles/autosuggest.scss +57 -57
  133. package/src/styles/calendar.scss +111 -111
  134. package/src/styles/databox.scss +563 -563
  135. package/src/styles/diagramme.scss +119 -119
  136. package/src/styles/filtercheckbox.scss +4 -4
  137. package/src/styles/flowbox.scss +72 -72
  138. package/src/styles/maps.scss +395 -395
  139. package/src/styles/modal.scss +34 -34
  140. package/src/styles/pagination.scss +10 -10
  141. package/src/styles/spinner.scss +30 -30
@@ -1,177 +1,177 @@
1
- /* eslint-env browser */
2
- /* eslint-disable max-len */
3
- import React, { useEffect } from 'react';
4
- import PropTypes from 'prop-types';
5
- import AUPasswordRequirementsComponent from './AUPasswordRequirementsComponent';
6
- import AUReceiptComponent from '../form/AUReceiptComponent';
7
- import CurrentPasswordComponent from './AUCurrentPasswordComponent';
8
- import AUNewPasswordComponent from './AUNewPasswordComponent';
9
- import { validatePassword } from '../../lib/validation';
10
- import { useAUPassword, useAUPasswordValidation } from './AUPasswordHooks';
11
- import { passwordLabels } from '../../lib/i18n';
12
-
13
- const AUChangePasswordComponent = ({
14
- user: {
15
- preferredLanguage,
16
- },
17
- password: {
18
- saving,
19
- saved,
20
- },
21
- dismissMessages,
22
- messages,
23
- onSave,
24
- onSaveAction,
25
- gotoLink,
26
- }) => {
27
- const [
28
- { currentPassword, setCurrentPassword },
29
- { newPassword, setNewPassword },
30
- { confirmPassword, setConfirmPassword },
31
- ] = useAUPassword();
32
-
33
- const [
34
- { currentPasswordValidationMessages, setCurrentPasswordValidationMessages },
35
- {
36
- newPasswordValidated,
37
- setNewPasswordValidated,
38
- newPasswordValidationMessages,
39
- setNewPasswordValidationMessages,
40
- },
41
- {
42
- confirmPasswordValidated,
43
- setConfirmPasswordValidated,
44
- confirmPasswordValidationMessages,
45
- setConfirmPasswordValidationMessages,
46
- },
47
- ] = useAUPasswordValidation();
48
-
49
- useEffect(() => {
50
- dismissMessages();
51
- }, []);
52
-
53
- const handleSubmit = () => {
54
- if (currentPassword === '') {
55
- setCurrentPasswordValidationMessages([passwordLabels[preferredLanguage].currentPassword]);
56
- } else {
57
- const v = validatePassword(preferredLanguage, newPassword, confirmPassword, false, true);
58
- setNewPasswordValidated(v.newPasswordValid);
59
- setNewPasswordValidationMessages(v.newPasswordMessages);
60
- setConfirmPasswordValidated(v.confirmPasswordValid);
61
- setConfirmPasswordValidationMessages(v.confirmPasswordMessages);
62
- if (v.newPasswordValid && v.confirmPasswordValid) {
63
- onSave({
64
- oldPassword: currentPassword,
65
- password: newPassword,
66
- }, onSaveAction);
67
- }
68
- }
69
- };
70
-
71
- if (saved) {
72
- return (
73
- <div className="page__content__block">
74
- <AUReceiptComponent
75
- receiptText={passwordLabels[preferredLanguage].receipt}
76
- buttons={[{
77
- gotoLink,
78
- gotoText: passwordLabels[preferredLanguage].goto,
79
- }]}
80
- />
81
- </div>
82
- );
83
- }
84
-
85
- return (
86
- <div className="page__content__block">
87
- <h1>{passwordLabels[preferredLanguage].changePassword}</h1>
88
- <p>{passwordLabels[preferredLanguage].changePasswordInfo}</p>
89
- <form
90
- className="form"
91
- noValidate="novalidate"
92
- onSubmit={(e) => {
93
- e.preventDefault();
94
- handleSubmit();
95
- }}
96
- >
97
- <CurrentPasswordComponent
98
- lang={preferredLanguage}
99
- saving={saving}
100
- errorMessages={messages.filter((x) => x.type === 'LdapFailedAuthenticationException').map((x) => x.message)}
101
- setErrorMessages={dismissMessages}
102
- currentPassword={currentPassword}
103
- setCurrentPassword={setCurrentPassword}
104
- currentPasswordValidationMessages={currentPasswordValidationMessages}
105
- setCurrentPasswordValidationMessages={setCurrentPasswordValidationMessages}
106
- />
107
- <hr />
108
- <div className="row row--wrap-reverse row--equal-height-items">
109
- <AUNewPasswordComponent
110
- lang={preferredLanguage}
111
- saving={saving}
112
- errorMessages={messages.filter((x) => x.type === 'LdapPasswordUsedBeforeException').map((x) => x.message)}
113
- setErrorMessages={dismissMessages}
114
- newPassword={newPassword}
115
- newPasswordValidated={newPasswordValidated}
116
- newPasswordValidationMessages={newPasswordValidationMessages}
117
- setNewPassword={setNewPassword}
118
- setNewPasswordValidated={setNewPasswordValidated}
119
- setNewPasswordValidationMessages={setNewPasswordValidationMessages}
120
- confirmPassword={confirmPassword}
121
- confirmPasswordValidated={confirmPasswordValidated}
122
- confirmPasswordValidationMessages={confirmPasswordValidationMessages}
123
- setConfirmPassword={setConfirmPassword}
124
- setConfirmPasswordValidated={setConfirmPasswordValidated}
125
- setConfirmPasswordValidationMessages={setConfirmPasswordValidationMessages}
126
- />
127
- <AUPasswordRequirementsComponent lang={preferredLanguage} />
128
- </div>
129
- </form>
130
- </div>
131
- );
132
- };
133
-
134
- AUChangePasswordComponent.displayName = 'AUChangePasswordComponent';
135
-
136
- AUChangePasswordComponent.defaultProps = {
137
- onSaveAction: (data, callback) => {
138
- const putData = async () => {
139
- let url = `${window.profileApiUri}/ChangePassword`;
140
- if (typeof window.API_AUID !== 'undefined') {
141
- url = `${url}?auid=${window.API_AUID}`;
142
- }
143
- const response = await fetch(url, {
144
- method: 'PUT',
145
- credentials: 'include',
146
- headers: {
147
- 'Content-Type': 'application/json',
148
- },
149
- body: JSON.stringify(data),
150
- });
151
- const json = await response.json();
152
- callback(response.ok, response.status, json);
153
- };
154
-
155
- putData();
156
- },
157
- };
158
-
159
- AUChangePasswordComponent.propTypes = {
160
- password: PropTypes.shape({
161
- saving: PropTypes.bool.isRequired,
162
- saved: PropTypes.bool.isRequired,
163
- }).isRequired,
164
- user: PropTypes.shape({
165
- preferredLanguage: PropTypes.string.isRequired,
166
- }).isRequired,
167
- onSave: PropTypes.func.isRequired,
168
- onSaveAction: PropTypes.func,
169
- dismissMessages: PropTypes.func.isRequired,
170
- messages: PropTypes.arrayOf(PropTypes.shape({
171
- type: PropTypes.string.isRequired,
172
- message: PropTypes.string.isRequired,
173
- })).isRequired,
174
- gotoLink: PropTypes.string.isRequired,
175
- };
176
-
177
- export default AUChangePasswordComponent;
1
+ /* eslint-env browser */
2
+ /* eslint-disable max-len */
3
+ import React, { useEffect } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import AUPasswordRequirementsComponent from './AUPasswordRequirementsComponent';
6
+ import AUReceiptComponent from '../form/AUReceiptComponent';
7
+ import CurrentPasswordComponent from './AUCurrentPasswordComponent';
8
+ import AUNewPasswordComponent from './AUNewPasswordComponent';
9
+ import { validatePassword } from '../../lib/validation';
10
+ import { useAUPassword, useAUPasswordValidation } from './AUPasswordHooks';
11
+ import { passwordLabels } from '../../lib/i18n';
12
+
13
+ const AUChangePasswordComponent = ({
14
+ user: {
15
+ preferredLanguage,
16
+ },
17
+ password: {
18
+ saving,
19
+ saved,
20
+ },
21
+ dismissMessages,
22
+ messages,
23
+ onSave,
24
+ onSaveAction,
25
+ gotoLink,
26
+ }) => {
27
+ const [
28
+ { currentPassword, setCurrentPassword },
29
+ { newPassword, setNewPassword },
30
+ { confirmPassword, setConfirmPassword },
31
+ ] = useAUPassword();
32
+
33
+ const [
34
+ { currentPasswordValidationMessages, setCurrentPasswordValidationMessages },
35
+ {
36
+ newPasswordValidated,
37
+ setNewPasswordValidated,
38
+ newPasswordValidationMessages,
39
+ setNewPasswordValidationMessages,
40
+ },
41
+ {
42
+ confirmPasswordValidated,
43
+ setConfirmPasswordValidated,
44
+ confirmPasswordValidationMessages,
45
+ setConfirmPasswordValidationMessages,
46
+ },
47
+ ] = useAUPasswordValidation();
48
+
49
+ useEffect(() => {
50
+ dismissMessages();
51
+ }, []);
52
+
53
+ const handleSubmit = () => {
54
+ if (currentPassword === '') {
55
+ setCurrentPasswordValidationMessages([passwordLabels[preferredLanguage].currentPassword]);
56
+ } else {
57
+ const v = validatePassword(preferredLanguage, newPassword, confirmPassword, false, true);
58
+ setNewPasswordValidated(v.newPasswordValid);
59
+ setNewPasswordValidationMessages(v.newPasswordMessages);
60
+ setConfirmPasswordValidated(v.confirmPasswordValid);
61
+ setConfirmPasswordValidationMessages(v.confirmPasswordMessages);
62
+ if (v.newPasswordValid && v.confirmPasswordValid) {
63
+ onSave({
64
+ oldPassword: currentPassword,
65
+ password: newPassword,
66
+ }, onSaveAction);
67
+ }
68
+ }
69
+ };
70
+
71
+ if (saved) {
72
+ return (
73
+ <div className="page__content__block">
74
+ <AUReceiptComponent
75
+ receiptText={passwordLabels[preferredLanguage].receipt}
76
+ buttons={[{
77
+ gotoLink,
78
+ gotoText: passwordLabels[preferredLanguage].goto,
79
+ }]}
80
+ />
81
+ </div>
82
+ );
83
+ }
84
+
85
+ return (
86
+ <div className="page__content__block">
87
+ <h1>{passwordLabels[preferredLanguage].changePassword}</h1>
88
+ <p>{passwordLabels[preferredLanguage].changePasswordInfo}</p>
89
+ <form
90
+ className="form"
91
+ noValidate="novalidate"
92
+ onSubmit={(e) => {
93
+ e.preventDefault();
94
+ handleSubmit();
95
+ }}
96
+ >
97
+ <CurrentPasswordComponent
98
+ lang={preferredLanguage}
99
+ saving={saving}
100
+ errorMessages={messages.filter((x) => x.type === 'LdapFailedAuthenticationException').map((x) => x.message)}
101
+ setErrorMessages={dismissMessages}
102
+ currentPassword={currentPassword}
103
+ setCurrentPassword={setCurrentPassword}
104
+ currentPasswordValidationMessages={currentPasswordValidationMessages}
105
+ setCurrentPasswordValidationMessages={setCurrentPasswordValidationMessages}
106
+ />
107
+ <hr />
108
+ <div className="row row--wrap-reverse row--equal-height-items">
109
+ <AUNewPasswordComponent
110
+ lang={preferredLanguage}
111
+ saving={saving}
112
+ errorMessages={messages.filter((x) => x.type === 'LdapPasswordUsedBeforeException').map((x) => x.message)}
113
+ setErrorMessages={dismissMessages}
114
+ newPassword={newPassword}
115
+ newPasswordValidated={newPasswordValidated}
116
+ newPasswordValidationMessages={newPasswordValidationMessages}
117
+ setNewPassword={setNewPassword}
118
+ setNewPasswordValidated={setNewPasswordValidated}
119
+ setNewPasswordValidationMessages={setNewPasswordValidationMessages}
120
+ confirmPassword={confirmPassword}
121
+ confirmPasswordValidated={confirmPasswordValidated}
122
+ confirmPasswordValidationMessages={confirmPasswordValidationMessages}
123
+ setConfirmPassword={setConfirmPassword}
124
+ setConfirmPasswordValidated={setConfirmPasswordValidated}
125
+ setConfirmPasswordValidationMessages={setConfirmPasswordValidationMessages}
126
+ />
127
+ <AUPasswordRequirementsComponent lang={preferredLanguage} />
128
+ </div>
129
+ </form>
130
+ </div>
131
+ );
132
+ };
133
+
134
+ AUChangePasswordComponent.displayName = 'AUChangePasswordComponent';
135
+
136
+ AUChangePasswordComponent.defaultProps = {
137
+ onSaveAction: (data, callback) => {
138
+ const putData = async () => {
139
+ let url = `${window.profileApiUri}/ChangePassword`;
140
+ if (typeof window.API_AUID !== 'undefined') {
141
+ url = `${url}?auid=${window.API_AUID}`;
142
+ }
143
+ const response = await fetch(url, {
144
+ method: 'PUT',
145
+ credentials: 'include',
146
+ headers: {
147
+ 'Content-Type': 'application/json',
148
+ },
149
+ body: JSON.stringify(data),
150
+ });
151
+ const json = await response.json();
152
+ callback(response.ok, response.status, json);
153
+ };
154
+
155
+ putData();
156
+ },
157
+ };
158
+
159
+ AUChangePasswordComponent.propTypes = {
160
+ password: PropTypes.shape({
161
+ saving: PropTypes.bool.isRequired,
162
+ saved: PropTypes.bool.isRequired,
163
+ }).isRequired,
164
+ user: PropTypes.shape({
165
+ preferredLanguage: PropTypes.string.isRequired,
166
+ }).isRequired,
167
+ onSave: PropTypes.func.isRequired,
168
+ onSaveAction: PropTypes.func,
169
+ dismissMessages: PropTypes.func.isRequired,
170
+ messages: PropTypes.arrayOf(PropTypes.shape({
171
+ type: PropTypes.string.isRequired,
172
+ message: PropTypes.string.isRequired,
173
+ })).isRequired,
174
+ gotoLink: PropTypes.string.isRequired,
175
+ };
176
+
177
+ export default AUChangePasswordComponent;
@@ -1,72 +1,72 @@
1
- /* eslint-disable jsx-a11y/label-has-associated-control */
2
- /* eslint-disable jsx-a11y/label-has-for */
3
- import React, { useState, useEffect } from 'react';
4
- import PropTypes from 'prop-types';
5
- import { renderValidation } from '../../lib/validation';
6
- import { passwordLabels } from '../../lib/i18n';
7
-
8
- const AUCurrentPasswordComponent = ({
9
- lang,
10
- saving,
11
- errorMessages,
12
- setErrorMessages,
13
- currentPassword,
14
- setCurrentPassword,
15
- currentPasswordValidationMessages,
16
- setCurrentPasswordValidationMessages,
17
- }) => {
18
- const [errorMessagesSet, setErrorMessagesSet] = useState(false);
19
-
20
- useEffect(() => {
21
- if (errorMessages.length > 0 && !errorMessagesSet) {
22
- setCurrentPasswordValidationMessages([]);
23
- setErrorMessagesSet(true);
24
- } else if (errorMessages.length === 0 && errorMessagesSet) {
25
- setErrorMessagesSet(false);
26
- }
27
- });
28
-
29
- let currentPasswordValidationClassName = '';
30
- if (errorMessages.length > 0 || currentPasswordValidationMessages.length > 0) {
31
- currentPasswordValidationClassName = ' form-info--error';
32
- }
33
-
34
- return (
35
- <div className={`form__field${currentPasswordValidationClassName}`}>
36
- <label htmlFor="current-password">
37
- {passwordLabels[lang].currentPassword}
38
- {renderValidation(errorMessages)}
39
- </label>
40
- <input
41
- type="password"
42
- id="current-password"
43
- value={currentPassword}
44
- onChange={(e) => {
45
- setCurrentPassword(e.target.value);
46
- setCurrentPasswordValidationMessages([]);
47
- setErrorMessages();
48
- }}
49
- disabled={saving}
50
- />
51
- {renderValidation(currentPasswordValidationMessages)}
52
- </div>
53
- );
54
- };
55
-
56
- AUCurrentPasswordComponent.defaultProps = {
57
- errorMessages: [],
58
- setErrorMessages: () => {},
59
- };
60
-
61
- AUCurrentPasswordComponent.displayName = 'AUCurrentPasswordComponent';
62
- AUCurrentPasswordComponent.propTypes = {
63
- lang: PropTypes.string.isRequired,
64
- saving: PropTypes.bool.isRequired,
65
- errorMessages: PropTypes.arrayOf(PropTypes.string),
66
- setErrorMessages: PropTypes.func,
67
- currentPassword: PropTypes.string.isRequired,
68
- setCurrentPassword: PropTypes.func.isRequired,
69
- currentPasswordValidationMessages: PropTypes.arrayOf(PropTypes.string).isRequired,
70
- setCurrentPasswordValidationMessages: PropTypes.func.isRequired,
71
- };
72
- export default AUCurrentPasswordComponent;
1
+ /* eslint-disable jsx-a11y/label-has-associated-control */
2
+ /* eslint-disable jsx-a11y/label-has-for */
3
+ import React, { useState, useEffect } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import { renderValidation } from '../../lib/validation';
6
+ import { passwordLabels } from '../../lib/i18n';
7
+
8
+ const AUCurrentPasswordComponent = ({
9
+ lang,
10
+ saving,
11
+ errorMessages,
12
+ setErrorMessages,
13
+ currentPassword,
14
+ setCurrentPassword,
15
+ currentPasswordValidationMessages,
16
+ setCurrentPasswordValidationMessages,
17
+ }) => {
18
+ const [errorMessagesSet, setErrorMessagesSet] = useState(false);
19
+
20
+ useEffect(() => {
21
+ if (errorMessages.length > 0 && !errorMessagesSet) {
22
+ setCurrentPasswordValidationMessages([]);
23
+ setErrorMessagesSet(true);
24
+ } else if (errorMessages.length === 0 && errorMessagesSet) {
25
+ setErrorMessagesSet(false);
26
+ }
27
+ });
28
+
29
+ let currentPasswordValidationClassName = '';
30
+ if (errorMessages.length > 0 || currentPasswordValidationMessages.length > 0) {
31
+ currentPasswordValidationClassName = ' form-info--error';
32
+ }
33
+
34
+ return (
35
+ <div className={`form__field${currentPasswordValidationClassName}`}>
36
+ <label htmlFor="current-password">
37
+ {passwordLabels[lang].currentPassword}
38
+ {renderValidation(errorMessages)}
39
+ </label>
40
+ <input
41
+ type="password"
42
+ id="current-password"
43
+ value={currentPassword}
44
+ onChange={(e) => {
45
+ setCurrentPassword(e.target.value);
46
+ setCurrentPasswordValidationMessages([]);
47
+ setErrorMessages();
48
+ }}
49
+ disabled={saving}
50
+ />
51
+ {renderValidation(currentPasswordValidationMessages)}
52
+ </div>
53
+ );
54
+ };
55
+
56
+ AUCurrentPasswordComponent.defaultProps = {
57
+ errorMessages: [],
58
+ setErrorMessages: () => {},
59
+ };
60
+
61
+ AUCurrentPasswordComponent.displayName = 'AUCurrentPasswordComponent';
62
+ AUCurrentPasswordComponent.propTypes = {
63
+ lang: PropTypes.string.isRequired,
64
+ saving: PropTypes.bool.isRequired,
65
+ errorMessages: PropTypes.arrayOf(PropTypes.string),
66
+ setErrorMessages: PropTypes.func,
67
+ currentPassword: PropTypes.string.isRequired,
68
+ setCurrentPassword: PropTypes.func.isRequired,
69
+ currentPasswordValidationMessages: PropTypes.arrayOf(PropTypes.string).isRequired,
70
+ setCurrentPasswordValidationMessages: PropTypes.func.isRequired,
71
+ };
72
+ export default AUCurrentPasswordComponent;