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 ( {
- +