diff --git a/package-lock.json b/package-lock.json
index a349ccca..59841568 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1363,6 +1363,14 @@
"meow": "5.0.0",
"resolve-from": "5.0.0",
"resolve-global": "1.0.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
}
},
"@commitlint/config-angular": {
@@ -1387,6 +1395,14 @@
"dev": true,
"requires": {
"lodash": "4.17.11"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
}
},
"@commitlint/execute-rule": {
@@ -1428,6 +1444,14 @@
"@commitlint/rules": "^7.6.0",
"babel-runtime": "^6.23.0",
"lodash": "4.17.11"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
}
},
"@commitlint/load": {
@@ -1442,6 +1466,14 @@
"cosmiconfig": "^5.2.0",
"lodash": "4.17.11",
"resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
}
},
"@commitlint/message": {
@@ -1753,6 +1785,14 @@
"lodash": "4.17.11",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
}
},
"@commitlint/rules": {
@@ -16022,9 +16062,9 @@
}
},
"lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"lodash-es": {
@@ -16051,6 +16091,12 @@
"integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=",
"dev": true
},
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
"lodash.escaperegexp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
diff --git a/package.json b/package.json
index 3b1856e1..b9d87916 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,8 @@
"classnames": "^2.2.5",
"query-string": "^5.1.1",
"react-instantsearch-dom": "^6.8.3",
- "react-loading-skeleton": "^2.1.1"
+ "react-loading-skeleton": "^2.1.1",
+ "lodash.debounce": "^4.0.8"
},
"jest": {
"collectCoverageFrom": [
@@ -86,14 +87,14 @@
"react-dom": "^17.0.1",
"react-redux": "^7.2.1",
"react-router-dom": "^5.2.0",
- "redux": "4.0.5",
+ "redux": "^4.0.5",
"@fortawesome/free-solid-svg-icons": "^5.8.1",
"@fortawesome/react-fontawesome": "^0.1.4",
"algoliasearch": "^4.8.5",
"classnames": "^2.2.5",
"query-string": "^5.1.1",
"react-instantsearch-dom": "^6.8.3",
- "react-loading-skeleton": "^2.1.1"
- },
- "dependencies": {}
+ "react-loading-skeleton": "^2.1.1",
+ "lodash.debounce": "^4.0.8"
+ }
}
diff --git a/src/course-search/FacetDropdown.jsx b/src/course-search/FacetDropdown.jsx
index a1df96bb..049631e0 100644
--- a/src/course-search/FacetDropdown.jsx
+++ b/src/course-search/FacetDropdown.jsx
@@ -3,17 +3,17 @@ import PropTypes from 'prop-types';
import { Dropdown } from '@edx/paragon';
import classNames from 'classnames';
-const FacetDropdown = ({ title, items, isBold }) => (
+const FacetDropdown = ({
+ title,
+ items,
+ isBold,
+ type,
+}) => (
-
+
{title}
@@ -24,10 +24,15 @@ const FacetDropdown = ({ title, items, isBold }) => (
);
+FacetDropdown.defaultProps = {
+ type: undefined,
+};
+
FacetDropdown.propTypes = {
title: PropTypes.string.isRequired,
items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
isBold: PropTypes.bool.isRequired,
+ type: PropTypes.string,
};
export default FacetDropdown;
diff --git a/src/course-search/FacetItem.jsx b/src/course-search/FacetItem.jsx
index 669ff951..9a619ce4 100644
--- a/src/course-search/FacetItem.jsx
+++ b/src/course-search/FacetItem.jsx
@@ -6,15 +6,12 @@ import classNames from 'classnames';
const FacetItem = ({
handleInputOnChange, item, isChecked,
}) => (
-
+
handleInputOnChange(item)}
+ className="position-relative mr-2"
/>
{item.label}
diff --git a/src/course-search/FacetListBase.jsx b/src/course-search/FacetListBase.jsx
index c9100ca3..0edadb4a 100644
--- a/src/course-search/FacetListBase.jsx
+++ b/src/course-search/FacetListBase.jsx
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
import { NO_OPTIONS_FOUND } from './data/constants';
import FacetDropdown from './FacetDropdown';
+import TypeaheadFacetDropdown from './TypeaheadFacetDropdown';
import FacetItem from './FacetItem';
import { SearchContext } from './SearchContext';
import {
@@ -16,6 +17,8 @@ const FacetListBase = ({
isCheckedField,
items,
title,
+ typeaheadOptions,
+ searchForItems,
}) => {
/**
* Handles when a facet option is toggled by either updating the appropriate
@@ -44,8 +47,8 @@ const FacetListBase = ({
const renderItems = useCallback(
() => {
- if (!items || !items.length) {
- return {NO_OPTIONS_FOUND};
+ if (!items?.length) {
+ return {NO_OPTIONS_FOUND};
}
return items.map(item => {
@@ -64,6 +67,18 @@ const FacetListBase = ({
[items],
);
+ if (typeaheadOptions) {
+ return (
+
+ );
+ }
+
return (
{
-
+