@aarhus-university/au-lib-react-components 9.11.9 → 9.11.13

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 (141) hide show
  1. package/.eslintrc +18 -18
  2. package/README.md +20 -20
  3. package/babel.config.js +6 -6
  4. package/build/dev.html +328 -328
  5. package/build/umd/all.css +2 -2
  6. package/build/umd/all.js +1 -1
  7. package/build/umd/alphabox.js +1 -1
  8. package/build/umd/auAuth.js +1 -1
  9. package/build/umd/databox.js +2 -2
  10. package/build/umd/databox.js.LICENSE.txt +5 -5
  11. package/build/umd/diagramme.js +1 -1
  12. package/build/umd/flowbox.js +1 -1
  13. package/build/umd/news.js +1 -1
  14. package/build/umd/universe.js +1 -1
  15. package/package.json +60 -60
  16. package/src/all.js +3 -3
  17. package/src/app.js +263 -263
  18. package/src/components/AUAlertComponent.js +158 -158
  19. package/src/components/AUAmountComponent.js +84 -84
  20. package/src/components/AUBannerComponent.js +99 -99
  21. package/src/components/AUCalendarComponent.js +393 -393
  22. package/src/components/AUCollapsibleComponent.js +173 -173
  23. package/src/components/AUDatepickerComponent.js +105 -105
  24. package/src/components/AUDiagrammeComponent.js +310 -310
  25. package/src/components/AUFilterCheckboxComponent.js +122 -122
  26. package/src/components/AUFocusComponent.js +55 -55
  27. package/src/components/AUModalComponent.js +94 -94
  28. package/src/components/AUPaginationComponent.js +103 -103
  29. package/src/components/AUSpinnerComponent.js +125 -125
  30. package/src/components/AutoSuggestComponent.js +132 -132
  31. package/src/components/alphabox/AlphaBoxComponent.js +140 -140
  32. package/src/components/alphabox/AlphaBoxContentComponent.js +125 -125
  33. package/src/components/context/AUUserContextComponent.js +91 -91
  34. package/src/components/context/ImpersonateComponent.js +54 -54
  35. package/src/components/databox/DataBoxAlphabetComponent.js +144 -144
  36. package/src/components/databox/DataBoxAssociationComponent.js +122 -122
  37. package/src/components/databox/DataBoxButtonComponent.js +153 -153
  38. package/src/components/databox/DataBoxComponent.js +297 -297
  39. package/src/components/databox/DataBoxGroupingComponent.js +62 -62
  40. package/src/components/databox/DataBoxSearchResultComponent.js +40 -40
  41. package/src/components/databox/DataBoxStackedAssociationComponent.js +58 -58
  42. package/src/components/databox/DataBoxSuggestionComponent.js +39 -39
  43. package/src/components/delphinus/AUAlertComponent.js +85 -85
  44. package/src/components/delphinus/AUCalendarComponent.js +487 -487
  45. package/src/components/delphinus/AUContentToggleComponent.js +32 -32
  46. package/src/components/delphinus/AUDatepickerComponent.js +164 -164
  47. package/src/components/delphinus/AULoginComponent.js +65 -65
  48. package/src/components/delphinus/AUModalComponent.js +89 -89
  49. package/src/components/delphinus/AUSpinnerComponent.js +74 -114
  50. package/src/components/delphinus/AUSubNavComponent.js +53 -53
  51. package/src/components/delphinus/AUTabbedContentComponent.js +150 -150
  52. package/src/components/delphinus/AUTableComponent.js +28 -28
  53. package/src/components/delphinus/AUToastComponent.js +91 -91
  54. package/src/components/delphinus/AUToolbarComponent.js +48 -48
  55. package/src/components/delphinus/hooks.js +28 -26
  56. package/src/components/flowbox/FlowBoxComponent.js +126 -126
  57. package/src/components/flowbox/FlowBoxPhoneComponent.js +106 -106
  58. package/src/components/form/AUMobilePrefixComponent.js +18 -18
  59. package/src/components/form/AUReceiptComponent.js +40 -40
  60. package/src/components/form/AUSubmitButtonContainerComponent.js +39 -39
  61. package/src/components/news/EventLayout1Component.js +94 -94
  62. package/src/components/news/EventLayout2Component.js +90 -90
  63. package/src/components/news/EventLayout3Component.js +68 -68
  64. package/src/components/news/NewsCategoriesComponent.js +21 -21
  65. package/src/components/news/NewsCollageBannerComponent.js +71 -71
  66. package/src/components/news/NewsCollageBannerRSSComponent.js +79 -79
  67. package/src/components/news/NewsColumnsComponent.js +125 -125
  68. package/src/components/news/NewsLanguageChangeComponent.js +74 -74
  69. package/src/components/news/NewsLayout1Component.js +80 -80
  70. package/src/components/news/NewsLayout2Component.js +80 -80
  71. package/src/components/news/NewsLayout3Component.js +81 -81
  72. package/src/components/news/NewsLayout4Component.js +80 -80
  73. package/src/components/news/NewsLayout5Component.js +61 -61
  74. package/src/components/news/NewsLayout6Component.js +55 -55
  75. package/src/components/news/NewsLayout7Component.js +58 -58
  76. package/src/components/news/NewsLayout8Component.js +57 -57
  77. package/src/components/news/NewsListComponent.js +291 -291
  78. package/src/components/news/NewsPopUpComponent.js +591 -591
  79. package/src/components/news/NewsRSSComponent.js +74 -74
  80. package/src/components/news/NewsSocialComponent.js +104 -104
  81. package/src/components/news/NewsSubHeaderComponent.js +19 -19
  82. package/src/components/password/AUChangePasswordComponent.js +177 -177
  83. package/src/components/password/AUCurrentPasswordComponent.js +72 -72
  84. package/src/components/password/AUNewPasswordComponent.js +143 -143
  85. package/src/components/password/AUPasswordActions.js +101 -101
  86. package/src/components/password/AUPasswordHooks.js +47 -47
  87. package/src/components/password/AUPasswordReducer.js +78 -78
  88. package/src/components/password/AUPasswordRequirementsComponent.js +29 -29
  89. package/src/components/profile/AUProfileActions.js +128 -128
  90. package/src/components/profile/AUProfileAvatar2016Component.js +99 -99
  91. package/src/components/profile/AUProfileAvatarComponent.js +83 -83
  92. package/src/components/profile/AUProfileAvatarV2Component.js +91 -91
  93. package/src/components/profile/AUProfileAvatarV3Component.js +79 -79
  94. package/src/components/profile/AUProfileContainerComponent.js +283 -283
  95. package/src/components/profile/AUProfileHooks.js +30 -30
  96. package/src/components/profile/AUProfileItemComponent.js +54 -54
  97. package/src/components/profile/AUProfileLanguageComponent.js +131 -131
  98. package/src/components/profile/AUProfileLoginComponent.js +41 -41
  99. package/src/components/profile/AUProfileMailComponent.js +307 -307
  100. package/src/components/profile/AUProfileMobileComponent.js +164 -164
  101. package/src/components/profile/AUProfileNameComponent.js +253 -253
  102. package/src/components/profile/AUProfileNextOfKinComponent.js +216 -216
  103. package/src/components/profile/AUProfileReducer.js +230 -230
  104. package/src/components/profile/AUProfileWidgetComponent.js +95 -95
  105. package/src/components/profile/AUProfileWidgetV2Component.js +116 -116
  106. package/src/components/profile/AUProfileWidgetV3Component.js +129 -129
  107. package/src/components/universe/StaffTopComponent.js +362 -362
  108. package/src/components/universe/StudentTopComponent.js +137 -137
  109. package/src/components/universe/UniverseContainerComponent.js +62 -62
  110. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  111. package/src/config/webpack.dev.config.js +47 -47
  112. package/src/config/webpack.umd.config.js +85 -85
  113. package/src/index.js +6 -6
  114. package/src/lib/au-alphabox.js +102 -102
  115. package/src/lib/au-auth.js +227 -227
  116. package/src/lib/au-databox.js +403 -403
  117. package/src/lib/au-diagramme.js +87 -87
  118. package/src/lib/au-flowbox.js +95 -95
  119. package/src/lib/au-news.js +371 -371
  120. package/src/lib/helpers.js +216 -216
  121. package/src/lib/i18n.js +601 -601
  122. package/src/lib/menu.js +10 -10
  123. package/src/lib/tracking.js +65 -65
  124. package/src/lib/universe.js +9 -9
  125. package/src/lib/urlHandler.js +63 -63
  126. package/src/lib/validation.js +181 -181
  127. package/src/lib/wrapping.js +16 -16
  128. package/src/styles/_settings.scss +10 -10
  129. package/src/styles/alert.scss +39 -39
  130. package/src/styles/alphabox.scss +208 -208
  131. package/src/styles/app.scss +13 -13
  132. package/src/styles/autosuggest.scss +57 -57
  133. package/src/styles/calendar.scss +111 -111
  134. package/src/styles/databox.scss +563 -563
  135. package/src/styles/diagramme.scss +119 -119
  136. package/src/styles/filtercheckbox.scss +4 -4
  137. package/src/styles/flowbox.scss +72 -72
  138. package/src/styles/maps.scss +395 -395
  139. package/src/styles/modal.scss +34 -34
  140. package/src/styles/pagination.scss +10 -10
  141. package/src/styles/spinner.scss +30 -30
@@ -1,132 +1,132 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import Autosuggest from 'react-autosuggest';
4
- import debounce from 'lodash.debounce';
5
-
6
- class AutoSuggestComponent extends React.Component {
7
- constructor(props) {
8
- super(props);
9
- this.state = {
10
- value: '',
11
- suggestions: [],
12
- };
13
-
14
- this.onChange = this.onChange.bind(this);
15
- this.onSuggestionsFetchRequested = debounce(this.onSuggestionsFetchRequested.bind(this), 400);
16
- this.onSuggestionsClearRequested = this.onSuggestionsClearRequested.bind(this);
17
- this.onSuggestionSelected = this.onSuggestionSelected.bind(this);
18
- }
19
-
20
- onChange(event, { newValue }) {
21
- const { setQuery } = this.props;
22
- this.setState({
23
- value: newValue,
24
- }, () => {
25
- setQuery(newValue);
26
- });
27
- }
28
-
29
- onSuggestionsFetchRequested({ value }) {
30
- const { getSuggestions, collection } = this.props;
31
- getSuggestions(value, collection, (suggestions) => {
32
- this.setState({
33
- suggestions,
34
- });
35
- });
36
- }
37
-
38
- onSuggestionsClearRequested() {
39
- this.setState({
40
- suggestions: [],
41
- });
42
- }
43
-
44
- onSuggestionSelected(event, { suggestion }) {
45
- const { setResults, clearInput } = this.props;
46
- setResults([suggestion]);
47
- if (clearInput) {
48
- this.setState({
49
- value: '',
50
- });
51
- }
52
- }
53
-
54
- render() {
55
- const { value, suggestions } = this.state;
56
- const {
57
- placeholder,
58
- getSuggestionValue,
59
- renderSuggestion,
60
- id,
61
- theme,
62
- type,
63
- initialValue,
64
- disabled,
65
- } = this.props;
66
- const inputProps = {
67
- placeholder,
68
- value: initialValue || value,
69
- id,
70
- type,
71
- disabled,
72
- 'aria-label': placeholder,
73
- onChange: this.onChange,
74
- };
75
-
76
- return (
77
- <Autosuggest
78
- suggestions={suggestions}
79
- onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
80
- onSuggestionsClearRequested={this.onSuggestionsClearRequested}
81
- onSuggestionSelected={this.onSuggestionSelected}
82
- getSuggestionValue={getSuggestionValue}
83
- renderSuggestion={renderSuggestion}
84
- inputProps={inputProps}
85
- theme={theme}
86
- />
87
- );
88
- }
89
- }
90
-
91
- AutoSuggestComponent.displayName = 'AutoSuggestComponent';
92
-
93
- AutoSuggestComponent.defaultProps = {
94
- id: 'autosuggest1',
95
- theme: {
96
- container: 'react-autosuggest__container',
97
- containerOpen: 'react-autosuggest__container--open',
98
- input: 'react-autosuggest__input',
99
- inputOpen: 'react-autosuggest__input--open',
100
- inputFocused: 'react-autosuggest__input--focused',
101
- suggestionsContainer: 'react-autosuggest__suggestions-container',
102
- suggestionsContainerOpen: 'react-autosuggest__suggestions-container--open',
103
- suggestionsList: 'react-autosuggest__suggestions-list',
104
- suggestion: 'react-autosuggest__suggestion',
105
- suggestionFirst: 'react-autosuggest__suggestion--first',
106
- suggestionHighlighted: 'react-autosuggest__suggestion--highlighted',
107
- sectionContainer: 'react-autosuggest__section-container',
108
- sectionContainerFirst: 'react-autosuggest__section-container--first',
109
- sectionTitle: 'react-autosuggest__section-title',
110
- },
111
- clearInput: false,
112
- type: 'text',
113
- initialValue: '',
114
- disabled: false,
115
- };
116
-
117
- AutoSuggestComponent.propTypes = {
118
- setQuery: PropTypes.func.isRequired,
119
- getSuggestions: PropTypes.func.isRequired,
120
- getSuggestionValue: PropTypes.func.isRequired,
121
- renderSuggestion: PropTypes.func.isRequired,
122
- setResults: PropTypes.func.isRequired,
123
- collection: PropTypes.arrayOf(PropTypes.any).isRequired,
124
- placeholder: PropTypes.string.isRequired,
125
- id: PropTypes.string,
126
- theme: PropTypes.shape({}),
127
- clearInput: PropTypes.bool,
128
- type: PropTypes.string,
129
- initialValue: PropTypes.string,
130
- disabled: PropTypes.bool,
131
- };
132
- export default AutoSuggestComponent;
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Autosuggest from 'react-autosuggest';
4
+ import debounce from 'lodash.debounce';
5
+
6
+ class AutoSuggestComponent extends React.Component {
7
+ constructor(props) {
8
+ super(props);
9
+ this.state = {
10
+ value: '',
11
+ suggestions: [],
12
+ };
13
+
14
+ this.onChange = this.onChange.bind(this);
15
+ this.onSuggestionsFetchRequested = debounce(this.onSuggestionsFetchRequested.bind(this), 400);
16
+ this.onSuggestionsClearRequested = this.onSuggestionsClearRequested.bind(this);
17
+ this.onSuggestionSelected = this.onSuggestionSelected.bind(this);
18
+ }
19
+
20
+ onChange(event, { newValue }) {
21
+ const { setQuery } = this.props;
22
+ this.setState({
23
+ value: newValue,
24
+ }, () => {
25
+ setQuery(newValue);
26
+ });
27
+ }
28
+
29
+ onSuggestionsFetchRequested({ value }) {
30
+ const { getSuggestions, collection } = this.props;
31
+ getSuggestions(value, collection, (suggestions) => {
32
+ this.setState({
33
+ suggestions,
34
+ });
35
+ });
36
+ }
37
+
38
+ onSuggestionsClearRequested() {
39
+ this.setState({
40
+ suggestions: [],
41
+ });
42
+ }
43
+
44
+ onSuggestionSelected(event, { suggestion }) {
45
+ const { setResults, clearInput } = this.props;
46
+ setResults([suggestion]);
47
+ if (clearInput) {
48
+ this.setState({
49
+ value: '',
50
+ });
51
+ }
52
+ }
53
+
54
+ render() {
55
+ const { value, suggestions } = this.state;
56
+ const {
57
+ placeholder,
58
+ getSuggestionValue,
59
+ renderSuggestion,
60
+ id,
61
+ theme,
62
+ type,
63
+ initialValue,
64
+ disabled,
65
+ } = this.props;
66
+ const inputProps = {
67
+ placeholder,
68
+ value: initialValue || value,
69
+ id,
70
+ type,
71
+ disabled,
72
+ 'aria-label': placeholder,
73
+ onChange: this.onChange,
74
+ };
75
+
76
+ return (
77
+ <Autosuggest
78
+ suggestions={suggestions}
79
+ onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
80
+ onSuggestionsClearRequested={this.onSuggestionsClearRequested}
81
+ onSuggestionSelected={this.onSuggestionSelected}
82
+ getSuggestionValue={getSuggestionValue}
83
+ renderSuggestion={renderSuggestion}
84
+ inputProps={inputProps}
85
+ theme={theme}
86
+ />
87
+ );
88
+ }
89
+ }
90
+
91
+ AutoSuggestComponent.displayName = 'AutoSuggestComponent';
92
+
93
+ AutoSuggestComponent.defaultProps = {
94
+ id: 'autosuggest1',
95
+ theme: {
96
+ container: 'react-autosuggest__container',
97
+ containerOpen: 'react-autosuggest__container--open',
98
+ input: 'react-autosuggest__input',
99
+ inputOpen: 'react-autosuggest__input--open',
100
+ inputFocused: 'react-autosuggest__input--focused',
101
+ suggestionsContainer: 'react-autosuggest__suggestions-container',
102
+ suggestionsContainerOpen: 'react-autosuggest__suggestions-container--open',
103
+ suggestionsList: 'react-autosuggest__suggestions-list',
104
+ suggestion: 'react-autosuggest__suggestion',
105
+ suggestionFirst: 'react-autosuggest__suggestion--first',
106
+ suggestionHighlighted: 'react-autosuggest__suggestion--highlighted',
107
+ sectionContainer: 'react-autosuggest__section-container',
108
+ sectionContainerFirst: 'react-autosuggest__section-container--first',
109
+ sectionTitle: 'react-autosuggest__section-title',
110
+ },
111
+ clearInput: false,
112
+ type: 'text',
113
+ initialValue: '',
114
+ disabled: false,
115
+ };
116
+
117
+ AutoSuggestComponent.propTypes = {
118
+ setQuery: PropTypes.func.isRequired,
119
+ getSuggestions: PropTypes.func.isRequired,
120
+ getSuggestionValue: PropTypes.func.isRequired,
121
+ renderSuggestion: PropTypes.func.isRequired,
122
+ setResults: PropTypes.func.isRequired,
123
+ collection: PropTypes.arrayOf(PropTypes.any).isRequired,
124
+ placeholder: PropTypes.string.isRequired,
125
+ id: PropTypes.string,
126
+ theme: PropTypes.shape({}),
127
+ clearInput: PropTypes.bool,
128
+ type: PropTypes.string,
129
+ initialValue: PropTypes.string,
130
+ disabled: PropTypes.bool,
131
+ };
132
+ export default AutoSuggestComponent;
@@ -1,140 +1,140 @@
1
- /* eslint-env browser */
2
- import React from 'react';
3
- import PropTypes from 'prop-types';
4
- import axios from 'axios';
5
- import AlphaBoxContentComponent from './AlphaBoxContentComponent';
6
- import AutoSuggestComponent from '../AutoSuggestComponent';
7
- import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
8
-
9
- class AlphaBoxComponent extends React.Component {
10
- constructor(props) {
11
- super(props);
12
-
13
- this.state = {
14
- items: [],
15
- };
16
-
17
- this.getSuggestions = this.getSuggestions.bind(this);
18
- }
19
-
20
- componentDidMount() {
21
- const { box } = this.props;
22
- const { data } = box;
23
- if (data.mode === 'json' && data.source !== '') {
24
- if (data.itemsOnly) {
25
- data.source += '?itemsOnly=true';
26
- }
27
- axios.get(data.source).then((promise) => {
28
- const { data: pData } = promise;
29
- this.setState({ items: pData.items });
30
- });
31
- }
32
- }
33
-
34
- getSuggestions(value, collection, callback) {
35
- const { items } = this.state;
36
- const inputValue = value.trim().toLowerCase();
37
- const inputLength = inputValue.length;
38
- callback(inputLength < 2 ? []
39
- : items.filter((x) => x.name.toLowerCase().indexOf(inputValue) > -1)
40
- .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
41
- }
42
-
43
- render() {
44
- const { box } = this.props;
45
- const { items } = this.state;
46
- const { config } = box;
47
- const renderLinks = config.links.map((l) => (
48
- <li key={l.title}>
49
- <a
50
- href={l.url}
51
- onClick={() => {
52
- if (typeof l.onClick === 'function') {
53
- l.onClick();
54
- }
55
- }}
56
- style={{ backgroundColor: box.background.linkColor }}
57
- >
58
- {l.title}
59
- </a>
60
- </li>
61
- ));
62
-
63
- return (
64
- <div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
65
- <div>
66
- <h2>
67
- <a href={config.url}>{config.title}</a>
68
- </h2>
69
- {(() => {
70
- if (config.description !== '') {
71
- return <p>{config.description}</p>;
72
- }
73
- return null;
74
- })()}
75
- {(() => {
76
- if (config.links.length > 0) {
77
- return (
78
- <ul className="quicklinks resetlist">
79
- {renderLinks}
80
- </ul>
81
- );
82
- }
83
- return null;
84
- })()}
85
- <AlphaBoxContentComponent
86
- items={items}
87
- linkColor={box.background.linkColor}
88
- />
89
- <AutoSuggestComponent
90
- placeholder={box.search.placeHolder}
91
- setQuery={() => { }}
92
- setResults={(_items) => {
93
- if (_items.length === 1 && _items[0].url) {
94
- window.location.href = _items[0].url;
95
- }
96
- }}
97
- collection={[]}
98
- getSuggestions={this.getSuggestions}
99
- getSuggestionValue={(suggestion) => suggestion.name}
100
- renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
101
- />
102
- </div>
103
- </div>
104
- );
105
- }
106
- }
107
-
108
- AlphaBoxComponent.propTypes = {
109
- box: PropTypes.shape({
110
- id: PropTypes.number.isRequired,
111
- data: PropTypes.shape({
112
- itemsOnly: PropTypes.bool.isRequired,
113
- mode: PropTypes.string.isRequired,
114
- source: PropTypes.string.isRequired,
115
- }),
116
- config: PropTypes.shape({
117
- name: PropTypes.string.isRequired,
118
- url: PropTypes.string.isRequired,
119
- description: PropTypes.string.isRequired,
120
- container: PropTypes.string.isRequired,
121
- tracking: PropTypes.string.isRequired,
122
- links: PropTypes.arrayOf(PropTypes.shape({
123
- title: PropTypes.string.isRequired,
124
- url: PropTypes.string.isRequired,
125
- })).isRequired,
126
- title: PropTypes.string.isRequired,
127
- }).isRequired,
128
- background: PropTypes.shape({
129
- color: PropTypes.string.isRequired,
130
- linkColor: PropTypes.string.isRequired,
131
- }).isRequired,
132
- search: PropTypes.shape({
133
- placeHolder: PropTypes.string.isRequired,
134
- minLength: PropTypes.number.isRequired,
135
- }).isRequired,
136
- }).isRequired,
137
- };
138
-
139
- AlphaBoxComponent.displayName = 'AlphaBoxComponent';
140
- export default AlphaBoxComponent;
1
+ /* eslint-env browser */
2
+ import React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import axios from 'axios';
5
+ import AlphaBoxContentComponent from './AlphaBoxContentComponent';
6
+ import AutoSuggestComponent from '../AutoSuggestComponent';
7
+ import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
8
+
9
+ class AlphaBoxComponent extends React.Component {
10
+ constructor(props) {
11
+ super(props);
12
+
13
+ this.state = {
14
+ items: [],
15
+ };
16
+
17
+ this.getSuggestions = this.getSuggestions.bind(this);
18
+ }
19
+
20
+ componentDidMount() {
21
+ const { box } = this.props;
22
+ const { data } = box;
23
+ if (data.mode === 'json' && data.source !== '') {
24
+ if (data.itemsOnly) {
25
+ data.source += '?itemsOnly=true';
26
+ }
27
+ axios.get(data.source).then((promise) => {
28
+ const { data: pData } = promise;
29
+ this.setState({ items: pData.items });
30
+ });
31
+ }
32
+ }
33
+
34
+ getSuggestions(value, collection, callback) {
35
+ const { items } = this.state;
36
+ const inputValue = value.trim().toLowerCase();
37
+ const inputLength = inputValue.length;
38
+ callback(inputLength < 2 ? []
39
+ : items.filter((x) => x.name.toLowerCase().indexOf(inputValue) > -1)
40
+ .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
41
+ }
42
+
43
+ render() {
44
+ const { box } = this.props;
45
+ const { items } = this.state;
46
+ const { config } = box;
47
+ const renderLinks = config.links.map((l) => (
48
+ <li key={l.title}>
49
+ <a
50
+ href={l.url}
51
+ onClick={() => {
52
+ if (typeof l.onClick === 'function') {
53
+ l.onClick();
54
+ }
55
+ }}
56
+ style={{ backgroundColor: box.background.linkColor }}
57
+ >
58
+ {l.title}
59
+ </a>
60
+ </li>
61
+ ));
62
+
63
+ return (
64
+ <div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
65
+ <div>
66
+ <h2>
67
+ <a href={config.url}>{config.title}</a>
68
+ </h2>
69
+ {(() => {
70
+ if (config.description !== '') {
71
+ return <p>{config.description}</p>;
72
+ }
73
+ return null;
74
+ })()}
75
+ {(() => {
76
+ if (config.links.length > 0) {
77
+ return (
78
+ <ul className="quicklinks resetlist">
79
+ {renderLinks}
80
+ </ul>
81
+ );
82
+ }
83
+ return null;
84
+ })()}
85
+ <AlphaBoxContentComponent
86
+ items={items}
87
+ linkColor={box.background.linkColor}
88
+ />
89
+ <AutoSuggestComponent
90
+ placeholder={box.search.placeHolder}
91
+ setQuery={() => { }}
92
+ setResults={(_items) => {
93
+ if (_items.length === 1 && _items[0].url) {
94
+ window.location.href = _items[0].url;
95
+ }
96
+ }}
97
+ collection={[]}
98
+ getSuggestions={this.getSuggestions}
99
+ getSuggestionValue={(suggestion) => suggestion.name}
100
+ renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
101
+ />
102
+ </div>
103
+ </div>
104
+ );
105
+ }
106
+ }
107
+
108
+ AlphaBoxComponent.propTypes = {
109
+ box: PropTypes.shape({
110
+ id: PropTypes.number.isRequired,
111
+ data: PropTypes.shape({
112
+ itemsOnly: PropTypes.bool.isRequired,
113
+ mode: PropTypes.string.isRequired,
114
+ source: PropTypes.string.isRequired,
115
+ }),
116
+ config: PropTypes.shape({
117
+ name: PropTypes.string.isRequired,
118
+ url: PropTypes.string.isRequired,
119
+ description: PropTypes.string.isRequired,
120
+ container: PropTypes.string.isRequired,
121
+ tracking: PropTypes.string.isRequired,
122
+ links: PropTypes.arrayOf(PropTypes.shape({
123
+ title: PropTypes.string.isRequired,
124
+ url: PropTypes.string.isRequired,
125
+ })).isRequired,
126
+ title: PropTypes.string.isRequired,
127
+ }).isRequired,
128
+ background: PropTypes.shape({
129
+ color: PropTypes.string.isRequired,
130
+ linkColor: PropTypes.string.isRequired,
131
+ }).isRequired,
132
+ search: PropTypes.shape({
133
+ placeHolder: PropTypes.string.isRequired,
134
+ minLength: PropTypes.number.isRequired,
135
+ }).isRequired,
136
+ }).isRequired,
137
+ };
138
+
139
+ AlphaBoxComponent.displayName = 'AlphaBoxComponent';
140
+ export default AlphaBoxComponent;