@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,165 @@
1
+ import React, { useContext } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import classNames from 'classnames';
4
+ import { Dropdown, Input, Badge } from '@openedx/paragon';
5
+ import { FormattedMessage } from '@edx/frontend-platform/i18n';
6
+ import { sendTrackEvent } from '@edx/frontend-platform/analytics';
7
+ import { SearchContext } from './SearchContext';
8
+ import { SEARCH_EVENT_NAME_PREFIX } from './SearchBox';
9
+ import { setRefinementAction } from './data/actions';
10
+ import { features } from './config';
11
+ import { LEARNING_TYPE_COURSE, LEARNING_TYPE_PROGRAM, LEARNING_TYPE_PATHWAY, LEARNING_TYPE_VIDEO, LEARNING_TYPE_SELECTED_EVENT } from './data/constants';
12
+ var LearningTypeRadioFacet = function LearningTypeRadioFacet(_ref) {
13
+ var enablePathways = _ref.enablePathways;
14
+ var _useContext = useContext(SearchContext),
15
+ refinements = _useContext.refinements,
16
+ dispatch = _useContext.dispatch,
17
+ enableVideos = _useContext.enableVideos,
18
+ trackingName = _useContext.trackingName;
19
+
20
+ // only bold the dropdown title if the learning type is Course or Program
21
+ var typeCourseSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_COURSE);
22
+ var typeProgramSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_PROGRAM);
23
+ var typePathwaySelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_PATHWAY);
24
+ var typeVideoSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_VIDEO);
25
+ var boldTitle = typeCourseSelected || typeProgramSelected || typePathwaySelected || typeVideoSelected;
26
+ var handleInputOnChange = function handleInputOnChange(type) {
27
+ if (type === '') {
28
+ dispatch(setRefinementAction('content_type', []));
29
+ } else {
30
+ dispatch(setRefinementAction('content_type', [type]));
31
+ }
32
+ if (trackingName) {
33
+ var learningType = type || 'any';
34
+ sendTrackEvent("".concat(SEARCH_EVENT_NAME_PREFIX, ".").concat(trackingName, ".").concat(LEARNING_TYPE_SELECTED_EVENT), {
35
+ learningType: learningType
36
+ });
37
+ }
38
+ };
39
+ return /*#__PURE__*/React.createElement("div", {
40
+ className: "facet-list"
41
+ }, /*#__PURE__*/React.createElement(Dropdown, {
42
+ className: classNames('mb-0 mr-md-3')
43
+ }, /*#__PURE__*/React.createElement(Dropdown.Toggle, {
44
+ id: "learning-type-toggle",
45
+ variant: "inverse-primary",
46
+ className: classNames({
47
+ 'font-weight-bold': boldTitle
48
+ })
49
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
50
+ id: "search.facetFilters.learningType.title",
51
+ defaultMessage: "Learning Type",
52
+ description: "Title for the learning type facet filter"
53
+ })), /*#__PURE__*/React.createElement(Dropdown.Menu, null, /*#__PURE__*/React.createElement(Dropdown.Item, {
54
+ as: "label",
55
+ className: "mb-0 py-3 d-flex align-items-center"
56
+ }, /*#__PURE__*/React.createElement(Input, {
57
+ type: "radio",
58
+ checked: !boldTitle,
59
+ className: "facet-item position-relative mr-2 mb-2",
60
+ onChange: function onChange() {
61
+ return handleInputOnChange('');
62
+ },
63
+ "data-testid": "learning-type-any"
64
+ }), /*#__PURE__*/React.createElement("span", {
65
+ className: classNames('facet-item-label', {})
66
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
67
+ id: "search.facetFilters.learningType.any",
68
+ defaultMessage: "Any",
69
+ description: "Title for the learning type facet filter to return all types of learning content"
70
+ }))), /*#__PURE__*/React.createElement(Dropdown.Item, {
71
+ as: "label",
72
+ className: "mb-0 py-3 d-flex align-items-center"
73
+ }, /*#__PURE__*/React.createElement(Input, {
74
+ type: "radio",
75
+ checked: typeCourseSelected,
76
+ className: "facet-item position-relative mr-2 mb-2",
77
+ onChange: function onChange() {
78
+ return handleInputOnChange(LEARNING_TYPE_COURSE);
79
+ },
80
+ "data-testid": "learning-type-courses"
81
+ }), /*#__PURE__*/React.createElement("span", {
82
+ className: classNames('facet-item-label', {
83
+ 'is-refined': typeCourseSelected
84
+ })
85
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
86
+ id: "search.facetFilters.learningType.courses",
87
+ defaultMessage: "Courses",
88
+ description: "Title for the learning type facet filter to return courses only"
89
+ }))), /*#__PURE__*/React.createElement(Dropdown.Item, {
90
+ as: "label",
91
+ className: "mb-0 py-3 d-flex align-items-center"
92
+ }, /*#__PURE__*/React.createElement(Input, {
93
+ type: "radio",
94
+ checked: typeProgramSelected,
95
+ className: "facet-item position-relative mr-2 mb-2",
96
+ onChange: function onChange() {
97
+ return handleInputOnChange(LEARNING_TYPE_PROGRAM);
98
+ },
99
+ "data-testid": "learning-type-programs"
100
+ }), /*#__PURE__*/React.createElement("span", {
101
+ className: classNames('facet-item-label', {
102
+ 'is-refined': typeProgramSelected
103
+ })
104
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
105
+ id: "search.facetFilters.learningType.programs",
106
+ defaultMessage: "Programs",
107
+ description: "Title for the learning type facet filter to return programs only"
108
+ }))),
109
+ // the first check is a global feature flag and the second is a check to see if
110
+ // the individual customer itself has enabled pathways
111
+ features.ENABlE_PATHWAYS && enablePathways && /*#__PURE__*/React.createElement(Dropdown.Item, {
112
+ as: "label",
113
+ className: "mb-0 py-3 d-flex align-items-center"
114
+ }, /*#__PURE__*/React.createElement(Input, {
115
+ type: "radio",
116
+ checked: typePathwaySelected,
117
+ className: "facet-item position-relative mr-2 mb-2",
118
+ onChange: function onChange() {
119
+ return handleInputOnChange(LEARNING_TYPE_PATHWAY);
120
+ },
121
+ "data-testid": "learning-type-pathways"
122
+ }), /*#__PURE__*/React.createElement("span", {
123
+ className: classNames('facet-item-label', {
124
+ 'is-refined': typePathwaySelected
125
+ })
126
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
127
+ id: "search.facetFilters.learningType.pathways",
128
+ defaultMessage: "Pathways",
129
+ description: "Title for the learning type facet filter to return pathways only"
130
+ }))), enableVideos && /*#__PURE__*/React.createElement(Dropdown.Item, {
131
+ as: "label",
132
+ className: "mb-0 py-3 d-flex align-items-center"
133
+ }, /*#__PURE__*/React.createElement(Input, {
134
+ type: "radio",
135
+ checked: typeVideoSelected,
136
+ className: "facet-item position-relative mr-2 mb-2",
137
+ onChange: function onChange() {
138
+ return handleInputOnChange(LEARNING_TYPE_VIDEO);
139
+ },
140
+ "data-testid": "learning-type-videos"
141
+ }), /*#__PURE__*/React.createElement("span", {
142
+ className: classNames('facet-item-label', {
143
+ 'is-refined': typeVideoSelected
144
+ })
145
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
146
+ id: "search.facetFilters.learningType.videos",
147
+ defaultMessage: "Videos",
148
+ description: "Title for the learning type facet filter to return videos only"
149
+ })), /*#__PURE__*/React.createElement(Badge, {
150
+ className: "ml-2",
151
+ variant: "info"
152
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(FormattedMessage, {
153
+ id: "search.facetFilters.learningType.videos.betaBadge",
154
+ defaultMessage: "Beta",
155
+ description: "Beta label that indicates a new learning type, videos, has been added"
156
+ })))))));
157
+ };
158
+ LearningTypeRadioFacet.defaultProps = {
159
+ enablePathways: null
160
+ };
161
+ LearningTypeRadioFacet.propTypes = {
162
+ enablePathways: PropTypes.bool
163
+ };
164
+ export default LearningTypeRadioFacet;
165
+ //# sourceMappingURL=LearningTypeRadioFacet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LearningTypeRadioFacet.js","names":["React","useContext","PropTypes","classNames","Dropdown","Input","Badge","FormattedMessage","sendTrackEvent","SearchContext","SEARCH_EVENT_NAME_PREFIX","setRefinementAction","features","LEARNING_TYPE_COURSE","LEARNING_TYPE_PROGRAM","LEARNING_TYPE_PATHWAY","LEARNING_TYPE_VIDEO","LEARNING_TYPE_SELECTED_EVENT","LearningTypeRadioFacet","_ref","enablePathways","_useContext","refinements","dispatch","enableVideos","trackingName","typeCourseSelected","content_type","includes","typeProgramSelected","typePathwaySelected","typeVideoSelected","boldTitle","handleInputOnChange","type","learningType","concat","createElement","className","Toggle","id","variant","defaultMessage","description","Menu","Item","as","checked","onChange","ENABlE_PATHWAYS","defaultProps","propTypes","bool"],"sources":["../src/LearningTypeRadioFacet.jsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Dropdown, Input, Badge } from '@openedx/paragon';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { SearchContext } from './SearchContext';\nimport { SEARCH_EVENT_NAME_PREFIX } from './SearchBox';\nimport {\n setRefinementAction,\n} from './data/actions';\nimport { features } from './config';\nimport {\n LEARNING_TYPE_COURSE,\n LEARNING_TYPE_PROGRAM,\n LEARNING_TYPE_PATHWAY,\n LEARNING_TYPE_VIDEO,\n LEARNING_TYPE_SELECTED_EVENT,\n} from './data/constants';\n\nconst LearningTypeRadioFacet = ({ enablePathways }) => {\n const {\n refinements, dispatch, enableVideos, trackingName,\n } = useContext(SearchContext);\n\n // only bold the dropdown title if the learning type is Course or Program\n const typeCourseSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_COURSE);\n const typeProgramSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_PROGRAM);\n const typePathwaySelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_PATHWAY);\n const typeVideoSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_VIDEO);\n const boldTitle = typeCourseSelected || typeProgramSelected || typePathwaySelected || typeVideoSelected;\n\n const handleInputOnChange = (type) => {\n if (type === '') {\n dispatch(setRefinementAction('content_type', []));\n } else {\n dispatch(setRefinementAction('content_type', [type]));\n }\n if (trackingName) {\n const learningType = type || 'any';\n sendTrackEvent(`${SEARCH_EVENT_NAME_PREFIX}.${trackingName}.${LEARNING_TYPE_SELECTED_EVENT}`, {\n learningType,\n });\n }\n };\n\n return (\n <div className=\"facet-list\">\n <Dropdown className={classNames('mb-0 mr-md-3')}>\n <Dropdown.Toggle\n id=\"learning-type-toggle\"\n variant=\"inverse-primary\"\n className={classNames({ 'font-weight-bold': boldTitle })}\n >\n <FormattedMessage\n id=\"search.facetFilters.learningType.title\"\n defaultMessage=\"Learning Type\"\n description=\"Title for the learning type facet filter\"\n />\n </Dropdown.Toggle>\n <Dropdown.Menu>\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"radio\"\n checked={!boldTitle}\n className=\"facet-item position-relative mr-2 mb-2\"\n onChange={() => handleInputOnChange('')}\n data-testid=\"learning-type-any\"\n />\n <span className={classNames('facet-item-label', {})}>\n <FormattedMessage\n id=\"search.facetFilters.learningType.any\"\n defaultMessage=\"Any\"\n description=\"Title for the learning type facet filter to return all types of learning content\"\n />\n </span>\n </Dropdown.Item>\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"radio\"\n checked={typeCourseSelected}\n className=\"facet-item position-relative mr-2 mb-2\"\n onChange={() => handleInputOnChange(LEARNING_TYPE_COURSE)}\n data-testid=\"learning-type-courses\"\n />\n <span className={classNames('facet-item-label', { 'is-refined': typeCourseSelected })}>\n <FormattedMessage\n id=\"search.facetFilters.learningType.courses\"\n defaultMessage=\"Courses\"\n description=\"Title for the learning type facet filter to return courses only\"\n />\n </span>\n </Dropdown.Item>\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"radio\"\n checked={typeProgramSelected}\n className=\"facet-item position-relative mr-2 mb-2\"\n onChange={() => handleInputOnChange(LEARNING_TYPE_PROGRAM)}\n data-testid=\"learning-type-programs\"\n />\n <span className={classNames('facet-item-label', { 'is-refined': typeProgramSelected })}>\n <FormattedMessage\n id=\"search.facetFilters.learningType.programs\"\n defaultMessage=\"Programs\"\n description=\"Title for the learning type facet filter to return programs only\"\n />\n </span>\n </Dropdown.Item>\n {\n // the first check is a global feature flag and the second is a check to see if\n // the individual customer itself has enabled pathways\n features.ENABlE_PATHWAYS && enablePathways && (\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"radio\"\n checked={typePathwaySelected}\n className=\"facet-item position-relative mr-2 mb-2\"\n onChange={() => handleInputOnChange(LEARNING_TYPE_PATHWAY)}\n data-testid=\"learning-type-pathways\"\n />\n <span className={classNames('facet-item-label', { 'is-refined': typePathwaySelected })}>\n <FormattedMessage\n id=\"search.facetFilters.learningType.pathways\"\n defaultMessage=\"Pathways\"\n description=\"Title for the learning type facet filter to return pathways only\"\n />\n </span>\n </Dropdown.Item>\n )\n }\n {enableVideos && (\n <Dropdown.Item as=\"label\" className=\"mb-0 py-3 d-flex align-items-center\">\n <Input\n type=\"radio\"\n checked={typeVideoSelected}\n className=\"facet-item position-relative mr-2 mb-2\"\n onChange={() => handleInputOnChange(LEARNING_TYPE_VIDEO)}\n data-testid=\"learning-type-videos\"\n />\n <span className={classNames('facet-item-label', { 'is-refined': typeVideoSelected })}>\n <FormattedMessage\n id=\"search.facetFilters.learningType.videos\"\n defaultMessage=\"Videos\"\n description=\"Title for the learning type facet filter to return videos only\"\n />\n </span>\n <Badge className=\"ml-2\" variant=\"info\">\n <span>\n <FormattedMessage\n id=\"search.facetFilters.learningType.videos.betaBadge\"\n defaultMessage=\"Beta\"\n description=\"Beta label that indicates a new learning type, videos, has been added\"\n />\n </span>\n </Badge>\n </Dropdown.Item>\n )}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n );\n};\n\nLearningTypeRadioFacet.defaultProps = {\n enablePathways: null,\n};\n\nLearningTypeRadioFacet.propTypes = {\n enablePathways: PropTypes.bool,\n};\n\nexport default LearningTypeRadioFacet;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,122 @@
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
+ import React, { useState } from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import classNames from 'classnames';
10
+ import { connectCurrentRefinements } from 'react-instantsearch-dom';
11
+ import { Button } from '@openedx/paragon';
12
+ import { ArrowDropDown, Close } from '@openedx/paragon/icons';
13
+ import { FormattedMessage } from '@edx/frontend-platform/i18n';
14
+ import ClearCurrentRefinements from './ClearCurrentRefinements';
15
+ import { useActiveRefinementsAsFlatArray } from './data/hooks';
16
+ export var MobileFilterMenuBase = function MobileFilterMenuBase(_ref) {
17
+ var children = _ref.children,
18
+ className = _ref.className,
19
+ items = _ref.items;
20
+ var _useState = useState(false),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ isOpen = _useState2[0],
23
+ setIsOpen = _useState2[1];
24
+ var activeRefinementsAsFlatArray = useActiveRefinementsAsFlatArray(items);
25
+ return /*#__PURE__*/React.createElement("div", {
26
+ className: className
27
+ }, !isOpen && /*#__PURE__*/React.createElement(Button, {
28
+ className: "btn btn-block bg-white rounded-0 d-flex align-items-center justify-content-between text-dark",
29
+ onClick: function onClick() {
30
+ return setIsOpen(true);
31
+ }
32
+ }, /*#__PURE__*/React.createElement("div", {
33
+ className: "mr-2"
34
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
35
+ id: "catalog.search.filters",
36
+ defaultMessage: "Filters",
37
+ description: "Label for the filters button."
38
+ }), activeRefinementsAsFlatArray && activeRefinementsAsFlatArray.length > 0 && /*#__PURE__*/React.createElement("span", {
39
+ className: "ml-1"
40
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
41
+ id: "catalog.search.filters.selected",
42
+ defaultMessage: "({count} selected)",
43
+ description: "Label for the number of selected filters.",
44
+ values: {
45
+ count: activeRefinementsAsFlatArray.length
46
+ }
47
+ }))), /*#__PURE__*/React.createElement(ArrowDropDown, null)), /*#__PURE__*/React.createElement("div", {
48
+ className: classNames('modal fade mobile-filter-menu', {
49
+ 'd-block show': isOpen
50
+ }, {
51
+ 'd-none': !isOpen
52
+ }),
53
+ tabIndex: "-1",
54
+ role: "dialog"
55
+ }, /*#__PURE__*/React.createElement("div", {
56
+ className: "modal-dialog",
57
+ role: "document"
58
+ }, /*#__PURE__*/React.createElement("div", {
59
+ className: "modal-content"
60
+ }, /*#__PURE__*/React.createElement("div", {
61
+ className: "modal-header d-flex align-items-center"
62
+ }, /*#__PURE__*/React.createElement("h5", {
63
+ className: "modal-title text-center w-100"
64
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
65
+ id: "catalog.search.filters.all",
66
+ defaultMessage: "All Filters",
67
+ description: "Label for the all filters button."
68
+ }), activeRefinementsAsFlatArray && activeRefinementsAsFlatArray.length > 0 && /*#__PURE__*/React.createElement("span", {
69
+ className: "ml-1"
70
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
71
+ id: "catalog.search.filters.all.selected",
72
+ defaultMessage: "({count} selected)",
73
+ description: "Label for the number of selected filters.",
74
+ values: {
75
+ count: activeRefinementsAsFlatArray.length
76
+ }
77
+ }))), /*#__PURE__*/React.createElement(Button, {
78
+ variant: "link",
79
+ className: "btn-close position-absolute px-2",
80
+ onClick: function onClick() {
81
+ return setIsOpen(false);
82
+ }
83
+ }, /*#__PURE__*/React.createElement(Close, {
84
+ id: "icon-close-mobile-filter-menu"
85
+ }), /*#__PURE__*/React.createElement("span", {
86
+ className: "sr-only"
87
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
88
+ id: "catalog.search.filters.close",
89
+ defaultMessage: "close filter menu",
90
+ description: "Label for the close filter menu button."
91
+ })))), /*#__PURE__*/React.createElement("div", {
92
+ className: "modal-body p-0"
93
+ }, children), /*#__PURE__*/React.createElement("div", {
94
+ className: "modal-footer py-3"
95
+ }, /*#__PURE__*/React.createElement("div", {
96
+ className: "col"
97
+ }, /*#__PURE__*/React.createElement(ClearCurrentRefinements, {
98
+ className: "btn-block",
99
+ variant: "inverse-primary"
100
+ })), /*#__PURE__*/React.createElement("div", {
101
+ className: "col"
102
+ }, /*#__PURE__*/React.createElement(Button, {
103
+ className: "btn-brand-primary btn-block py-2 m-0",
104
+ onClick: function onClick() {
105
+ return setIsOpen(false);
106
+ }
107
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
108
+ id: "catalog.search.filters.done",
109
+ defaultMessage: "Done",
110
+ description: "Label for the done button."
111
+ }))))))));
112
+ };
113
+ MobileFilterMenuBase.propTypes = {
114
+ children: PropTypes.node.isRequired,
115
+ items: PropTypes.arrayOf(PropTypes.shape()).isRequired,
116
+ className: PropTypes.string
117
+ };
118
+ MobileFilterMenuBase.defaultProps = {
119
+ className: undefined
120
+ };
121
+ export default connectCurrentRefinements(MobileFilterMenuBase);
122
+ //# sourceMappingURL=MobileFilterMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MobileFilterMenu.js","names":["React","useState","PropTypes","classNames","connectCurrentRefinements","Button","ArrowDropDown","Close","FormattedMessage","ClearCurrentRefinements","useActiveRefinementsAsFlatArray","MobileFilterMenuBase","_ref","children","className","items","_useState","_useState2","_slicedToArray","isOpen","setIsOpen","activeRefinementsAsFlatArray","createElement","onClick","id","defaultMessage","description","length","values","count","tabIndex","role","variant","propTypes","node","isRequired","arrayOf","shape","string","defaultProps","undefined"],"sources":["../src/MobileFilterMenu.jsx"],"sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { Button } from '@openedx/paragon';\nimport { ArrowDropDown, Close } from '@openedx/paragon/icons';\n\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport ClearCurrentRefinements from './ClearCurrentRefinements';\n\nimport { useActiveRefinementsAsFlatArray } from './data/hooks';\n\nexport const MobileFilterMenuBase = ({ children, className, items }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const activeRefinementsAsFlatArray = useActiveRefinementsAsFlatArray(items);\n\n return (\n <div className={className}>\n {!isOpen && (\n <Button\n className=\"btn btn-block bg-white rounded-0 d-flex align-items-center justify-content-between text-dark\"\n onClick={() => setIsOpen(true)}\n >\n <div className=\"mr-2\">\n <FormattedMessage\n id=\"catalog.search.filters\"\n defaultMessage=\"Filters\"\n description=\"Label for the filters button.\"\n />\n {activeRefinementsAsFlatArray && activeRefinementsAsFlatArray.length > 0 && (\n <span className=\"ml-1\">\n <FormattedMessage\n id=\"catalog.search.filters.selected\"\n defaultMessage=\"({count} selected)\"\n description=\"Label for the number of selected filters.\"\n values={{ count: activeRefinementsAsFlatArray.length }}\n />\n </span>\n )}\n </div>\n <ArrowDropDown />\n </Button>\n )}\n <div\n className={classNames(\n 'modal fade mobile-filter-menu',\n { 'd-block show': isOpen },\n { 'd-none': !isOpen },\n )}\n tabIndex=\"-1\"\n role=\"dialog\"\n >\n <div className=\"modal-dialog\" role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header d-flex align-items-center\">\n <h5 className=\"modal-title text-center w-100\">\n <FormattedMessage\n id=\"catalog.search.filters.all\"\n defaultMessage=\"All Filters\"\n description=\"Label for the all filters button.\"\n />\n {activeRefinementsAsFlatArray && activeRefinementsAsFlatArray.length > 0 && (\n <span className=\"ml-1\">\n <FormattedMessage\n id=\"catalog.search.filters.all.selected\"\n defaultMessage=\"({count} selected)\"\n description=\"Label for the number of selected filters.\"\n values={{ count: activeRefinementsAsFlatArray.length }}\n />\n </span>\n )}\n </h5>\n <Button\n variant=\"link\"\n className=\"btn-close position-absolute px-2\"\n onClick={() => setIsOpen(false)}\n >\n <Close\n id=\"icon-close-mobile-filter-menu\"\n />\n <span className=\"sr-only\">\n <FormattedMessage\n id=\"catalog.search.filters.close\"\n defaultMessage=\"close filter menu\"\n description=\"Label for the close filter menu button.\"\n />\n </span>\n </Button>\n </div>\n <div className=\"modal-body p-0\">\n {children}\n </div>\n <div className=\"modal-footer py-3\">\n <div className=\"col\">\n <ClearCurrentRefinements className=\"btn-block\" variant=\"inverse-primary\" />\n </div>\n <div className=\"col\">\n <Button\n className=\"btn-brand-primary btn-block py-2 m-0\"\n onClick={() => setIsOpen(false)}\n >\n <FormattedMessage\n id=\"catalog.search.filters.done\"\n defaultMessage=\"Done\"\n description=\"Label for the done button.\"\n />\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nMobileFilterMenuBase.propTypes = {\n children: PropTypes.node.isRequired,\n items: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n className: PropTypes.string,\n};\n\nMobileFilterMenuBase.defaultProps = {\n className: undefined,\n};\n\nexport default connectCurrentRefinements(MobileFilterMenuBase);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { Image } from '@openedx/paragon';
3
+ import { Link } from 'react-router-dom';
4
+ import PropTypes from 'prop-types';
5
+ var PrequerySearchSuggestionItem = function PrequerySearchSuggestionItem(_ref) {
6
+ var _hit$partners$;
7
+ var url = _ref.url,
8
+ hit = _ref.hit;
9
+ return /*#__PURE__*/React.createElement(Link, {
10
+ to: url,
11
+ key: hit.title,
12
+ className: "prequery-item pr-4 d-flex flex-column"
13
+ }, /*#__PURE__*/React.createElement("div", {
14
+ className: "d-flex align-items-center justify-content-start"
15
+ }, /*#__PURE__*/React.createElement(Image, {
16
+ className: "prequery-image mr-2",
17
+ src: hit.card_image_url
18
+ }), /*#__PURE__*/React.createElement("div", {
19
+ className: "d-flex flex-column"
20
+ }, /*#__PURE__*/React.createElement("div", {
21
+ dangerouslySetInnerHTML: {
22
+ __html: hit._highlightResult.title.value
23
+ }
24
+ }), /*#__PURE__*/React.createElement("div", {
25
+ className: "x-small d-flex"
26
+ }, /*#__PURE__*/React.createElement("span", null, (_hit$partners$ = hit.partners[0]) === null || _hit$partners$ === void 0 ? void 0 : _hit$partners$.name), /*#__PURE__*/React.createElement("span", null, " | "), /*#__PURE__*/React.createElement("span", {
27
+ className: "text-capitalize"
28
+ }, hit.learning_type)))));
29
+ };
30
+ PrequerySearchSuggestionItem.propTypes = {
31
+ url: PropTypes.string.isRequired,
32
+ hit: PropTypes.shape({
33
+ key: PropTypes.string,
34
+ title: PropTypes.string,
35
+ _highlightResult: PropTypes.shape({
36
+ title: PropTypes.shape({
37
+ value: PropTypes.string
38
+ })
39
+ }),
40
+ card_image_url: PropTypes.string,
41
+ partners: PropTypes.arrayOf(PropTypes.shape({
42
+ name: PropTypes.string
43
+ })),
44
+ learning_type: PropTypes.string
45
+ }).isRequired
46
+ };
47
+ export default PrequerySearchSuggestionItem;
48
+ //# sourceMappingURL=PrequerySearchSuggestionItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrequerySearchSuggestionItem.js","names":["React","Image","Link","PropTypes","PrequerySearchSuggestionItem","_ref","_hit$partners$","url","hit","createElement","to","key","title","className","src","card_image_url","dangerouslySetInnerHTML","__html","_highlightResult","value","partners","name","learning_type","propTypes","string","isRequired","shape","arrayOf"],"sources":["../src/PrequerySearchSuggestionItem.jsx"],"sourcesContent":["import React from 'react';\nimport { Image } from '@openedx/paragon';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nconst PrequerySearchSuggestionItem = ({\n url, hit,\n}) => (\n <Link\n to={url}\n key={hit.title}\n className=\"prequery-item pr-4 d-flex flex-column\"\n >\n <div className=\"d-flex align-items-center justify-content-start\">\n <Image className=\"prequery-image mr-2\" src={hit.card_image_url} />\n <div className=\"d-flex flex-column\">\n {/* eslint-disable-next-line react/no-danger, no-underscore-dangle */}\n <div dangerouslySetInnerHTML={{ __html: hit._highlightResult.title.value }} />\n <div className=\"x-small d-flex\">\n <span>\n {hit.partners[0]?.name}\n </span>\n <span> | </span>\n <span className=\"text-capitalize\">{hit.learning_type}</span>\n </div>\n </div>\n </div>\n </Link>\n);\n\nPrequerySearchSuggestionItem.propTypes = {\n url: PropTypes.string.isRequired,\n hit: PropTypes.shape({\n key: PropTypes.string,\n title: PropTypes.string,\n _highlightResult: PropTypes.shape({ title: PropTypes.shape({ value: PropTypes.string }) }),\n card_image_url: PropTypes.string,\n partners: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n }),\n ),\n learning_type: PropTypes.string,\n }).isRequired,\n};\n\nexport default PrequerySearchSuggestionItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,IAAI,QAAQ,kBAAkB;AACvC,OAAOC,SAAS,MAAM,YAAY;AAElC,IAAMC,4BAA4B,GAAG,SAA/BA,4BAA4BA,CAAAC,IAAA;EAAA,IAAAC,cAAA;EAAA,IAChCC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IAAEC,GAAG,GAAAH,IAAA,CAAHG,GAAG;EAAA,oBAERR,KAAA,CAAAS,aAAA,CAACP,IAAI;IACHQ,EAAE,EAAEH,GAAI;IACRI,GAAG,EAAEH,GAAG,CAACI,KAAM;IACfC,SAAS,EAAC;EAAuC,gBAEjDb,KAAA,CAAAS,aAAA;IAAKI,SAAS,EAAC;EAAiD,gBAC9Db,KAAA,CAAAS,aAAA,CAACR,KAAK;IAACY,SAAS,EAAC,qBAAqB;IAACC,GAAG,EAAEN,GAAG,CAACO;EAAe,CAAE,CAAC,eAClEf,KAAA,CAAAS,aAAA;IAAKI,SAAS,EAAC;EAAoB,gBAEjCb,KAAA,CAAAS,aAAA;IAAKO,uBAAuB,EAAE;MAAEC,MAAM,EAAET,GAAG,CAACU,gBAAgB,CAACN,KAAK,CAACO;IAAM;EAAE,CAAE,CAAC,eAC9EnB,KAAA,CAAAS,aAAA;IAAKI,SAAS,EAAC;EAAgB,gBAC7Bb,KAAA,CAAAS,aAAA,gBAAAH,cAAA,GACGE,GAAG,CAACY,QAAQ,CAAC,CAAC,CAAC,cAAAd,cAAA,uBAAfA,cAAA,CAAiBe,IACd,CAAC,eACPrB,KAAA,CAAAS,aAAA,eAAM,KAAS,CAAC,eAChBT,KAAA,CAAAS,aAAA;IAAMI,SAAS,EAAC;EAAiB,GAAEL,GAAG,CAACc,aAAoB,CACxD,CACF,CACF,CACD,CAAC;AAAA,CACR;AAEDlB,4BAA4B,CAACmB,SAAS,GAAG;EACvChB,GAAG,EAAEJ,SAAS,CAACqB,MAAM,CAACC,UAAU;EAChCjB,GAAG,EAAEL,SAAS,CAACuB,KAAK,CAAC;IACnBf,GAAG,EAAER,SAAS,CAACqB,MAAM;IACrBZ,KAAK,EAAET,SAAS,CAACqB,MAAM;IACvBN,gBAAgB,EAAEf,SAAS,CAACuB,KAAK,CAAC;MAAEd,KAAK,EAAET,SAAS,CAACuB,KAAK,CAAC;QAAEP,KAAK,EAAEhB,SAAS,CAACqB;MAAO,CAAC;IAAE,CAAC,CAAC;IAC1FT,cAAc,EAAEZ,SAAS,CAACqB,MAAM;IAChCJ,QAAQ,EAAEjB,SAAS,CAACwB,OAAO,CACzBxB,SAAS,CAACuB,KAAK,CAAC;MACdL,IAAI,EAAElB,SAAS,CAACqB;IAClB,CAAC,CACH,CAAC;IACDF,aAAa,EAAEnB,SAAS,CAACqB;EAC3B,CAAC,CAAC,CAACC;AACL,CAAC;AAED,eAAerB,4BAA4B","ignoreList":[]}
package/README.md ADDED
@@ -0,0 +1,10 @@
1
+ @edx/frontend-enterprise-catalog-search
2
+ ================
3
+
4
+ [![Codecov](https://img.shields.io/codecov/c/github/openedx/frontend-enterprise)](https://codecov.io/gh/openedx/frontend-enterprise)
5
+ [![NPM Version](https://img.shields.io/npm/v/@edx/frontend-enterprise-catalog-search.svg)](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
6
+ [![npm_downloads](https://img.shields.io/npm/dt/@edx/frontend-enterprise-catalog-search.svg)](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
7
+ [![license](https://img.shields.io/npm/l/@edx/frontend-enterprise-catalog-search.svg)](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
8
+ [![semantic release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
9
+
10
+ This package exports UI components, React hooks, and actions functions related to Enterprise catalog search using [Algolia](https://algolia.com) as a hosted search backend. It is intended to be used when it is necessary to only show the content available to a particular Enterprise Customer.