@aarhus-university/au-lib-react-components 9.11.19 → 10.0.2

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 (165) hide show
  1. package/.eslintrc.js +44 -0
  2. package/README.md +19 -20
  3. package/babel.config.js +7 -6
  4. package/build/umd/all.css +1 -1
  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 -2
  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 -60
  19. package/src/components/{delphinus/AUAlertComponent.js → AUAlertComponent.tsx} +70 -85
  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} +80 -94
  26. package/src/components/{form/AUReceiptComponent.js → AUReceiptComponent.tsx} +33 -40
  27. package/src/components/AUSpinnerComponent.tsx +67 -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/{delphinus/AUTabbedContentComponent.js → AUTabbedContentComponent.tsx} +145 -150
  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 -128
  35. package/src/components/profile/AUProfileAvatarComponent.js +83 -83
  36. package/src/components/profile/AUProfileAvatarV2Component.js +91 -91
  37. package/src/components/profile/AUProfileAvatarV3Component.tsx +42 -0
  38. package/src/components/profile/AUProfileContainerComponent.js +283 -283
  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 → AUProfileLoginComponent.tsx} +3 -18
  43. package/src/components/profile/AUProfileMailComponent.js +307 -307
  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 -230
  48. package/src/components/profile/AUProfileWidgetComponent.js +95 -95
  49. package/src/components/profile/AUProfileWidgetV2Component.js +116 -116
  50. package/src/components/profile/{AUProfileWidgetV3Component.js → AUProfileWidgetV3Component.tsx} +122 -130
  51. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  52. package/src/{components → layout-2016/components}/alphabox/AlphaBoxComponent.js +28 -25
  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} +31 -59
  78. package/src/{components/delphinus/hooks.js → lib/hooks.ts} +33 -28
  79. package/src/lib/{i18n.js → i18n.ts} +600 -601
  80. package/src/lib/{tracking.js → tracking.ts} +69 -65
  81. package/src/lib/{wrapping.js → wrapping.ts} +21 -16
  82. package/src/styles/_settings.scss +10 -10
  83. package/src/styles/alphabox.scss +222 -208
  84. package/src/styles/app.scss +7 -13
  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 +395 -395
  90. package/tsconfig.json +47 -0
  91. package/types/common/interfaces/gui.d.ts +63 -0
  92. package/types/common/interfaces/model.d.ts +29 -0
  93. package/types/common/main.d.ts +5 -0
  94. package/types/common/package.json +5 -0
  95. package/types/common/payloads.d.ts +0 -0
  96. package/types/common/props.d.ts +165 -0
  97. package/{src/config/webpack.umd.config.js → webpack.config.js} +20 -16
  98. package/.eslintrc +0 -19
  99. package/build/dev.html +0 -329
  100. package/build/umd/auAuth.js +0 -2
  101. package/build/umd/auAuth.js.map +0 -1
  102. package/build/umd/databox.js.LICENSE.txt +0 -5
  103. package/build/umd/news.js +0 -2
  104. package/build/umd/news.js.map +0 -1
  105. package/src/all.js +0 -3
  106. package/src/app.js +0 -263
  107. package/src/components/AUAlertComponent.js +0 -158
  108. package/src/components/AUAmountComponent.js +0 -84
  109. package/src/components/AUBannerComponent.js +0 -99
  110. package/src/components/AUCalendarComponent.js +0 -393
  111. package/src/components/AUDatepickerComponent.js +0 -105
  112. package/src/components/AUFilterCheckboxComponent.js +0 -122
  113. package/src/components/AUFocusComponent.js +0 -55
  114. package/src/components/AUModalComponent.js +0 -94
  115. package/src/components/AUPaginationComponent.js +0 -103
  116. package/src/components/context/AUUserContextComponent.js +0 -91
  117. package/src/components/context/ImpersonateComponent.js +0 -54
  118. package/src/components/delphinus/AUCalendarComponent.js +0 -487
  119. package/src/components/delphinus/AUContentToggleComponent.js +0 -32
  120. package/src/components/delphinus/AUDatepickerComponent.js +0 -164
  121. package/src/components/delphinus/AULoginComponent.js +0 -65
  122. package/src/components/delphinus/AUSpinnerComponent.js +0 -114
  123. package/src/components/form/AUMobilePrefixComponent.js +0 -18
  124. package/src/components/news/EventLayout1Component.js +0 -94
  125. package/src/components/news/EventLayout2Component.js +0 -90
  126. package/src/components/news/EventLayout3Component.js +0 -68
  127. package/src/components/news/NewsCategoriesComponent.js +0 -21
  128. package/src/components/news/NewsCollageBannerComponent.js +0 -71
  129. package/src/components/news/NewsCollageBannerRSSComponent.js +0 -79
  130. package/src/components/news/NewsColumnsComponent.js +0 -125
  131. package/src/components/news/NewsLanguageChangeComponent.js +0 -74
  132. package/src/components/news/NewsLayout1Component.js +0 -80
  133. package/src/components/news/NewsLayout2Component.js +0 -80
  134. package/src/components/news/NewsLayout3Component.js +0 -81
  135. package/src/components/news/NewsLayout4Component.js +0 -80
  136. package/src/components/news/NewsLayout5Component.js +0 -61
  137. package/src/components/news/NewsLayout6Component.js +0 -55
  138. package/src/components/news/NewsLayout7Component.js +0 -58
  139. package/src/components/news/NewsLayout8Component.js +0 -57
  140. package/src/components/news/NewsListComponent.js +0 -291
  141. package/src/components/news/NewsPopUpComponent.js +0 -591
  142. package/src/components/news/NewsRSSComponent.js +0 -74
  143. package/src/components/news/NewsSocialComponent.js +0 -104
  144. package/src/components/news/NewsSubHeaderComponent.js +0 -19
  145. package/src/components/password/AUChangePasswordComponent.js +0 -177
  146. package/src/components/password/AUCurrentPasswordComponent.js +0 -72
  147. package/src/components/password/AUNewPasswordComponent.js +0 -143
  148. package/src/components/password/AUPasswordActions.js +0 -101
  149. package/src/components/password/AUPasswordHooks.js +0 -47
  150. package/src/components/password/AUPasswordReducer.js +0 -78
  151. package/src/components/password/AUPasswordRequirementsComponent.js +0 -29
  152. package/src/components/profile/AUProfileAvatarV3Component.js +0 -80
  153. package/src/config/webpack.dev.config.js +0 -47
  154. package/src/index.js +0 -6
  155. package/src/lib/au-auth.js +0 -227
  156. package/src/lib/au-news.js +0 -371
  157. package/src/lib/menu.js +0 -10
  158. package/src/lib/urlHandler.js +0 -63
  159. package/src/lib/validation.js +0 -181
  160. package/src/styles/alert.scss +0 -39
  161. package/src/styles/calendar.scss +0 -112
  162. package/src/styles/filtercheckbox.scss +0 -5
  163. package/src/styles/modal.scss +0 -35
  164. package/src/styles/pagination.scss +0 -11
  165. package/src/styles/spinner.scss +0 -30
@@ -1,283 +1,283 @@
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
+ /* 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
+ };