@aarhus-university/au-lib-react-components 9.11.17 → 10.0.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 (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} +78 -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} +44 -66
  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
package/package.json CHANGED
@@ -1,60 +1,66 @@
1
- {
2
- "sideEffects": false,
3
- "name": "@aarhus-university/au-lib-react-components",
4
- "version": "9.11.17",
5
- "description": "Library for shared React components for various applications on au.dk",
6
- "main": "build/cjs/index.js",
7
- "scripts": {
8
- "dev": "webpack serve --mode development --env development --config src/config/webpack.dev.config.js",
9
- "umd": "webpack --config src/config/webpack.umd.config.js"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "https://gitlab.au.dk/au-web-og-digital/au-lib-react-components"
14
- },
15
- "author": {
16
- "name": "Thomas Riis Hansen",
17
- "email": "trh@au.dk"
18
- },
19
- "peerDependencies": {
20
- "react": "^17.0.0",
21
- "react-dom": "^17.0.0"
22
- },
23
- "devDependencies": {
24
- "@babel/core": "^7.0.0",
25
- "@babel/plugin-proposal-class-properties": "^7.0.0",
26
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
27
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
28
- "@babel/preset-env": "^7.0.0",
29
- "@babel/preset-react": "^7.0.0",
30
- "babel-eslint": "^10.0.0",
31
- "babel-loader": "^8.0.0",
32
- "css-loader": "^5.0.0",
33
- "eslint": "^7.0.0",
34
- "eslint-config-airbnb": "^18.0.0",
35
- "eslint-plugin-import": "^2.0.0",
36
- "eslint-plugin-jsx-a11y": "^6.0.0",
37
- "eslint-plugin-react": "^7.0.0",
38
- "eslint-webpack-plugin": "^2.0.0",
39
- "mini-css-extract-plugin": "^1.0.0",
40
- "sass": "^1.30.0",
41
- "sass-loader": "^10.0.0",
42
- "style-loader": "^0.23.0",
43
- "webpack-cli": "^4.0.0",
44
- "webpack-dev-server": "^3.11.0"
45
- },
46
- "dependencies": {
47
- "@aarhus-university/au-designsystem-delphinus": "^0.23.22",
48
- "axios": "^0.18.1",
49
- "lodash.debounce": "^4.0.8",
50
- "moment": "^2.22.2",
51
- "prop-types": "^15.7.2",
52
- "query-string": "^5.1.1",
53
- "react": "^17.0.0",
54
- "react-autosuggest": "^10.0.2",
55
- "react-dom": "^17.0.0",
56
- "react-hot-loader": "^4.1.1",
57
- "react-router-dom": "^5.2.0",
58
- "webpack": "^5.0.0"
59
- }
60
- }
1
+ {
2
+ "sideEffects": false,
3
+ "name": "@aarhus-university/au-lib-react-components",
4
+ "version": "10.0.0",
5
+ "description": "Library for shared React components for various applications on au.dk",
6
+ "scripts": {
7
+ "build": "webpack --config ./webpack.config.js"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://gitlab.au.dk/au-web-og-digital/au-lib-react-components"
12
+ },
13
+ "author": {
14
+ "name": "Thomas Riis Hansen",
15
+ "email": "trh@au.dk"
16
+ },
17
+ "devDependencies": {
18
+ "@babel/core": "^7.17.0",
19
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
20
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
21
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7",
22
+ "@babel/preset-env": "^7.16.11",
23
+ "@babel/preset-react": "^7.16.7",
24
+ "@babel/preset-typescript": "^7.16.7",
25
+ "@typescript-eslint/eslint-plugin": "^5.10.2",
26
+ "@typescript-eslint/parser": "^5.10.2",
27
+ "babel-eslint": "^10.1.0",
28
+ "babel-loader": "^8.2.3",
29
+ "css-loader": "^6.6.0",
30
+ "eslint": "^8.8.0",
31
+ "eslint-config-airbnb": "^19.0.4",
32
+ "eslint-import-resolver-typescript": "^2.5.0",
33
+ "eslint-plugin-import": "^2.25.4",
34
+ "eslint-plugin-jsx-a11y": "^6.5.1",
35
+ "eslint-plugin-react": "^7.28.0",
36
+ "eslint-plugin-react-hooks": "^4.3.0",
37
+ "eslint-webpack-plugin": "^3.1.1",
38
+ "fork-ts-checker-webpack-plugin": "^7.0.0",
39
+ "mini-css-extract-plugin": "^2.5.3",
40
+ "sass": "^1.49.7",
41
+ "sass-loader": "^12.4.0",
42
+ "style-loader": "^3.3.1",
43
+ "ts-loader": "^9.2.6",
44
+ "typescript": "^4.5.5",
45
+ "webpack-cli": "^4.9.2"
46
+ },
47
+ "dependencies": {
48
+ "@aarhus-university/au-designsystem-delphinus": "^0.26.1",
49
+ "@types/google.analytics": "^0.0.42",
50
+ "@types/history": "^5.0.0",
51
+ "@types/react": "^17.0.39",
52
+ "@types/react-dom": "^17.0.11",
53
+ "@types/react-router-dom": "^5.3.3",
54
+ "dayjs": "^1.10.7",
55
+ "lodash.debounce": "^4.0.8",
56
+ "prop-types": "^15.8.1",
57
+ "query-string": "^7.1.0",
58
+ "react-autosuggest": "^10.1.0",
59
+ "react-router-dom": "^6.2.1",
60
+ "webpack": "^5.68.0"
61
+ },
62
+ "peerDependencies": {
63
+ "react": "17.0.2",
64
+ "react-dom": "^17.0.2"
65
+ }
66
+ }
@@ -1,85 +1,70 @@
1
- /* eslint-env browser */
2
- import React from 'react';
3
- import ReactDOM from 'react-dom';
4
- import PropTypes from 'prop-types';
5
-
6
- const AUAlertComponent = (props) => {
7
- const {
8
- message,
9
- content,
10
- children,
11
- alert,
12
- buttons,
13
- } = props;
14
-
15
- const renderButtons = buttons.map((button) => (
16
- <button
17
- key={button.text}
18
- type="button"
19
- className={button.className}
20
- data-icon={button.dataIcon}
21
- onClick={() => {
22
- button.onClick();
23
- }}
24
- >
25
- {button.text}
26
- </button>
27
- ))
28
-
29
- if (alert) {
30
- return (
31
- <>
32
- {
33
- ReactDOM.createPortal(
34
- <div key="0" className="theme--normal toast-notification toast-notification--attention toast-notification--persistent">
35
- <div className="toast-notification__content">
36
- <p dangerouslySetInnerHTML={{ __html: message }} />
37
- </div>
38
- {renderButtons}
39
- </div>, document.querySelector('body'),
40
- )
41
- }
42
- {children}
43
- </>
44
- );
45
- }
46
-
47
- if (!children && !content) {
48
- return null;
49
- }
50
-
51
- return children || content;
52
- };
53
-
54
- AUAlertComponent.defaultProps = {
55
- children: null,
56
- content: null,
57
- buttons: [{
58
- className: 'button',
59
- text: 'OK',
60
- dataIcon: null,
61
- onClick: () => { }
62
- }, {
63
- className: 'button',
64
- text: 'Annuller',
65
- dataIcon: null,
66
- onClick: () => { }
67
- },
68
- ],
69
- };
70
-
71
- AUAlertComponent.propTypes = {
72
- message: PropTypes.string.isRequired,
73
- alert: PropTypes.bool.isRequired,
74
- children: PropTypes.arrayOf(PropTypes.element),
75
- content: PropTypes.element,
76
- buttons: PropTypes.arrayOf(PropTypes.shape({
77
- className: PropTypes.string.isRequired,
78
- text: PropTypes.string.isRequired,
79
- dataIcon: PropTypes.string,
80
- onClick: PropTypes.func.isRequired,
81
- }).isRequired),
82
- };
83
-
84
- AUAlertComponent.displayName = 'AUAlertComponent';
85
- export default AUAlertComponent;
1
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
+ /* eslint-env browser */
3
+ import React, { FC } from 'react';
4
+ import ReactDOM from 'react-dom';
5
+
6
+ const AUAlertComponent: FC<AUAlertComponentProps> = ({
7
+ message,
8
+ children,
9
+ alert,
10
+ buttons,
11
+ }: AUAlertComponentProps) => {
12
+ const renderButtons = (buttons || []).map((button) => (
13
+ <button
14
+ key={button.text}
15
+ type="button"
16
+ className={button.className}
17
+ data-icon={button.dataIcon}
18
+ onClick={() => {
19
+ button.onClick();
20
+ }}
21
+ >
22
+ {button.text}
23
+ </button>
24
+ ));
25
+
26
+ if (alert) {
27
+ return (
28
+ <>
29
+ {
30
+ ReactDOM.createPortal(
31
+ <div key="0" className="theme--normal toast-notification toast-notification--attention toast-notification--persistent">
32
+ <div className="toast-notification__content">
33
+ <p dangerouslySetInnerHTML={{ __html: message }} />
34
+ </div>
35
+ {renderButtons}
36
+ </div>,
37
+ document.querySelector('body')!,
38
+ )
39
+ }
40
+ {children}
41
+ </>
42
+ );
43
+ }
44
+
45
+ if (!children) {
46
+ return null;
47
+ }
48
+
49
+ return children;
50
+ };
51
+
52
+ AUAlertComponent.defaultProps = {
53
+ buttons: [{
54
+ className: 'button',
55
+ text: 'OK',
56
+ dataIcon: null,
57
+ // eslint-disable-next-line no-console
58
+ onClick: () => console.log('clicked on OK'),
59
+ }, {
60
+ className: 'button',
61
+ text: 'Annuller',
62
+ dataIcon: null,
63
+ // eslint-disable-next-line no-console
64
+ onClick: () => console.log('clicked on cancel'),
65
+ },
66
+ ],
67
+ };
68
+
69
+ AUAlertComponent.displayName = 'AUAlertComponent';
70
+ export default AUAlertComponent;
@@ -1,23 +1,26 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
1
2
  import React from 'react';
2
3
  import PropTypes from 'prop-types';
3
4
  import Autosuggest from 'react-autosuggest';
4
5
  import debounce from 'lodash.debounce';
5
6
 
6
- class AutoSuggestComponent extends React.Component {
7
+ class AUAutoSuggestComponent extends React.Component {
7
8
  constructor(props) {
8
9
  super(props);
9
10
  this.state = {
10
11
  value: '',
11
12
  suggestions: [],
13
+ noSuggestions: false,
12
14
  };
13
15
 
14
16
  this.onChange = this.onChange.bind(this);
17
+ this.onEnter = this.onEnter.bind(this);
15
18
  this.onSuggestionsFetchRequested = debounce(this.onSuggestionsFetchRequested.bind(this), 400);
16
19
  this.onSuggestionsClearRequested = this.onSuggestionsClearRequested.bind(this);
17
20
  this.onSuggestionSelected = this.onSuggestionSelected.bind(this);
18
21
  }
19
22
 
20
- onChange(event, { newValue }) {
23
+ onChange(_, { newValue }) {
21
24
  const { setQuery } = this.props;
22
25
  this.setState({
23
26
  value: newValue,
@@ -26,11 +29,20 @@ class AutoSuggestComponent extends React.Component {
26
29
  });
27
30
  }
28
31
 
32
+ onEnter(event) {
33
+ const { suggestions } = this.state;
34
+ const { setResults } = this.props;
35
+ if (event.key === 'Enter') {
36
+ setResults(suggestions);
37
+ }
38
+ }
39
+
29
40
  onSuggestionsFetchRequested({ value }) {
30
41
  const { getSuggestions, collection } = this.props;
31
42
  getSuggestions(value, collection, (suggestions) => {
32
43
  this.setState({
33
44
  suggestions,
45
+ noSuggestions: suggestions.length === 0 && value.trim() !== '' && value.trim().length > 1,
34
46
  });
35
47
  });
36
48
  }
@@ -52,7 +64,7 @@ class AutoSuggestComponent extends React.Component {
52
64
  }
53
65
 
54
66
  render() {
55
- const { value, suggestions } = this.state;
67
+ const { value, suggestions, noSuggestions } = this.state;
56
68
  const {
57
69
  placeholder,
58
70
  getSuggestionValue,
@@ -62,6 +74,7 @@ class AutoSuggestComponent extends React.Component {
62
74
  type,
63
75
  initialValue,
64
76
  disabled,
77
+ noResultsText,
65
78
  } = this.props;
66
79
  const inputProps = {
67
80
  placeholder,
@@ -71,26 +84,36 @@ class AutoSuggestComponent extends React.Component {
71
84
  disabled,
72
85
  'aria-label': placeholder,
73
86
  onChange: this.onChange,
87
+ onKeyDown: this.onEnter,
74
88
  };
75
89
 
76
90
  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
- />
91
+ <>
92
+ <Autosuggest
93
+ suggestions={suggestions}
94
+ onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
95
+ onSuggestionsClearRequested={this.onSuggestionsClearRequested}
96
+ onSuggestionSelected={this.onSuggestionSelected}
97
+ getSuggestionValue={getSuggestionValue}
98
+ renderSuggestion={renderSuggestion}
99
+ inputProps={inputProps}
100
+ theme={theme}
101
+ />
102
+ {
103
+ (noSuggestions && noResultsText) && (
104
+ <p className="no-results">
105
+ <em>{noResultsText}</em>
106
+ </p>
107
+ )
108
+ }
109
+ </>
87
110
  );
88
111
  }
89
112
  }
90
113
 
91
- AutoSuggestComponent.displayName = 'AutoSuggestComponent';
114
+ AUAutoSuggestComponent.displayName = 'AUAutoSuggestComponent';
92
115
 
93
- AutoSuggestComponent.defaultProps = {
116
+ AUAutoSuggestComponent.defaultProps = {
94
117
  id: 'autosuggest1',
95
118
  theme: {
96
119
  container: 'react-autosuggest__container',
@@ -112,15 +135,17 @@ AutoSuggestComponent.defaultProps = {
112
135
  type: 'text',
113
136
  initialValue: '',
114
137
  disabled: false,
138
+ setQuery: () => { },
139
+ noResultsText: '',
115
140
  };
116
141
 
117
- AutoSuggestComponent.propTypes = {
118
- setQuery: PropTypes.func.isRequired,
142
+ AUAutoSuggestComponent.propTypes = {
143
+ setQuery: PropTypes.func,
119
144
  getSuggestions: PropTypes.func.isRequired,
120
145
  getSuggestionValue: PropTypes.func.isRequired,
121
146
  renderSuggestion: PropTypes.func.isRequired,
122
147
  setResults: PropTypes.func.isRequired,
123
- collection: PropTypes.arrayOf(PropTypes.any).isRequired,
148
+ collection: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
124
149
  placeholder: PropTypes.string.isRequired,
125
150
  id: PropTypes.string,
126
151
  theme: PropTypes.shape({}),
@@ -128,5 +153,6 @@ AutoSuggestComponent.propTypes = {
128
153
  type: PropTypes.string,
129
154
  initialValue: PropTypes.string,
130
155
  disabled: PropTypes.bool,
156
+ noResultsText: PropTypes.string,
131
157
  };
132
- export default AutoSuggestComponent;
158
+ export default AUAutoSuggestComponent;