@aarhus-university/au-lib-react-components 8.20.0 → 8.80.0

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 (168) hide show
  1. package/.eslintrc.js +44 -0
  2. package/README.md +19 -20
  3. package/babel.config.js +7 -0
  4. package/build/umd/all.css +1 -2
  5. package/build/umd/all.css.map +1 -1
  6. package/build/umd/all.js +1 -1
  7. package/build/umd/all.js.map +1 -1
  8. package/build/umd/alphabox.js +1 -1
  9. package/build/umd/alphabox.js.map +1 -1
  10. package/build/umd/databox.js +1 -6
  11. package/build/umd/databox.js.map +1 -1
  12. package/build/umd/diagramme.js +1 -1
  13. package/build/umd/diagramme.js.map +1 -1
  14. package/build/umd/flowbox.js +1 -1
  15. package/build/umd/flowbox.js.map +1 -1
  16. package/build/umd/universe.js +1 -1
  17. package/build/umd/universe.js.map +1 -1
  18. package/package.json +66 -65
  19. package/src/components/AUAlertComponent.tsx +70 -0
  20. package/src/components/{AutoSuggestComponent.js → AUAutoSuggestComponent.js} +45 -19
  21. package/src/components/AUCalendarComponent.tsx +493 -0
  22. package/src/components/AUContentToggleComponent.tsx +33 -0
  23. package/src/components/AUDatepickerComponent.tsx +117 -0
  24. package/src/components/AUMobilePrefixComponent.tsx +15 -0
  25. package/src/components/{delphinus/AUModalComponent.js → AUModalComponent.tsx} +78 -76
  26. package/src/components/{form/AUReceiptComponent.js → AUReceiptComponent.tsx} +33 -40
  27. package/src/components/AUSpinnerComponent.tsx +64 -0
  28. package/src/components/{delphinus/AUSubNavComponent.js → AUSubNavComponent.tsx} +38 -53
  29. package/src/components/{form/AUSubmitButtonContainerComponent.js → AUSubmitButtonContainerComponent.tsx} +31 -39
  30. package/src/components/AUTabbedContentComponent.tsx +145 -0
  31. package/src/components/{delphinus/AUTableComponent.js → AUTableComponent.tsx} +24 -28
  32. package/src/components/{delphinus/AUToastComponent.js → AUToastComponent.tsx} +104 -91
  33. package/src/components/{delphinus/AUToolbarComponent.js → AUToolbarComponent.tsx} +45 -48
  34. package/src/components/profile/AUProfileActions.js +128 -113
  35. package/src/components/profile/AUProfileAvatarComponent.js +83 -83
  36. package/src/components/profile/AUProfileAvatarV2Component.js +91 -0
  37. package/src/components/profile/AUProfileAvatarV3Component.js +80 -0
  38. package/src/components/profile/AUProfileContainerComponent.js +283 -285
  39. package/src/components/profile/AUProfileHooks.js +30 -30
  40. package/src/components/profile/AUProfileItemComponent.js +54 -54
  41. package/src/components/profile/AUProfileLanguageComponent.js +131 -131
  42. package/src/components/profile/AUProfileLoginComponent.js +0 -2
  43. package/src/components/profile/AUProfileMailComponent.js +307 -299
  44. package/src/components/profile/AUProfileMobileComponent.js +164 -164
  45. package/src/components/profile/AUProfileNameComponent.js +253 -253
  46. package/src/components/profile/AUProfileNextOfKinComponent.js +216 -216
  47. package/src/components/profile/AUProfileReducer.js +230 -210
  48. package/src/components/profile/AUProfileWidgetComponent.js +95 -95
  49. package/src/components/profile/AUProfileWidgetV2Component.js +116 -0
  50. package/src/components/profile/AUProfileWidgetV3Component.js +130 -0
  51. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  52. package/src/{components → layout-2016/components}/alphabox/AlphaBoxComponent.js +29 -28
  53. package/src/{components → layout-2016/components}/alphabox/AlphaBoxContentComponent.js +25 -14
  54. package/src/{components → layout-2016/components/common}/AUCollapsibleComponent.js +1 -22
  55. package/src/{components → layout-2016/components/common}/AUSpinnerComponent.js +2 -24
  56. package/src/{components → layout-2016/components}/databox/DataBoxAlphabetComponent.js +1 -1
  57. package/src/{components → layout-2016/components}/databox/DataBoxAssociationComponent.js +2 -2
  58. package/src/{components → layout-2016/components}/databox/DataBoxButtonComponent.js +7 -3
  59. package/src/{components → layout-2016/components}/databox/DataBoxComponent.js +2 -2
  60. package/src/{components → layout-2016/components}/databox/DataBoxGroupingComponent.js +2 -0
  61. package/src/{components → layout-2016/components}/databox/DataBoxSearchResultComponent.js +1 -5
  62. package/src/{components → layout-2016/components}/databox/DataBoxStackedAssociationComponent.js +1 -5
  63. package/src/{components → layout-2016/components}/databox/DataBoxSuggestionComponent.js +0 -0
  64. package/src/{components → layout-2016/components/diagramme}/AUDiagrammeComponent.js +5 -6
  65. package/src/{components → layout-2016/components}/flowbox/FlowBoxComponent.js +8 -8
  66. package/src/{components → layout-2016/components}/flowbox/FlowBoxPhoneComponent.js +3 -5
  67. package/src/{components → layout-2016/components}/profile/AUProfileAvatar2016Component.js +6 -2
  68. package/src/{components → layout-2016/components}/universe/StaffTopComponent.js +4 -3
  69. package/src/{components → layout-2016/components}/universe/StudentTopComponent.js +0 -0
  70. package/src/{components → layout-2016/components}/universe/UniverseContainerComponent.js +11 -8
  71. package/src/layout-2016/lib/all.js +3 -0
  72. package/src/{lib → layout-2016/lib}/au-alphabox.js +1 -3
  73. package/src/{lib → layout-2016/lib}/au-databox.js +6 -9
  74. package/src/{lib → layout-2016/lib}/au-diagramme.js +2 -4
  75. package/src/{lib → layout-2016/lib}/au-flowbox.js +1 -3
  76. package/src/{lib → layout-2016/lib}/universe.js +0 -0
  77. package/src/lib/{helpers.js → helpers.ts} +40 -66
  78. package/src/lib/hooks.ts +33 -0
  79. package/src/lib/{i18n.js → i18n.ts} +600 -595
  80. package/src/lib/tracking.ts +69 -0
  81. package/src/lib/{wrapping.js → wrapping.ts} +21 -16
  82. package/src/styles/_settings.scss +11 -11
  83. package/src/styles/alphabox.scss +222 -209
  84. package/src/styles/app.scss +7 -12
  85. package/src/styles/autosuggest.scss +57 -57
  86. package/src/styles/databox.scss +563 -563
  87. package/src/styles/diagramme.scss +119 -119
  88. package/src/styles/flowbox.scss +72 -72
  89. package/src/styles/maps.scss +396 -0
  90. package/tsconfig.json +47 -0
  91. package/types/common/interfaces.d.ts +64 -0
  92. package/types/common/main.d.ts +4 -0
  93. package/types/common/package.json +5 -0
  94. package/types/common/payloads.d.ts +0 -0
  95. package/types/common/props.d.ts +138 -0
  96. package/webpack.config.js +89 -0
  97. package/.eslintrc +0 -19
  98. package/DOCUMENTATION.md +0 -369
  99. package/build/cjs/auAuth.js +0 -2
  100. package/build/cjs/auAuth.js.map +0 -1
  101. package/build/dev.html +0 -329
  102. package/build/umd/auAuth.js +0 -2
  103. package/build/umd/auAuth.js.map +0 -1
  104. package/build/umd/news.js +0 -2
  105. package/build/umd/news.js.map +0 -1
  106. package/src/all.js +0 -3
  107. package/src/app.js +0 -263
  108. package/src/components/AUAlertComponent.js +0 -158
  109. package/src/components/AUAmountComponent.js +0 -84
  110. package/src/components/AUBannerComponent.js +0 -99
  111. package/src/components/AUCalendarComponent.js +0 -393
  112. package/src/components/AUDatepickerComponent.js +0 -105
  113. package/src/components/AUFilterCheckboxComponent.js +0 -122
  114. package/src/components/AUFocusComponent.js +0 -55
  115. package/src/components/AUModalComponent.js +0 -94
  116. package/src/components/AUPaginationComponent.js +0 -103
  117. package/src/components/context/AUUserContextComponent.js +0 -91
  118. package/src/components/context/ImpersonateComponent.js +0 -54
  119. package/src/components/delphinus/AUCalendarComponent.js +0 -422
  120. package/src/components/delphinus/AUContentToggleComponent.js +0 -32
  121. package/src/components/delphinus/AUDatepickerComponent.js +0 -113
  122. package/src/components/delphinus/AULoginComponent.js +0 -65
  123. package/src/components/delphinus/AUSpinnerComponent.js +0 -114
  124. package/src/components/delphinus/AUTabbedContentComponent.js +0 -53
  125. package/src/components/delphinus/hooks.js +0 -25
  126. package/src/components/form/AUMobilePrefixComponent.js +0 -18
  127. package/src/components/news/EventLayout1Component.js +0 -94
  128. package/src/components/news/EventLayout2Component.js +0 -90
  129. package/src/components/news/EventLayout3Component.js +0 -68
  130. package/src/components/news/NewsCategoriesComponent.js +0 -21
  131. package/src/components/news/NewsCollageBannerComponent.js +0 -71
  132. package/src/components/news/NewsColumnsComponent.js +0 -125
  133. package/src/components/news/NewsLanguageChangeComponent.js +0 -74
  134. package/src/components/news/NewsLayout1Component.js +0 -80
  135. package/src/components/news/NewsLayout2Component.js +0 -80
  136. package/src/components/news/NewsLayout3Component.js +0 -81
  137. package/src/components/news/NewsLayout4Component.js +0 -80
  138. package/src/components/news/NewsLayout5Component.js +0 -61
  139. package/src/components/news/NewsLayout6Component.js +0 -55
  140. package/src/components/news/NewsLayout7Component.js +0 -58
  141. package/src/components/news/NewsLayout8Component.js +0 -57
  142. package/src/components/news/NewsListComponent.js +0 -291
  143. package/src/components/news/NewsPopUpComponent.js +0 -591
  144. package/src/components/news/NewsRSSComponent.js +0 -74
  145. package/src/components/news/NewsSocialComponent.js +0 -104
  146. package/src/components/news/NewsSubHeaderComponent.js +0 -19
  147. package/src/components/password/AUChangePasswordComponent.js +0 -177
  148. package/src/components/password/AUCurrentPasswordComponent.js +0 -72
  149. package/src/components/password/AUNewPasswordComponent.js +0 -143
  150. package/src/components/password/AUPasswordActions.js +0 -101
  151. package/src/components/password/AUPasswordHooks.js +0 -47
  152. package/src/components/password/AUPasswordReducer.js +0 -78
  153. package/src/components/password/AUPasswordRequirementsComponent.js +0 -29
  154. package/src/config/webpack.cjs.config.js +0 -75
  155. package/src/config/webpack.dev.config.js +0 -61
  156. package/src/config/webpack.umd.config.js +0 -107
  157. package/src/index.js +0 -6
  158. package/src/lib/au-auth.js +0 -221
  159. package/src/lib/au-news.js +0 -306
  160. package/src/lib/menu.js +0 -10
  161. package/src/lib/urlHandler.js +0 -63
  162. package/src/lib/validation.js +0 -181
  163. package/src/styles/alert.scss +0 -39
  164. package/src/styles/calendar.scss +0 -112
  165. package/src/styles/filtercheckbox.scss +0 -5
  166. package/src/styles/modal.scss +0 -35
  167. package/src/styles/pagination.scss +0 -11
  168. package/src/styles/spinner.scss +0 -30
@@ -1,285 +1,283 @@
1
- /* eslint-env browser */
2
- import React, { useState, useEffect } from 'react';
3
- import PropTypes from 'prop-types';
4
- import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
5
- import AUModalComponent from '../delphinus/AUModalComponent';
6
- import AUProfileItemComponent from './AUProfileItemComponent';
7
- import AUProfileNameComponent from './AUProfileNameComponent';
8
- import AUProfileMailComponent from './AUProfileMailComponent';
9
- import AUProfileMobileComponent from './AUProfileMobileComponent';
10
- import AUProfileLanguageComponent from './AUProfileLanguageComponent';
11
- import AUProfileNextOfKinComponent from './AUProfileNextOfKinComponent';
12
- import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
13
- import { prettyPrintPhone, scrollTo } from '../../lib/helpers';
14
- import { profileLabels, countryCodes } from '../../lib/i18n';
15
-
16
- const getLinkElement = (path, language) => <Link className="settings-list__item__action button button--small" to={path}>{profileLabels[language].edit}</Link>;
17
- const langPath = '/(da|en)';
18
-
19
- const AUProfileContainerComponent = ({
20
- user: {
21
- firstNames,
22
- lastName,
23
- hasChosenName,
24
- chosenFirstNames,
25
- chosenLastName,
26
- preferredLanguage,
27
- privateMobileNumber,
28
- privateMailAddress,
29
- nextOfKinName,
30
- nextOfKinPhoneNumber,
31
- isStudentAdGroupMember,
32
- studentMailAddress,
33
- studentChosenMailAddress,
34
- workMailAddress,
35
- saving,
36
- saved,
37
- loaded,
38
- },
39
- path,
40
- onSaveName,
41
- onSaveMail,
42
- onSaveMobile,
43
- onSaveLanguage,
44
- onSaveNextOfKin,
45
- dismissMessages,
46
- clear,
47
- }) => {
48
- useEffect(() => {
49
- scrollTo();
50
- }, []);
51
- /*
52
-
53
- appendix
54
-
55
- appendix={(
56
- <button
57
- type="button"
58
- className="settings-list__item__appendix"
59
- onClick={() => {
60
- setShowMailModal(true);
61
- }}
62
- >
63
- {profileLabels[preferredLanguage].otherMail}
64
- </button>
65
- )}
66
-
67
- */
68
-
69
- return (
70
- <Router key="router">
71
- <div className="page__content__block">
72
- <Route
73
- path={`${langPath}${path}`}
74
- exact
75
- render={() => [
76
- <div key="navigator" className="list-navigator list-navigator--top-level">
77
- <h1 className="list-navigator__header">{profileLabels[preferredLanguage].headerContainer}</h1>
78
- </div>,
79
- <AUModalComponent
80
- key="modal"
81
- lang={preferredLanguage}
82
- >
83
- <div className="modal-view__body">
84
- <h2 className="modal-view__header">
85
- Indholdet af en modal
86
- </h2>
87
- <div className="modal-view__content">
88
- Indhold
89
- </div>
90
- </div>
91
- </AUModalComponent>,
92
- <ul key="links" className="settings-list links--plain">
93
- <AUProfileItemComponent
94
- lang={preferredLanguage}
95
- header={profileLabels[preferredLanguage].headerName}
96
- values={hasChosenName ? [`${chosenFirstNames} ${chosenLastName}`] : [`${firstNames} ${lastName}`]}
97
- linkElement={getLinkElement(`/${preferredLanguage}${path}/name`, preferredLanguage, profileLabels)}
98
- />
99
- <AUProfileItemComponent
100
- lang={preferredLanguage}
101
- header={profileLabels[preferredLanguage].headerMail}
102
- values={[
103
- workMailAddress,
104
- studentChosenMailAddress || studentMailAddress,
105
- privateMailAddress,
106
- ]}
107
- empty={!privateMailAddress ? [profileLabels[preferredLanguage].emptyMail] : []}
108
- linkElement={getLinkElement(`/${preferredLanguage}${path}/mail`, preferredLanguage, profileLabels)}
109
- />
110
- <AUProfileItemComponent
111
- lang={preferredLanguage}
112
- header={profileLabels[preferredLanguage].headerMobile}
113
- values={[prettyPrintPhone(countryCodes, privateMobileNumber)]}
114
- empty={!privateMobileNumber ? [profileLabels[preferredLanguage].emptyMobile] : []}
115
- linkElement={getLinkElement(`/${preferredLanguage}${path}/mobile`, preferredLanguage, profileLabels)}
116
- />
117
- <AUProfileItemComponent
118
- lang={preferredLanguage}
119
- header={profileLabels[preferredLanguage].headerLanguage}
120
- values={[`${profileLabels[preferredLanguage].languageIn}`]}
121
- linkElement={getLinkElement(`/${preferredLanguage}${path}/language`, preferredLanguage, profileLabels)}
122
- />
123
- <AUProfileItemComponent
124
- lang={preferredLanguage}
125
- header={profileLabels[preferredLanguage].headerNextOfKin}
126
- values={[nextOfKinName, prettyPrintPhone(countryCodes, nextOfKinPhoneNumber)]}
127
- empty={!nextOfKinPhoneNumber ? [profileLabels[preferredLanguage].emptyNok] : []}
128
- linkElement={getLinkElement(`/${preferredLanguage}${path}/nextofkin`, preferredLanguage, profileLabels)}
129
- />
130
- </ul>,
131
- ]}
132
- />
133
- <Route
134
- path={`${langPath}${path}/name`}
135
- render={(routeProps) => (
136
- <AUSpinnerComponent
137
- loaded={loaded}
138
- loadingCondition={!loaded}
139
- >
140
- <AUProfileNameComponent
141
- lang={preferredLanguage}
142
- path={`/${preferredLanguage}${path}`}
143
- routeProps={routeProps}
144
- firstNames={firstNames}
145
- lastName={lastName}
146
- chosenFirstNames={chosenFirstNames}
147
- chosenLastName={chosenLastName}
148
- hasChosenName={hasChosenName}
149
- onSave={onSaveName}
150
- saving={saving}
151
- saved={saved}
152
- dismissMessages={dismissMessages}
153
- clear={clear}
154
- />
155
- </AUSpinnerComponent>
156
- )}
157
- />
158
- <Route
159
- path={`${langPath}${path}/mail`}
160
- render={(routeProps) => (
161
- <AUSpinnerComponent
162
- loaded={loaded}
163
- loadingCondition={!loaded}
164
- >
165
- <AUProfileMailComponent
166
- lang={preferredLanguage}
167
- path={`/${preferredLanguage}${path}`}
168
- routeProps={routeProps}
169
- isStudentAdGroupMember={isStudentAdGroupMember}
170
- studentMailAddress={studentMailAddress}
171
- studentChosenMailAddress={studentChosenMailAddress || studentMailAddress || ''}
172
- workMailAddress={workMailAddress}
173
- privateMailAddress={privateMailAddress || ''}
174
- onSave={onSaveMail}
175
- saving={saving}
176
- saved={saved}
177
- dismissMessages={dismissMessages}
178
- clear={clear}
179
- />
180
- </AUSpinnerComponent>
181
- )}
182
- />
183
- <Route
184
- path={`${langPath}${path}/mobile`}
185
- render={(routeProps) => (
186
- <AUSpinnerComponent
187
- loaded={loaded}
188
- loadingCondition={!loaded}
189
- >
190
- <AUProfileMobileComponent
191
- lang={preferredLanguage}
192
- path={`/${preferredLanguage}${path}`}
193
- routeProps={routeProps}
194
- countryCodes={countryCodes}
195
- privateMobileNumber={privateMobileNumber || ''}
196
- onSave={onSaveMobile}
197
- saving={saving}
198
- saved={saved}
199
- dismissMessages={dismissMessages}
200
- clear={clear}
201
- />
202
- </AUSpinnerComponent>
203
- )}
204
- />
205
- <Route
206
- path={`${langPath}${path}/language`}
207
- render={(routeProps) => (
208
- <AUSpinnerComponent
209
- loaded={loaded}
210
- loadingCondition={!loaded}
211
- >
212
- <AUProfileLanguageComponent
213
- lang={preferredLanguage}
214
- path={`/${preferredLanguage}${path}`}
215
- routeProps={routeProps}
216
- preferredLanguage={preferredLanguage}
217
- onSave={onSaveLanguage}
218
- saving={saving}
219
- saved={saved}
220
- dismissMessages={dismissMessages}
221
- clear={clear}
222
- />
223
- </AUSpinnerComponent>
224
- )}
225
- />
226
- <Route
227
- path={`${langPath}${path}/nextofkin`}
228
- render={(routeProps) => (
229
- <AUSpinnerComponent
230
- loaded={loaded}
231
- loadingCondition={!loaded}
232
- >
233
- <AUProfileNextOfKinComponent
234
- lang={preferredLanguage}
235
- path={`/${preferredLanguage}${path}`}
236
- routeProps={routeProps}
237
- countryCodes={countryCodes}
238
- nextOfKinName={nextOfKinName || ''}
239
- nextOfKinPhoneNumber={nextOfKinPhoneNumber || ''}
240
- onSave={onSaveNextOfKin}
241
- saving={saving}
242
- saved={saved}
243
- dismissMessages={dismissMessages}
244
- clear={clear}
245
- />
246
- </AUSpinnerComponent>
247
- )}
248
- />
249
- </div>
250
- </Router>
251
- );
252
- };
253
-
254
- AUProfileContainerComponent.propTypes = {
255
- user: PropTypes.shape({
256
- firstNames: PropTypes.string.isRequired,
257
- lastName: PropTypes.string.isRequired,
258
- hasChosenName: PropTypes.bool.isRequired,
259
- chosenFirstNames: PropTypes.string.isRequired,
260
- chosenLastName: PropTypes.string.isRequired,
261
- preferredLanguage: PropTypes.string.isRequired,
262
- privateMobileNumber: PropTypes.string.isRequired,
263
- privateMailAddress: PropTypes.string.isRequired,
264
- nextOfKinName: PropTypes.string.isRequired,
265
- nextOfKinPhoneNumber: PropTypes.string.isRequired,
266
- isStudentAdGroupMember: PropTypes.bool.isRequired,
267
- studentMailAddress: PropTypes.string.isRequired,
268
- studentChosenMailAddress: PropTypes.string.isRequired,
269
- workMailAddress: PropTypes.string.isRequired,
270
- saving: PropTypes.bool.isRequired,
271
- saved: PropTypes.bool.isRequired,
272
- loaded: PropTypes.bool.isRequired,
273
- }).isRequired,
274
- path: PropTypes.string.isRequired,
275
- onSaveName: PropTypes.func.isRequired,
276
- onSaveMail: PropTypes.func.isRequired,
277
- onSaveMobile: PropTypes.func.isRequired,
278
- onSaveLanguage: PropTypes.func.isRequired,
279
- onSaveNextOfKin: PropTypes.func.isRequired,
280
- dismissMessages: PropTypes.func.isRequired,
281
- clear: PropTypes.func.isRequired,
282
- };
283
-
284
- AUProfileContainerComponent.displayName = 'AUProfileContainerComponent';
285
- export default AUProfileContainerComponent;
1
+ /* eslint-env browser */
2
+ import React, { useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
5
+ import AUModalComponent from '../delphinus/AUModalComponent';
6
+ import AUProfileItemComponent from './AUProfileItemComponent';
7
+ import AUProfileNameComponent from './AUProfileNameComponent';
8
+ import AUProfileMailComponent from './AUProfileMailComponent';
9
+ import AUProfileMobileComponent from './AUProfileMobileComponent';
10
+ import AUProfileLanguageComponent from './AUProfileLanguageComponent';
11
+ import AUProfileNextOfKinComponent from './AUProfileNextOfKinComponent';
12
+ import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
13
+ import { prettyPrintPhone, scrollTo } from '../../lib/helpers';
14
+ import { profileLabels, countryCodes } from '../../lib/i18n';
15
+
16
+ const getLinkElement = (path, language) => <Link className="settings-list__item__action button button--small" to={path}>{profileLabels[language].edit}</Link>;
17
+ const langPath = '/(da|en)';
18
+
19
+ const AUProfileContainerComponent = ({
20
+ user: {
21
+ firstNames,
22
+ lastName,
23
+ hasChosenName,
24
+ chosenFirstNames,
25
+ chosenLastName,
26
+ preferredLanguage,
27
+ privateMobileNumber,
28
+ privateMailAddress,
29
+ nextOfKinName,
30
+ nextOfKinPhoneNumber,
31
+ isStudentAdGroupMember,
32
+ studentMailAddress,
33
+ studentChosenMailAddress,
34
+ workMailAddress,
35
+ workMailDomain,
36
+ saving,
37
+ saved,
38
+ loaded,
39
+ },
40
+ path,
41
+ onSaveName,
42
+ onSaveMail,
43
+ onSaveMobile,
44
+ onSaveLanguage,
45
+ onSaveNextOfKin,
46
+ dismissMessages,
47
+ clear,
48
+ onUserLoaded,
49
+ }) => {
50
+ useEffect(() => {
51
+ scrollTo();
52
+ }, []);
53
+
54
+ useEffect(() => {
55
+ if (loaded) {
56
+ onUserLoaded();
57
+ }
58
+ }, [loaded]);
59
+
60
+ return (
61
+ <Router key="router">
62
+ <div className="page__content__block">
63
+ <Route
64
+ path={`${langPath}${path}`}
65
+ exact
66
+ render={() => [
67
+ <div key="navigator" className="list-navigator list-navigator--top-level">
68
+ <h1 className="list-navigator__header">{profileLabels[preferredLanguage].headerContainer}</h1>
69
+ </div>,
70
+ <AUModalComponent
71
+ key="modal"
72
+ lang={preferredLanguage}
73
+ >
74
+ <div className="modal-view__body">
75
+ <h2 className="modal-view__header">
76
+ Indholdet af en modal
77
+ </h2>
78
+ <div className="modal-view__content">
79
+ Indhold
80
+ </div>
81
+ </div>
82
+ </AUModalComponent>,
83
+ <ul key="links" className="settings-list links--plain">
84
+ <AUProfileItemComponent
85
+ lang={preferredLanguage}
86
+ header={profileLabels[preferredLanguage].headerName}
87
+ values={hasChosenName ? [`${chosenFirstNames} ${chosenLastName}`] : [`${firstNames} ${lastName}`]}
88
+ linkElement={getLinkElement(`/${preferredLanguage}${path}/name`, preferredLanguage, profileLabels)}
89
+ />
90
+ <AUProfileItemComponent
91
+ lang={preferredLanguage}
92
+ header={profileLabels[preferredLanguage].headerMail}
93
+ values={[
94
+ workMailAddress && !workMailAddress.includes('@uni.au.dk') ? workMailAddress : '',
95
+ studentChosenMailAddress || studentMailAddress,
96
+ privateMailAddress,
97
+ ]}
98
+ empty={!privateMailAddress ? [profileLabels[preferredLanguage].emptyMail] : []}
99
+ linkElement={getLinkElement(`/${preferredLanguage}${path}/mail`, preferredLanguage, profileLabels)}
100
+ />
101
+ <AUProfileItemComponent
102
+ lang={preferredLanguage}
103
+ header={profileLabels[preferredLanguage].headerMobile}
104
+ values={[prettyPrintPhone(countryCodes, privateMobileNumber)]}
105
+ empty={!privateMobileNumber ? [profileLabels[preferredLanguage].emptyMobile] : []}
106
+ linkElement={getLinkElement(`/${preferredLanguage}${path}/mobile`, preferredLanguage, profileLabels)}
107
+ />
108
+ <AUProfileItemComponent
109
+ lang={preferredLanguage}
110
+ header={profileLabels[preferredLanguage].headerLanguage}
111
+ values={[`${profileLabels[preferredLanguage].languageIn}`]}
112
+ linkElement={getLinkElement(`/${preferredLanguage}${path}/language`, preferredLanguage, profileLabels)}
113
+ />
114
+ <AUProfileItemComponent
115
+ lang={preferredLanguage}
116
+ header={profileLabels[preferredLanguage].headerNextOfKin}
117
+ values={[nextOfKinName, prettyPrintPhone(countryCodes, nextOfKinPhoneNumber)]}
118
+ empty={!nextOfKinPhoneNumber ? [profileLabels[preferredLanguage].emptyNok] : []}
119
+ linkElement={getLinkElement(`/${preferredLanguage}${path}/nextofkin`, preferredLanguage, profileLabels)}
120
+ />
121
+ </ul>,
122
+ ]}
123
+ />
124
+ <Route
125
+ path={`${langPath}${path}/name`}
126
+ render={(routeProps) => (
127
+ <AUSpinnerComponent
128
+ loaded={loaded}
129
+ loadingCondition={!loaded}
130
+ >
131
+ <AUProfileNameComponent
132
+ lang={preferredLanguage}
133
+ path={`/${preferredLanguage}${path}`}
134
+ routeProps={routeProps}
135
+ firstNames={firstNames}
136
+ lastName={lastName}
137
+ chosenFirstNames={chosenFirstNames}
138
+ chosenLastName={chosenLastName}
139
+ hasChosenName={hasChosenName}
140
+ onSave={onSaveName}
141
+ saving={saving}
142
+ saved={saved}
143
+ dismissMessages={dismissMessages}
144
+ clear={clear}
145
+ />
146
+ </AUSpinnerComponent>
147
+ )}
148
+ />
149
+ <Route
150
+ path={`${langPath}${path}/mail`}
151
+ render={(routeProps) => (
152
+ <AUSpinnerComponent
153
+ loaded={loaded}
154
+ loadingCondition={!loaded}
155
+ >
156
+ <AUProfileMailComponent
157
+ lang={preferredLanguage}
158
+ path={`/${preferredLanguage}${path}`}
159
+ routeProps={routeProps}
160
+ isStudentAdGroupMember={isStudentAdGroupMember}
161
+ studentMailAddress={studentMailAddress}
162
+ studentChosenMailAddress={studentChosenMailAddress || studentMailAddress || ''}
163
+ workMailAddress={workMailAddress}
164
+ workMailDomain={workMailDomain}
165
+ privateMailAddress={privateMailAddress || ''}
166
+ onSave={onSaveMail}
167
+ saving={saving}
168
+ saved={saved}
169
+ dismissMessages={dismissMessages}
170
+ clear={clear}
171
+ />
172
+ </AUSpinnerComponent>
173
+ )}
174
+ />
175
+ <Route
176
+ path={`${langPath}${path}/mobile`}
177
+ render={(routeProps) => (
178
+ <AUSpinnerComponent
179
+ loaded={loaded}
180
+ loadingCondition={!loaded}
181
+ >
182
+ <AUProfileMobileComponent
183
+ lang={preferredLanguage}
184
+ path={`/${preferredLanguage}${path}`}
185
+ routeProps={routeProps}
186
+ countryCodes={countryCodes}
187
+ privateMobileNumber={privateMobileNumber || ''}
188
+ onSave={onSaveMobile}
189
+ saving={saving}
190
+ saved={saved}
191
+ dismissMessages={dismissMessages}
192
+ clear={clear}
193
+ />
194
+ </AUSpinnerComponent>
195
+ )}
196
+ />
197
+ <Route
198
+ path={`${langPath}${path}/language`}
199
+ render={(routeProps) => (
200
+ <AUSpinnerComponent
201
+ loaded={loaded}
202
+ loadingCondition={!loaded}
203
+ >
204
+ <AUProfileLanguageComponent
205
+ lang={preferredLanguage}
206
+ path={`/${preferredLanguage}${path}`}
207
+ routeProps={routeProps}
208
+ preferredLanguage={preferredLanguage}
209
+ onSave={onSaveLanguage}
210
+ saving={saving}
211
+ saved={saved}
212
+ dismissMessages={dismissMessages}
213
+ clear={clear}
214
+ />
215
+ </AUSpinnerComponent>
216
+ )}
217
+ />
218
+ <Route
219
+ path={`${langPath}${path}/nextofkin`}
220
+ render={(routeProps) => (
221
+ <AUSpinnerComponent
222
+ loaded={loaded}
223
+ loadingCondition={!loaded}
224
+ >
225
+ <AUProfileNextOfKinComponent
226
+ lang={preferredLanguage}
227
+ path={`/${preferredLanguage}${path}`}
228
+ routeProps={routeProps}
229
+ countryCodes={countryCodes}
230
+ nextOfKinName={nextOfKinName || ''}
231
+ nextOfKinPhoneNumber={nextOfKinPhoneNumber || ''}
232
+ onSave={onSaveNextOfKin}
233
+ saving={saving}
234
+ saved={saved}
235
+ dismissMessages={dismissMessages}
236
+ clear={clear}
237
+ />
238
+ </AUSpinnerComponent>
239
+ )}
240
+ />
241
+ </div>
242
+ </Router>
243
+ );
244
+ };
245
+
246
+ AUProfileContainerComponent.defaultProps = {
247
+ onUserLoaded: () => { },
248
+ };
249
+
250
+ AUProfileContainerComponent.propTypes = {
251
+ user: PropTypes.shape({
252
+ firstNames: PropTypes.string.isRequired,
253
+ lastName: PropTypes.string.isRequired,
254
+ hasChosenName: PropTypes.bool.isRequired,
255
+ chosenFirstNames: PropTypes.string.isRequired,
256
+ chosenLastName: PropTypes.string.isRequired,
257
+ preferredLanguage: PropTypes.string.isRequired,
258
+ privateMobileNumber: PropTypes.string.isRequired,
259
+ privateMailAddress: PropTypes.string.isRequired,
260
+ nextOfKinName: PropTypes.string.isRequired,
261
+ nextOfKinPhoneNumber: PropTypes.string.isRequired,
262
+ isStudentAdGroupMember: PropTypes.bool.isRequired,
263
+ studentMailAddress: PropTypes.string.isRequired,
264
+ studentChosenMailAddress: PropTypes.string.isRequired,
265
+ workMailAddress: PropTypes.string.isRequired,
266
+ workMailDomain: PropTypes.string.isRequired,
267
+ saving: PropTypes.bool.isRequired,
268
+ saved: PropTypes.bool.isRequired,
269
+ loaded: PropTypes.bool.isRequired,
270
+ }).isRequired,
271
+ path: PropTypes.string.isRequired,
272
+ onSaveName: PropTypes.func.isRequired,
273
+ onSaveMail: PropTypes.func.isRequired,
274
+ onSaveMobile: PropTypes.func.isRequired,
275
+ onSaveLanguage: PropTypes.func.isRequired,
276
+ onSaveNextOfKin: PropTypes.func.isRequired,
277
+ dismissMessages: PropTypes.func.isRequired,
278
+ clear: PropTypes.func.isRequired,
279
+ onUserLoaded: PropTypes.func,
280
+ };
281
+
282
+ AUProfileContainerComponent.displayName = 'AUProfileContainerComponent';
283
+ export default AUProfileContainerComponent;
@@ -1,30 +1,30 @@
1
- /* eslint-env browser */
2
- import { useState, useEffect } from 'react';
3
-
4
- const useProfileForm = (saved, history, lang, callback = () => { }) => {
5
- const onCancel = () => {
6
- history.push(`/${lang}/profile`);
7
- callback();
8
- };
9
-
10
- useEffect(() => {
11
- if (saved) {
12
- onCancel();
13
- }
14
- });
15
-
16
- return [onCancel];
17
- };
18
-
19
- const useMobilePrefix = (splitPhoneNumber, countryCodes, phone) => {
20
- const { prefix: p, number: n } = splitPhoneNumber(countryCodes, phone);
21
- const [prefix, setPrefix] = useState(p);
22
- const [mobile, setMobile] = useState(n);
23
-
24
- return [prefix, mobile, setPrefix, setMobile];
25
- };
26
-
27
- export {
28
- useProfileForm,
29
- useMobilePrefix,
30
- };
1
+ /* eslint-env browser */
2
+ import { useState, useEffect } from 'react';
3
+
4
+ const useProfileForm = (saved, history, lang, callback = () => { }) => {
5
+ const onCancel = () => {
6
+ history.push(`/${lang}/profile`);
7
+ callback();
8
+ };
9
+
10
+ useEffect(() => {
11
+ if (saved) {
12
+ onCancel();
13
+ }
14
+ });
15
+
16
+ return [onCancel];
17
+ };
18
+
19
+ const useMobilePrefix = (splitPhoneNumber, countryCodes, phone) => {
20
+ const { prefix: p, number: n } = splitPhoneNumber(countryCodes, phone);
21
+ const [prefix, setPrefix] = useState(p);
22
+ const [mobile, setMobile] = useState(n);
23
+
24
+ return [prefix, mobile, setPrefix, setMobile];
25
+ };
26
+
27
+ export {
28
+ useProfileForm,
29
+ useMobilePrefix,
30
+ };