@aarhus-university/au-lib-react-components 9.11.18 → 10.0.1

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} +33 -58
  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 +52 -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,7 +1,8 @@
1
1
  /* eslint-env browser */
2
2
  /* NO IMPORTS! */
3
3
 
4
- const { serviceScopeProfile } = window; // Sættes pr. webapp
4
+ // eslint-disable-next-line no-control-regex
5
+ const emailRegex = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
5
6
 
6
7
  const sortAlphaObj = (a, b) => {
7
8
  if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {
@@ -10,7 +11,7 @@ const sortAlphaObj = (a, b) => {
10
11
  return 0;
11
12
  };
12
13
 
13
- const isElementInViewport = (element) => {
14
+ const isElementInViewport = (element: HTMLElement): boolean => {
14
15
  if (element === null) {
15
16
  return false;
16
17
  }
@@ -23,7 +24,7 @@ const isElementInViewport = (element) => {
23
24
  && rect.top < (window.innerHeight || document.documentElement.clientHeight);
24
25
  };
25
26
 
26
- const isElementPartlyInViewport = (element) => {
27
+ const isElementPartlyInViewport = (element: HTMLElement): boolean => {
27
28
  let top = element.offsetTop;
28
29
  let left = element.offsetLeft;
29
30
  const width = element.offsetWidth;
@@ -31,7 +32,7 @@ const isElementPartlyInViewport = (element) => {
31
32
 
32
33
  let offsetElement = element;
33
34
  while (offsetElement.offsetParent) {
34
- offsetElement = element.offsetParent;
35
+ offsetElement = element.offsetParent as HTMLElement;
35
36
  top += element.offsetTop;
36
37
  left += element.offsetLeft;
37
38
  }
@@ -44,7 +45,14 @@ const isElementPartlyInViewport = (element) => {
44
45
  );
45
46
  };
46
47
 
47
- const setCookie = (cookieName, value, maxAge = null, exdays = null, path = ';path=/;domain=au.dk') => {
48
+ const setCookie = (
49
+ cookieName: string,
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ value: any,
52
+ maxAge: number | null = null,
53
+ exdays: number | null = null,
54
+ path = ';path=/;domain=au.dk',
55
+ ): void => {
48
56
  let cookieValue = encodeURI(value);
49
57
  if (exdays != null) {
50
58
  const exdate = new Date();
@@ -57,8 +65,8 @@ const setCookie = (cookieName, value, maxAge = null, exdays = null, path = ';pat
57
65
  document.cookie = `${cookieName}=${cookieValue}${path}`;
58
66
  };
59
67
 
60
- const getCookie = (cookieName) => {
61
- let cookieValue = document.cookie;
68
+ const getCookie = (cookieName: string): string | null => {
69
+ let cookieValue: string | null = document.cookie;
62
70
  let cookieStart = cookieValue.indexOf(` ${cookieName}=`);
63
71
  if (cookieStart === -1) {
64
72
  cookieStart = cookieValue.indexOf(`${cookieName}=`);
@@ -76,7 +84,7 @@ const getCookie = (cookieName) => {
76
84
  return cookieValue;
77
85
  };
78
86
 
79
- const addToSessionStorage = (key, data) => {
87
+ const addToSessionStorage = (key: string, data: unknown): unknown => {
80
88
  if (window.sessionStorage) {
81
89
  sessionStorage.setItem(key, JSON.stringify(data));
82
90
  }
@@ -84,7 +92,7 @@ const addToSessionStorage = (key, data) => {
84
92
  return data;
85
93
  };
86
94
 
87
- const getFromSessionStorage = (key) => {
95
+ const getFromSessionStorage = (key: string): unknown | null => {
88
96
  if (window.sessionStorage) {
89
97
  const data = sessionStorage.getItem(key);
90
98
  if (data) {
@@ -95,7 +103,7 @@ const getFromSessionStorage = (key) => {
95
103
  return null;
96
104
  };
97
105
 
98
- const addToLocalStorage = (key, data) => {
106
+ const addToLocalStorage = (key: string, data: unknown): unknown => {
99
107
  if (window.localStorage) {
100
108
  localStorage.setItem(key, JSON.stringify(data));
101
109
  }
@@ -103,7 +111,7 @@ const addToLocalStorage = (key, data) => {
103
111
  return data;
104
112
  };
105
113
 
106
- const getFromLocalStorage = (key) => {
114
+ const getFromLocalStorage = (key: string): unknown | null => {
107
115
  if (window.localStorage) {
108
116
  const data = localStorage.getItem(key);
109
117
  if (data) {
@@ -114,35 +122,8 @@ const getFromLocalStorage = (key) => {
114
122
  return null;
115
123
  };
116
124
 
117
- const setContextInSession = (key, data, clearPrevious = true) => {
118
- if (clearPrevious) {
119
- Object.entries(window.sessionStorage).forEach((entry) => {
120
- const entryKey = entry[0];
121
- if (entryKey.includes('user-context')) {
122
- window.sessionStorage.removeItem(entryKey);
123
- }
124
- });
125
- }
126
- window.sessionStorage.setItem(`user-context-${key}`, data);
127
- };
128
-
129
- const getContextFromSession = (key = '', any = false) => {
130
- if (any) {
131
- let foundContext = null;
132
- Object.entries(window.sessionStorage).forEach((entry) => {
133
- const entryKey = entry[0];
134
- if (entryKey.includes('user-context')) {
135
- foundContext = window.sessionStorage.getItem(entryKey);
136
- }
137
- });
138
- return foundContext;
139
- }
140
-
141
- return window.sessionStorage.getItem(`user-context-${key}`);
142
- };
143
-
144
125
  // Credits: http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
145
- const setCaretPosition = (element, pos) => {
126
+ const setCaretPosition = (element: HTMLInputElement, pos: number): void => {
146
127
  // Modern browsers
147
128
  if (element && element.setSelectionRange) {
148
129
  element.focus();
@@ -150,16 +131,19 @@ const setCaretPosition = (element, pos) => {
150
131
  }
151
132
  };
152
133
 
153
- const splitPhoneNumber = (countryCodes, phoneNumber) => {
154
- const countryCodeFound = (code) => countryCodes.filter(
134
+ const splitPhoneNumber = (
135
+ countryCodes: AU.ICountryCode[],
136
+ phoneNumber: string,
137
+ ): AU.IPhoneNumber => {
138
+ const countryCodeFound = (code: string) => countryCodes.filter(
155
139
  (x) => x.code === parseInt(code, 10),
156
140
  ).length > 0;
157
141
 
158
- const findPrefix = () => {
142
+ const findPrefix = (): string => {
159
143
  if (countryCodes.length > 0) {
160
144
  const skip = '';
161
145
  let count = 1;
162
- let prefix = countryCodes.find((x) => x.important).code;
146
+ let prefix = `${countryCodes.find((x) => x.important)?.code}`;
163
147
  while (count < phoneNumber.length) {
164
148
  const split = phoneNumber.substring(skip.length, skip.length + count);
165
149
  if (countryCodeFound(split)) {
@@ -179,25 +163,21 @@ const splitPhoneNumber = (countryCodes, phoneNumber) => {
179
163
  };
180
164
  };
181
165
 
182
- const prettyPrintPhone = (countryCodes, phone) => {
166
+ const prettyPrintPhone = (countryCodes: AU.ICountryCode[], phone: string) => {
183
167
  if (phone) {
184
168
  const { prefix, number } = splitPhoneNumber(countryCodes, phone);
185
- return `${prefix} ${number.match(/\d{1,2}/g).join(' ')}`;
169
+ if (prefix) {
170
+ return `${prefix} ${number?.match(/\d{1,2}/g)?.join(' ')}`;
171
+ }
172
+ return number?.match(/\d{1,2}/g)?.join(' ');
186
173
  }
187
174
  return '';
188
175
  };
189
176
 
190
- const getAccessToken = (auAuth, serviceScope, callback) => {
191
- auAuth.getAccessToken([serviceScope]).then((accessToken) => {
192
- callback(accessToken.accessToken);
193
- });
194
- };
195
-
196
- const parseError = (errorArray) => errorArray.map((e) => e.errorMessage).join(', ');
197
-
198
177
  const scrollTo = (x = 0, y = 0) => window.scrollTo(x, y);
199
178
 
200
179
  export {
180
+ emailRegex,
201
181
  sortAlphaObj,
202
182
  isElementInViewport,
203
183
  isElementPartlyInViewport,
@@ -208,12 +188,7 @@ export {
208
188
  addToSessionStorage,
209
189
  getFromSessionStorage,
210
190
  setCaretPosition,
211
- getAccessToken,
212
- serviceScopeProfile,
213
191
  splitPhoneNumber,
214
192
  prettyPrintPhone,
215
- parseError,
216
193
  scrollTo,
217
- setContextInSession,
218
- getContextFromSession,
219
194
  };
@@ -1,28 +1,33 @@
1
- /* eslint-disable import/prefer-default-export */
2
- import { useState, useEffect } from 'react';
3
- import { showModal, hideModal } from '@aarhus-university/au-designsystem-delphinus/source/js/components/modal-view';
4
-
5
- // eslint-disable-next-line max-len
6
- const useModal = (domId, initialState, showCondition = true, hideCondition = false, closeable = true) => {
7
- const [modal, setModal] = useState({ modal: initialState, sender: null });
8
-
9
- useEffect(() => {
10
- if (modal.modal && modal.sender && showCondition) {
11
- showModal(domId, modal.sender, () => {
12
- setModal({ modal: false, sender: null });
13
- }, closeable);
14
- }
15
-
16
- if (modal.modal && modal.sender && hideCondition) {
17
- hideModal(domId, modal.sender, () => {
18
- setModal({ modal: false, sender: null });
19
- });
20
- }
21
- });
22
-
23
- return [modal, setModal];
24
- };
25
-
26
- export {
27
- useModal,
28
- };
1
+ /* eslint-disable import/prefer-default-export */
2
+ import { useState, useEffect } from 'react';
3
+ import { showModal, hideModal } from '@aarhus-university/au-designsystem-delphinus/source/js/components/modal-view';
4
+
5
+ const useModal = (
6
+ domId: string,
7
+ initialState: boolean,
8
+ showCondition = true,
9
+ hideCondition = false,
10
+ closeable = true,
11
+ ): [IModal, (modal: IModal) => void] => {
12
+ const [modal, setModal] = useState<IModal>({ modal: initialState, sender: null });
13
+
14
+ useEffect(() => {
15
+ if (modal.modal && modal.sender && showCondition) {
16
+ showModal(domId, modal.sender, () => {
17
+ setModal({ modal: false, sender: null });
18
+ }, closeable);
19
+ }
20
+
21
+ if (modal.modal && modal.sender && hideCondition) {
22
+ hideModal(domId, modal.sender, () => {
23
+ setModal({ modal: false, sender: null });
24
+ });
25
+ }
26
+ });
27
+
28
+ return [modal, setModal];
29
+ };
30
+
31
+ export {
32
+ useModal,
33
+ };