@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
package/SearchHeader.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
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, { useContext } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
import { Container, Row, Col } from '@openedx/paragon';
|
|
10
|
+
import classNames from 'classnames';
|
|
11
|
+
import SearchBox from './SearchBox';
|
|
12
|
+
import SearchFilters from './SearchFilters';
|
|
13
|
+
import { STYLE_VARIANTS } from './data/constants';
|
|
14
|
+
import { SearchContext } from './SearchContext';
|
|
15
|
+
export var searchHeaderTestId = 'search-header';
|
|
16
|
+
export var searchBoxColTestId = 'search-box-col';
|
|
17
|
+
export var filtersColTestId = 'filters-col';
|
|
18
|
+
var SearchHeader = function SearchHeader(_ref) {
|
|
19
|
+
var variant = _ref.variant,
|
|
20
|
+
containerSize = _ref.containerSize,
|
|
21
|
+
headerTitle = _ref.headerTitle,
|
|
22
|
+
hideTitle = _ref.hideTitle,
|
|
23
|
+
index = _ref.index,
|
|
24
|
+
filters = _ref.filters,
|
|
25
|
+
suggestionSubmitOverride = _ref.suggestionSubmitOverride,
|
|
26
|
+
_ref$enterpriseConfig = _ref.enterpriseConfig,
|
|
27
|
+
slug = _ref$enterpriseConfig.slug,
|
|
28
|
+
enablePathways = _ref$enterpriseConfig.enablePathways,
|
|
29
|
+
disableSuggestionRedirect = _ref.disableSuggestionRedirect,
|
|
30
|
+
hideSearchBox = _ref.hideSearchBox;
|
|
31
|
+
var _useContext = useContext(SearchContext),
|
|
32
|
+
refinements = _useContext.refinements;
|
|
33
|
+
var searchQueryFromRefinements;
|
|
34
|
+
// Sometimes the query is set to an array of one string instead of just the string
|
|
35
|
+
if (Array.isArray(refinements.q)) {
|
|
36
|
+
var _refinements$q = _slicedToArray(refinements.q, 1);
|
|
37
|
+
searchQueryFromRefinements = _refinements$q[0];
|
|
38
|
+
} else {
|
|
39
|
+
searchQueryFromRefinements = refinements.q;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Add filter to only include course and program content_types
|
|
43
|
+
// as we are currently not supporting videos and pathways
|
|
44
|
+
var modifiedFilters = filters ? "".concat(filters, " AND (content_type:\"course\" OR content_type:\"program\")") : '(content_type:"course" OR content_type:"program")';
|
|
45
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
"data-testid": searchHeaderTestId,
|
|
47
|
+
className: classNames({
|
|
48
|
+
'bg-brand-primary': variant === STYLE_VARIANTS.inverse
|
|
49
|
+
})
|
|
50
|
+
}, /*#__PURE__*/React.createElement(Container, {
|
|
51
|
+
size: containerSize
|
|
52
|
+
}, /*#__PURE__*/React.createElement(Row, {
|
|
53
|
+
className: "pt-4 pb-3"
|
|
54
|
+
}, /*#__PURE__*/React.createElement(Col, {
|
|
55
|
+
"data-testid": searchBoxColTestId,
|
|
56
|
+
className: classNames('fe__searchbox-col', {
|
|
57
|
+
'fe__searchbox-col--default': variant === STYLE_VARIANTS["default"]
|
|
58
|
+
}),
|
|
59
|
+
xs: 12,
|
|
60
|
+
md: 8
|
|
61
|
+
}, !hideSearchBox && /*#__PURE__*/React.createElement(SearchBox, {
|
|
62
|
+
className: "mb-4",
|
|
63
|
+
defaultRefinement: searchQueryFromRefinements,
|
|
64
|
+
variant: variant,
|
|
65
|
+
headerTitle: headerTitle,
|
|
66
|
+
hideTitle: hideTitle,
|
|
67
|
+
index: index,
|
|
68
|
+
filters: modifiedFilters,
|
|
69
|
+
enterpriseSlug: slug,
|
|
70
|
+
suggestionSubmitOverride: suggestionSubmitOverride,
|
|
71
|
+
disableSuggestionRedirect: disableSuggestionRedirect
|
|
72
|
+
})), /*#__PURE__*/React.createElement(Col, {
|
|
73
|
+
"data-testid": filtersColTestId,
|
|
74
|
+
className: classNames('fe__searchbox-col', {
|
|
75
|
+
'fe__searchbox-col--default': variant === STYLE_VARIANTS["default"]
|
|
76
|
+
}),
|
|
77
|
+
xs: 12
|
|
78
|
+
}, /*#__PURE__*/React.createElement(SearchFilters, {
|
|
79
|
+
className: "mb-3",
|
|
80
|
+
variant: variant,
|
|
81
|
+
enablePathways: enablePathways
|
|
82
|
+
})))));
|
|
83
|
+
};
|
|
84
|
+
SearchHeader.defaultProps = {
|
|
85
|
+
variant: STYLE_VARIANTS.inverse,
|
|
86
|
+
containerSize: null,
|
|
87
|
+
headerTitle: undefined,
|
|
88
|
+
hideTitle: false,
|
|
89
|
+
filters: '',
|
|
90
|
+
enterpriseConfig: {
|
|
91
|
+
slug: undefined,
|
|
92
|
+
enablePathways: undefined
|
|
93
|
+
},
|
|
94
|
+
suggestionSubmitOverride: undefined,
|
|
95
|
+
disableSuggestionRedirect: false,
|
|
96
|
+
index: undefined,
|
|
97
|
+
hideSearchBox: false
|
|
98
|
+
};
|
|
99
|
+
SearchHeader.propTypes = {
|
|
100
|
+
headerTitle: PropTypes.string,
|
|
101
|
+
containerSize: PropTypes.string,
|
|
102
|
+
variant: PropTypes.oneOf([STYLE_VARIANTS["default"], STYLE_VARIANTS.inverse]),
|
|
103
|
+
hideTitle: PropTypes.bool,
|
|
104
|
+
index: PropTypes.shape({
|
|
105
|
+
search: PropTypes.func.isRequired
|
|
106
|
+
}),
|
|
107
|
+
filters: PropTypes.string,
|
|
108
|
+
enterpriseConfig: PropTypes.shape({
|
|
109
|
+
slug: PropTypes.string,
|
|
110
|
+
enablePathways: PropTypes.bool
|
|
111
|
+
}),
|
|
112
|
+
suggestionSubmitOverride: PropTypes.func,
|
|
113
|
+
disableSuggestionRedirect: PropTypes.bool,
|
|
114
|
+
hideSearchBox: PropTypes.bool
|
|
115
|
+
};
|
|
116
|
+
export default SearchHeader;
|
|
117
|
+
//# sourceMappingURL=SearchHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchHeader.js","names":["React","useContext","PropTypes","Container","Row","Col","classNames","SearchBox","SearchFilters","STYLE_VARIANTS","SearchContext","searchHeaderTestId","searchBoxColTestId","filtersColTestId","SearchHeader","_ref","variant","containerSize","headerTitle","hideTitle","index","filters","suggestionSubmitOverride","_ref$enterpriseConfig","enterpriseConfig","slug","enablePathways","disableSuggestionRedirect","hideSearchBox","_useContext","refinements","searchQueryFromRefinements","Array","isArray","q","_refinements$q","_slicedToArray","modifiedFilters","concat","createElement","className","inverse","size","xs","md","defaultRefinement","enterpriseSlug","defaultProps","undefined","propTypes","string","oneOf","bool","shape","search","func","isRequired"],"sources":["../src/SearchHeader.jsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col } from '@openedx/paragon';\nimport classNames from 'classnames';\n\nimport SearchBox from './SearchBox';\nimport SearchFilters from './SearchFilters';\nimport { STYLE_VARIANTS } from './data/constants';\n\nimport { SearchContext } from './SearchContext';\n\nexport const searchHeaderTestId = 'search-header';\nexport const searchBoxColTestId = 'search-box-col';\nexport const filtersColTestId = 'filters-col';\n\nconst SearchHeader = ({\n variant,\n containerSize,\n headerTitle,\n hideTitle,\n index,\n filters,\n suggestionSubmitOverride,\n enterpriseConfig: { slug, enablePathways },\n disableSuggestionRedirect,\n hideSearchBox,\n}) => {\n const { refinements } = useContext(SearchContext);\n let searchQueryFromRefinements;\n // Sometimes the query is set to an array of one string instead of just the string\n if (Array.isArray(refinements.q)) {\n [searchQueryFromRefinements] = refinements.q;\n } else {\n searchQueryFromRefinements = refinements.q;\n }\n\n // Add filter to only include course and program content_types\n // as we are currently not supporting videos and pathways\n const modifiedFilters = filters\n ? `${filters} AND (content_type:\"course\" OR content_type:\"program\")`\n : '(content_type:\"course\" OR content_type:\"program\")';\n\n return (\n <div\n data-testid={searchHeaderTestId}\n className={classNames({ 'bg-brand-primary': variant === STYLE_VARIANTS.inverse })}\n >\n <Container size={containerSize}>\n <Row className=\"pt-4 pb-3\">\n <Col\n data-testid={searchBoxColTestId}\n className={classNames('fe__searchbox-col', { 'fe__searchbox-col--default': variant === STYLE_VARIANTS.default })}\n xs={12}\n md={8}\n >\n {!hideSearchBox && (\n <SearchBox\n className=\"mb-4\"\n defaultRefinement={searchQueryFromRefinements}\n variant={variant}\n headerTitle={headerTitle}\n hideTitle={hideTitle}\n index={index}\n filters={modifiedFilters}\n enterpriseSlug={slug}\n suggestionSubmitOverride={suggestionSubmitOverride}\n disableSuggestionRedirect={disableSuggestionRedirect}\n />\n )}\n </Col>\n <Col\n data-testid={filtersColTestId}\n className={classNames('fe__searchbox-col', { 'fe__searchbox-col--default': variant === STYLE_VARIANTS.default })}\n xs={12}\n >\n <SearchFilters className=\"mb-3\" variant={variant} enablePathways={enablePathways} />\n </Col>\n </Row>\n </Container>\n </div>\n );\n};\n\nSearchHeader.defaultProps = {\n variant: STYLE_VARIANTS.inverse,\n containerSize: null,\n headerTitle: undefined,\n hideTitle: false,\n filters: '',\n enterpriseConfig: { slug: undefined, enablePathways: undefined },\n suggestionSubmitOverride: undefined,\n disableSuggestionRedirect: false,\n index: undefined,\n hideSearchBox: false,\n};\n\nSearchHeader.propTypes = {\n headerTitle: PropTypes.string,\n containerSize: PropTypes.string,\n variant: PropTypes.oneOf([STYLE_VARIANTS.default, STYLE_VARIANTS.inverse]),\n hideTitle: PropTypes.bool,\n index: PropTypes.shape({ search: PropTypes.func.isRequired }),\n filters: PropTypes.string,\n enterpriseConfig: PropTypes.shape(\n {\n slug: PropTypes.string,\n enablePathways: PropTypes.bool,\n },\n ),\n suggestionSubmitOverride: PropTypes.func,\n disableSuggestionRedirect: PropTypes.bool,\n hideSearchBox: PropTypes.bool,\n};\n\nexport default SearchHeader;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { connectPagination } from 'react-instantsearch-dom';
|
|
4
|
+
import { Pagination } from '@openedx/paragon';
|
|
5
|
+
import { ArrowBackIos, ArrowForwardIos } from '@openedx/paragon/icons';
|
|
6
|
+
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
7
|
+
import { SearchContext } from './SearchContext';
|
|
8
|
+
import { setRefinementAction, deleteRefinementAction } from './data/actions';
|
|
9
|
+
export var SearchPaginationBase = function SearchPaginationBase(_ref) {
|
|
10
|
+
var nbPages = _ref.nbPages,
|
|
11
|
+
currentRefinement = _ref.currentRefinement,
|
|
12
|
+
maxPagesDisplayed = _ref.maxPagesDisplayed;
|
|
13
|
+
var _useContext = useContext(SearchContext),
|
|
14
|
+
dispatch = _useContext.dispatch;
|
|
15
|
+
var intl = useIntl();
|
|
16
|
+
var buttonLabels = {
|
|
17
|
+
previous: intl.formatMessage({
|
|
18
|
+
id: 'catalog.search.pagination.previous',
|
|
19
|
+
defaultMessage: 'Previous',
|
|
20
|
+
description: 'Label for the previous page button in the pagination component'
|
|
21
|
+
}),
|
|
22
|
+
next: intl.formatMessage({
|
|
23
|
+
id: 'catalog.search.pagination.next',
|
|
24
|
+
defaultMessage: 'Next',
|
|
25
|
+
description: 'Label for the next page button in the pagination component'
|
|
26
|
+
}),
|
|
27
|
+
page: intl.formatMessage({
|
|
28
|
+
id: 'catalog.search.pagination.page',
|
|
29
|
+
defaultMessage: 'Page',
|
|
30
|
+
description: 'Label for the page number in the pagination component'
|
|
31
|
+
}),
|
|
32
|
+
currentPage: intl.formatMessage({
|
|
33
|
+
id: 'catalog.search.pagination.current.page',
|
|
34
|
+
defaultMessage: 'Current Page',
|
|
35
|
+
description: 'Label for the current page number in the pagination component'
|
|
36
|
+
}),
|
|
37
|
+
pageOfCount: intl.formatMessage({
|
|
38
|
+
id: 'catalog.search.pagination.page.of.count',
|
|
39
|
+
defaultMessage: 'of',
|
|
40
|
+
description: 'Label for the page of count in the pagination component'
|
|
41
|
+
})
|
|
42
|
+
};
|
|
43
|
+
var handlePageSelect = function handlePageSelect(page) {
|
|
44
|
+
if (page > 1) {
|
|
45
|
+
dispatch(setRefinementAction('page', page));
|
|
46
|
+
} else {
|
|
47
|
+
dispatch(deleteRefinementAction('page'));
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
return /*#__PURE__*/React.createElement(Pagination, {
|
|
51
|
+
variant: "secondary",
|
|
52
|
+
paginationLabel: intl.formatMessage({
|
|
53
|
+
id: 'catalog.search.pagination.label',
|
|
54
|
+
defaultMessage: 'search results navigation',
|
|
55
|
+
description: 'Label for the pagination component'
|
|
56
|
+
}),
|
|
57
|
+
pageCount: nbPages,
|
|
58
|
+
currentPage: currentRefinement,
|
|
59
|
+
onPageSelect: handlePageSelect,
|
|
60
|
+
maxPagesDisplayed: maxPagesDisplayed,
|
|
61
|
+
buttonLabels: buttonLabels,
|
|
62
|
+
icons: {
|
|
63
|
+
leftIcon: ArrowBackIos,
|
|
64
|
+
rightIcon: ArrowForwardIos
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
SearchPaginationBase.propTypes = {
|
|
69
|
+
nbPages: PropTypes.number.isRequired,
|
|
70
|
+
currentRefinement: PropTypes.number,
|
|
71
|
+
maxPagesDisplayed: PropTypes.number
|
|
72
|
+
};
|
|
73
|
+
SearchPaginationBase.defaultProps = {
|
|
74
|
+
currentRefinement: 1,
|
|
75
|
+
maxPagesDisplayed: 7
|
|
76
|
+
};
|
|
77
|
+
export default connectPagination(SearchPaginationBase);
|
|
78
|
+
//# sourceMappingURL=SearchPagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPagination.js","names":["React","useContext","PropTypes","connectPagination","Pagination","ArrowBackIos","ArrowForwardIos","useIntl","SearchContext","setRefinementAction","deleteRefinementAction","SearchPaginationBase","_ref","nbPages","currentRefinement","maxPagesDisplayed","_useContext","dispatch","intl","buttonLabels","previous","formatMessage","id","defaultMessage","description","next","page","currentPage","pageOfCount","handlePageSelect","createElement","variant","paginationLabel","pageCount","onPageSelect","icons","leftIcon","rightIcon","propTypes","number","isRequired","defaultProps"],"sources":["../src/SearchPagination.jsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { connectPagination } from 'react-instantsearch-dom';\nimport { Pagination } from '@openedx/paragon';\nimport { ArrowBackIos, ArrowForwardIos } from '@openedx/paragon/icons';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { SearchContext } from './SearchContext';\nimport { setRefinementAction, deleteRefinementAction } from './data/actions';\n\nexport const SearchPaginationBase = ({\n nbPages,\n currentRefinement,\n maxPagesDisplayed,\n}) => {\n const { dispatch } = useContext(SearchContext);\n const intl = useIntl();\n\n const buttonLabels = {\n previous: intl.formatMessage({\n id: 'catalog.search.pagination.previous',\n defaultMessage: 'Previous',\n description: 'Label for the previous page button in the pagination component',\n }),\n next: intl.formatMessage({\n id: 'catalog.search.pagination.next',\n defaultMessage: 'Next',\n description: 'Label for the next page button in the pagination component',\n }),\n page: intl.formatMessage({\n id: 'catalog.search.pagination.page',\n defaultMessage: 'Page',\n description: 'Label for the page number in the pagination component',\n }),\n currentPage: intl.formatMessage({\n id: 'catalog.search.pagination.current.page',\n defaultMessage: 'Current Page',\n description: 'Label for the current page number in the pagination component',\n }),\n pageOfCount: intl.formatMessage({\n id: 'catalog.search.pagination.page.of.count',\n defaultMessage: 'of',\n description: 'Label for the page of count in the pagination component',\n }),\n };\n\n const handlePageSelect = (page) => {\n if (page > 1) {\n dispatch(setRefinementAction('page', page));\n } else {\n dispatch(deleteRefinementAction('page'));\n }\n };\n\n return (\n <Pagination\n variant=\"secondary\"\n paginationLabel={intl.formatMessage({\n id: 'catalog.search.pagination.label',\n defaultMessage: 'search results navigation',\n description: 'Label for the pagination component',\n })}\n pageCount={nbPages}\n currentPage={currentRefinement}\n onPageSelect={handlePageSelect}\n maxPagesDisplayed={maxPagesDisplayed}\n buttonLabels={buttonLabels}\n icons={{\n leftIcon: ArrowBackIos,\n rightIcon: ArrowForwardIos,\n }}\n />\n );\n};\n\nSearchPaginationBase.propTypes = {\n nbPages: PropTypes.number.isRequired,\n currentRefinement: PropTypes.number,\n maxPagesDisplayed: PropTypes.number,\n};\n\nSearchPaginationBase.defaultProps = {\n currentRefinement: 1,\n maxPagesDisplayed: 7,\n};\n\nexport default connectPagination(SearchPaginationBase);\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,YAAY,EAAEC,eAAe,QAAQ,wBAAwB;AAEtE,SAASC,OAAO,QAAQ,6BAA6B;AACrD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,mBAAmB,EAAEC,sBAAsB,QAAQ,gBAAgB;AAE5E,OAAO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAAC,IAAA,EAI3B;EAAA,IAHJC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,iBAAiB,GAAAF,IAAA,CAAjBE,iBAAiB;IACjBC,iBAAiB,GAAAH,IAAA,CAAjBG,iBAAiB;EAEjB,IAAAC,WAAA,GAAqBf,UAAU,CAACO,aAAa,CAAC;IAAtCS,QAAQ,GAAAD,WAAA,CAARC,QAAQ;EAChB,IAAMC,IAAI,GAAGX,OAAO,CAAC,CAAC;EAEtB,IAAMY,YAAY,GAAG;IACnBC,QAAQ,EAAEF,IAAI,CAACG,aAAa,CAAC;MAC3BC,EAAE,EAAE,oCAAoC;MACxCC,cAAc,EAAE,UAAU;MAC1BC,WAAW,EAAE;IACf,CAAC,CAAC;IACFC,IAAI,EAAEP,IAAI,CAACG,aAAa,CAAC;MACvBC,EAAE,EAAE,gCAAgC;MACpCC,cAAc,EAAE,MAAM;MACtBC,WAAW,EAAE;IACf,CAAC,CAAC;IACFE,IAAI,EAAER,IAAI,CAACG,aAAa,CAAC;MACvBC,EAAE,EAAE,gCAAgC;MACpCC,cAAc,EAAE,MAAM;MACtBC,WAAW,EAAE;IACf,CAAC,CAAC;IACFG,WAAW,EAAET,IAAI,CAACG,aAAa,CAAC;MAC9BC,EAAE,EAAE,wCAAwC;MAC5CC,cAAc,EAAE,cAAc;MAC9BC,WAAW,EAAE;IACf,CAAC,CAAC;IACFI,WAAW,EAAEV,IAAI,CAACG,aAAa,CAAC;MAC9BC,EAAE,EAAE,yCAAyC;MAC7CC,cAAc,EAAE,IAAI;MACpBC,WAAW,EAAE;IACf,CAAC;EACH,CAAC;EAED,IAAMK,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIH,IAAI,EAAK;IACjC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZT,QAAQ,CAACR,mBAAmB,CAAC,MAAM,EAAEiB,IAAI,CAAC,CAAC;IAC7C,CAAC,MAAM;MACLT,QAAQ,CAACP,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1C;EACF,CAAC;EAED,oBACEV,KAAA,CAAA8B,aAAA,CAAC1B,UAAU;IACT2B,OAAO,EAAC,WAAW;IACnBC,eAAe,EAAEd,IAAI,CAACG,aAAa,CAAC;MAClCC,EAAE,EAAE,iCAAiC;MACrCC,cAAc,EAAE,2BAA2B;MAC3CC,WAAW,EAAE;IACf,CAAC,CAAE;IACHS,SAAS,EAAEpB,OAAQ;IACnBc,WAAW,EAAEb,iBAAkB;IAC/BoB,YAAY,EAAEL,gBAAiB;IAC/Bd,iBAAiB,EAAEA,iBAAkB;IACrCI,YAAY,EAAEA,YAAa;IAC3BgB,KAAK,EAAE;MACLC,QAAQ,EAAE/B,YAAY;MACtBgC,SAAS,EAAE/B;IACb;EAAE,CACH,CAAC;AAEN,CAAC;AAEDK,oBAAoB,CAAC2B,SAAS,GAAG;EAC/BzB,OAAO,EAAEX,SAAS,CAACqC,MAAM,CAACC,UAAU;EACpC1B,iBAAiB,EAAEZ,SAAS,CAACqC,MAAM;EACnCxB,iBAAiB,EAAEb,SAAS,CAACqC;AAC/B,CAAC;AAED5B,oBAAoB,CAAC8B,YAAY,GAAG;EAClC3B,iBAAiB,EAAE,CAAC;EACpBC,iBAAiB,EAAE;AACrB,CAAC;AAED,eAAeZ,iBAAiB,CAACQ,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
var SearchSuggestionItem = function SearchSuggestionItem(_ref) {
|
|
5
|
+
var url = _ref.url,
|
|
6
|
+
suggestionItemHandler = _ref.suggestionItemHandler,
|
|
7
|
+
hit = _ref.hit,
|
|
8
|
+
disableSuggestionRedirect = _ref.disableSuggestionRedirect;
|
|
9
|
+
var authoringOrganization = hit.key && hit.key.split('+')[0];
|
|
10
|
+
// If the disable redirect bool is provided, prevent the redirect from happening and instead call the provided submit
|
|
11
|
+
// handler
|
|
12
|
+
var handleLinkDisable = function handleLinkDisable(e) {
|
|
13
|
+
if (disableSuggestionRedirect) {
|
|
14
|
+
e.preventDefault();
|
|
15
|
+
suggestionItemHandler(hit);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
return /*#__PURE__*/React.createElement(Link, {
|
|
19
|
+
to: url,
|
|
20
|
+
key: hit.title,
|
|
21
|
+
className: "suggestion-item",
|
|
22
|
+
onClick: handleLinkDisable
|
|
23
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
24
|
+
dangerouslySetInnerHTML: {
|
|
25
|
+
__html: hit._highlightResult.title.value
|
|
26
|
+
}
|
|
27
|
+
}), authoringOrganization && /*#__PURE__*/React.createElement("div", {
|
|
28
|
+
className: "badge badge-light ml-3 font-weight-light authoring-org-badge"
|
|
29
|
+
}, authoringOrganization)), hit.program_type && /*#__PURE__*/React.createElement("p", {
|
|
30
|
+
className: "font-weight-light text-gray-400 program-type"
|
|
31
|
+
}, hit.program_type));
|
|
32
|
+
};
|
|
33
|
+
SearchSuggestionItem.propTypes = {
|
|
34
|
+
url: PropTypes.string.isRequired,
|
|
35
|
+
suggestionItemHandler: PropTypes.func,
|
|
36
|
+
hit: PropTypes.shape({
|
|
37
|
+
key: PropTypes.string,
|
|
38
|
+
course_keys: PropTypes.arrayOf(PropTypes.string),
|
|
39
|
+
title: PropTypes.string,
|
|
40
|
+
program_type: PropTypes.string,
|
|
41
|
+
_highlightResult: PropTypes.shape({
|
|
42
|
+
title: PropTypes.shape({
|
|
43
|
+
value: PropTypes.string
|
|
44
|
+
})
|
|
45
|
+
}),
|
|
46
|
+
card_image_url: PropTypes.string,
|
|
47
|
+
partners: PropTypes.arrayOf(PropTypes.shape({
|
|
48
|
+
name: PropTypes.string
|
|
49
|
+
})),
|
|
50
|
+
learning_type: PropTypes.string
|
|
51
|
+
}).isRequired,
|
|
52
|
+
disableSuggestionRedirect: PropTypes.bool.isRequired
|
|
53
|
+
};
|
|
54
|
+
SearchSuggestionItem.defaultProps = {
|
|
55
|
+
suggestionItemHandler: undefined
|
|
56
|
+
};
|
|
57
|
+
export default SearchSuggestionItem;
|
|
58
|
+
//# sourceMappingURL=SearchSuggestionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchSuggestionItem.js","names":["React","Link","PropTypes","SearchSuggestionItem","_ref","url","suggestionItemHandler","hit","disableSuggestionRedirect","authoringOrganization","key","split","handleLinkDisable","e","preventDefault","createElement","to","title","className","onClick","dangerouslySetInnerHTML","__html","_highlightResult","value","program_type","propTypes","string","isRequired","func","shape","course_keys","arrayOf","card_image_url","partners","name","learning_type","bool","defaultProps","undefined"],"sources":["../src/SearchSuggestionItem.jsx"],"sourcesContent":["import React from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nconst SearchSuggestionItem = ({\n url, suggestionItemHandler, hit, disableSuggestionRedirect,\n}) => {\n const authoringOrganization = hit.key && hit.key.split('+')[0];\n // If the disable redirect bool is provided, prevent the redirect from happening and instead call the provided submit\n // handler\n const handleLinkDisable = (e) => {\n if (disableSuggestionRedirect) {\n e.preventDefault();\n suggestionItemHandler(hit);\n }\n };\n return (\n <Link to={url} key={hit.title} className=\"suggestion-item\" onClick={handleLinkDisable}>\n <div>\n { /* eslint-disable-next-line react/no-danger, no-underscore-dangle */}\n <div dangerouslySetInnerHTML={{ __html: hit._highlightResult.title.value }} />\n {\n authoringOrganization && (\n <div className=\"badge badge-light ml-3 font-weight-light authoring-org-badge\">\n {authoringOrganization}\n </div>\n )\n }\n </div>\n {\n hit.program_type && (\n <p className=\"font-weight-light text-gray-400 program-type\">\n {hit.program_type}\n </p>\n )\n }\n </Link>\n );\n};\n\nSearchSuggestionItem.propTypes = {\n url: PropTypes.string.isRequired,\n suggestionItemHandler: PropTypes.func,\n hit: PropTypes.shape({\n key: PropTypes.string,\n course_keys: PropTypes.arrayOf(PropTypes.string),\n title: PropTypes.string,\n program_type: 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 disableSuggestionRedirect: PropTypes.bool.isRequired,\n};\n\nSearchSuggestionItem.defaultProps = {\n suggestionItemHandler: undefined,\n};\n\nexport default SearchSuggestionItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,kBAAkB;AACvC,OAAOC,SAAS,MAAM,YAAY;AAElC,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAAC,IAAA,EAEpB;EAAA,IADJC,GAAG,GAAAD,IAAA,CAAHC,GAAG;IAAEC,qBAAqB,GAAAF,IAAA,CAArBE,qBAAqB;IAAEC,GAAG,GAAAH,IAAA,CAAHG,GAAG;IAAEC,yBAAyB,GAAAJ,IAAA,CAAzBI,yBAAyB;EAE1D,IAAMC,qBAAqB,GAAGF,GAAG,CAACG,GAAG,IAAIH,GAAG,CAACG,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9D;EACA;EACA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,CAAC,EAAK;IAC/B,IAAIL,yBAAyB,EAAE;MAC7BK,CAAC,CAACC,cAAc,CAAC,CAAC;MAClBR,qBAAqB,CAACC,GAAG,CAAC;IAC5B;EACF,CAAC;EACD,oBACEP,KAAA,CAAAe,aAAA,CAACd,IAAI;IAACe,EAAE,EAAEX,GAAI;IAACK,GAAG,EAAEH,GAAG,CAACU,KAAM;IAACC,SAAS,EAAC,iBAAiB;IAACC,OAAO,EAAEP;EAAkB,gBACpFZ,KAAA,CAAAe,aAAA,2BAEEf,KAAA,CAAAe,aAAA;IAAKK,uBAAuB,EAAE;MAAEC,MAAM,EAAEd,GAAG,CAACe,gBAAgB,CAACL,KAAK,CAACM;IAAM;EAAE,CAAE,CAAC,EAE5Ed,qBAAqB,iBACnBT,KAAA,CAAAe,aAAA;IAAKG,SAAS,EAAC;EAA8D,GAC1ET,qBACE,CAGN,CAAC,EAEJF,GAAG,CAACiB,YAAY,iBACdxB,KAAA,CAAAe,aAAA;IAAGG,SAAS,EAAC;EAA8C,GACxDX,GAAG,CAACiB,YACJ,CAGH,CAAC;AAEX,CAAC;AAEDrB,oBAAoB,CAACsB,SAAS,GAAG;EAC/BpB,GAAG,EAAEH,SAAS,CAACwB,MAAM,CAACC,UAAU;EAChCrB,qBAAqB,EAAEJ,SAAS,CAAC0B,IAAI;EACrCrB,GAAG,EAAEL,SAAS,CAAC2B,KAAK,CAAC;IACnBnB,GAAG,EAAER,SAAS,CAACwB,MAAM;IACrBI,WAAW,EAAE5B,SAAS,CAAC6B,OAAO,CAAC7B,SAAS,CAACwB,MAAM,CAAC;IAChDT,KAAK,EAAEf,SAAS,CAACwB,MAAM;IACvBF,YAAY,EAAEtB,SAAS,CAACwB,MAAM;IAC9BJ,gBAAgB,EAAEpB,SAAS,CAAC2B,KAAK,CAAC;MAAEZ,KAAK,EAAEf,SAAS,CAAC2B,KAAK,CAAC;QAAEN,KAAK,EAAErB,SAAS,CAACwB;MAAO,CAAC;IAAE,CAAC,CAAC;IAC1FM,cAAc,EAAE9B,SAAS,CAACwB,MAAM;IAChCO,QAAQ,EAAE/B,SAAS,CAAC6B,OAAO,CACzB7B,SAAS,CAAC2B,KAAK,CAAC;MACdK,IAAI,EAAEhC,SAAS,CAACwB;IAClB,CAAC,CACH,CAAC;IACDS,aAAa,EAAEjC,SAAS,CAACwB;EAC3B,CAAC,CAAC,CAACC,UAAU;EACbnB,yBAAyB,EAAEN,SAAS,CAACkC,IAAI,CAACT;AAC5C,CAAC;AAEDxB,oBAAoB,CAACkC,YAAY,GAAG;EAClC/B,qBAAqB,EAAEgC;AACzB,CAAC;AAED,eAAenC,oBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
|
4
|
+
import { MAX_NUM_SUGGESTIONS, LEARNING_TYPE_COURSE, LEARNING_TYPE_PROGRAM, LEARNING_TYPE_EXECUTIVE_EDUCATION, COURSE_TYPE_EXECUTIVE_EDUCATION, MAX_NUM_PRE_QUERY_SUGGESTIONS } from './data/constants';
|
|
5
|
+
import PrequerySearchSuggestionItem from './PrequerySearchSuggestionItem';
|
|
6
|
+
import SearchSuggestionItem from './SearchSuggestionItem';
|
|
7
|
+
var SearchSuggestions = function SearchSuggestions(_ref) {
|
|
8
|
+
var preQueryHits = _ref.preQueryHits,
|
|
9
|
+
autoCompleteHits = _ref.autoCompleteHits,
|
|
10
|
+
enterpriseSlug = _ref.enterpriseSlug,
|
|
11
|
+
handleSubmit = _ref.handleSubmit,
|
|
12
|
+
handleSuggestionClickSubmit = _ref.handleSuggestionClickSubmit,
|
|
13
|
+
disableSuggestionRedirect = _ref.disableSuggestionRedirect;
|
|
14
|
+
var getLinkToCourse = function getLinkToCourse(course) {
|
|
15
|
+
var learningType = course.learning_type;
|
|
16
|
+
if (learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) {
|
|
17
|
+
return "/".concat(enterpriseSlug, "/").concat(COURSE_TYPE_EXECUTIVE_EDUCATION, "/course/").concat(course.key);
|
|
18
|
+
}
|
|
19
|
+
return "/".concat(enterpriseSlug, "/course/").concat(course.key);
|
|
20
|
+
};
|
|
21
|
+
var getLinkToProgram = function getLinkToProgram(program) {
|
|
22
|
+
return "/".concat(enterpriseSlug, "/program/").concat(program.aggregation_key.split(':').pop());
|
|
23
|
+
};
|
|
24
|
+
var preQuerySuggestions = [];
|
|
25
|
+
var courses = [];
|
|
26
|
+
var programs = [];
|
|
27
|
+
var execEdCourses = [];
|
|
28
|
+
if (preQueryHits) {
|
|
29
|
+
preQueryHits.forEach(function (hit) {
|
|
30
|
+
preQuerySuggestions.push(hit);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
autoCompleteHits.forEach(function (hit) {
|
|
34
|
+
var learningType = hit.learning_type;
|
|
35
|
+
if (learningType === LEARNING_TYPE_COURSE) {
|
|
36
|
+
courses.push(hit);
|
|
37
|
+
}
|
|
38
|
+
if (learningType === LEARNING_TYPE_PROGRAM) {
|
|
39
|
+
programs.push(hit);
|
|
40
|
+
}
|
|
41
|
+
if (learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) {
|
|
42
|
+
execEdCourses.push(hit);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
className: "suggestions",
|
|
47
|
+
"data-testid": "suggestions"
|
|
48
|
+
}, preQuerySuggestions.length > 0 && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
49
|
+
className: "mb-2 ml-2 mt-1 font-weight-bold suggestions-section"
|
|
50
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
51
|
+
id: "search.suggestions.topRatedCourses",
|
|
52
|
+
defaultMessage: "Top-rated courses",
|
|
53
|
+
description: "Top-rated courses suggestion section title"
|
|
54
|
+
})), preQuerySuggestions.slice(0, MAX_NUM_PRE_QUERY_SUGGESTIONS).map(function (hit) {
|
|
55
|
+
var getUrl = function getUrl(course) {
|
|
56
|
+
var learningType = course.learning_type;
|
|
57
|
+
if (learningType === LEARNING_TYPE_COURSE || learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) {
|
|
58
|
+
return getLinkToCourse(course);
|
|
59
|
+
}
|
|
60
|
+
return getLinkToProgram(course);
|
|
61
|
+
};
|
|
62
|
+
return /*#__PURE__*/React.createElement(PrequerySearchSuggestionItem, {
|
|
63
|
+
key: hit.title,
|
|
64
|
+
url: getUrl(hit),
|
|
65
|
+
hit: hit
|
|
66
|
+
});
|
|
67
|
+
})), courses.length > 0 && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
68
|
+
className: "mb-2 ml-2 mt-1 font-weight-bold suggestions-section"
|
|
69
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
70
|
+
id: "search.suggestions.courses",
|
|
71
|
+
defaultMessage: "Courses",
|
|
72
|
+
description: "Courses suggestion section title"
|
|
73
|
+
})), courses.slice(0, MAX_NUM_SUGGESTIONS).map(function (hit) {
|
|
74
|
+
return /*#__PURE__*/React.createElement(SearchSuggestionItem, {
|
|
75
|
+
key: hit.title,
|
|
76
|
+
url: getLinkToCourse(hit),
|
|
77
|
+
hit: hit,
|
|
78
|
+
disableSuggestionRedirect: disableSuggestionRedirect,
|
|
79
|
+
suggestionItemHandler: handleSuggestionClickSubmit
|
|
80
|
+
});
|
|
81
|
+
})), programs.length > 0 && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
82
|
+
className: "mb-2 mt-5 ml-2 font-weight-bold suggestions-section"
|
|
83
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
84
|
+
id: "search.suggestions.programs",
|
|
85
|
+
defaultMessage: "Programs",
|
|
86
|
+
description: "Programs suggestion section title"
|
|
87
|
+
})), programs.slice(0, MAX_NUM_SUGGESTIONS).map(function (hit) {
|
|
88
|
+
return /*#__PURE__*/React.createElement(SearchSuggestionItem, {
|
|
89
|
+
key: hit.title,
|
|
90
|
+
url: getLinkToProgram(hit),
|
|
91
|
+
hit: hit,
|
|
92
|
+
disableSuggestionRedirect: disableSuggestionRedirect,
|
|
93
|
+
suggestionItemHandler: handleSuggestionClickSubmit
|
|
94
|
+
});
|
|
95
|
+
})), execEdCourses.length > 0 && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
96
|
+
className: "mb-2 mt-5 ml-2 font-weight-bold suggestions-section"
|
|
97
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
98
|
+
id: "search.suggestions.execEd",
|
|
99
|
+
defaultMessage: "Executive Education",
|
|
100
|
+
description: "Executive Education suggestion section title"
|
|
101
|
+
})), execEdCourses.slice(0, MAX_NUM_SUGGESTIONS).map(function (hit) {
|
|
102
|
+
return /*#__PURE__*/React.createElement(SearchSuggestionItem, {
|
|
103
|
+
key: hit.title,
|
|
104
|
+
url: getLinkToCourse(hit),
|
|
105
|
+
hit: hit,
|
|
106
|
+
disableSuggestionRedirect: disableSuggestionRedirect,
|
|
107
|
+
suggestionItemHandler: handleSuggestionClickSubmit
|
|
108
|
+
});
|
|
109
|
+
})), !preQuerySuggestions.length && /*#__PURE__*/React.createElement("button", {
|
|
110
|
+
type: "button",
|
|
111
|
+
className: "btn btn-light w-100 view-all-btn",
|
|
112
|
+
onClick: handleSubmit
|
|
113
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
114
|
+
id: "search.suggestions.viewAllResults",
|
|
115
|
+
defaultMessage: "View all results",
|
|
116
|
+
description: "View all results button text"
|
|
117
|
+
})));
|
|
118
|
+
};
|
|
119
|
+
SearchSuggestions.propTypes = {
|
|
120
|
+
autoCompleteHits: PropTypes.arrayOf(PropTypes.shape({
|
|
121
|
+
content_type: PropTypes.string
|
|
122
|
+
})).isRequired,
|
|
123
|
+
enterpriseSlug: PropTypes.string,
|
|
124
|
+
handleSubmit: PropTypes.func,
|
|
125
|
+
handleSuggestionClickSubmit: PropTypes.func,
|
|
126
|
+
disableSuggestionRedirect: PropTypes.bool,
|
|
127
|
+
preQueryHits: PropTypes.arrayOf(PropTypes.shape())
|
|
128
|
+
};
|
|
129
|
+
SearchSuggestions.defaultProps = {
|
|
130
|
+
handleSubmit: undefined,
|
|
131
|
+
enterpriseSlug: '',
|
|
132
|
+
handleSuggestionClickSubmit: undefined,
|
|
133
|
+
disableSuggestionRedirect: false,
|
|
134
|
+
preQueryHits: undefined
|
|
135
|
+
};
|
|
136
|
+
export default SearchSuggestions;
|
|
137
|
+
//# sourceMappingURL=SearchSuggestions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchSuggestions.js","names":["React","PropTypes","FormattedMessage","MAX_NUM_SUGGESTIONS","LEARNING_TYPE_COURSE","LEARNING_TYPE_PROGRAM","LEARNING_TYPE_EXECUTIVE_EDUCATION","COURSE_TYPE_EXECUTIVE_EDUCATION","MAX_NUM_PRE_QUERY_SUGGESTIONS","PrequerySearchSuggestionItem","SearchSuggestionItem","SearchSuggestions","_ref","preQueryHits","autoCompleteHits","enterpriseSlug","handleSubmit","handleSuggestionClickSubmit","disableSuggestionRedirect","getLinkToCourse","course","learningType","learning_type","concat","key","getLinkToProgram","program","aggregation_key","split","pop","preQuerySuggestions","courses","programs","execEdCourses","forEach","hit","push","createElement","className","length","id","defaultMessage","description","slice","map","getUrl","title","url","suggestionItemHandler","type","onClick","propTypes","arrayOf","shape","content_type","string","isRequired","func","bool","defaultProps","undefined"],"sources":["../src/SearchSuggestions.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport {\n MAX_NUM_SUGGESTIONS, LEARNING_TYPE_COURSE, LEARNING_TYPE_PROGRAM,\n LEARNING_TYPE_EXECUTIVE_EDUCATION, COURSE_TYPE_EXECUTIVE_EDUCATION,\n MAX_NUM_PRE_QUERY_SUGGESTIONS,\n} from './data/constants';\nimport PrequerySearchSuggestionItem from './PrequerySearchSuggestionItem';\nimport SearchSuggestionItem from './SearchSuggestionItem';\n\nconst SearchSuggestions = ({\n preQueryHits,\n autoCompleteHits,\n enterpriseSlug,\n handleSubmit,\n handleSuggestionClickSubmit,\n disableSuggestionRedirect,\n}) => {\n const getLinkToCourse = (course) => {\n const { learning_type: learningType } = course;\n if (learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) {\n return `/${enterpriseSlug}/${COURSE_TYPE_EXECUTIVE_EDUCATION}/course/${course.key}`;\n }\n\n return `/${enterpriseSlug}/course/${course.key}`;\n };\n const getLinkToProgram = (program) => `/${enterpriseSlug}/program/${program.aggregation_key.split(':').pop()}`;\n\n const preQuerySuggestions = [];\n const courses = [];\n const programs = [];\n const execEdCourses = [];\n\n if (preQueryHits) {\n preQueryHits.forEach((hit) => {\n preQuerySuggestions.push(hit);\n });\n }\n autoCompleteHits.forEach((hit) => {\n const { learning_type: learningType } = hit;\n if (learningType === LEARNING_TYPE_COURSE) { courses.push(hit); }\n if (learningType === LEARNING_TYPE_PROGRAM) { programs.push(hit); }\n if (learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) { execEdCourses.push(hit); }\n });\n return (\n <div className=\"suggestions\" data-testid=\"suggestions\">\n {preQuerySuggestions.length > 0 && (\n <div>\n <div className=\"mb-2 ml-2 mt-1 font-weight-bold suggestions-section\">\n <FormattedMessage\n id=\"search.suggestions.topRatedCourses\"\n defaultMessage=\"Top-rated courses\"\n description=\"Top-rated courses suggestion section title\"\n />\n </div>\n {\n preQuerySuggestions.slice(0, MAX_NUM_PRE_QUERY_SUGGESTIONS)\n .map((hit) => {\n const getUrl = (course) => {\n const { learning_type: learningType } = course;\n if (learningType === LEARNING_TYPE_COURSE || learningType === LEARNING_TYPE_EXECUTIVE_EDUCATION) {\n return getLinkToCourse(course);\n }\n return getLinkToProgram(course);\n };\n return (\n <PrequerySearchSuggestionItem\n key={hit.title}\n url={getUrl(hit)}\n hit={hit}\n />\n );\n })\n }\n </div>\n )}\n {courses.length > 0 && (\n <div>\n <div className=\"mb-2 ml-2 mt-1 font-weight-bold suggestions-section\">\n <FormattedMessage\n id=\"search.suggestions.courses\"\n defaultMessage=\"Courses\"\n description=\"Courses suggestion section title\"\n />\n </div>\n {\n courses.slice(0, MAX_NUM_SUGGESTIONS)\n .map((hit) => (\n <SearchSuggestionItem\n key={hit.title}\n url={getLinkToCourse(hit)}\n hit={hit}\n disableSuggestionRedirect={disableSuggestionRedirect}\n suggestionItemHandler={handleSuggestionClickSubmit}\n />\n ))\n }\n </div>\n )}\n {programs.length > 0 && (\n <div>\n <div className=\"mb-2 mt-5 ml-2 font-weight-bold suggestions-section\">\n <FormattedMessage\n id=\"search.suggestions.programs\"\n defaultMessage=\"Programs\"\n description=\"Programs suggestion section title\"\n />\n </div>\n {\n programs.slice(0, MAX_NUM_SUGGESTIONS)\n .map((hit) => (\n <SearchSuggestionItem\n key={hit.title}\n url={getLinkToProgram(hit)}\n hit={hit}\n disableSuggestionRedirect={disableSuggestionRedirect}\n suggestionItemHandler={handleSuggestionClickSubmit}\n />\n ))\n }\n </div>\n )}\n {execEdCourses.length > 0 && (\n <div>\n <div className=\"mb-2 mt-5 ml-2 font-weight-bold suggestions-section\">\n <FormattedMessage\n id=\"search.suggestions.execEd\"\n defaultMessage=\"Executive Education\"\n description=\"Executive Education suggestion section title\"\n />\n </div>\n {\n execEdCourses.slice(0, MAX_NUM_SUGGESTIONS)\n .map((hit) => (\n <SearchSuggestionItem\n key={hit.title}\n url={getLinkToCourse(hit)}\n hit={hit}\n disableSuggestionRedirect={disableSuggestionRedirect}\n suggestionItemHandler={handleSuggestionClickSubmit}\n />\n ))\n }\n </div>\n )}\n {!preQuerySuggestions.length && (\n <button type=\"button\" className=\"btn btn-light w-100 view-all-btn\" onClick={handleSubmit}>\n <FormattedMessage\n id=\"search.suggestions.viewAllResults\"\n defaultMessage=\"View all results\"\n description=\"View all results button text\"\n />\n </button>\n )}\n </div>\n );\n};\n\nSearchSuggestions.propTypes = {\n autoCompleteHits: PropTypes.arrayOf(PropTypes.shape({\n content_type: PropTypes.string,\n })).isRequired,\n enterpriseSlug: PropTypes.string,\n handleSubmit: PropTypes.func,\n handleSuggestionClickSubmit: PropTypes.func,\n disableSuggestionRedirect: PropTypes.bool,\n preQueryHits: PropTypes.arrayOf(PropTypes.shape()),\n};\n\nSearchSuggestions.defaultProps = {\n handleSubmit: undefined,\n enterpriseSlug: '',\n handleSuggestionClickSubmit: undefined,\n disableSuggestionRedirect: false,\n preQueryHits: undefined,\n};\n\nexport default SearchSuggestions;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var _excluded = ["title", "items", "isBold", "options", "searchForItems"];
|
|
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 debounce from 'lodash.debounce';
|
|
8
|
+
import { Input } from '@openedx/paragon';
|
|
9
|
+
import FacetDropdown from './FacetDropdown';
|
|
10
|
+
var TypeaheadFacetDropdown = function TypeaheadFacetDropdown(_ref) {
|
|
11
|
+
var title = _ref.title,
|
|
12
|
+
items = _ref.items,
|
|
13
|
+
isBold = _ref.isBold,
|
|
14
|
+
options = _ref.options,
|
|
15
|
+
searchForItems = _ref.searchForItems,
|
|
16
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
17
|
+
var handleSearch = debounce(function (value) {
|
|
18
|
+
// when user is erasing the input and input is empty we need to reset the filtering
|
|
19
|
+
if (value.length >= options.minLength || value.length === 0) {
|
|
20
|
+
searchForItems(value);
|
|
21
|
+
}
|
|
22
|
+
}, 200);
|
|
23
|
+
var transformMenuOptions = function transformMenuOptions(menuOptions) {
|
|
24
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
25
|
+
className: "pr-2 pl-2 pb-2"
|
|
26
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
27
|
+
autoFocus: true,
|
|
28
|
+
type: "search",
|
|
29
|
+
className: "typeahead-dropdown-input",
|
|
30
|
+
onChange: function onChange(event) {
|
|
31
|
+
return handleSearch(event.currentTarget.value);
|
|
32
|
+
},
|
|
33
|
+
placeholder: options.placeholder,
|
|
34
|
+
"aria-label": options.ariaLabel
|
|
35
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
36
|
+
className: "typeahead-dropdown-menu-scrollable-items"
|
|
37
|
+
}, menuOptions));
|
|
38
|
+
};
|
|
39
|
+
return /*#__PURE__*/React.createElement(FacetDropdown, _extends({
|
|
40
|
+
items: transformMenuOptions(items),
|
|
41
|
+
title: title,
|
|
42
|
+
isBold: isBold,
|
|
43
|
+
className: "typeahead"
|
|
44
|
+
}, props));
|
|
45
|
+
};
|
|
46
|
+
TypeaheadFacetDropdown.propTypes = {
|
|
47
|
+
title: PropTypes.string.isRequired,
|
|
48
|
+
items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
|
|
49
|
+
isBold: PropTypes.bool.isRequired,
|
|
50
|
+
options: PropTypes.shape({
|
|
51
|
+
placeholder: PropTypes.string.isRequired,
|
|
52
|
+
ariaLabel: PropTypes.string.isRequired,
|
|
53
|
+
minLength: PropTypes.number.isRequired
|
|
54
|
+
}).isRequired,
|
|
55
|
+
searchForItems: PropTypes.func.isRequired
|
|
56
|
+
};
|
|
57
|
+
export default TypeaheadFacetDropdown;
|
|
58
|
+
//# sourceMappingURL=TypeaheadFacetDropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeaheadFacetDropdown.js","names":["React","PropTypes","debounce","Input","FacetDropdown","TypeaheadFacetDropdown","_ref","title","items","isBold","options","searchForItems","props","_objectWithoutProperties","_excluded","handleSearch","value","length","minLength","transformMenuOptions","menuOptions","createElement","Fragment","className","autoFocus","type","onChange","event","currentTarget","placeholder","ariaLabel","_extends","propTypes","string","isRequired","oneOfType","arrayOf","node","bool","shape","number","func"],"sources":["../src/TypeaheadFacetDropdown.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport { Input } from '@openedx/paragon';\n\nimport FacetDropdown from './FacetDropdown';\n\nconst TypeaheadFacetDropdown = ({\n title,\n items,\n isBold,\n options,\n searchForItems,\n ...props\n}) => {\n const handleSearch = debounce((value) => {\n // when user is erasing the input and input is empty we need to reset the filtering\n if (value.length >= options.minLength || value.length === 0) {\n searchForItems(value);\n }\n }, 200);\n\n const transformMenuOptions = (menuOptions) => (\n <>\n <div className=\"pr-2 pl-2 pb-2\">\n <Input\n autoFocus\n type=\"search\"\n className=\"typeahead-dropdown-input\"\n onChange={event => handleSearch(event.currentTarget.value)}\n placeholder={options.placeholder}\n aria-label={options.ariaLabel}\n />\n </div>\n <div className=\"typeahead-dropdown-menu-scrollable-items\">\n {menuOptions}\n </div>\n </>\n );\n\n return (\n <FacetDropdown\n items={transformMenuOptions(items)}\n title={title}\n isBold={isBold}\n className=\"typeahead\"\n {...props}\n />\n );\n};\n\nTypeaheadFacetDropdown.propTypes = {\n title: PropTypes.string.isRequired,\n items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n isBold: PropTypes.bool.isRequired,\n options: PropTypes.shape({\n placeholder: PropTypes.string.isRequired,\n ariaLabel: PropTypes.string.isRequired,\n minLength: PropTypes.number.isRequired,\n }).isRequired,\n searchForItems: PropTypes.func.isRequired,\n};\n\nexport default TypeaheadFacetDropdown;\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,SAASC,KAAK,QAAQ,kBAAkB;AAExC,OAAOC,aAAa,MAAM,iBAAiB;AAE3C,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAAC,IAAA,EAOtB;EAAA,IANJC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,MAAM,GAAAH,IAAA,CAANG,MAAM;IACNC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IACPC,cAAc,GAAAL,IAAA,CAAdK,cAAc;IACXC,KAAK,GAAAC,wBAAA,CAAAP,IAAA,EAAAQ,SAAA;EAER,IAAMC,YAAY,GAAGb,QAAQ,CAAC,UAACc,KAAK,EAAK;IACvC;IACA,IAAIA,KAAK,CAACC,MAAM,IAAIP,OAAO,CAACQ,SAAS,IAAIF,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;MAC3DN,cAAc,CAACK,KAAK,CAAC;IACvB;EACF,CAAC,EAAE,GAAG,CAAC;EAEP,IAAMG,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,WAAW;IAAA,oBACvCpB,KAAA,CAAAqB,aAAA,CAAArB,KAAA,CAAAsB,QAAA,qBACEtB,KAAA,CAAAqB,aAAA;MAAKE,SAAS,EAAC;IAAgB,gBAC7BvB,KAAA,CAAAqB,aAAA,CAAClB,KAAK;MACJqB,SAAS;MACTC,IAAI,EAAC,QAAQ;MACbF,SAAS,EAAC,0BAA0B;MACpCG,QAAQ,EAAE,SAAVA,QAAQA,CAAEC,KAAK;QAAA,OAAIZ,YAAY,CAACY,KAAK,CAACC,aAAa,CAACZ,KAAK,CAAC;MAAA,CAAC;MAC3Da,WAAW,EAAEnB,OAAO,CAACmB,WAAY;MACjC,cAAYnB,OAAO,CAACoB;IAAU,CAC/B,CACE,CAAC,eACN9B,KAAA,CAAAqB,aAAA;MAAKE,SAAS,EAAC;IAA0C,GACtDH,WACE,CACL,CAAC;EAAA,CACJ;EAED,oBACEpB,KAAA,CAAAqB,aAAA,CAACjB,aAAa,EAAA2B,QAAA;IACZvB,KAAK,EAAEW,oBAAoB,CAACX,KAAK,CAAE;IACnCD,KAAK,EAAEA,KAAM;IACbE,MAAM,EAAEA,MAAO;IACfc,SAAS,EAAC;EAAW,GACjBX,KAAK,CACV,CAAC;AAEN,CAAC;AAEDP,sBAAsB,CAAC2B,SAAS,GAAG;EACjCzB,KAAK,EAAEN,SAAS,CAACgC,MAAM,CAACC,UAAU;EAClC1B,KAAK,EAAEP,SAAS,CAACkC,SAAS,CAAC,CAAClC,SAAS,CAACmC,OAAO,CAACnC,SAAS,CAACoC,IAAI,CAAC,EAAEpC,SAAS,CAACoC,IAAI,CAAC,CAAC,CAACH,UAAU;EAC1FzB,MAAM,EAAER,SAAS,CAACqC,IAAI,CAACJ,UAAU;EACjCxB,OAAO,EAAET,SAAS,CAACsC,KAAK,CAAC;IACvBV,WAAW,EAAE5B,SAAS,CAACgC,MAAM,CAACC,UAAU;IACxCJ,SAAS,EAAE7B,SAAS,CAACgC,MAAM,CAACC,UAAU;IACtChB,SAAS,EAAEjB,SAAS,CAACuC,MAAM,CAACN;EAC9B,CAAC,CAAC,CAACA,UAAU;EACbvB,cAAc,EAAEV,SAAS,CAACwC,IAAI,CAACP;AACjC,CAAC;AAED,eAAe7B,sBAAsB","ignoreList":[]}
|
package/config/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { hasFeatureFlagEnabled } from '@edx/frontend-enterprise-utils';
|
|
2
|
+
export var FEATURE_ENROLL_WITH_CODES = 'ENROLL_WITH_CODES';
|
|
3
|
+
export var FEATURE_LANGUAGE_FACET = 'LANGUAGE_FACET';
|
|
4
|
+
export var FEATURE_PROGRAM_TITLES_FACET = 'PROGRAM_TITLES_FACET';
|
|
5
|
+
export var LEARNING_TYPE_FACET = 'LEARNING_TYPE_FACET';
|
|
6
|
+
export var FEATURE_ENABLE_PATHWAYS = 'ENABLE_PATHWAYS';
|
|
7
|
+
export var FEATURE_SUBTITLE_FACET = 'SUBTITLE_FACET';
|
|
8
|
+
|
|
9
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
10
|
+
export var features = {
|
|
11
|
+
ENROLL_WITH_CODES: process.env.FEATURE_ENROLL_WITH_CODES || hasFeatureFlagEnabled(FEATURE_ENROLL_WITH_CODES),
|
|
12
|
+
LANGUAGE_FACET: process.env.FEATURE_LANGUAGE_FACET || hasFeatureFlagEnabled(FEATURE_LANGUAGE_FACET),
|
|
13
|
+
PROGRAM_TITLES_FACET: process.env.FEATURE_PROGRAM_TITLES_FACET || hasFeatureFlagEnabled(FEATURE_PROGRAM_TITLES_FACET),
|
|
14
|
+
LEARNING_TYPE_FACET: process.env.LEARNING_TYPE_FACET || hasFeatureFlagEnabled(LEARNING_TYPE_FACET),
|
|
15
|
+
ENABlE_PATHWAYS: process.env.FEATURE_ENABLE_PATHWAYS || hasFeatureFlagEnabled(FEATURE_ENABLE_PATHWAYS),
|
|
16
|
+
SUBTITLE_FACET: process.env.FEATURE_SUBTITLE_FACET || hasFeatureFlagEnabled(FEATURE_SUBTITLE_FACET)
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["hasFeatureFlagEnabled","FEATURE_ENROLL_WITH_CODES","FEATURE_LANGUAGE_FACET","FEATURE_PROGRAM_TITLES_FACET","LEARNING_TYPE_FACET","FEATURE_ENABLE_PATHWAYS","FEATURE_SUBTITLE_FACET","features","ENROLL_WITH_CODES","process","env","LANGUAGE_FACET","PROGRAM_TITLES_FACET","ENABlE_PATHWAYS","SUBTITLE_FACET"],"sources":["../../src/config/index.js"],"sourcesContent":["import { hasFeatureFlagEnabled } from '@edx/frontend-enterprise-utils';\n\nexport const FEATURE_ENROLL_WITH_CODES = 'ENROLL_WITH_CODES';\nexport const FEATURE_LANGUAGE_FACET = 'LANGUAGE_FACET';\nexport const FEATURE_PROGRAM_TITLES_FACET = 'PROGRAM_TITLES_FACET';\nexport const LEARNING_TYPE_FACET = 'LEARNING_TYPE_FACET';\nexport const FEATURE_ENABLE_PATHWAYS = 'ENABLE_PATHWAYS';\nexport const FEATURE_SUBTITLE_FACET = 'SUBTITLE_FACET';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const features = {\n ENROLL_WITH_CODES: process.env.FEATURE_ENROLL_WITH_CODES || hasFeatureFlagEnabled(FEATURE_ENROLL_WITH_CODES),\n LANGUAGE_FACET: process.env.FEATURE_LANGUAGE_FACET || hasFeatureFlagEnabled(FEATURE_LANGUAGE_FACET),\n PROGRAM_TITLES_FACET: (\n process.env.FEATURE_PROGRAM_TITLES_FACET || hasFeatureFlagEnabled(FEATURE_PROGRAM_TITLES_FACET)\n ),\n LEARNING_TYPE_FACET: (\n process.env.LEARNING_TYPE_FACET || hasFeatureFlagEnabled(LEARNING_TYPE_FACET)\n ),\n ENABlE_PATHWAYS: (\n process.env.FEATURE_ENABLE_PATHWAYS || hasFeatureFlagEnabled(FEATURE_ENABLE_PATHWAYS)\n ),\n SUBTITLE_FACET: (\n process.env.FEATURE_SUBTITLE_FACET || hasFeatureFlagEnabled(FEATURE_SUBTITLE_FACET)\n ),\n};\n"],"mappings":"AAAA,SAASA,qBAAqB,QAAQ,gCAAgC;AAEtE,OAAO,IAAMC,yBAAyB,GAAG,mBAAmB;AAC5D,OAAO,IAAMC,sBAAsB,GAAG,gBAAgB;AACtD,OAAO,IAAMC,4BAA4B,GAAG,sBAAsB;AAClE,OAAO,IAAMC,mBAAmB,GAAG,qBAAqB;AACxD,OAAO,IAAMC,uBAAuB,GAAG,iBAAiB;AACxD,OAAO,IAAMC,sBAAsB,GAAG,gBAAgB;;AAEtD;AACA,OAAO,IAAMC,QAAQ,GAAG;EACtBC,iBAAiB,EAAEC,OAAO,CAACC,GAAG,CAACT,yBAAyB,IAAID,qBAAqB,CAACC,yBAAyB,CAAC;EAC5GU,cAAc,EAAEF,OAAO,CAACC,GAAG,CAACR,sBAAsB,IAAIF,qBAAqB,CAACE,sBAAsB,CAAC;EACnGU,oBAAoB,EAClBH,OAAO,CAACC,GAAG,CAACP,4BAA4B,IAAIH,qBAAqB,CAACG,4BAA4B,CAC/F;EACDC,mBAAmB,EACjBK,OAAO,CAACC,GAAG,CAACN,mBAAmB,IAAIJ,qBAAqB,CAACI,mBAAmB,CAC7E;EACDS,eAAe,EACbJ,OAAO,CAACC,GAAG,CAACL,uBAAuB,IAAIL,qBAAqB,CAACK,uBAAuB,CACrF;EACDS,cAAc,EACZL,OAAO,CAACC,GAAG,CAACJ,sBAAsB,IAAIN,qBAAqB,CAACM,sBAAsB;AAEtF,CAAC","ignoreList":[]}
|
package/data/actions.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export var DELETE_REFINEMENT = 'DELETE_REFINEMENT';
|
|
2
|
+
export var SET_REFINEMENT = 'SET_REFINEMENT';
|
|
3
|
+
export var CLEAR_REFINEMENTS = 'CLEAR_REFINEMENTS';
|
|
4
|
+
export var SET_REFINEMENTS_FROM_QUERY_PARAMS = 'SET_REFINEMENTS_FROM_QUERY_PARAMS';
|
|
5
|
+
export var ADD_TO_REFINEMENT_ARRAY = 'ADD_TO_REFINEMENT_ARRAY';
|
|
6
|
+
export var REMOVE_FROM_REFINEMENT_ARRAY = 'REMOVE_FROM_REFINEMENT_ARRAY';
|
|
7
|
+
export var deleteRefinementAction = function deleteRefinementAction(key) {
|
|
8
|
+
return {
|
|
9
|
+
type: DELETE_REFINEMENT,
|
|
10
|
+
key: key
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export var setRefinementAction = function setRefinementAction(key, value) {
|
|
14
|
+
return {
|
|
15
|
+
type: SET_REFINEMENT,
|
|
16
|
+
key: key,
|
|
17
|
+
value: value
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export var setMultipleRefinementsAction = function setMultipleRefinementsAction() {
|
|
21
|
+
var newKeyValues = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
22
|
+
return {
|
|
23
|
+
type: SET_REFINEMENTS_FROM_QUERY_PARAMS,
|
|
24
|
+
payload: newKeyValues
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export var clearRefinementsAction = function clearRefinementsAction() {
|
|
28
|
+
return {
|
|
29
|
+
type: CLEAR_REFINEMENTS
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export var addToRefinementArray = function addToRefinementArray(key, value) {
|
|
33
|
+
return {
|
|
34
|
+
type: ADD_TO_REFINEMENT_ARRAY,
|
|
35
|
+
key: key,
|
|
36
|
+
value: value
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export var removeFromRefinementArray = function removeFromRefinementArray(key, value) {
|
|
40
|
+
return {
|
|
41
|
+
type: REMOVE_FROM_REFINEMENT_ARRAY,
|
|
42
|
+
key: key,
|
|
43
|
+
value: value
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","names":["DELETE_REFINEMENT","SET_REFINEMENT","CLEAR_REFINEMENTS","SET_REFINEMENTS_FROM_QUERY_PARAMS","ADD_TO_REFINEMENT_ARRAY","REMOVE_FROM_REFINEMENT_ARRAY","deleteRefinementAction","key","type","setRefinementAction","value","setMultipleRefinementsAction","newKeyValues","arguments","length","undefined","payload","clearRefinementsAction","addToRefinementArray","removeFromRefinementArray"],"sources":["../../src/data/actions.js"],"sourcesContent":["export const DELETE_REFINEMENT = 'DELETE_REFINEMENT';\nexport const SET_REFINEMENT = 'SET_REFINEMENT';\nexport const CLEAR_REFINEMENTS = 'CLEAR_REFINEMENTS';\nexport const SET_REFINEMENTS_FROM_QUERY_PARAMS = 'SET_REFINEMENTS_FROM_QUERY_PARAMS';\nexport const ADD_TO_REFINEMENT_ARRAY = 'ADD_TO_REFINEMENT_ARRAY';\nexport const REMOVE_FROM_REFINEMENT_ARRAY = 'REMOVE_FROM_REFINEMENT_ARRAY';\n\nexport const deleteRefinementAction = key => ({\n type: DELETE_REFINEMENT,\n key,\n});\n\nexport const setRefinementAction = (key, value) => ({\n type: SET_REFINEMENT,\n key,\n value,\n});\n\nexport const setMultipleRefinementsAction = (newKeyValues = {}) => ({\n type: SET_REFINEMENTS_FROM_QUERY_PARAMS,\n payload: newKeyValues,\n});\n\nexport const clearRefinementsAction = () => ({ type: CLEAR_REFINEMENTS });\n\nexport const addToRefinementArray = (key, value) => ({\n type: ADD_TO_REFINEMENT_ARRAY,\n key,\n value,\n});\n\nexport const removeFromRefinementArray = (key, value) => ({\n type: REMOVE_FROM_REFINEMENT_ARRAY,\n key,\n value,\n});\n"],"mappings":"AAAA,OAAO,IAAMA,iBAAiB,GAAG,mBAAmB;AACpD,OAAO,IAAMC,cAAc,GAAG,gBAAgB;AAC9C,OAAO,IAAMC,iBAAiB,GAAG,mBAAmB;AACpD,OAAO,IAAMC,iCAAiC,GAAG,mCAAmC;AACpF,OAAO,IAAMC,uBAAuB,GAAG,yBAAyB;AAChE,OAAO,IAAMC,4BAA4B,GAAG,8BAA8B;AAE1E,OAAO,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAGC,GAAG;EAAA,OAAK;IAC5CC,IAAI,EAAER,iBAAiB;IACvBO,GAAG,EAAHA;EACF,CAAC;AAAA,CAAC;AAEF,OAAO,IAAME,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIF,GAAG,EAAEG,KAAK;EAAA,OAAM;IAClDF,IAAI,EAAEP,cAAc;IACpBM,GAAG,EAAHA,GAAG;IACHG,KAAK,EAALA;EACF,CAAC;AAAA,CAAC;AAEF,OAAO,IAAMC,4BAA4B,GAAG,SAA/BA,4BAA4BA,CAAA;EAAA,IAAIC,YAAY,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAAA,OAAM;IAClEL,IAAI,EAAEL,iCAAiC;IACvCa,OAAO,EAAEJ;EACX,CAAC;AAAA,CAAC;AAEF,OAAO,IAAMK,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAA;EAAA,OAAU;IAAET,IAAI,EAAEN;EAAkB,CAAC;AAAA,CAAC;AAEzE,OAAO,IAAMgB,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIX,GAAG,EAAEG,KAAK;EAAA,OAAM;IACnDF,IAAI,EAAEJ,uBAAuB;IAC7BG,GAAG,EAAHA,GAAG;IACHG,KAAK,EAALA;EACF,CAAC;AAAA,CAAC;AAEF,OAAO,IAAMS,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAIZ,GAAG,EAAEG,KAAK;EAAA,OAAM;IACxDF,IAAI,EAAEH,4BAA4B;IAClCE,GAAG,EAAHA,GAAG;IACHG,KAAK,EAALA;EACF,CAAC;AAAA,CAAC","ignoreList":[]}
|