@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,230 +1,230 @@
1
- import { profileLabels } from '../../lib/i18n';
2
- import {
3
- GET_BASIC_USER,
4
- SAVING_USER,
5
- PATCH_NAME,
6
- PATCH_MAIL,
7
- PATCH_MOBILE,
8
- PATCH_LANGUAGE,
9
- PATCH_NEXTOFKIN,
10
- DISMISS_MESSAGES,
11
- SET_SAVED,
12
- GET_WORKMAIL_DOMAIN,
13
- } from './AUProfileActions';
14
-
15
- export const initialState = {
16
- user: {
17
- auId: 0,
18
- firstNames: '',
19
- lastName: '',
20
- hasChosenName: false,
21
- chosenFirstNames: '',
22
- chosenLastName: '',
23
- name: '',
24
- privateMailAddress: '',
25
- privatePhoneNumber: '',
26
- privateMobileNumber: '',
27
- nextOfKinName: '',
28
- nextOfKinPhoneNumber: '',
29
- preferredLanguage: 'da',
30
- studentNumber: null,
31
- educations: [],
32
- isStudentImpersonator: false,
33
- timelineAllowed: false,
34
- isActiveStudent: false,
35
- suCandidate: false,
36
- studentMailAddress: null,
37
- studentChosenMailAddress: null,
38
- workMailAddress: '',
39
- workMailDomain: '',
40
- saving: false,
41
- saved: false,
42
- loaded: false,
43
- },
44
- messages: [],
45
- };
46
-
47
- export const reducer = (state, action) => {
48
- const nextState = { ...state };
49
-
50
- switch (action.type) {
51
- case GET_BASIC_USER: { // Tror ikke det her i brug...
52
- const { result } = action;
53
- if (result.user) {
54
- const prevUser = { ...nextState.user };
55
- const newUser = Object.assign(prevUser, result.user);
56
- nextState.user = newUser;
57
- } else if (result.error) {
58
- nextState.messages = [{
59
- type: 'warning',
60
- message: result.error.Message,
61
- }];
62
- }
63
- return nextState;
64
- }
65
- case GET_WORKMAIL_DOMAIN: {
66
- const { result } = action;
67
- if (result.user) {
68
- const prevUser = { ...nextState.user };
69
- const newUser = Object.assign(prevUser, result.user);
70
- nextState.user = newUser;
71
- } else if (result.error) {
72
- nextState.messages = [{
73
- type: 'warning',
74
- message: nextState.user.preferredLanguage === 'da' ? result.error.errorMessageDa : result.error.errorMessageEn,
75
- // Skal bruges i de andre profilePatch også?
76
- }];
77
- }
78
- return nextState;
79
- }
80
- case DISMISS_MESSAGES: {
81
- nextState.messages = [];
82
- return nextState;
83
- }
84
- case SET_SAVED: {
85
- const prevUser = { ...nextState.user };
86
- nextState.user = Object.assign(prevUser, {
87
- saved: false,
88
- });
89
- return nextState;
90
- }
91
- case SAVING_USER: {
92
- const prevUser = { ...nextState.user };
93
- nextState.user = Object.assign(prevUser, { saving: true, saved: false });
94
- return nextState;
95
- }
96
- case PATCH_NAME: {
97
- const { result } = action;
98
- const prevUser = { ...nextState.user };
99
- if (result.user) {
100
- const { user: { hasChosenName, chosenFirstNames, chosenLastName } } = result;
101
- nextState.user = Object.assign(prevUser, {
102
- hasChosenName,
103
- chosenFirstNames,
104
- chosenLastName,
105
- saving: false,
106
- saved: true,
107
- });
108
- nextState.messages = [{
109
- type: 'confirm',
110
- message: profileLabels[nextState.user.preferredLanguage].saved,
111
- }];
112
- } else if (result.error) {
113
- nextState.messages = [{
114
- type: 'warning',
115
- message: result.error.Message,
116
- }];
117
- nextState.user = Object.assign(prevUser, { saving: false });
118
- }
119
- return nextState;
120
- }
121
- case PATCH_MAIL: {
122
- const { result } = action;
123
- const prevUser = { ...nextState.user };
124
- if (result.user) {
125
- const { user: { privateMailAddress, workMailAddress, studentChosenMailAddress } } = result;
126
- nextState.user = Object.assign(prevUser, {
127
- workMailAddress,
128
- studentChosenMailAddress,
129
- privateMailAddress,
130
- saving: false,
131
- saved: true,
132
- });
133
- nextState.messages = [{
134
- type: 'confirm',
135
- message: `${profileLabels[nextState.user.preferredLanguage].saved} ${profileLabels[nextState.user.preferredLanguage].mailNotice}`,
136
- }];
137
- } else if (result.error) {
138
- nextState.messages = [{
139
- type: 'warning',
140
- message: nextState.user.preferredLanguage === 'da' ? result.error.errorMessageDa : result.error.errorMessageEn,
141
- // Skal bruges i de andre profilePatch også?
142
- }];
143
- nextState.user = Object.assign(prevUser, { saving: false });
144
- }
145
- return nextState;
146
- }
147
- case PATCH_MOBILE: {
148
- const { result } = action;
149
- const prevUser = { ...nextState.user };
150
- if (result.user) {
151
- const { user: { privatePhoneNumber, privateMobileNumber } } = result;
152
- nextState.user = Object.assign(prevUser, {
153
- privatePhoneNumber,
154
- privateMobileNumber,
155
- saving: false,
156
- saved: true,
157
- });
158
- nextState.messages = [{
159
- type: 'confirm',
160
- message: profileLabels[nextState.user.preferredLanguage].saved,
161
- }];
162
- } else if (result.error) {
163
- if (result.error.Message) {
164
- nextState.messages = [{
165
- type: 'warning',
166
- message: result.error.Message,
167
- }];
168
- } else {
169
- nextState.messages = result.error.map((e) => ({
170
- type: 'warning',
171
- message: e.errorMessage,
172
- }));
173
- }
174
-
175
- nextState.user = Object.assign(prevUser, { saving: false });
176
- }
177
- return nextState;
178
- }
179
- case PATCH_LANGUAGE: {
180
- const { result } = action;
181
- const prevUser = { ...nextState.user };
182
- if (result.user) {
183
- const { user: { preferredLanguage } } = result;
184
- nextState.user = Object.assign(prevUser, {
185
- preferredLanguage,
186
- saving: false,
187
- saved: true,
188
- });
189
- nextState.messages = [{
190
- type: 'confirm',
191
- message: profileLabels[nextState.user.preferredLanguage].saved,
192
- }];
193
- } else if (result.error) {
194
- nextState.messages = [{
195
- type: 'warning',
196
- message: result.error.Message,
197
- }];
198
- nextState.user = Object.assign(prevUser, { saving: false });
199
- }
200
- return nextState;
201
- }
202
- case PATCH_NEXTOFKIN: {
203
- const { result } = action;
204
- const prevUser = { ...nextState.user };
205
- if (result.user) {
206
- const { user: { nextOfKinName, nextOfKinPhoneNumber } } = result;
207
- nextState.user = Object.assign(prevUser, {
208
- nextOfKinName,
209
- nextOfKinPhoneNumber,
210
- saving: false,
211
- saved: true,
212
- });
213
- nextState.messages = [{
214
- type: 'confirm',
215
- message: profileLabels[nextState.user.preferredLanguage].saved,
216
- }];
217
- } else if (result.error) {
218
- nextState.messages = [{
219
- type: 'warning',
220
- message: result.error.Message,
221
- }];
222
- nextState.user = Object.assign(prevUser, { saving: false });
223
- }
224
- return nextState;
225
- }
226
- default: {
227
- return null;
228
- }
229
- }
230
- };
1
+ import { profileLabels } from '../../lib/i18n';
2
+ import {
3
+ GET_BASIC_USER,
4
+ SAVING_USER,
5
+ PATCH_NAME,
6
+ PATCH_MAIL,
7
+ PATCH_MOBILE,
8
+ PATCH_LANGUAGE,
9
+ PATCH_NEXTOFKIN,
10
+ DISMISS_MESSAGES,
11
+ SET_SAVED,
12
+ GET_WORKMAIL_DOMAIN,
13
+ } from './AUProfileActions';
14
+
15
+ export const initialState = {
16
+ user: {
17
+ auId: 0,
18
+ firstNames: '',
19
+ lastName: '',
20
+ hasChosenName: false,
21
+ chosenFirstNames: '',
22
+ chosenLastName: '',
23
+ name: '',
24
+ privateMailAddress: '',
25
+ privatePhoneNumber: '',
26
+ privateMobileNumber: '',
27
+ nextOfKinName: '',
28
+ nextOfKinPhoneNumber: '',
29
+ preferredLanguage: 'da',
30
+ studentNumber: null,
31
+ educations: [],
32
+ isStudentImpersonator: false,
33
+ timelineAllowed: false,
34
+ isActiveStudent: false,
35
+ suCandidate: false,
36
+ studentMailAddress: null,
37
+ studentChosenMailAddress: null,
38
+ workMailAddress: '',
39
+ workMailDomain: '',
40
+ saving: false,
41
+ saved: false,
42
+ loaded: false,
43
+ },
44
+ messages: [],
45
+ };
46
+
47
+ export const reducer = (state, action) => {
48
+ const nextState = { ...state };
49
+
50
+ switch (action.type) {
51
+ case GET_BASIC_USER: { // Tror ikke det her i brug...
52
+ const { result } = action;
53
+ if (result.user) {
54
+ const prevUser = { ...nextState.user };
55
+ const newUser = Object.assign(prevUser, result.user);
56
+ nextState.user = newUser;
57
+ } else if (result.error) {
58
+ nextState.messages = [{
59
+ type: 'warning',
60
+ message: result.error.Message,
61
+ }];
62
+ }
63
+ return nextState;
64
+ }
65
+ case GET_WORKMAIL_DOMAIN: {
66
+ const { result } = action;
67
+ if (result.user) {
68
+ const prevUser = { ...nextState.user };
69
+ const newUser = Object.assign(prevUser, result.user);
70
+ nextState.user = newUser;
71
+ } else if (result.error) {
72
+ nextState.messages = [{
73
+ type: 'warning',
74
+ message: nextState.user.preferredLanguage === 'da' ? result.error.errorMessageDa : result.error.errorMessageEn,
75
+ // Skal bruges i de andre profilePatch også?
76
+ }];
77
+ }
78
+ return nextState;
79
+ }
80
+ case DISMISS_MESSAGES: {
81
+ nextState.messages = [];
82
+ return nextState;
83
+ }
84
+ case SET_SAVED: {
85
+ const prevUser = { ...nextState.user };
86
+ nextState.user = Object.assign(prevUser, {
87
+ saved: false,
88
+ });
89
+ return nextState;
90
+ }
91
+ case SAVING_USER: {
92
+ const prevUser = { ...nextState.user };
93
+ nextState.user = Object.assign(prevUser, { saving: true, saved: false });
94
+ return nextState;
95
+ }
96
+ case PATCH_NAME: {
97
+ const { result } = action;
98
+ const prevUser = { ...nextState.user };
99
+ if (result.user) {
100
+ const { user: { hasChosenName, chosenFirstNames, chosenLastName } } = result;
101
+ nextState.user = Object.assign(prevUser, {
102
+ hasChosenName,
103
+ chosenFirstNames,
104
+ chosenLastName,
105
+ saving: false,
106
+ saved: true,
107
+ });
108
+ nextState.messages = [{
109
+ type: 'confirm',
110
+ message: profileLabels[nextState.user.preferredLanguage].saved,
111
+ }];
112
+ } else if (result.error) {
113
+ nextState.messages = [{
114
+ type: 'warning',
115
+ message: result.error.Message,
116
+ }];
117
+ nextState.user = Object.assign(prevUser, { saving: false });
118
+ }
119
+ return nextState;
120
+ }
121
+ case PATCH_MAIL: {
122
+ const { result } = action;
123
+ const prevUser = { ...nextState.user };
124
+ if (result.user) {
125
+ const { user: { privateMailAddress, workMailAddress, studentChosenMailAddress } } = result;
126
+ nextState.user = Object.assign(prevUser, {
127
+ workMailAddress,
128
+ studentChosenMailAddress,
129
+ privateMailAddress,
130
+ saving: false,
131
+ saved: true,
132
+ });
133
+ nextState.messages = [{
134
+ type: 'confirm',
135
+ message: `${profileLabels[nextState.user.preferredLanguage].saved} ${profileLabels[nextState.user.preferredLanguage].mailNotice}`,
136
+ }];
137
+ } else if (result.error) {
138
+ nextState.messages = [{
139
+ type: 'warning',
140
+ message: nextState.user.preferredLanguage === 'da' ? result.error.errorMessageDa : result.error.errorMessageEn,
141
+ // Skal bruges i de andre profilePatch også?
142
+ }];
143
+ nextState.user = Object.assign(prevUser, { saving: false });
144
+ }
145
+ return nextState;
146
+ }
147
+ case PATCH_MOBILE: {
148
+ const { result } = action;
149
+ const prevUser = { ...nextState.user };
150
+ if (result.user) {
151
+ const { user: { privatePhoneNumber, privateMobileNumber } } = result;
152
+ nextState.user = Object.assign(prevUser, {
153
+ privatePhoneNumber,
154
+ privateMobileNumber,
155
+ saving: false,
156
+ saved: true,
157
+ });
158
+ nextState.messages = [{
159
+ type: 'confirm',
160
+ message: profileLabels[nextState.user.preferredLanguage].saved,
161
+ }];
162
+ } else if (result.error) {
163
+ if (result.error.Message) {
164
+ nextState.messages = [{
165
+ type: 'warning',
166
+ message: result.error.Message,
167
+ }];
168
+ } else {
169
+ nextState.messages = result.error.map((e) => ({
170
+ type: 'warning',
171
+ message: e.errorMessage,
172
+ }));
173
+ }
174
+
175
+ nextState.user = Object.assign(prevUser, { saving: false });
176
+ }
177
+ return nextState;
178
+ }
179
+ case PATCH_LANGUAGE: {
180
+ const { result } = action;
181
+ const prevUser = { ...nextState.user };
182
+ if (result.user) {
183
+ const { user: { preferredLanguage } } = result;
184
+ nextState.user = Object.assign(prevUser, {
185
+ preferredLanguage,
186
+ saving: false,
187
+ saved: true,
188
+ });
189
+ nextState.messages = [{
190
+ type: 'confirm',
191
+ message: profileLabels[nextState.user.preferredLanguage].saved,
192
+ }];
193
+ } else if (result.error) {
194
+ nextState.messages = [{
195
+ type: 'warning',
196
+ message: result.error.Message,
197
+ }];
198
+ nextState.user = Object.assign(prevUser, { saving: false });
199
+ }
200
+ return nextState;
201
+ }
202
+ case PATCH_NEXTOFKIN: {
203
+ const { result } = action;
204
+ const prevUser = { ...nextState.user };
205
+ if (result.user) {
206
+ const { user: { nextOfKinName, nextOfKinPhoneNumber } } = result;
207
+ nextState.user = Object.assign(prevUser, {
208
+ nextOfKinName,
209
+ nextOfKinPhoneNumber,
210
+ saving: false,
211
+ saved: true,
212
+ });
213
+ nextState.messages = [{
214
+ type: 'confirm',
215
+ message: profileLabels[nextState.user.preferredLanguage].saved,
216
+ }];
217
+ } else if (result.error) {
218
+ nextState.messages = [{
219
+ type: 'warning',
220
+ message: result.error.Message,
221
+ }];
222
+ nextState.user = Object.assign(prevUser, { saving: false });
223
+ }
224
+ return nextState;
225
+ }
226
+ default: {
227
+ return null;
228
+ }
229
+ }
230
+ };
@@ -1,95 +1,95 @@
1
- /* eslint-env browser */
2
- import React, { useEffect, useState } from 'react';
3
- import PropTypes from 'prop-types';
4
- import { setCopyToClipboard } from '@aarhus-university/au-designsystem-delphinus/source/js/components/nav';
5
-
6
- const AUProfileWidgetComponent = React.memo(({
7
- lang,
8
- name,
9
- auid,
10
- studentNumber,
11
- settings,
12
- changeLanguageUrl,
13
- logoutUri,
14
- profileLabels,
15
- }) => {
16
- const [ctcSet, setCtcSet] = useState(false);
17
- const renderSettings = settings.map((s) => <a key={s.url} className="sub-nav__item" href={s.url}>{s.text}</a>);
18
-
19
- useEffect(() => {
20
- if (auid > 0 && !ctcSet) {
21
- setCopyToClipboard(lang);
22
- setCtcSet(true);
23
- }
24
- });
25
-
26
- return (
27
- <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
28
- <div className="sub-nav__user">
29
- <h2 className="sub-nav__user-name">{name}</h2>
30
- <button
31
- type="button"
32
- className="copy-to-clipboard"
33
- title={profileLabels[lang].copyAuid}
34
- aria-label={`${profileLabels[lang].auId}: AU${auid}`}
35
- >
36
- {`${profileLabels[lang].auId}: `}
37
- <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
38
- </button>
39
- {
40
- studentNumber && (
41
- <button
42
- type="button"
43
- className="copy-to-clipboard"
44
- title={profileLabels[lang].copyStudentNumber}
45
- aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
46
- >
47
- {`${profileLabels[lang].studentNumber}: `}
48
- <span className="copy-to-clipboard__this">{studentNumber}</span>
49
- </button>
50
- )
51
- }
52
- </div>
53
- <hr />
54
- {renderSettings}
55
- <hr />
56
- {
57
- changeLanguageUrl && (
58
- <>
59
- <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="">{profileLabels[lang].changeLanguage}</a>
60
- <hr />
61
- </>
62
- )
63
- }
64
- <a
65
- className="sub-nav__item sub-nav__item--icon"
66
- data-icon=""
67
- href={logoutUri}
68
- >
69
- {profileLabels[lang].logout}
70
- </a>
71
- </div>
72
- );
73
- });
74
-
75
- AUProfileWidgetComponent.defaultProps = {
76
- studentNumber: null,
77
- changeLanguageUrl: null,
78
- };
79
-
80
- AUProfileWidgetComponent.propTypes = {
81
- lang: PropTypes.string.isRequired,
82
- name: PropTypes.string.isRequired,
83
- auid: PropTypes.number.isRequired,
84
- studentNumber: PropTypes.string,
85
- settings: PropTypes.arrayOf(PropTypes.shape({
86
- url: PropTypes.string.isRequired,
87
- text: PropTypes.string.isRequired,
88
- })).isRequired,
89
- profileLabels: PropTypes.shape({}).isRequired,
90
- changeLanguageUrl: PropTypes.string,
91
- logoutUri: PropTypes.string.isRequired,
92
- };
93
-
94
- AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
95
- export default AUProfileWidgetComponent;
1
+ /* eslint-env browser */
2
+ import React, { useEffect, useState } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { setCopyToClipboard } from '@aarhus-university/au-designsystem-delphinus/source/js/components/nav';
5
+
6
+ const AUProfileWidgetComponent = React.memo(({
7
+ lang,
8
+ name,
9
+ auid,
10
+ studentNumber,
11
+ settings,
12
+ changeLanguageUrl,
13
+ logoutUri,
14
+ profileLabels,
15
+ }) => {
16
+ const [ctcSet, setCtcSet] = useState(false);
17
+ const renderSettings = settings.map((s) => <a key={s.url} className="sub-nav__item" href={s.url}>{s.text}</a>);
18
+
19
+ useEffect(() => {
20
+ if (auid > 0 && !ctcSet) {
21
+ setCopyToClipboard(lang);
22
+ setCtcSet(true);
23
+ }
24
+ });
25
+
26
+ return (
27
+ <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
28
+ <div className="sub-nav__user">
29
+ <h2 className="sub-nav__user-name">{name}</h2>
30
+ <button
31
+ type="button"
32
+ className="copy-to-clipboard"
33
+ title={profileLabels[lang].copyAuid}
34
+ aria-label={`${profileLabels[lang].auId}: AU${auid}`}
35
+ >
36
+ {`${profileLabels[lang].auId}: `}
37
+ <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
38
+ </button>
39
+ {
40
+ studentNumber && (
41
+ <button
42
+ type="button"
43
+ className="copy-to-clipboard"
44
+ title={profileLabels[lang].copyStudentNumber}
45
+ aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
46
+ >
47
+ {`${profileLabels[lang].studentNumber}: `}
48
+ <span className="copy-to-clipboard__this">{studentNumber}</span>
49
+ </button>
50
+ )
51
+ }
52
+ </div>
53
+ <hr />
54
+ {renderSettings}
55
+ <hr />
56
+ {
57
+ changeLanguageUrl && (
58
+ <>
59
+ <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="">{profileLabels[lang].changeLanguage}</a>
60
+ <hr />
61
+ </>
62
+ )
63
+ }
64
+ <a
65
+ className="sub-nav__item sub-nav__item--icon"
66
+ data-icon=""
67
+ href={logoutUri}
68
+ >
69
+ {profileLabels[lang].logout}
70
+ </a>
71
+ </div>
72
+ );
73
+ });
74
+
75
+ AUProfileWidgetComponent.defaultProps = {
76
+ studentNumber: null,
77
+ changeLanguageUrl: null,
78
+ };
79
+
80
+ AUProfileWidgetComponent.propTypes = {
81
+ lang: PropTypes.string.isRequired,
82
+ name: PropTypes.string.isRequired,
83
+ auid: PropTypes.number.isRequired,
84
+ studentNumber: PropTypes.string,
85
+ settings: PropTypes.arrayOf(PropTypes.shape({
86
+ url: PropTypes.string.isRequired,
87
+ text: PropTypes.string.isRequired,
88
+ })).isRequired,
89
+ profileLabels: PropTypes.shape({}).isRequired,
90
+ changeLanguageUrl: PropTypes.string,
91
+ logoutUri: PropTypes.string.isRequired,
92
+ };
93
+
94
+ AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
95
+ export default AUProfileWidgetComponent;