@aarhus-university/au-lib-react-components 8.20.2 → 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 (167) 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/{components/delphinus/hooks.js → lib/hooks.ts} +33 -26
  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/form/AUMobilePrefixComponent.js +0 -18
  126. package/src/components/news/EventLayout1Component.js +0 -94
  127. package/src/components/news/EventLayout2Component.js +0 -90
  128. package/src/components/news/EventLayout3Component.js +0 -68
  129. package/src/components/news/NewsCategoriesComponent.js +0 -21
  130. package/src/components/news/NewsCollageBannerComponent.js +0 -71
  131. package/src/components/news/NewsColumnsComponent.js +0 -125
  132. package/src/components/news/NewsLanguageChangeComponent.js +0 -74
  133. package/src/components/news/NewsLayout1Component.js +0 -80
  134. package/src/components/news/NewsLayout2Component.js +0 -80
  135. package/src/components/news/NewsLayout3Component.js +0 -81
  136. package/src/components/news/NewsLayout4Component.js +0 -80
  137. package/src/components/news/NewsLayout5Component.js +0 -61
  138. package/src/components/news/NewsLayout6Component.js +0 -55
  139. package/src/components/news/NewsLayout7Component.js +0 -58
  140. package/src/components/news/NewsLayout8Component.js +0 -57
  141. package/src/components/news/NewsListComponent.js +0 -291
  142. package/src/components/news/NewsPopUpComponent.js +0 -591
  143. package/src/components/news/NewsRSSComponent.js +0 -74
  144. package/src/components/news/NewsSocialComponent.js +0 -104
  145. package/src/components/news/NewsSubHeaderComponent.js +0 -19
  146. package/src/components/password/AUChangePasswordComponent.js +0 -177
  147. package/src/components/password/AUCurrentPasswordComponent.js +0 -72
  148. package/src/components/password/AUNewPasswordComponent.js +0 -143
  149. package/src/components/password/AUPasswordActions.js +0 -101
  150. package/src/components/password/AUPasswordHooks.js +0 -47
  151. package/src/components/password/AUPasswordReducer.js +0 -78
  152. package/src/components/password/AUPasswordRequirementsComponent.js +0 -29
  153. package/src/config/webpack.cjs.config.js +0 -75
  154. package/src/config/webpack.dev.config.js +0 -61
  155. package/src/config/webpack.umd.config.js +0 -107
  156. package/src/index.js +0 -6
  157. package/src/lib/au-auth.js +0 -221
  158. package/src/lib/au-news.js +0 -306
  159. package/src/lib/menu.js +0 -10
  160. package/src/lib/urlHandler.js +0 -63
  161. package/src/lib/validation.js +0 -181
  162. package/src/styles/alert.scss +0 -39
  163. package/src/styles/calendar.scss +0 -112
  164. package/src/styles/filtercheckbox.scss +0 -5
  165. package/src/styles/modal.scss +0 -35
  166. package/src/styles/pagination.scss +0 -11
  167. package/src/styles/spinner.scss +0 -30
@@ -0,0 +1,116 @@
1
+ /* eslint-env browser */
2
+ import React, { useEffect, useState, useRef } 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) => {
18
+ const btnRef = useRef();
19
+ if (s.type === 'anchor') {
20
+ return <a key={s.url} className="sub-nav__item" href={s.url}>{s.text}</a>;
21
+ }
22
+ return (
23
+ <button
24
+ key={s.text}
25
+ ref={btnRef}
26
+ type="button"
27
+ className={`sub-nav__item ${s.classNames}`}
28
+ onClick={() => s.onClick(btnRef.current)}
29
+ data-icon={s.icon}
30
+ >
31
+ {s.text}
32
+ </button>
33
+ );
34
+ });
35
+
36
+ useEffect(() => {
37
+ if (auid > 0 && !ctcSet) {
38
+ setCopyToClipboard(lang);
39
+ setCtcSet(true);
40
+ }
41
+ });
42
+
43
+ return (
44
+ <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
45
+ <div className="sub-nav__user">
46
+ <h2 className="sub-nav__user-name">{name}</h2>
47
+ <button
48
+ type="button"
49
+ className="copy-to-clipboard"
50
+ title={profileLabels[lang].copyAuid}
51
+ aria-label={`${profileLabels[lang].auId}: AU${auid}`}
52
+ >
53
+ {`${profileLabels[lang].auId}: `}
54
+ <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
55
+ </button>
56
+ {
57
+ studentNumber && (
58
+ <button
59
+ type="button"
60
+ className="copy-to-clipboard"
61
+ title={profileLabels[lang].copyStudentNumber}
62
+ aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
63
+ >
64
+ {`${profileLabels[lang].studentNumber}: `}
65
+ <span className="copy-to-clipboard__this">{studentNumber}</span>
66
+ </button>
67
+ )
68
+ }
69
+ </div>
70
+ <hr />
71
+ {renderSettings}
72
+ <hr />
73
+ {
74
+ changeLanguageUrl && (
75
+ <>
76
+ <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="">{profileLabels[lang].changeLanguage}</a>
77
+ <hr />
78
+ </>
79
+ )
80
+ }
81
+ <a
82
+ className="sub-nav__item sub-nav__item--icon"
83
+ data-icon=""
84
+ href={logoutUri}
85
+ >
86
+ {profileLabels[lang].logout}
87
+ </a>
88
+ </div>
89
+ );
90
+ });
91
+
92
+ AUProfileWidgetComponent.defaultProps = {
93
+ studentNumber: null,
94
+ changeLanguageUrl: '',
95
+ };
96
+
97
+ AUProfileWidgetComponent.propTypes = {
98
+ lang: PropTypes.string.isRequired,
99
+ name: PropTypes.string.isRequired,
100
+ auid: PropTypes.number.isRequired,
101
+ studentNumber: PropTypes.string,
102
+ settings: PropTypes.arrayOf(PropTypes.shape({
103
+ type: PropTypes.string.isRequired,
104
+ url: PropTypes.string,
105
+ text: PropTypes.string.isRequired,
106
+ onClick: PropTypes.func,
107
+ classNames: PropTypes.string,
108
+ icon: PropTypes.string,
109
+ })).isRequired,
110
+ profileLabels: PropTypes.shape({}).isRequired,
111
+ changeLanguageUrl: PropTypes.string,
112
+ logoutUri: PropTypes.string.isRequired,
113
+ };
114
+
115
+ AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
116
+ export default AUProfileWidgetComponent;
@@ -0,0 +1,130 @@
1
+ /* eslint-env browser */
2
+ import React, { useEffect, useState, useRef } 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) => {
18
+ const btnRef = useRef();
19
+ if (s.type === 'anchor') {
20
+ return (
21
+ <a
22
+ key={s.url}
23
+ className={`sub-nav__item ${s.classNames}`}
24
+ href={s.url}
25
+ data-icon={s.icon}
26
+ data-gtm={s.dataGtm}
27
+ >
28
+ {s.text}
29
+ </a>
30
+ );
31
+ }
32
+ return (
33
+ <button
34
+ key={s.text}
35
+ ref={btnRef}
36
+ type="button"
37
+ disabled={s.disabled}
38
+ className={`sub-nav__item ${s.classNames}`}
39
+ onClick={() => s.onClick(btnRef.current)}
40
+ data-icon={s.icon}
41
+ data-gtm={s.dataGtm}
42
+ >
43
+ {s.text}
44
+ </button>
45
+ );
46
+ });
47
+
48
+ useEffect(() => {
49
+ if (auid > 0 && !ctcSet) {
50
+ setCopyToClipboard(lang);
51
+ setCtcSet(true);
52
+ }
53
+ });
54
+
55
+ return (
56
+ <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
57
+ <div className="sub-nav__user">
58
+ <h2 className="sub-nav__user-name">{name}</h2>
59
+ <button
60
+ type="button"
61
+ className="copy-to-clipboard"
62
+ title={profileLabels[lang].copyAuid}
63
+ aria-label={`${profileLabels[lang].auId}: AU${auid}`}
64
+ data-gtm="au-btn-header-copy-auid"
65
+ >
66
+ {`${profileLabels[lang].auId}: `}
67
+ <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
68
+ </button>
69
+ {
70
+ studentNumber && (
71
+ <button
72
+ type="button"
73
+ className="copy-to-clipboard"
74
+ title={profileLabels[lang].copyStudentNumber}
75
+ aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
76
+ >
77
+ {`${profileLabels[lang].studentNumber}: `}
78
+ <span className="copy-to-clipboard__this">{studentNumber}</span>
79
+ </button>
80
+ )
81
+ }
82
+ </div>
83
+ <hr />
84
+ {renderSettings}
85
+ <hr />
86
+ {
87
+ changeLanguageUrl && (
88
+ <>
89
+ <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
90
+ <hr />
91
+ </>
92
+ )
93
+ }
94
+ <a
95
+ className="sub-nav__item sub-nav__item--icon"
96
+ data-icon=""
97
+ data-gtm="au-a-header-signout"
98
+ href={logoutUri}
99
+ >
100
+ {profileLabels[lang].logout}
101
+ </a>
102
+ </div>
103
+ );
104
+ });
105
+
106
+ AUProfileWidgetComponent.defaultProps = {
107
+ studentNumber: null,
108
+ changeLanguageUrl: '',
109
+ };
110
+
111
+ AUProfileWidgetComponent.propTypes = {
112
+ lang: PropTypes.string.isRequired,
113
+ name: PropTypes.string.isRequired,
114
+ auid: PropTypes.number.isRequired,
115
+ studentNumber: PropTypes.string,
116
+ settings: PropTypes.arrayOf(PropTypes.shape({
117
+ type: PropTypes.string.isRequired,
118
+ url: PropTypes.string,
119
+ text: PropTypes.string.isRequired,
120
+ onClick: PropTypes.func,
121
+ classNames: PropTypes.string,
122
+ icon: PropTypes.string,
123
+ })).isRequired,
124
+ profileLabels: PropTypes.shape({}).isRequired,
125
+ changeLanguageUrl: PropTypes.string,
126
+ logoutUri: PropTypes.string.isRequired,
127
+ };
128
+
129
+ AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
130
+ export default AUProfileWidgetComponent;
@@ -1,47 +1,47 @@
1
- /* eslint-env browser */
2
- import React, { useState } from 'react';
3
- import PropTypes from 'prop-types';
4
- import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
5
- import getSourceForFrame from '../../lib/wrapping';
6
-
7
- const AUEmbedComponent = ({
8
- api,
9
- path,
10
- referrer,
11
- }) => {
12
- const [source, setSource] = useState(null);
13
- const [frameLoaded, setFrameLoaded] = useState(false);
14
-
15
- return (
16
- <AUSpinnerComponent
17
- loaded={frameLoaded}
18
- loadingCondition={!frameLoaded}
19
- onLoad={() => {
20
- getSourceForFrame(api, path, referrer, (frameSrc) => {
21
- setSource(frameSrc.url);
22
- setFrameLoaded(true);
23
- });
24
- }}
25
- >
26
- <iframe
27
- id="AUEmbedIframe"
28
- title="AUEmbed"
29
- src={source}
30
- onLoad={() => {
31
- if (window.iFrameResize) {
32
- window.iFrameResize({ heightCalculationMethods: 'taggedElement', log: false }, '#AUEmbedIframe');
33
- }
34
- }}
35
- />
36
- </AUSpinnerComponent>
37
- );
38
- };
39
-
40
- AUEmbedComponent.propTypes = {
41
- path: PropTypes.string.isRequired,
42
- api: PropTypes.string.isRequired,
43
- referrer: PropTypes.string.isRequired,
44
- };
45
-
46
- AUEmbedComponent.displayName = 'AUEmbedComponent';
47
- export default AUEmbedComponent;
1
+ /* eslint-env browser */
2
+ import React, { useState } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
5
+ import getSourceForFrame from '../../lib/wrapping';
6
+
7
+ const AUEmbedComponent = ({
8
+ api,
9
+ path,
10
+ referrer,
11
+ }) => {
12
+ const [source, setSource] = useState(null);
13
+ const [frameLoaded, setFrameLoaded] = useState(false);
14
+
15
+ return (
16
+ <AUSpinnerComponent
17
+ loaded={frameLoaded}
18
+ loadingCondition={!frameLoaded}
19
+ onLoad={() => {
20
+ getSourceForFrame(api, path, referrer, (frameSrc) => {
21
+ setSource(frameSrc.url);
22
+ setFrameLoaded(true);
23
+ });
24
+ }}
25
+ >
26
+ <iframe
27
+ id="AUEmbedIframe"
28
+ title="AUEmbed"
29
+ src={source}
30
+ onLoad={() => {
31
+ if (window.iFrameResize) {
32
+ window.iFrameResize({ heightCalculationMethods: 'taggedElement', log: false }, '#AUEmbedIframe');
33
+ }
34
+ }}
35
+ />
36
+ </AUSpinnerComponent>
37
+ );
38
+ };
39
+
40
+ AUEmbedComponent.propTypes = {
41
+ path: PropTypes.string.isRequired,
42
+ api: PropTypes.string.isRequired,
43
+ referrer: PropTypes.string.isRequired,
44
+ };
45
+
46
+ AUEmbedComponent.displayName = 'AUEmbedComponent';
47
+ export default AUEmbedComponent;
@@ -1,9 +1,8 @@
1
1
  /* eslint-env browser */
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import axios from 'axios';
5
4
  import AlphaBoxContentComponent from './AlphaBoxContentComponent';
6
- import AutoSuggestComponent from '../AutoSuggestComponent';
5
+ import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
7
6
  import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
8
7
 
9
8
  class AlphaBoxComponent extends React.Component {
@@ -24,19 +23,22 @@ class AlphaBoxComponent extends React.Component {
24
23
  if (data.itemsOnly) {
25
24
  data.source += '?itemsOnly=true';
26
25
  }
27
- axios.get(data.source).then((promise) => {
28
- const { data: pData } = promise;
26
+ fetch(data.source).then((promise) => promise.json()).then((pData) => {
29
27
  this.setState({ items: pData.items });
30
28
  });
31
29
  }
32
30
  }
33
31
 
34
- getSuggestions(value, collection, callback) {
32
+ getSuggestions(value, _, callback) {
35
33
  const { items } = this.state;
36
34
  const inputValue = value.trim().toLowerCase();
37
35
  const inputLength = inputValue.length;
38
36
  callback(inputLength < 2 ? []
39
- : items.filter((x) => x.name.toLowerCase().indexOf(inputValue) > -1)
37
+ : items.filter(
38
+ (x) => x.name.toLowerCase().indexOf(inputValue) > -1
39
+ || x.name.replace(/-/ig, ' ').toLowerCase().indexOf(inputValue) > -1
40
+ || x.name.replace(/ /ig, '-').toLowerCase().indexOf(inputValue) > -1,
41
+ )
40
42
  .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
41
43
  }
42
44
 
@@ -64,35 +66,18 @@ class AlphaBoxComponent extends React.Component {
64
66
  <div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
65
67
  <div>
66
68
  <h2>
67
- <strong>
68
- <a href={config.url}>{config.title}</a>
69
- </strong>
69
+ <a href={config.url}>{config.title}</a>
70
70
  </h2>
71
- {(() => {
72
- if (config.description !== '') {
73
- return <p>{config.description}</p>;
74
- }
75
- return null;
76
- })()}
77
- {(() => {
78
- if (config.links.length > 0) {
79
- return (
80
- <ul className="quicklinks resetlist">
81
- {renderLinks}
82
- </ul>
83
- );
84
- }
85
- return null;
86
- })()}
87
71
  <AlphaBoxContentComponent
88
72
  items={items}
89
73
  linkColor={box.background.linkColor}
74
+ noResultsText={config.noResultsAlphabet}
75
+ noResultsUri={config.noResultsUri}
90
76
  />
91
- <AutoSuggestComponent
77
+ <AUAutoSuggestComponent
92
78
  placeholder={box.search.placeHolder}
93
- setQuery={() => { }}
94
79
  setResults={(_items) => {
95
- if (_items.length === 1 && _items[0].url) {
80
+ if (_items.length >= 1 && _items[0].url) {
96
81
  window.location.href = _items[0].url;
97
82
  }
98
83
  }}
@@ -100,7 +85,20 @@ class AlphaBoxComponent extends React.Component {
100
85
  getSuggestions={this.getSuggestions}
101
86
  getSuggestionValue={(suggestion) => suggestion.name}
102
87
  renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
88
+ noResultsText={config.noResultsSearch}
103
89
  />
90
+ {
91
+ config.description !== '' && (
92
+ <h3>{config.description}</h3>
93
+ )
94
+ }
95
+ {
96
+ config.links.length > 0 && (
97
+ <ul className="quicklinks resetlist">
98
+ {renderLinks}
99
+ </ul>
100
+ )
101
+ }
104
102
  </div>
105
103
  </div>
106
104
  );
@@ -126,6 +124,9 @@ AlphaBoxComponent.propTypes = {
126
124
  url: PropTypes.string.isRequired,
127
125
  })).isRequired,
128
126
  title: PropTypes.string.isRequired,
127
+ noResultsAlphabet: PropTypes.string.isRequired,
128
+ noResultsSearch: PropTypes.string.isRequired,
129
+ noResultsUri: PropTypes.string.isRequired,
129
130
  }).isRequired,
130
131
  background: PropTypes.shape({
131
132
  color: PropTypes.string.isRequired,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { sortAlphaObj } from '../../lib/helpers';
3
+ import { sortAlphaObj } from '../../../lib/helpers';
4
4
 
5
5
  class AlphaBoxContentComponent extends React.Component {
6
6
  constructor(props) {
@@ -13,7 +13,9 @@ class AlphaBoxContentComponent extends React.Component {
13
13
 
14
14
  render() {
15
15
  const { letterIndex } = this.state;
16
- const { items, linkColor } = this.props;
16
+ const {
17
+ items, linkColor, noResultsText, noResultsUri,
18
+ } = this.props;
17
19
 
18
20
  const renderLetters = this.letters.map((l, i) => {
19
21
  const available = items.filter(
@@ -96,29 +98,38 @@ class AlphaBoxContentComponent extends React.Component {
96
98
  <ul className="letters">
97
99
  {renderLetters}
98
100
  </ul>
99
- {(() => {
100
- if (letterIndex > -1) {
101
- return (
102
- <div>
103
- <ul className="items">
104
- {renderItems}
105
- </ul>
106
- </div>
107
- );
108
- }
109
- return null;
110
- })()}
101
+ {
102
+ letterIndex > -1 && (
103
+ <div>
104
+ <ul className="items">
105
+ {renderItems}
106
+ {
107
+ (noResultsText && noResultsUri) && (
108
+ <li className="no-results"><a href={noResultsUri}>{noResultsText}</a></li>
109
+ )
110
+ }
111
+ </ul>
112
+ </div>
113
+ )
114
+ }
111
115
  </div>
112
116
  );
113
117
  }
114
118
  }
115
119
 
120
+ AlphaBoxContentComponent.defaultProps = {
121
+ noResultsText: '',
122
+ noResultsUri: '',
123
+ };
124
+
116
125
  AlphaBoxContentComponent.propTypes = {
117
126
  linkColor: PropTypes.string.isRequired,
118
127
  items: PropTypes.arrayOf(PropTypes.shape({
119
128
  name: PropTypes.string.isRequired,
120
129
  url: PropTypes.string.isRequired,
121
130
  })).isRequired,
131
+ noResultsText: PropTypes.string,
132
+ noResultsUri: PropTypes.string,
122
133
  };
123
134
 
124
135
  AlphaBoxContentComponent.displayName = 'AlphaBoxContentComponent';
@@ -1,28 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
1
2
  import React from 'react';
2
3
  import PropTypes from 'prop-types';
3
4
 
4
- /**
5
- * AU Kollapserbart Komponent
6
- *
7
- * Eksempel:
8
- * ```jsx
9
- * <AUCollapsibleComponent
10
- key="collapse"
11
- collapsed
12
- header="Collapsible element"
13
- level={2}
14
- className="hide-for-small-only"
15
- onClick={(collapsed, node) => {
16
- this.setState({
17
- spinnerVisible: !collapsed,
18
- });
19
- }}
20
- >
21
- <h1>Test</h1>
22
- </AUCollapsibleComponent>
23
- * ```
24
- */
25
-
26
5
  class AUCollapsibleComponent extends React.Component {
27
6
  constructor(props) {
28
7
  super(props);
@@ -1,30 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
1
2
  /* eslint-env browser */
2
3
  import React from 'react';
3
4
  import PropTypes from 'prop-types';
4
- import { isElementInViewport } from '../lib/helpers';
5
- /**
6
- * AU Spinner Komponent
7
- * Bliver brugt til lazy-loading af elementer, der først skal indlæses når de er synlige.
8
- *
9
- * Eksempel:
10
- * ```jsx
11
- * <AUSpinnerComponent
12
- domID={spinnerID}
13
- visible={this.state.spinnerVisible}
14
- columns="large-12 medium-12 small-12"
15
- content={<h1>Hej</h1>}
16
- loaded={this.state.spinnerLoaded}
17
- loadingCondition
18
- onLoad={() => {
19
- setTimeout(() => {
20
- this.setState({
21
- spinnerLoaded: true,
22
- });
23
- }, 2000);
24
- }}
25
- />
26
- * ```
27
- */
5
+ import { isElementInViewport } from '../../../lib/helpers';
28
6
 
29
7
  class AUSpinnerComponent extends React.Component {
30
8
  constructor(props) {
@@ -1,7 +1,7 @@
1
1
  /* eslint-env browser */
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import { sortAlphaObj } from '../../lib/helpers';
4
+ import { sortAlphaObj } from '../../../lib/helpers';
5
5
 
6
6
  class DataBoxAlphabetComponent extends React.Component {
7
7
  constructor(props) {
@@ -1,8 +1,8 @@
1
1
  /* eslint-env browser */
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import { sortAlphaObj } from '../../lib/helpers';
5
- import AUCollapsibleComponent from '../AUCollapsibleComponent';
4
+ import { sortAlphaObj } from '../../../lib/helpers';
5
+ import AUCollapsibleComponent from '../common/AUCollapsibleComponent';
6
6
 
7
7
  class DataBoxAssociationComponent extends React.Component {
8
8
  constructor(props) {
@@ -1,7 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
1
2
  /* eslint-env browser */
2
3
  import React from 'react';
3
4
  import PropTypes from 'prop-types';
4
- import AutoSuggestComponent from '../AutoSuggestComponent';
5
+ import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
5
6
  import DataBoxSuggestionComponent from './DataBoxSuggestionComponent';
6
7
 
7
8
  class DataBoxButtonComponent extends React.Component {
@@ -58,7 +59,7 @@ class DataBoxButtonComponent extends React.Component {
58
59
  return (
59
60
  <div className={classNames} key={i}>
60
61
  <span dangerouslySetInnerHTML={{ __html: b.text }} />
61
- <AutoSuggestComponent
62
+ <AUAutoSuggestComponent
62
63
  placeholder={box.search.placeHolder}
63
64
  setQuery={() => { }}
64
65
  setResults={(items) => {
@@ -130,7 +131,10 @@ DataBoxButtonComponent.propTypes = {
130
131
  searchValue: PropTypes.string,
131
132
  setActive: PropTypes.func.isRequired,
132
133
  setSearchValue: PropTypes.func.isRequired,
133
- button: PropTypes.shape({}).isRequired,
134
+ button: PropTypes.shape({
135
+ text: PropTypes.string.isRequired,
136
+ link: PropTypes.string.isRequired,
137
+ }).isRequired,
134
138
  box: PropTypes.shape({
135
139
  background: PropTypes.shape({
136
140
  color: PropTypes.string.isRequired,
@@ -7,8 +7,8 @@ import DataBoxButtonComponent from './DataBoxButtonComponent';
7
7
  import DataBoxGroupingComponent from './DataBoxGroupingComponent';
8
8
  import DataBoxSearchResultComponent from './DataBoxSearchResultComponent';
9
9
  import DataBoxAlphabetComponent from './DataBoxAlphabetComponent';
10
- import AUSpinnerComponent from '../AUSpinnerComponent';
11
- import { sortAlphaObj } from '../../lib/helpers';
10
+ import AUSpinnerComponent from '../common/AUSpinnerComponent';
11
+ import { sortAlphaObj } from '../../../lib/helpers';
12
12
 
13
13
  class DataBoxComponent extends React.Component {
14
14
  constructor(props) {
@@ -14,10 +14,12 @@ const DataBoxGroupingComponent = (props) => {
14
14
  } = props;
15
15
  let renderAssociations;
16
16
  if (stacked && grouping.associations.length === 1) {
17
+ // eslint-disable-next-line react/destructuring-assignment
17
18
  renderAssociations = props.grouping.associations.map(
18
19
  (a) => <DataBoxStackedAssociationComponent key={a.id} assoc={a} />,
19
20
  );
20
21
  } else {
22
+ // eslint-disable-next-line react/destructuring-assignment
21
23
  renderAssociations = props.grouping.associations.map((a, i) => {
22
24
  const open = expand
23
25
  || grouping.associations.length === 1
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { sortAlphaObj } from '../../lib/helpers';
3
+ import { sortAlphaObj } from '../../../lib/helpers';
4
4
 
5
5
  const DataBoxSearchResultComponent = (props) => {
6
6
  const { items, searchValue } = props;
@@ -23,10 +23,6 @@ const DataBoxSearchResultComponent = (props) => {
23
23
  );
24
24
  };
25
25
 
26
- DataBoxSearchResultComponent.defaultProps = {
27
-
28
- };
29
-
30
26
  DataBoxSearchResultComponent.propTypes = {
31
27
  items: PropTypes.arrayOf(PropTypes.shape({
32
28
  id: PropTypes.number.isRequired,