@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.
- package/CHANGELOG.md +1125 -0
- package/ClearCurrentRefinements.js +47 -0
- package/ClearCurrentRefinements.js.map +1 -0
- package/CurrentRefinements.js +152 -0
- package/CurrentRefinements.js.map +1 -0
- package/FacetDropdown.js +40 -0
- package/FacetDropdown.js.map +1 -0
- package/FacetItem.js +50 -0
- package/FacetItem.js.map +1 -0
- package/FacetListBase.js +140 -0
- package/FacetListBase.js.map +1 -0
- package/FacetListRefinement.js +25 -0
- package/FacetListRefinement.js.map +1 -0
- package/LICENSE +661 -0
- package/LearningTypeRadioFacet.js +165 -0
- package/LearningTypeRadioFacet.js.map +1 -0
- package/MobileFilterMenu.js +122 -0
- package/MobileFilterMenu.js.map +1 -0
- package/PrequerySearchSuggestionItem.js +48 -0
- package/PrequerySearchSuggestionItem.js.map +1 -0
- package/README.md +10 -0
- package/SearchBox.js +266 -0
- package/SearchBox.js.map +1 -0
- package/SearchContext.js +115 -0
- package/SearchContext.js.map +1 -0
- package/SearchFilters.js +73 -0
- package/SearchFilters.js.map +1 -0
- package/SearchHeader.js +117 -0
- package/SearchHeader.js.map +1 -0
- package/SearchPagination.js +78 -0
- package/SearchPagination.js.map +1 -0
- package/SearchSuggestionItem.js +58 -0
- package/SearchSuggestionItem.js.map +1 -0
- package/SearchSuggestions.js +137 -0
- package/SearchSuggestions.js.map +1 -0
- package/TypeaheadFacetDropdown.js +58 -0
- package/TypeaheadFacetDropdown.js.map +1 -0
- package/config/index.js +18 -0
- package/config/index.js.map +1 -0
- package/data/actions.js +46 -0
- package/data/actions.js.map +1 -0
- package/data/constants.js +92 -0
- package/data/constants.js.map +1 -0
- package/data/hooks.js +97 -0
- package/data/hooks.js.map +1 -0
- package/data/reducer.js +70 -0
- package/data/reducer.js.map +1 -0
- package/data/tests/constants.js +13 -0
- package/data/tests/constants.js.map +1 -0
- package/data/utils.js +69 -0
- package/data/utils.js.map +1 -0
- package/index.js +9 -0
- package/index.js.map +1 -0
- package/index.scss +3 -0
- package/messages.js +166 -0
- package/messages.js.map +1 -0
- package/package.json +68 -0
- package/styles/_CurrentRefinements.scss +19 -0
- package/styles/_FacetList.scss +49 -0
- package/styles/_MobileSearchFilters.scss +59 -0
- package/styles/_SearchBox.scss +8 -0
- package/styles/_SearchField.scss +14 -0
- package/styles/_SearchPagination.scss +5 -0
- package/styles/_SearchSuggestions.scss +97 -0
- package/styles/_index.scss +7 -0
- package/tests/utils.js +22 -0
- package/tests/utils.js.map +1 -0
- package/utils.js +159 -0
- 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
|
+
[](https://codecov.io/gh/openedx/frontend-enterprise)
|
|
5
|
+
[](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
|
|
6
|
+
[](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
|
|
7
|
+
[](https://www.npmjs.com/package/@edx/frontend-enterprise-catalog-search)
|
|
8
|
+
[](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.
|