@aarhus-university/au-lib-react-components 10.6.0 → 10.9.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 (97) hide show
  1. package/.eslintrc.js +34 -34
  2. package/.storybook/main.js +20 -7
  3. package/.storybook/preview.js +10 -10
  4. package/README.md +19 -19
  5. package/__tests__/jest/AUButtonComponent.test.tsx +165 -163
  6. package/__tests__/jest/AUErrorComponent.test.tsx +142 -0
  7. package/__tests__/jest/AUModalComponent.test.tsx +186 -0
  8. package/__tests__/jest/AUNotificationComponent.test.tsx +115 -0
  9. package/__tests__/jest/AUSpinnerComponent.test.tsx +57 -57
  10. package/__tests__/jest/AUToolbarComponent.test.tsx +46 -0
  11. package/__tests__/jest/helpers.test.ts +15 -15
  12. package/__tests__/jest/setupTests.ts +2 -2
  13. package/babel.config.js +8 -8
  14. package/build/umd/universe.js.map +1 -1
  15. package/package.json +108 -107
  16. package/src/components/AUAlertComponent.tsx +70 -70
  17. package/src/components/AUAutoSuggestComponent.js +158 -158
  18. package/src/components/AUButtonComponent.tsx +83 -77
  19. package/src/components/AUCalendarComponent.tsx +493 -493
  20. package/src/components/AUContentToggleComponent.tsx +33 -33
  21. package/src/components/AUDatepickerComponent.tsx +117 -117
  22. package/src/components/AUErrorComponent.tsx +78 -0
  23. package/src/components/AUMobilePrefixComponent.tsx +15 -15
  24. package/src/components/AUModalComponent.tsx +64 -80
  25. package/src/components/AUNotificationComponent.tsx +42 -0
  26. package/src/components/AUReceiptComponent.tsx +33 -33
  27. package/src/components/AUSpinnerComponent.tsx +33 -33
  28. package/src/components/AUSubNavComponent.tsx +48 -48
  29. package/src/components/AUSubmitButtonContainerComponent.tsx +31 -31
  30. package/src/components/AUTabbedContentComponent.tsx +145 -145
  31. package/src/components/AUTableComponent.tsx +24 -24
  32. package/src/components/AUToastComponent.tsx +103 -103
  33. package/src/components/AUToolbarComponent.tsx +52 -45
  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 -42
  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.tsx +26 -26
  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.tsx +122 -122
  51. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  52. package/src/layout-2016/components/alphabox/AlphaBoxComponent.js +143 -143
  53. package/src/layout-2016/components/alphabox/AlphaBoxContentComponent.js +136 -136
  54. package/src/layout-2016/components/common/AUCollapsibleComponent.js +152 -152
  55. package/src/layout-2016/components/common/AUSpinnerComponent.js +103 -103
  56. package/src/layout-2016/components/databox/DataBoxAlphabetComponent.js +144 -144
  57. package/src/layout-2016/components/databox/DataBoxAssociationComponent.js +122 -122
  58. package/src/layout-2016/components/databox/DataBoxButtonComponent.js +157 -157
  59. package/src/layout-2016/components/databox/DataBoxComponent.js +297 -297
  60. package/src/layout-2016/components/databox/DataBoxGroupingComponent.js +64 -64
  61. package/src/layout-2016/components/databox/DataBoxSearchResultComponent.js +36 -36
  62. package/src/layout-2016/components/databox/DataBoxStackedAssociationComponent.js +54 -54
  63. package/src/layout-2016/components/databox/DataBoxSuggestionComponent.js +39 -39
  64. package/src/layout-2016/components/diagramme/AUDiagrammeComponent.js +309 -309
  65. package/src/layout-2016/components/flowbox/FlowBoxComponent.js +126 -126
  66. package/src/layout-2016/components/flowbox/FlowBoxPhoneComponent.js +104 -104
  67. package/src/layout-2016/components/profile/AUProfileAvatar2016Component.js +103 -103
  68. package/src/layout-2016/components/universe/StaffTopComponent.js +363 -363
  69. package/src/layout-2016/components/universe/StudentTopComponent.js +137 -137
  70. package/src/layout-2016/components/universe/UniverseContainerComponent.js +65 -65
  71. package/src/layout-2016/lib/all.js +3 -3
  72. package/src/layout-2016/lib/au-alphabox.js +100 -100
  73. package/src/layout-2016/lib/au-databox.js +400 -400
  74. package/src/layout-2016/lib/au-diagramme.js +85 -85
  75. package/src/layout-2016/lib/au-flowbox.js +93 -93
  76. package/src/layout-2016/lib/universe.js +9 -9
  77. package/src/lib/helpers.ts +194 -194
  78. package/src/lib/hooks.ts +37 -33
  79. package/src/lib/i18n.ts +600 -600
  80. package/src/lib/tracking.ts +69 -69
  81. package/src/lib/wrapping.ts +21 -21
  82. package/src/styles/_settings.scss +10 -10
  83. package/src/styles/alphabox.scss +222 -222
  84. package/src/styles/app.scss +7 -7
  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/stories/AUButtonComponent.stories.tsx +85 -85
  91. package/stories/AUErrorComponent.stories.tsx +117 -0
  92. package/stories/AUModalComponent.stories.tsx +92 -0
  93. package/stories/AUNotificationComponent.stories.tsx +116 -0
  94. package/stories/AUSpinnerComponent.stories.tsx +41 -41
  95. package/stories/AUToolbarComponent.stories.tsx +96 -0
  96. package/tsconfig.json +46 -46
  97. package/webpack.config.js +89 -89
@@ -1,143 +1,143 @@
1
- /* eslint-env browser */
2
- import React from 'react';
3
- import PropTypes from 'prop-types';
4
- import AlphaBoxContentComponent from './AlphaBoxContentComponent';
5
- import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
6
- import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
7
-
8
- class AlphaBoxComponent extends React.Component {
9
- constructor(props) {
10
- super(props);
11
-
12
- this.state = {
13
- items: [],
14
- };
15
-
16
- this.getSuggestions = this.getSuggestions.bind(this);
17
- }
18
-
19
- componentDidMount() {
20
- const { box } = this.props;
21
- const { data } = box;
22
- if (data.mode === 'json' && data.source !== '') {
23
- if (data.itemsOnly) {
24
- data.source += '?itemsOnly=true';
25
- }
26
- fetch(data.source).then((promise) => promise.json()).then((pData) => {
27
- this.setState({ items: pData.items });
28
- });
29
- }
30
- }
31
-
32
- getSuggestions(value, _, callback) {
33
- const { items } = this.state;
34
- const inputValue = value.trim().toLowerCase();
35
- const inputLength = inputValue.length;
36
- callback(inputLength < 2 ? []
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
- )
42
- .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
43
- }
44
-
45
- render() {
46
- const { box } = this.props;
47
- const { items } = this.state;
48
- const { config } = box;
49
- const renderLinks = config.links.map((l) => (
50
- <li key={l.title}>
51
- <a
52
- href={l.url}
53
- onClick={() => {
54
- if (typeof l.onClick === 'function') {
55
- l.onClick();
56
- }
57
- }}
58
- style={{ backgroundColor: box.background.linkColor }}
59
- >
60
- {l.title}
61
- </a>
62
- </li>
63
- ));
64
-
65
- return (
66
- <div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
67
- <div>
68
- <h2>
69
- <a href={config.url}>{config.title}</a>
70
- </h2>
71
- <AlphaBoxContentComponent
72
- items={items}
73
- linkColor={box.background.linkColor}
74
- noResultsText={config.noResultsAlphabet}
75
- noResultsUri={config.noResultsUri}
76
- />
77
- <AUAutoSuggestComponent
78
- placeholder={box.search.placeHolder}
79
- setResults={(_items) => {
80
- if (_items.length >= 1 && _items[0].url) {
81
- window.location.href = _items[0].url;
82
- }
83
- }}
84
- collection={[]}
85
- getSuggestions={this.getSuggestions}
86
- getSuggestionValue={(suggestion) => suggestion.name}
87
- renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
88
- noResultsText={config.noResultsSearch}
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
- }
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
- noResultsAlphabet: PropTypes.string.isRequired,
128
- noResultsSearch: PropTypes.string.isRequired,
129
- noResultsUri: PropTypes.string.isRequired,
130
- }).isRequired,
131
- background: PropTypes.shape({
132
- color: PropTypes.string.isRequired,
133
- linkColor: PropTypes.string.isRequired,
134
- }).isRequired,
135
- search: PropTypes.shape({
136
- placeHolder: PropTypes.string.isRequired,
137
- minLength: PropTypes.number.isRequired,
138
- }).isRequired,
139
- }).isRequired,
140
- };
141
-
142
- AlphaBoxComponent.displayName = 'AlphaBoxComponent';
143
- export default AlphaBoxComponent;
1
+ /* eslint-env browser */
2
+ import React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import AlphaBoxContentComponent from './AlphaBoxContentComponent';
5
+ import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
6
+ import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
7
+
8
+ class AlphaBoxComponent extends React.Component {
9
+ constructor(props) {
10
+ super(props);
11
+
12
+ this.state = {
13
+ items: [],
14
+ };
15
+
16
+ this.getSuggestions = this.getSuggestions.bind(this);
17
+ }
18
+
19
+ componentDidMount() {
20
+ const { box } = this.props;
21
+ const { data } = box;
22
+ if (data.mode === 'json' && data.source !== '') {
23
+ if (data.itemsOnly) {
24
+ data.source += '?itemsOnly=true';
25
+ }
26
+ fetch(data.source).then((promise) => promise.json()).then((pData) => {
27
+ this.setState({ items: pData.items });
28
+ });
29
+ }
30
+ }
31
+
32
+ getSuggestions(value, _, callback) {
33
+ const { items } = this.state;
34
+ const inputValue = value.trim().toLowerCase();
35
+ const inputLength = inputValue.length;
36
+ callback(inputLength < 2 ? []
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
+ )
42
+ .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
43
+ }
44
+
45
+ render() {
46
+ const { box } = this.props;
47
+ const { items } = this.state;
48
+ const { config } = box;
49
+ const renderLinks = config.links.map((l) => (
50
+ <li key={l.title}>
51
+ <a
52
+ href={l.url}
53
+ onClick={() => {
54
+ if (typeof l.onClick === 'function') {
55
+ l.onClick();
56
+ }
57
+ }}
58
+ style={{ backgroundColor: box.background.linkColor }}
59
+ >
60
+ {l.title}
61
+ </a>
62
+ </li>
63
+ ));
64
+
65
+ return (
66
+ <div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
67
+ <div>
68
+ <h2>
69
+ <a href={config.url}>{config.title}</a>
70
+ </h2>
71
+ <AlphaBoxContentComponent
72
+ items={items}
73
+ linkColor={box.background.linkColor}
74
+ noResultsText={config.noResultsAlphabet}
75
+ noResultsUri={config.noResultsUri}
76
+ />
77
+ <AUAutoSuggestComponent
78
+ placeholder={box.search.placeHolder}
79
+ setResults={(_items) => {
80
+ if (_items.length >= 1 && _items[0].url) {
81
+ window.location.href = _items[0].url;
82
+ }
83
+ }}
84
+ collection={[]}
85
+ getSuggestions={this.getSuggestions}
86
+ getSuggestionValue={(suggestion) => suggestion.name}
87
+ renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
88
+ noResultsText={config.noResultsSearch}
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
+ }
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
+ noResultsAlphabet: PropTypes.string.isRequired,
128
+ noResultsSearch: PropTypes.string.isRequired,
129
+ noResultsUri: PropTypes.string.isRequired,
130
+ }).isRequired,
131
+ background: PropTypes.shape({
132
+ color: PropTypes.string.isRequired,
133
+ linkColor: PropTypes.string.isRequired,
134
+ }).isRequired,
135
+ search: PropTypes.shape({
136
+ placeHolder: PropTypes.string.isRequired,
137
+ minLength: PropTypes.number.isRequired,
138
+ }).isRequired,
139
+ }).isRequired,
140
+ };
141
+
142
+ AlphaBoxComponent.displayName = 'AlphaBoxComponent';
143
+ export default AlphaBoxComponent;
@@ -1,136 +1,136 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { sortAlphaObj } from '../../../lib/helpers';
4
-
5
- class AlphaBoxContentComponent extends React.Component {
6
- constructor(props) {
7
- super(props);
8
- this.letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'æ', 'ø', 'å'];
9
- this.state = {
10
- letterIndex: -1,
11
- };
12
- }
13
-
14
- render() {
15
- const { letterIndex } = this.state;
16
- const {
17
- items, linkColor, noResultsText, noResultsUri,
18
- } = this.props;
19
-
20
- const renderLetters = this.letters.map((l, i) => {
21
- const available = items.filter(
22
- (x) => x.name.toLowerCase().indexOf(l) === 0,
23
- ).length > 0;
24
-
25
- let classNames = '';
26
- if (available) {
27
- classNames += 'available';
28
- }
29
-
30
- if (i === letterIndex) {
31
- classNames += ' active';
32
- }
33
-
34
- let style = {};
35
- if (available) {
36
- if (letterIndex === i) {
37
- style = { backgroundColor: '#fff', color: linkColor };
38
- } else {
39
- style = { backgroundColor: linkColor };
40
- }
41
- }
42
-
43
- return (
44
- <li
45
- key={l}
46
- className={classNames}
47
- >
48
- <button
49
- type="button"
50
- style={style}
51
- onClick={() => {
52
- if (available) {
53
- this.setState({
54
- letterIndex: i,
55
- });
56
- }
57
- }}
58
- >
59
- {l}
60
- </button>
61
- </li>
62
- );
63
- });
64
-
65
- let filtered = [];
66
- if (letterIndex > -1) {
67
- filtered = items.filter(
68
- (x) => x.name.toLowerCase().indexOf(this.letters[letterIndex]) === 0,
69
- );
70
- }
71
-
72
- const renderItems = filtered.sort(sortAlphaObj).map((item, i) => {
73
- const key = i;
74
- const renderChildren = item.children.map(
75
- (c) => <li key={c.name}><a href={c.url}>{c.name}</a></li>,
76
- );
77
-
78
- if (item.children.length > 0) {
79
- return (
80
- <li key={key}>
81
- <a href={item.url}>{item.name}</a>
82
- <ul>
83
- {renderChildren}
84
- </ul>
85
- </li>
86
- );
87
- }
88
-
89
- return (
90
- <li key={key}>
91
- <a href={item.url}>{item.name}</a>
92
- </li>
93
- );
94
- });
95
-
96
- return (
97
- <div className="au_alphabox_content">
98
- <ul className="letters">
99
- {renderLetters}
100
- </ul>
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
- }
115
- </div>
116
- );
117
- }
118
- }
119
-
120
- AlphaBoxContentComponent.defaultProps = {
121
- noResultsText: '',
122
- noResultsUri: '',
123
- };
124
-
125
- AlphaBoxContentComponent.propTypes = {
126
- linkColor: PropTypes.string.isRequired,
127
- items: PropTypes.arrayOf(PropTypes.shape({
128
- name: PropTypes.string.isRequired,
129
- url: PropTypes.string.isRequired,
130
- })).isRequired,
131
- noResultsText: PropTypes.string,
132
- noResultsUri: PropTypes.string,
133
- };
134
-
135
- AlphaBoxContentComponent.displayName = 'AlphaBoxContentComponent';
136
- export default AlphaBoxContentComponent;
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { sortAlphaObj } from '../../../lib/helpers';
4
+
5
+ class AlphaBoxContentComponent extends React.Component {
6
+ constructor(props) {
7
+ super(props);
8
+ this.letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'æ', 'ø', 'å'];
9
+ this.state = {
10
+ letterIndex: -1,
11
+ };
12
+ }
13
+
14
+ render() {
15
+ const { letterIndex } = this.state;
16
+ const {
17
+ items, linkColor, noResultsText, noResultsUri,
18
+ } = this.props;
19
+
20
+ const renderLetters = this.letters.map((l, i) => {
21
+ const available = items.filter(
22
+ (x) => x.name.toLowerCase().indexOf(l) === 0,
23
+ ).length > 0;
24
+
25
+ let classNames = '';
26
+ if (available) {
27
+ classNames += 'available';
28
+ }
29
+
30
+ if (i === letterIndex) {
31
+ classNames += ' active';
32
+ }
33
+
34
+ let style = {};
35
+ if (available) {
36
+ if (letterIndex === i) {
37
+ style = { backgroundColor: '#fff', color: linkColor };
38
+ } else {
39
+ style = { backgroundColor: linkColor };
40
+ }
41
+ }
42
+
43
+ return (
44
+ <li
45
+ key={l}
46
+ className={classNames}
47
+ >
48
+ <button
49
+ type="button"
50
+ style={style}
51
+ onClick={() => {
52
+ if (available) {
53
+ this.setState({
54
+ letterIndex: i,
55
+ });
56
+ }
57
+ }}
58
+ >
59
+ {l}
60
+ </button>
61
+ </li>
62
+ );
63
+ });
64
+
65
+ let filtered = [];
66
+ if (letterIndex > -1) {
67
+ filtered = items.filter(
68
+ (x) => x.name.toLowerCase().indexOf(this.letters[letterIndex]) === 0,
69
+ );
70
+ }
71
+
72
+ const renderItems = filtered.sort(sortAlphaObj).map((item, i) => {
73
+ const key = i;
74
+ const renderChildren = item.children.map(
75
+ (c) => <li key={c.name}><a href={c.url}>{c.name}</a></li>,
76
+ );
77
+
78
+ if (item.children.length > 0) {
79
+ return (
80
+ <li key={key}>
81
+ <a href={item.url}>{item.name}</a>
82
+ <ul>
83
+ {renderChildren}
84
+ </ul>
85
+ </li>
86
+ );
87
+ }
88
+
89
+ return (
90
+ <li key={key}>
91
+ <a href={item.url}>{item.name}</a>
92
+ </li>
93
+ );
94
+ });
95
+
96
+ return (
97
+ <div className="au_alphabox_content">
98
+ <ul className="letters">
99
+ {renderLetters}
100
+ </ul>
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
+ }
115
+ </div>
116
+ );
117
+ }
118
+ }
119
+
120
+ AlphaBoxContentComponent.defaultProps = {
121
+ noResultsText: '',
122
+ noResultsUri: '',
123
+ };
124
+
125
+ AlphaBoxContentComponent.propTypes = {
126
+ linkColor: PropTypes.string.isRequired,
127
+ items: PropTypes.arrayOf(PropTypes.shape({
128
+ name: PropTypes.string.isRequired,
129
+ url: PropTypes.string.isRequired,
130
+ })).isRequired,
131
+ noResultsText: PropTypes.string,
132
+ noResultsUri: PropTypes.string,
133
+ };
134
+
135
+ AlphaBoxContentComponent.displayName = 'AlphaBoxContentComponent';
136
+ export default AlphaBoxContentComponent;