@2uinc/frontend-enterprise-catalog-search 11.0.2

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 (69) hide show
  1. package/CHANGELOG.md +1125 -0
  2. package/ClearCurrentRefinements.js +47 -0
  3. package/ClearCurrentRefinements.js.map +1 -0
  4. package/CurrentRefinements.js +152 -0
  5. package/CurrentRefinements.js.map +1 -0
  6. package/FacetDropdown.js +40 -0
  7. package/FacetDropdown.js.map +1 -0
  8. package/FacetItem.js +50 -0
  9. package/FacetItem.js.map +1 -0
  10. package/FacetListBase.js +140 -0
  11. package/FacetListBase.js.map +1 -0
  12. package/FacetListRefinement.js +25 -0
  13. package/FacetListRefinement.js.map +1 -0
  14. package/LICENSE +661 -0
  15. package/LearningTypeRadioFacet.js +165 -0
  16. package/LearningTypeRadioFacet.js.map +1 -0
  17. package/MobileFilterMenu.js +122 -0
  18. package/MobileFilterMenu.js.map +1 -0
  19. package/PrequerySearchSuggestionItem.js +48 -0
  20. package/PrequerySearchSuggestionItem.js.map +1 -0
  21. package/README.md +10 -0
  22. package/SearchBox.js +266 -0
  23. package/SearchBox.js.map +1 -0
  24. package/SearchContext.js +115 -0
  25. package/SearchContext.js.map +1 -0
  26. package/SearchFilters.js +73 -0
  27. package/SearchFilters.js.map +1 -0
  28. package/SearchHeader.js +117 -0
  29. package/SearchHeader.js.map +1 -0
  30. package/SearchPagination.js +78 -0
  31. package/SearchPagination.js.map +1 -0
  32. package/SearchSuggestionItem.js +58 -0
  33. package/SearchSuggestionItem.js.map +1 -0
  34. package/SearchSuggestions.js +137 -0
  35. package/SearchSuggestions.js.map +1 -0
  36. package/TypeaheadFacetDropdown.js +58 -0
  37. package/TypeaheadFacetDropdown.js.map +1 -0
  38. package/config/index.js +18 -0
  39. package/config/index.js.map +1 -0
  40. package/data/actions.js +46 -0
  41. package/data/actions.js.map +1 -0
  42. package/data/constants.js +92 -0
  43. package/data/constants.js.map +1 -0
  44. package/data/hooks.js +97 -0
  45. package/data/hooks.js.map +1 -0
  46. package/data/reducer.js +70 -0
  47. package/data/reducer.js.map +1 -0
  48. package/data/tests/constants.js +13 -0
  49. package/data/tests/constants.js.map +1 -0
  50. package/data/utils.js +69 -0
  51. package/data/utils.js.map +1 -0
  52. package/index.js +9 -0
  53. package/index.js.map +1 -0
  54. package/index.scss +3 -0
  55. package/messages.js +166 -0
  56. package/messages.js.map +1 -0
  57. package/package.json +68 -0
  58. package/styles/_CurrentRefinements.scss +19 -0
  59. package/styles/_FacetList.scss +49 -0
  60. package/styles/_MobileSearchFilters.scss +59 -0
  61. package/styles/_SearchBox.scss +8 -0
  62. package/styles/_SearchField.scss +14 -0
  63. package/styles/_SearchPagination.scss +5 -0
  64. package/styles/_SearchSuggestions.scss +97 -0
  65. package/styles/_index.scss +7 -0
  66. package/tests/utils.js +22 -0
  67. package/tests/utils.js.map +1 -0
  68. package/utils.js +159 -0
  69. package/utils.js.map +1 -0
@@ -0,0 +1,47 @@
1
+ var _excluded = ["className", "variant"];
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
5
+ import React, { useContext } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import { Button } from '@openedx/paragon';
8
+ import { FormattedMessage } from '@edx/frontend-platform/i18n';
9
+ import { SearchContext } from './SearchContext';
10
+ import { clearRefinementsAction } from './data/actions';
11
+ export var CLEAR_ALL_TEXT = 'clear all';
12
+ var ClearCurrentRefinements = function ClearCurrentRefinements(_ref) {
13
+ var className = _ref.className,
14
+ variant = _ref.variant,
15
+ props = _objectWithoutProperties(_ref, _excluded);
16
+ var _useContext = useContext(SearchContext),
17
+ refinements = _useContext.refinements,
18
+ dispatch = _useContext.dispatch;
19
+ var hideCards = refinements.hide_cards && refinements.hide_cards[0] === 'true';
20
+
21
+ /**
22
+ * Called when clear filters button is clicked. Removes
23
+ * all non-query keys from ``refinements`` and
24
+ * updates the query params.
25
+ */
26
+ var handleClearAllRefinementsClick = function handleClearAllRefinementsClick() {
27
+ dispatch(clearRefinementsAction());
28
+ };
29
+ return /*#__PURE__*/React.createElement("span", null, !hideCards && /*#__PURE__*/React.createElement(Button, _extends({
30
+ className: className,
31
+ variant: variant,
32
+ onClick: handleClearAllRefinementsClick
33
+ }, props), /*#__PURE__*/React.createElement(FormattedMessage, {
34
+ id: "search.facetFilters.clearAll.button",
35
+ defaultMessage: "clear all",
36
+ description: "Button text to clear all filters"
37
+ })));
38
+ };
39
+ ClearCurrentRefinements.propTypes = {
40
+ variant: PropTypes.string.isRequired,
41
+ className: PropTypes.string
42
+ };
43
+ ClearCurrentRefinements.defaultProps = {
44
+ className: undefined
45
+ };
46
+ export default ClearCurrentRefinements;
47
+ //# sourceMappingURL=ClearCurrentRefinements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearCurrentRefinements.js","names":["React","useContext","PropTypes","Button","FormattedMessage","SearchContext","clearRefinementsAction","CLEAR_ALL_TEXT","ClearCurrentRefinements","_ref","className","variant","props","_objectWithoutProperties","_excluded","_useContext","refinements","dispatch","hideCards","hide_cards","handleClearAllRefinementsClick","createElement","_extends","onClick","id","defaultMessage","description","propTypes","string","isRequired","defaultProps","undefined"],"sources":["../src/ClearCurrentRefinements.jsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@openedx/paragon';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { SearchContext } from './SearchContext';\nimport { clearRefinementsAction } from './data/actions';\n\nexport const CLEAR_ALL_TEXT = 'clear all';\n\nconst ClearCurrentRefinements = ({ className, variant, ...props }) => {\n const { refinements, dispatch } = useContext(SearchContext);\n const hideCards = (refinements.hide_cards && refinements.hide_cards[0] === 'true');\n\n /**\n * Called when clear filters button is clicked. Removes\n * all non-query keys from ``refinements`` and\n * updates the query params.\n */\n const handleClearAllRefinementsClick = () => {\n dispatch(clearRefinementsAction());\n };\n\n return (\n <span>\n {!hideCards && (\n <Button\n className={className}\n variant={variant}\n onClick={handleClearAllRefinementsClick}\n {...props}\n >\n <FormattedMessage\n id=\"search.facetFilters.clearAll.button\"\n defaultMessage=\"clear all\"\n description=\"Button text to clear all filters\"\n />\n </Button>\n ) }\n </span>\n );\n};\n\nClearCurrentRefinements.propTypes = {\n variant: PropTypes.string.isRequired,\n className: PropTypes.string,\n};\n\nClearCurrentRefinements.defaultProps = {\n className: undefined,\n};\n\nexport default ClearCurrentRefinements;\n"],"mappings":";;;;AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,sBAAsB,QAAQ,gBAAgB;AAEvD,OAAO,IAAMC,cAAc,GAAG,WAAW;AAEzC,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAAC,IAAA,EAAyC;EAAA,IAAnCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IAAEC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IAAKC,KAAK,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAC7D,IAAAC,WAAA,GAAkCd,UAAU,CAACI,aAAa,CAAC;IAAnDW,WAAW,GAAAD,WAAA,CAAXC,WAAW;IAAEC,QAAQ,GAAAF,WAAA,CAARE,QAAQ;EAC7B,IAAMC,SAAS,GAAIF,WAAW,CAACG,UAAU,IAAIH,WAAW,CAACG,UAAU,CAAC,CAAC,CAAC,KAAK,MAAO;;EAElF;AACF;AACA;AACA;AACA;EACE,IAAMC,8BAA8B,GAAG,SAAjCA,8BAA8BA,CAAA,EAAS;IAC3CH,QAAQ,CAACX,sBAAsB,CAAC,CAAC,CAAC;EACpC,CAAC;EAED,oBACEN,KAAA,CAAAqB,aAAA,eACG,CAACH,SAAS,iBACXlB,KAAA,CAAAqB,aAAA,CAAClB,MAAM,EAAAmB,QAAA;IACLZ,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBY,OAAO,EAAEH;EAA+B,GACpCR,KAAK,gBAETZ,KAAA,CAAAqB,aAAA,CAACjB,gBAAgB;IACfoB,EAAE,EAAC,qCAAqC;IACxCC,cAAc,EAAC,WAAW;IAC1BC,WAAW,EAAC;EAAkC,CAC/C,CACK,CAEJ,CAAC;AAEX,CAAC;AAEDlB,uBAAuB,CAACmB,SAAS,GAAG;EAClChB,OAAO,EAAET,SAAS,CAAC0B,MAAM,CAACC,UAAU;EACpCnB,SAAS,EAAER,SAAS,CAAC0B;AACvB,CAAC;AAEDpB,uBAAuB,CAACsB,YAAY,GAAG;EACrCpB,SAAS,EAAEqB;AACb,CAAC;AAED,eAAevB,uBAAuB","ignoreList":[]}
@@ -0,0 +1,152 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
+ /* eslint-disable react-hooks/rules-of-hooks */
8
+ import React, { useContext, useMemo, useState } from 'react';
9
+ import PropTypes from 'prop-types';
10
+ import classNames from 'classnames';
11
+ import { Badge, Button } from '@openedx/paragon';
12
+ import { CloseSmall } from '@openedx/paragon/icons';
13
+ import { connectCurrentRefinements } from 'react-instantsearch-dom';
14
+ import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
15
+ import ClearCurrentRefinements from './ClearCurrentRefinements';
16
+ import { QUERY_PARAMS_TO_IGNORE, NUM_CURRENT_REFINEMENTS_TO_DISPLAY, STYLE_VARIANTS } from './data/constants';
17
+ import { useActiveRefinementsAsFlatArray } from './data/hooks';
18
+ import { SearchContext } from './SearchContext';
19
+ import { removeFromRefinementArray, deleteRefinementAction } from './data/actions';
20
+ import messages from './messages';
21
+ export var CurrentRefinementsBase = function CurrentRefinementsBase(_ref) {
22
+ var items = _ref.items,
23
+ variant = _ref.variant;
24
+ if (!items || !items.length) {
25
+ return null;
26
+ }
27
+ var _useState = useState(false),
28
+ _useState2 = _slicedToArray(_useState, 2),
29
+ showAllRefinements = _useState2[0],
30
+ setShowAllRefinements = _useState2[1];
31
+ var _useContext = useContext(SearchContext),
32
+ refinements = _useContext.refinements,
33
+ dispatch = _useContext.dispatch;
34
+ var activeRefinementsAsFlatArray = useActiveRefinementsAsFlatArray(items);
35
+ var intl = useIntl();
36
+
37
+ /**
38
+ * Determines the correct number of active refinements to show at any
39
+ * given time based on showAllRefinements.
40
+ */
41
+ var visibleActiveRefinements = useMemo(function () {
42
+ // is the parameter to hide cards is passed, the selection of the catalog title is hidden
43
+ // to avoid the user accidentally clearing it and triggering a reload
44
+ if (refinements.hide_cards && refinements.hide_cards[0] === 'true') {
45
+ var updatedArray = [];
46
+ activeRefinementsAsFlatArray.forEach(function (element) {
47
+ if (element.attribute !== 'enterprise_catalog_query_titles') {
48
+ updatedArray.push(element);
49
+ }
50
+ });
51
+ return updatedArray;
52
+ }
53
+ if (showAllRefinements) {
54
+ return activeRefinementsAsFlatArray;
55
+ }
56
+ return activeRefinementsAsFlatArray.slice(0, NUM_CURRENT_REFINEMENTS_TO_DISPLAY);
57
+ }, [activeRefinementsAsFlatArray, refinements.hide_cards, showAllRefinements]);
58
+
59
+ /**
60
+ * Removes the refinement that was clicked from the query params, which causes
61
+ * the search results to update.
62
+ */
63
+ var handleRefinementBadgeClick = function handleRefinementBadgeClick(item) {
64
+ var _refinements$facetNam;
65
+ if (showAllRefinements && visibleActiveRefinements.length - 1 <= NUM_CURRENT_REFINEMENTS_TO_DISPLAY) {
66
+ setShowAllRefinements(false);
67
+ }
68
+ // if the refinement is found, remove it.
69
+ var facetName = item.attribute;
70
+ if (!QUERY_PARAMS_TO_IGNORE.includes(facetName) && (_refinements$facetNam = refinements[facetName]) !== null && _refinements$facetNam !== void 0 && _refinements$facetNam.includes(item.label)) {
71
+ if (refinements[facetName].length === 1) {
72
+ dispatch(deleteRefinementAction(facetName));
73
+ } else {
74
+ dispatch(removeFromRefinementArray(facetName, item.label));
75
+ }
76
+ }
77
+ };
78
+ return /*#__PURE__*/React.createElement("ul", {
79
+ className: "list-unstyled d-flex flex-wrap align-items-center mb-0"
80
+ }, visibleActiveRefinements.map(function (item) {
81
+ return /*#__PURE__*/React.createElement("li", {
82
+ className: "mr-2",
83
+ key: item.label
84
+ }, /*#__PURE__*/React.createElement(Badge, {
85
+ className: "fe__refinement-badge py-2 mb-2 font-weight-light",
86
+ variant: "light",
87
+ onClick: function onClick() {
88
+ return handleRefinementBadgeClick(item);
89
+ }
90
+ }, /*#__PURE__*/React.createElement("span", {
91
+ className: "mr-2"
92
+ }, messages[item.label] ? intl.formatMessage(messages[item.label]) : item.label), /*#__PURE__*/React.createElement(CloseSmall, null), /*#__PURE__*/React.createElement("span", {
93
+ className: "sr-only"
94
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
95
+ id: "search.facetFilters.removeFilter.button",
96
+ defaultMessage: "Remove the filter {filterTitle}",
97
+ description: "Button text to remove a filter from the search results",
98
+ values: {
99
+ filterTitle: item.label
100
+ }
101
+ }))));
102
+ }), !showAllRefinements && activeRefinementsAsFlatArray.length > NUM_CURRENT_REFINEMENTS_TO_DISPLAY && /*#__PURE__*/React.createElement("li", {
103
+ className: "mr-2"
104
+ }, /*#__PURE__*/React.createElement(Badge, {
105
+ className: classNames('fe__refinement-badge mb-2 py-2 font-weight-light fe_current-icon-justify-center', {
106
+ 'fe__refinement-badge--default': variant === STYLE_VARIANTS.defualt
107
+ }),
108
+ variant: "light",
109
+ onClick: function onClick() {
110
+ return setShowAllRefinements(true);
111
+ }
112
+ }, "+", activeRefinementsAsFlatArray.length - NUM_CURRENT_REFINEMENTS_TO_DISPLAY, /*#__PURE__*/React.createElement("span", {
113
+ className: "sr-only"
114
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
115
+ id: "search.facetFilters.showAll.button",
116
+ defaultMessage: "Show all {activeRefinementsCount} filters",
117
+ description: "Button text to show all filters",
118
+ values: {
119
+ activeRefinementsCount: activeRefinementsAsFlatArray.length
120
+ }
121
+ })))), showAllRefinements && /*#__PURE__*/React.createElement("li", {
122
+ className: "mr-2"
123
+ }, /*#__PURE__*/React.createElement(Button, {
124
+ className: classNames('fe__current-refinement-button text-underline px-1 py-0 mb-2', {
125
+ 'fe__current-refinement-button--inverse': variant === STYLE_VARIANTS.inverse
126
+ }),
127
+ onClick: function onClick() {
128
+ return setShowAllRefinements(false);
129
+ },
130
+ variant: "link",
131
+ size: "inline"
132
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
133
+ id: "search.facetFilters.showLess.button",
134
+ defaultMessage: "show less",
135
+ description: "Button text to show less filters"
136
+ }))), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(ClearCurrentRefinements, {
137
+ className: classNames('fe__current-refinement-button text-underline px-1 py-0 mb-2', {
138
+ 'fe__current-refinement-button--inverse': variant === STYLE_VARIANTS.inverse
139
+ }),
140
+ variant: "link",
141
+ size: "inline"
142
+ })));
143
+ };
144
+ CurrentRefinementsBase.defaultProps = {
145
+ variant: STYLE_VARIANTS.inverse
146
+ };
147
+ CurrentRefinementsBase.propTypes = {
148
+ items: PropTypes.arrayOf(PropTypes.shape()).isRequired,
149
+ variant: PropTypes.oneOf(Object.values(STYLE_VARIANTS))
150
+ };
151
+ export default connectCurrentRefinements(CurrentRefinementsBase);
152
+ //# sourceMappingURL=CurrentRefinements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurrentRefinements.js","names":["React","useContext","useMemo","useState","PropTypes","classNames","Badge","Button","CloseSmall","connectCurrentRefinements","FormattedMessage","useIntl","ClearCurrentRefinements","QUERY_PARAMS_TO_IGNORE","NUM_CURRENT_REFINEMENTS_TO_DISPLAY","STYLE_VARIANTS","useActiveRefinementsAsFlatArray","SearchContext","removeFromRefinementArray","deleteRefinementAction","messages","CurrentRefinementsBase","_ref","items","variant","length","_useState","_useState2","_slicedToArray","showAllRefinements","setShowAllRefinements","_useContext","refinements","dispatch","activeRefinementsAsFlatArray","intl","visibleActiveRefinements","hide_cards","updatedArray","forEach","element","attribute","push","slice","handleRefinementBadgeClick","item","_refinements$facetNam","facetName","includes","label","createElement","className","map","key","onClick","formatMessage","id","defaultMessage","description","values","filterTitle","defualt","activeRefinementsCount","inverse","size","defaultProps","propTypes","arrayOf","shape","isRequired","oneOf","Object"],"sources":["../src/CurrentRefinements.jsx"],"sourcesContent":["/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { useContext, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { Badge, Button } from '@openedx/paragon';\nimport { CloseSmall } from '@openedx/paragon/icons';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';\n\nimport ClearCurrentRefinements from './ClearCurrentRefinements';\n\nimport {\n QUERY_PARAMS_TO_IGNORE,\n NUM_CURRENT_REFINEMENTS_TO_DISPLAY,\n STYLE_VARIANTS,\n} from './data/constants';\nimport {\n useActiveRefinementsAsFlatArray,\n} from './data/hooks';\nimport { SearchContext } from './SearchContext';\nimport { removeFromRefinementArray, deleteRefinementAction } from './data/actions';\nimport messages from './messages';\n\nexport const CurrentRefinementsBase = ({ items, variant }) => {\n if (!items || !items.length) {\n return null;\n }\n\n const [showAllRefinements, setShowAllRefinements] = useState(false);\n const { refinements, dispatch } = useContext(SearchContext);\n const activeRefinementsAsFlatArray = useActiveRefinementsAsFlatArray(items);\n const intl = useIntl();\n\n /**\n * Determines the correct number of active refinements to show at any\n * given time based on showAllRefinements.\n */\n const visibleActiveRefinements = useMemo(\n () => {\n // is the parameter to hide cards is passed, the selection of the catalog title is hidden\n // to avoid the user accidentally clearing it and triggering a reload\n if (refinements.hide_cards && refinements.hide_cards[0] === 'true') {\n const updatedArray = [];\n activeRefinementsAsFlatArray.forEach(element => {\n if (element.attribute !== 'enterprise_catalog_query_titles') {\n updatedArray.push(element);\n }\n });\n return updatedArray;\n }\n if (showAllRefinements) {\n return activeRefinementsAsFlatArray;\n }\n return activeRefinementsAsFlatArray.slice(0, NUM_CURRENT_REFINEMENTS_TO_DISPLAY);\n },\n [activeRefinementsAsFlatArray, refinements.hide_cards, showAllRefinements],\n );\n\n /**\n * Removes the refinement that was clicked from the query params, which causes\n * the search results to update.\n */\n const handleRefinementBadgeClick = (item) => {\n if (showAllRefinements && visibleActiveRefinements.length - 1 <= NUM_CURRENT_REFINEMENTS_TO_DISPLAY) {\n setShowAllRefinements(false);\n }\n // if the refinement is found, remove it.\n const facetName = item.attribute;\n if (!QUERY_PARAMS_TO_IGNORE.includes(facetName) && refinements[facetName]?.includes(item.label)) {\n if (refinements[facetName].length === 1) {\n dispatch(deleteRefinementAction(facetName));\n } else {\n dispatch(removeFromRefinementArray(facetName, item.label));\n }\n }\n };\n\n return (\n <ul className=\"list-unstyled d-flex flex-wrap align-items-center mb-0\">\n {visibleActiveRefinements.map(item => (\n <li className=\"mr-2\" key={item.label}>\n <Badge\n className=\"fe__refinement-badge py-2 mb-2 font-weight-light\"\n variant=\"light\"\n onClick={() => handleRefinementBadgeClick(item)}\n >\n <span className=\"mr-2\">\n {messages[item.label] ? intl.formatMessage(messages[item.label]) : item.label}\n </span>\n\n <CloseSmall />\n <span className=\"sr-only\">\n <FormattedMessage\n id=\"search.facetFilters.removeFilter.button\"\n defaultMessage=\"Remove the filter {filterTitle}\"\n description=\"Button text to remove a filter from the search results\"\n values={{ filterTitle: item.label }}\n />\n </span>\n </Badge>\n </li>\n ))}\n {!showAllRefinements && activeRefinementsAsFlatArray.length > NUM_CURRENT_REFINEMENTS_TO_DISPLAY && (\n <li className=\"mr-2\">\n <Badge\n className={classNames('fe__refinement-badge mb-2 py-2 font-weight-light fe_current-icon-justify-center', { 'fe__refinement-badge--default': variant === STYLE_VARIANTS.defualt })}\n variant=\"light\"\n onClick={() => setShowAllRefinements(true)}\n >\n +{activeRefinementsAsFlatArray.length - NUM_CURRENT_REFINEMENTS_TO_DISPLAY}\n <span className=\"sr-only\">\n <FormattedMessage\n id=\"search.facetFilters.showAll.button\"\n defaultMessage=\"Show all {activeRefinementsCount} filters\"\n description=\"Button text to show all filters\"\n values={{ activeRefinementsCount: activeRefinementsAsFlatArray.length }}\n />\n </span>\n </Badge>\n </li>\n )}\n {showAllRefinements && (\n <li className=\"mr-2\">\n <Button\n className={classNames(\n 'fe__current-refinement-button text-underline px-1 py-0 mb-2',\n { 'fe__current-refinement-button--inverse': variant === STYLE_VARIANTS.inverse },\n )}\n onClick={() => setShowAllRefinements(false)}\n variant=\"link\"\n size=\"inline\"\n >\n <FormattedMessage\n id=\"search.facetFilters.showLess.button\"\n defaultMessage=\"show less\"\n description=\"Button text to show less filters\"\n />\n </Button>\n </li>\n )}\n <li>\n <ClearCurrentRefinements\n className={classNames(\n 'fe__current-refinement-button text-underline px-1 py-0 mb-2',\n { 'fe__current-refinement-button--inverse': variant === STYLE_VARIANTS.inverse },\n )}\n variant=\"link\"\n size=\"inline\"\n />\n </li>\n </ul>\n );\n};\n\nCurrentRefinementsBase.defaultProps = {\n variant: STYLE_VARIANTS.inverse,\n};\n\nCurrentRefinementsBase.propTypes = {\n items: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n variant: PropTypes.oneOf(Object.values(STYLE_VARIANTS)),\n};\n\nexport default connectCurrentRefinements(CurrentRefinementsBase);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import classNames from 'classnames';
4
+ import { Dropdown } from '@openedx/paragon';
5
+ import { STYLE_VARIANTS } from './data/constants';
6
+ var FacetDropdown = function FacetDropdown(_ref) {
7
+ var title = _ref.title,
8
+ items = _ref.items,
9
+ isBold = _ref.isBold,
10
+ className = _ref.className,
11
+ variant = _ref.variant;
12
+ return /*#__PURE__*/React.createElement("div", {
13
+ className: "facet-list"
14
+ }, /*#__PURE__*/React.createElement(Dropdown, {
15
+ autoClose: "outside",
16
+ className: classNames('mb-0 mr-md-3', className)
17
+ }, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
18
+ id: "{title}-{variant}",
19
+ variant: classNames({
20
+ 'inverse-primary': variant === STYLE_VARIANTS.inverse,
21
+ 'outline-primary': variant === STYLE_VARIANTS["default"]
22
+ }),
23
+ className: classNames({
24
+ 'font-weight-bold': isBold
25
+ })
26
+ }, title), /*#__PURE__*/React.createElement(Dropdown.Menu, null, items)));
27
+ };
28
+ FacetDropdown.defaultProps = {
29
+ className: '',
30
+ variant: STYLE_VARIANTS.inverse
31
+ };
32
+ FacetDropdown.propTypes = {
33
+ title: PropTypes.string.isRequired,
34
+ items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
35
+ isBold: PropTypes.bool.isRequired,
36
+ className: PropTypes.string,
37
+ variant: PropTypes.oneOf([STYLE_VARIANTS["default"], STYLE_VARIANTS.inverse])
38
+ };
39
+ export default FacetDropdown;
40
+ //# sourceMappingURL=FacetDropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FacetDropdown.js","names":["React","PropTypes","classNames","Dropdown","STYLE_VARIANTS","FacetDropdown","_ref","title","items","isBold","className","variant","createElement","autoClose","Toggle","id","inverse","Menu","defaultProps","propTypes","string","isRequired","oneOfType","arrayOf","node","bool","oneOf"],"sources":["../src/FacetDropdown.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Dropdown } from '@openedx/paragon';\n\nimport { STYLE_VARIANTS } from './data/constants';\n\nconst FacetDropdown = ({\n title,\n items,\n isBold,\n className,\n variant,\n}) => (\n <div className=\"facet-list\">\n <Dropdown autoClose=\"outside\" className={classNames('mb-0 mr-md-3', className)}>\n <Dropdown.Toggle\n id=\"{title}-{variant}\"\n variant={classNames({\n 'inverse-primary': variant === STYLE_VARIANTS.inverse,\n 'outline-primary': variant === STYLE_VARIANTS.default,\n })}\n className={classNames({ 'font-weight-bold': isBold })}\n >\n {title}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {items}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n);\n\nFacetDropdown.defaultProps = {\n className: '',\n variant: STYLE_VARIANTS.inverse,\n};\n\nFacetDropdown.propTypes = {\n title: PropTypes.string.isRequired,\n items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n isBold: PropTypes.bool.isRequired,\n className: PropTypes.string,\n variant: PropTypes.oneOf([STYLE_VARIANTS.default, STYLE_VARIANTS.inverse]),\n};\n\nexport default FacetDropdown;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,kBAAkB;AAE3C,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAAC,IAAA;EAAA,IACjBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,MAAM,GAAAH,IAAA,CAANG,MAAM;IACNC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IACTC,OAAO,GAAAL,IAAA,CAAPK,OAAO;EAAA,oBAEPX,KAAA,CAAAY,aAAA;IAAKF,SAAS,EAAC;EAAY,gBACzBV,KAAA,CAAAY,aAAA,CAACT,QAAQ;IAACU,SAAS,EAAC,SAAS;IAACH,SAAS,EAAER,UAAU,CAAC,cAAc,EAAEQ,SAAS;EAAE,gBAC7EV,KAAA,CAAAY,aAAA,CAACT,QAAQ,CAACW,MAAM;IACdC,EAAE,EAAC,mBAAmB;IACtBJ,OAAO,EAAET,UAAU,CAAC;MAClB,iBAAiB,EAAES,OAAO,KAAKP,cAAc,CAACY,OAAO;MACrD,iBAAiB,EAAEL,OAAO,KAAKP,cAAc;IAC/C,CAAC,CAAE;IACHM,SAAS,EAAER,UAAU,CAAC;MAAE,kBAAkB,EAAEO;IAAO,CAAC;EAAE,GAErDF,KACc,CAAC,eAClBP,KAAA,CAAAY,aAAA,CAACT,QAAQ,CAACc,IAAI,QACXT,KACY,CACP,CACP,CAAC;AAAA,CACP;AAEDH,aAAa,CAACa,YAAY,GAAG;EAC3BR,SAAS,EAAE,EAAE;EACbC,OAAO,EAAEP,cAAc,CAACY;AAC1B,CAAC;AAEDX,aAAa,CAACc,SAAS,GAAG;EACxBZ,KAAK,EAAEN,SAAS,CAACmB,MAAM,CAACC,UAAU;EAClCb,KAAK,EAAEP,SAAS,CAACqB,SAAS,CAAC,CAACrB,SAAS,CAACsB,OAAO,CAACtB,SAAS,CAACuB,IAAI,CAAC,EAAEvB,SAAS,CAACuB,IAAI,CAAC,CAAC,CAACH,UAAU;EAC1FZ,MAAM,EAAER,SAAS,CAACwB,IAAI,CAACJ,UAAU;EACjCX,SAAS,EAAET,SAAS,CAACmB,MAAM;EAC3BT,OAAO,EAAEV,SAAS,CAACyB,KAAK,CAAC,CAACtB,cAAc,WAAQ,EAAEA,cAAc,CAACY,OAAO,CAAC;AAC3E,CAAC;AAED,eAAeX,aAAa","ignoreList":[]}
package/FacetItem.js ADDED
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Badge, Input, Dropdown } from '@openedx/paragon';
4
+ import classNames from 'classnames';
5
+ import { useIntl } from '@edx/frontend-platform/i18n';
6
+ import { STYLE_VARIANTS } from './data/constants';
7
+ import messages from './messages';
8
+ var FacetItem = function FacetItem(_ref) {
9
+ var handleInputOnChange = _ref.handleInputOnChange,
10
+ item = _ref.item,
11
+ isChecked = _ref.isChecked,
12
+ variant = _ref.variant,
13
+ showBadge = _ref.showBadge;
14
+ var intl = useIntl();
15
+ return /*#__PURE__*/React.createElement(Dropdown.Item, {
16
+ as: "label",
17
+ className: "mb-0 py-3 d-flex align-items-center"
18
+ }, /*#__PURE__*/React.createElement(Input, {
19
+ type: "checkbox",
20
+ checked: isChecked,
21
+ onChange: function onChange() {
22
+ return handleInputOnChange(item);
23
+ },
24
+ className: "facet-item position-relative mr-2 mb-2"
25
+ }), /*#__PURE__*/React.createElement("span", {
26
+ className: classNames('facet-item-label', {
27
+ 'is-refined': isChecked
28
+ })
29
+ }, messages[item.label] ? intl.formatMessage(messages[item.label]) : item.label), showBadge && /*#__PURE__*/React.createElement(Badge, {
30
+ pill: true,
31
+ className: classNames('ml-2 bg-brand-primary text-brand-primary', {
32
+ 'bg-brand-primary--default': variant === STYLE_VARIANTS["default"]
33
+ })
34
+ }, item.count));
35
+ };
36
+ FacetItem.defaultProps = {
37
+ variant: STYLE_VARIANTS.inverse
38
+ };
39
+ FacetItem.propTypes = {
40
+ handleInputOnChange: PropTypes.func.isRequired,
41
+ isChecked: PropTypes.bool.isRequired,
42
+ item: PropTypes.shape({
43
+ count: PropTypes.number,
44
+ label: PropTypes.string.isRequired
45
+ }).isRequired,
46
+ variant: PropTypes.oneOf(Object.values(STYLE_VARIANTS)),
47
+ showBadge: PropTypes.bool.isRequired
48
+ };
49
+ export default FacetItem;
50
+ //# sourceMappingURL=FacetItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FacetItem.js","names":["React","PropTypes","Badge","Input","Dropdown","classNames","useIntl","STYLE_VARIANTS","messages","FacetItem","_ref","handleInputOnChange","item","isChecked","variant","showBadge","intl","createElement","Item","as","className","type","checked","onChange","label","formatMessage","pill","count","defaultProps","inverse","propTypes","func","isRequired","bool","shape","number","string","oneOf","Object","values"],"sources":["../src/FacetItem.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Badge, Input, Dropdown } from '@openedx/paragon';\nimport classNames from 'classnames';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { STYLE_VARIANTS } from './data/constants';\nimport messages from './messages';\n\nconst FacetItem = ({\n handleInputOnChange, item, isChecked, variant, showBadge,\n}) => {\n const intl = useIntl();\n\n return (\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"checkbox\"\n checked={isChecked}\n onChange={() => handleInputOnChange(item)}\n className=\"facet-item position-relative mr-2 mb-2\"\n />\n <span className={classNames('facet-item-label', { 'is-refined': isChecked })}>\n {messages[item.label] ? intl.formatMessage(messages[item.label]) : item.label}\n </span>\n {showBadge && (\n <Badge\n pill\n className={classNames(\n 'ml-2 bg-brand-primary text-brand-primary',\n { 'bg-brand-primary--default': variant === STYLE_VARIANTS.default },\n )}\n >\n {item.count}\n </Badge>\n )}\n </Dropdown.Item>\n );\n};\n\nFacetItem.defaultProps = {\n variant: STYLE_VARIANTS.inverse,\n};\n\nFacetItem.propTypes = {\n handleInputOnChange: PropTypes.func.isRequired,\n isChecked: PropTypes.bool.isRequired,\n item: PropTypes.shape({\n count: PropTypes.number,\n label: PropTypes.string.isRequired,\n }).isRequired,\n variant: PropTypes.oneOf(Object.values(STYLE_VARIANTS)),\n showBadge: PropTypes.bool.isRequired,\n};\n\nexport default FacetItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,QAAQ,kBAAkB;AACzD,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,OAAO,QAAQ,6BAA6B;AACrD,SAASC,cAAc,QAAQ,kBAAkB;AACjD,OAAOC,QAAQ,MAAM,YAAY;AAEjC,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAAC,IAAA,EAET;EAAA,IADJC,mBAAmB,GAAAD,IAAA,CAAnBC,mBAAmB;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS;IAAEC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IAAEC,SAAS,GAAAL,IAAA,CAATK,SAAS;EAExD,IAAMC,IAAI,GAAGV,OAAO,CAAC,CAAC;EAEtB,oBACEN,KAAA,CAAAiB,aAAA,CAACb,QAAQ,CAACc,IAAI;IAACC,EAAE,EAAC,OAAO;IAACC,SAAS,EAAC;EAAqC,gBACvEpB,KAAA,CAAAiB,aAAA,CAACd,KAAK;IACJkB,IAAI,EAAC,UAAU;IACfC,OAAO,EAAET,SAAU;IACnBU,QAAQ,EAAE,SAAVA,QAAQA,CAAA;MAAA,OAAQZ,mBAAmB,CAACC,IAAI,CAAC;IAAA,CAAC;IAC1CQ,SAAS,EAAC;EAAwC,CACnD,CAAC,eACFpB,KAAA,CAAAiB,aAAA;IAAMG,SAAS,EAAEf,UAAU,CAAC,kBAAkB,EAAE;MAAE,YAAY,EAAEQ;IAAU,CAAC;EAAE,GAC1EL,QAAQ,CAACI,IAAI,CAACY,KAAK,CAAC,GAAGR,IAAI,CAACS,aAAa,CAACjB,QAAQ,CAACI,IAAI,CAACY,KAAK,CAAC,CAAC,GAAGZ,IAAI,CAACY,KACpE,CAAC,EACNT,SAAS,iBACVf,KAAA,CAAAiB,aAAA,CAACf,KAAK;IACJwB,IAAI;IACJN,SAAS,EAAEf,UAAU,CACnB,0CAA0C,EAC1C;MAAE,2BAA2B,EAAES,OAAO,KAAKP,cAAc;IAAS,CACpE;EAAE,GAEDK,IAAI,CAACe,KACD,CAEM,CAAC;AAEpB,CAAC;AAEDlB,SAAS,CAACmB,YAAY,GAAG;EACvBd,OAAO,EAAEP,cAAc,CAACsB;AAC1B,CAAC;AAEDpB,SAAS,CAACqB,SAAS,GAAG;EACpBnB,mBAAmB,EAAEV,SAAS,CAAC8B,IAAI,CAACC,UAAU;EAC9CnB,SAAS,EAAEZ,SAAS,CAACgC,IAAI,CAACD,UAAU;EACpCpB,IAAI,EAAEX,SAAS,CAACiC,KAAK,CAAC;IACpBP,KAAK,EAAE1B,SAAS,CAACkC,MAAM;IACvBX,KAAK,EAAEvB,SAAS,CAACmC,MAAM,CAACJ;EAC1B,CAAC,CAAC,CAACA,UAAU;EACblB,OAAO,EAAEb,SAAS,CAACoC,KAAK,CAACC,MAAM,CAACC,MAAM,CAAChC,cAAc,CAAC,CAAC;EACvDQ,SAAS,EAAEd,SAAS,CAACgC,IAAI,CAACD;AAC5B,CAAC;AAED,eAAevB,SAAS","ignoreList":[]}
@@ -0,0 +1,140 @@
1
+ /* eslint-disable react-hooks/exhaustive-deps */
2
+ import React, { useCallback, useContext } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { FormattedMessage } from '@edx/frontend-platform/i18n';
5
+ import { STYLE_VARIANTS } from './data/constants';
6
+ import FacetDropdown from './FacetDropdown';
7
+ import TypeaheadFacetDropdown from './TypeaheadFacetDropdown';
8
+ import FacetItem from './FacetItem';
9
+ import { SearchContext } from './SearchContext';
10
+ import { addToRefinementArray, setRefinementAction, deleteRefinementAction, removeFromRefinementArray } from './data/actions';
11
+ var FacetListBase = function FacetListBase(_ref) {
12
+ var attribute = _ref.attribute,
13
+ facetValueType = _ref.facetValueType,
14
+ isBold = _ref.isBold,
15
+ isCheckedField = _ref.isCheckedField,
16
+ items = _ref.items,
17
+ title = _ref.title,
18
+ typeaheadOptions = _ref.typeaheadOptions,
19
+ searchForItems = _ref.searchForItems,
20
+ variant = _ref.variant,
21
+ noDisplay = _ref.noDisplay,
22
+ doRefinement = _ref.doRefinement,
23
+ customAttribute = _ref.customAttribute,
24
+ showBadge = _ref.showBadge;
25
+ var _useContext = useContext(SearchContext),
26
+ refinements = _useContext.refinements,
27
+ dispatch = _useContext.dispatch;
28
+
29
+ /**
30
+ * Handles when a facet option is toggled by either adding it to the refinements
31
+ * reducer for the facet attribute, or removes the facet attribute if there is no
32
+ * longer any selected options for that particular facet attribute.
33
+ */
34
+ var handleInputOnChange = function handleInputOnChange(item) {
35
+ // if it is desired to load the same attribute data in multiple dropdowns then
36
+ // customAttribute can be passed to differentiate them.
37
+ var index = customAttribute || attribute;
38
+ if (item.value && facetValueType === 'array') {
39
+ if (item.value.length > 0) {
40
+ var _refinements$index;
41
+ if ((_refinements$index = refinements[index]) !== null && _refinements$index !== void 0 && _refinements$index.includes(item.label)) {
42
+ dispatch(removeFromRefinementArray(index, item.label));
43
+ } else {
44
+ dispatch(addToRefinementArray(index, item.label));
45
+ }
46
+ } else {
47
+ dispatch(deleteRefinementAction(index));
48
+ }
49
+ } else if (facetValueType === 'bool') {
50
+ // eslint-disable-next-line no-bitwise
51
+ dispatch(setRefinementAction(index, refinements[index] ^ 1));
52
+ } else if (facetValueType === 'single-item') {
53
+ var _refinements$index2;
54
+ if ((_refinements$index2 = refinements[index]) !== null && _refinements$index2 !== void 0 && _refinements$index2.includes(item.label)) {
55
+ dispatch(deleteRefinementAction(index, item.label));
56
+ } else {
57
+ dispatch(setRefinementAction(index, [item.label]));
58
+ }
59
+ }
60
+ };
61
+ var renderItems = useCallback(function () {
62
+ if (!(items !== null && items !== void 0 && items.length)) {
63
+ return /*#__PURE__*/React.createElement("span", {
64
+ className: "p-2 d-block"
65
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
66
+ id: "search.facetFilters.noOptionsFound",
67
+ defaultMessage: "No options found.",
68
+ description: "Message displayed when no options are found for a facet filter."
69
+ }));
70
+ }
71
+ return items.map(function (item) {
72
+ var isChecked;
73
+ if (doRefinement) {
74
+ isChecked = isCheckedField ? item[isCheckedField] : !!item.value;
75
+ } else {
76
+ var _refinements$index3;
77
+ var index = customAttribute || attribute;
78
+ isChecked = (_refinements$index3 = refinements[index]) === null || _refinements$index3 === void 0 ? void 0 : _refinements$index3.includes(item.label);
79
+ }
80
+ return /*#__PURE__*/React.createElement(FacetItem, {
81
+ key: item.label,
82
+ handleInputOnChange: handleInputOnChange,
83
+ item: item,
84
+ isChecked: isChecked,
85
+ variant: variant,
86
+ showBadge: showBadge
87
+ });
88
+ });
89
+ }, [items]);
90
+ if (noDisplay) {
91
+ return null;
92
+ }
93
+ if (typeaheadOptions) {
94
+ return /*#__PURE__*/React.createElement(TypeaheadFacetDropdown, {
95
+ items: renderItems(),
96
+ title: title,
97
+ isBold: isBold,
98
+ options: typeaheadOptions,
99
+ searchForItems: searchForItems,
100
+ variant: variant
101
+ });
102
+ }
103
+ return /*#__PURE__*/React.createElement(FacetDropdown, {
104
+ items: renderItems(),
105
+ title: title,
106
+ isBold: isBold,
107
+ variant: variant
108
+ });
109
+ };
110
+ FacetListBase.defaultProps = {
111
+ isCheckedField: null,
112
+ typeaheadOptions: null,
113
+ customAttribute: null,
114
+ searchForItems: null,
115
+ variant: STYLE_VARIANTS.inverse,
116
+ noDisplay: false,
117
+ doRefinement: true,
118
+ showBadge: true
119
+ };
120
+ FacetListBase.propTypes = {
121
+ attribute: PropTypes.string.isRequired,
122
+ facetValueType: PropTypes.oneOf(['array', 'bool', 'single-item']).isRequired,
123
+ isBold: PropTypes.bool.isRequired,
124
+ isCheckedField: PropTypes.string,
125
+ customAttribute: PropTypes.string,
126
+ items: PropTypes.arrayOf(PropTypes.shape()).isRequired,
127
+ title: PropTypes.string.isRequired,
128
+ typeaheadOptions: PropTypes.shape({
129
+ placeholder: PropTypes.string.isRequired,
130
+ ariaLabel: PropTypes.string.isRequired,
131
+ minLength: PropTypes.number.isRequired
132
+ }),
133
+ searchForItems: PropTypes.func,
134
+ variant: PropTypes.oneOf([STYLE_VARIANTS["default"], STYLE_VARIANTS.inverse]),
135
+ noDisplay: PropTypes.bool,
136
+ doRefinement: PropTypes.bool,
137
+ showBadge: PropTypes.bool
138
+ };
139
+ export default FacetListBase;
140
+ //# sourceMappingURL=FacetListBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FacetListBase.js","names":["React","useCallback","useContext","PropTypes","FormattedMessage","STYLE_VARIANTS","FacetDropdown","TypeaheadFacetDropdown","FacetItem","SearchContext","addToRefinementArray","setRefinementAction","deleteRefinementAction","removeFromRefinementArray","FacetListBase","_ref","attribute","facetValueType","isBold","isCheckedField","items","title","typeaheadOptions","searchForItems","variant","noDisplay","doRefinement","customAttribute","showBadge","_useContext","refinements","dispatch","handleInputOnChange","item","index","value","length","_refinements$index","includes","label","_refinements$index2","renderItems","createElement","className","id","defaultMessage","description","map","isChecked","_refinements$index3","key","options","defaultProps","inverse","propTypes","string","isRequired","oneOf","bool","arrayOf","shape","placeholder","ariaLabel","minLength","number","func"],"sources":["../src/FacetListBase.jsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useCallback, useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { STYLE_VARIANTS } from './data/constants';\nimport FacetDropdown from './FacetDropdown';\nimport TypeaheadFacetDropdown from './TypeaheadFacetDropdown';\nimport FacetItem from './FacetItem';\nimport { SearchContext } from './SearchContext';\nimport {\n addToRefinementArray, setRefinementAction, deleteRefinementAction, removeFromRefinementArray,\n} from './data/actions';\n\nconst FacetListBase = ({\n attribute,\n facetValueType,\n isBold,\n isCheckedField,\n items,\n title,\n typeaheadOptions,\n searchForItems,\n variant,\n noDisplay,\n doRefinement,\n customAttribute,\n showBadge,\n}) => {\n const { refinements, dispatch } = useContext(SearchContext);\n\n /**\n * Handles when a facet option is toggled by either adding it to the refinements\n * reducer for the facet attribute, or removes the facet attribute if there is no\n * longer any selected options for that particular facet attribute.\n */\n const handleInputOnChange = (item) => {\n // if it is desired to load the same attribute data in multiple dropdowns then\n // customAttribute can be passed to differentiate them.\n const index = customAttribute || attribute;\n if (item.value && facetValueType === 'array') {\n if (item.value.length > 0) {\n if (refinements[index]?.includes(item.label)) {\n dispatch(removeFromRefinementArray(index, item.label));\n } else {\n dispatch(addToRefinementArray(index, item.label));\n }\n } else {\n dispatch(deleteRefinementAction(index));\n }\n } else if (facetValueType === 'bool') {\n // eslint-disable-next-line no-bitwise\n dispatch(setRefinementAction(index, refinements[index] ^ 1));\n } else if (facetValueType === 'single-item') {\n if (refinements[index]?.includes(item.label)) {\n dispatch(deleteRefinementAction(index, item.label));\n } else {\n dispatch(setRefinementAction(index, [item.label]));\n }\n }\n };\n\n const renderItems = useCallback(\n () => {\n if (!items?.length) {\n return (\n <span className=\"p-2 d-block\">\n <FormattedMessage\n id=\"search.facetFilters.noOptionsFound\"\n defaultMessage=\"No options found.\"\n description=\"Message displayed when no options are found for a facet filter.\"\n />\n </span>\n );\n }\n\n return items.map((item) => {\n let isChecked;\n if (doRefinement) {\n isChecked = isCheckedField ? item[isCheckedField] : !!item.value;\n } else {\n const index = customAttribute || attribute;\n isChecked = refinements[index]?.includes(item.label);\n }\n return (\n <FacetItem\n key={item.label}\n handleInputOnChange={handleInputOnChange}\n item={item}\n isChecked={isChecked}\n variant={variant}\n showBadge={showBadge}\n />\n );\n });\n },\n [items],\n );\n\n if (noDisplay) {\n return null;\n }\n\n if (typeaheadOptions) {\n return (\n <TypeaheadFacetDropdown\n items={renderItems()}\n title={title}\n isBold={isBold}\n options={typeaheadOptions}\n searchForItems={searchForItems}\n variant={variant}\n />\n );\n }\n\n return (\n <FacetDropdown\n items={renderItems()}\n title={title}\n isBold={isBold}\n variant={variant}\n />\n );\n};\n\nFacetListBase.defaultProps = {\n isCheckedField: null,\n typeaheadOptions: null,\n customAttribute: null,\n searchForItems: null,\n variant: STYLE_VARIANTS.inverse,\n noDisplay: false,\n doRefinement: true,\n showBadge: true,\n};\n\nFacetListBase.propTypes = {\n attribute: PropTypes.string.isRequired,\n facetValueType: PropTypes.oneOf(['array', 'bool', 'single-item']).isRequired,\n isBold: PropTypes.bool.isRequired,\n isCheckedField: PropTypes.string,\n customAttribute: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n title: PropTypes.string.isRequired,\n typeaheadOptions: PropTypes.shape({\n placeholder: PropTypes.string.isRequired,\n ariaLabel: PropTypes.string.isRequired,\n minLength: PropTypes.number.isRequired,\n }),\n searchForItems: PropTypes.func,\n variant: PropTypes.oneOf([STYLE_VARIANTS.default, STYLE_VARIANTS.inverse]),\n noDisplay: PropTypes.bool,\n doRefinement: PropTypes.bool,\n showBadge: PropTypes.bool,\n};\n\nexport default FacetListBase;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ var _excluded = ["currentRefinement"];
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
5
+ import React from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import { connectRefinementList } from 'react-instantsearch-dom';
8
+ import FacetListBase from './FacetListBase';
9
+ export var FacetListRefinementBase = function FacetListRefinementBase(_ref) {
10
+ var currentRefinement = _ref.currentRefinement,
11
+ props = _objectWithoutProperties(_ref, _excluded);
12
+ return /*#__PURE__*/React.createElement(FacetListBase, _extends({
13
+ isBold: currentRefinement.length > 0,
14
+ isCheckedField: "isRefined"
15
+ }, props));
16
+ };
17
+ FacetListRefinementBase.propTypes = {
18
+ attribute: PropTypes.string.isRequired,
19
+ currentRefinement: PropTypes.arrayOf(PropTypes.string).isRequired,
20
+ items: PropTypes.arrayOf(PropTypes.shape()).isRequired,
21
+ refinements: PropTypes.shape().isRequired,
22
+ title: PropTypes.string.isRequired
23
+ };
24
+ export default connectRefinementList(FacetListRefinementBase);
25
+ //# sourceMappingURL=FacetListRefinement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FacetListRefinement.js","names":["React","PropTypes","connectRefinementList","FacetListBase","FacetListRefinementBase","_ref","currentRefinement","props","_objectWithoutProperties","_excluded","createElement","_extends","isBold","length","isCheckedField","propTypes","attribute","string","isRequired","arrayOf","items","shape","refinements","title"],"sources":["../src/FacetListRefinement.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { connectRefinementList } from 'react-instantsearch-dom';\nimport FacetListBase from './FacetListBase';\n\nexport const FacetListRefinementBase = ({\n currentRefinement, ...props\n}) => (\n <FacetListBase\n isBold={currentRefinement.length > 0}\n isCheckedField=\"isRefined\"\n {...props}\n />\n);\n\nFacetListRefinementBase.propTypes = {\n attribute: PropTypes.string.isRequired,\n currentRefinement: PropTypes.arrayOf(PropTypes.string).isRequired,\n items: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n refinements: PropTypes.shape().isRequired,\n title: PropTypes.string.isRequired,\n};\n\nexport default connectRefinementList(FacetListRefinementBase);\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,OAAOC,aAAa,MAAM,iBAAiB;AAE3C,OAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAAC,IAAA;EAAA,IAClCC,iBAAiB,GAAAD,IAAA,CAAjBC,iBAAiB;IAAKC,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAAA,oBAE3BT,KAAA,CAAAU,aAAA,CAACP,aAAa,EAAAQ,QAAA;IACZC,MAAM,EAAEN,iBAAiB,CAACO,MAAM,GAAG,CAAE;IACrCC,cAAc,EAAC;EAAW,GACtBP,KAAK,CACV,CAAC;AAAA,CACH;AAEDH,uBAAuB,CAACW,SAAS,GAAG;EAClCC,SAAS,EAAEf,SAAS,CAACgB,MAAM,CAACC,UAAU;EACtCZ,iBAAiB,EAAEL,SAAS,CAACkB,OAAO,CAAClB,SAAS,CAACgB,MAAM,CAAC,CAACC,UAAU;EACjEE,KAAK,EAAEnB,SAAS,CAACkB,OAAO,CAAClB,SAAS,CAACoB,KAAK,CAAC,CAAC,CAAC,CAACH,UAAU;EACtDI,WAAW,EAAErB,SAAS,CAACoB,KAAK,CAAC,CAAC,CAACH,UAAU;EACzCK,KAAK,EAAEtB,SAAS,CAACgB,MAAM,CAACC;AAC1B,CAAC;AAED,eAAehB,qBAAqB,CAACE,uBAAuB,CAAC","ignoreList":[]}