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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +1125 -0
  2. package/ClearCurrentRefinements.js +47 -0
  3. package/ClearCurrentRefinements.js.map +1 -0
  4. package/CurrentRefinements.js +152 -0
  5. package/CurrentRefinements.js.map +1 -0
  6. package/FacetDropdown.js +40 -0
  7. package/FacetDropdown.js.map +1 -0
  8. package/FacetItem.js +50 -0
  9. package/FacetItem.js.map +1 -0
  10. package/FacetListBase.js +140 -0
  11. package/FacetListBase.js.map +1 -0
  12. package/FacetListRefinement.js +25 -0
  13. package/FacetListRefinement.js.map +1 -0
  14. package/LICENSE +661 -0
  15. package/LearningTypeRadioFacet.js +165 -0
  16. package/LearningTypeRadioFacet.js.map +1 -0
  17. package/MobileFilterMenu.js +122 -0
  18. package/MobileFilterMenu.js.map +1 -0
  19. package/PrequerySearchSuggestionItem.js +48 -0
  20. package/PrequerySearchSuggestionItem.js.map +1 -0
  21. package/README.md +10 -0
  22. package/SearchBox.js +266 -0
  23. package/SearchBox.js.map +1 -0
  24. package/SearchContext.js +115 -0
  25. package/SearchContext.js.map +1 -0
  26. package/SearchFilters.js +73 -0
  27. package/SearchFilters.js.map +1 -0
  28. package/SearchHeader.js +117 -0
  29. package/SearchHeader.js.map +1 -0
  30. package/SearchPagination.js +78 -0
  31. package/SearchPagination.js.map +1 -0
  32. package/SearchSuggestionItem.js +58 -0
  33. package/SearchSuggestionItem.js.map +1 -0
  34. package/SearchSuggestions.js +137 -0
  35. package/SearchSuggestions.js.map +1 -0
  36. package/TypeaheadFacetDropdown.js +58 -0
  37. package/TypeaheadFacetDropdown.js.map +1 -0
  38. package/config/index.js +18 -0
  39. package/config/index.js.map +1 -0
  40. package/data/actions.js +46 -0
  41. package/data/actions.js.map +1 -0
  42. package/data/constants.js +92 -0
  43. package/data/constants.js.map +1 -0
  44. package/data/hooks.js +97 -0
  45. package/data/hooks.js.map +1 -0
  46. package/data/reducer.js +70 -0
  47. package/data/reducer.js.map +1 -0
  48. package/data/tests/constants.js +13 -0
  49. package/data/tests/constants.js.map +1 -0
  50. package/data/utils.js +69 -0
  51. package/data/utils.js.map +1 -0
  52. package/index.js +9 -0
  53. package/index.js.map +1 -0
  54. package/index.scss +3 -0
  55. package/messages.js +166 -0
  56. package/messages.js.map +1 -0
  57. package/package.json +68 -0
  58. package/styles/_CurrentRefinements.scss +19 -0
  59. package/styles/_FacetList.scss +49 -0
  60. package/styles/_MobileSearchFilters.scss +59 -0
  61. package/styles/_SearchBox.scss +8 -0
  62. package/styles/_SearchField.scss +14 -0
  63. package/styles/_SearchPagination.scss +5 -0
  64. package/styles/_SearchSuggestions.scss +97 -0
  65. package/styles/_index.scss +7 -0
  66. package/tests/utils.js +22 -0
  67. package/tests/utils.js.map +1 -0
  68. package/utils.js +159 -0
  69. package/utils.js.map +1 -0
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@2uinc/frontend-enterprise-catalog-search",
3
+ "version": "11.0.2",
4
+ "description": "Components related to Enterprise catalog search.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/edx/frontend-enterprise.git"
8
+ },
9
+ "watch": {
10
+ "build": {
11
+ "patterns": [
12
+ "src"
13
+ ],
14
+ "extensions": "js,jsx,ts,tsx"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "dev": "npx npm-watch build",
19
+ "clean": "make clean",
20
+ "build": "make build",
21
+ "i18n_extract": "BABEL_ENV=i18n fedx-scripts babel src --quiet > /dev/null",
22
+ "lint": "fedx-scripts eslint --ext .js --ext .jsx --ext .ts --ext .tsx .",
23
+ "lint:fix": "npm run lint -- --fix",
24
+ "snapshot": "npm run test -- --updateSnapshot",
25
+ "test": "fedx-scripts jest --coverage --passWithNoTests",
26
+ "test:watch": "npm run test -- --watch"
27
+ },
28
+ "author": "edX",
29
+ "license": "AGPL-3.0",
30
+ "homepage": "https://github.com/edx/frontend-enterprise#readme",
31
+ "publishConfig": {
32
+ "access": "public",
33
+ "directory": "dist"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/edx/frontend-enterprise/issues"
37
+ },
38
+ "sideEffects": false,
39
+ "dependencies": {
40
+ "@edx/frontend-enterprise-utils": "^10.0.0",
41
+ "classnames": "^2.5.1",
42
+ "lodash.debounce": "^4.0.8",
43
+ "prop-types": "^15.8.1"
44
+ },
45
+ "devDependencies": {
46
+ "@edx/browserslist-config": "^1.5.0",
47
+ "@edx/frontend-platform": "^8.2.1",
48
+ "@openedx/frontend-build": "^14.3.1",
49
+ "@openedx/paragon": "^22.15.1",
50
+ "@testing-library/dom": "^10.4.0",
51
+ "@testing-library/jest-dom": "^5.17.0",
52
+ "@testing-library/react": "^16.2.0",
53
+ "@testing-library/user-event": "^14.6.1",
54
+ "react": "^18.3.1",
55
+ "react-dom": "^18.3.1",
56
+ "react-instantsearch-dom": "^6.40.4",
57
+ "react-router-dom": "^6.29.0",
58
+ "react-test-renderer": "^18.3.1"
59
+ },
60
+ "peerDependencies": {
61
+ "@edx/frontend-platform": "^7.0.0 || ^8.0.0",
62
+ "@openedx/paragon": "^22.0.0 || ^23.14.1",
63
+ "react": "^16.12.0 || ^17.0.0 || ^18.0.0",
64
+ "react-dom": "^16.12.0 || ^17.0.0 || ^18.0.0",
65
+ "react-instantsearch-dom": "^6.8.3",
66
+ "react-router-dom": "^6.0.0"
67
+ }
68
+ }
@@ -0,0 +1,19 @@
1
+ .fe__refinement-badge {
2
+ border-radius: 0;
3
+ cursor: pointer;
4
+
5
+ &.fe__refinement-badge:first-child {
6
+ // overrides bootstrap margin for first child
7
+ margin-left: 0 !important;
8
+ }
9
+ }
10
+
11
+ .fe__current-refinement-button--inverse {
12
+ color: $white;
13
+ }
14
+
15
+ .fe_current-icon-justify-center {
16
+ height: 40px;
17
+ display: flex;
18
+ align-items: center;
19
+ }
@@ -0,0 +1,49 @@
1
+ $facet-dropdown-max-height: 250px;
2
+
3
+ .facet-list {
4
+ .dropdown {
5
+ @extend .mb-3;
6
+
7
+ .facet-item-label {
8
+ font-weight: normal;
9
+
10
+ &.is-refined {
11
+ font-weight: 700;
12
+ }
13
+ }
14
+
15
+ input:focus + .facet-item-label {
16
+ text-decoration: underline;
17
+ }
18
+
19
+ .dropdown-menu {
20
+ max-height: $facet-dropdown-max-height;
21
+ overflow: scroll;
22
+ max-width: 420px;
23
+ width: max-content;
24
+
25
+ .dropdown-item {
26
+ padding-left: 30px;
27
+ white-space: break-spaces;
28
+ display: flex;
29
+ align-items: flex-start;
30
+ }
31
+ }
32
+ }
33
+ .typeahead {
34
+ .dropdown-menu {
35
+ max-height: unset;
36
+ overflow-y: unset;
37
+ .typeahead-dropdown-menu-scrollable-items {
38
+ max-height: $facet-dropdown-max-height;
39
+ overflow-y: scroll;
40
+ }
41
+ }
42
+ }
43
+
44
+ }
45
+
46
+ .bg-brand-primary--default {
47
+ background-color: $primary-700;
48
+ color: $white;
49
+ }
@@ -0,0 +1,59 @@
1
+ .mobile-filter-menu {
2
+ .modal-dialog {
3
+ width: 100%;
4
+ height: 100%;
5
+ margin: 0;
6
+ padding: 0;
7
+ max-width: unset;
8
+ }
9
+
10
+ .modal-header .btn-close {
11
+ right: 10px;
12
+ color: $gray-700;
13
+ }
14
+
15
+ .modal-content {
16
+ height: auto;
17
+ min-height: 100%;
18
+ border: 0 none;
19
+ border-radius: 0;
20
+ box-shadow: none;
21
+ }
22
+
23
+ .modal-footer {
24
+ background-color: $gray-200;
25
+
26
+ .btn {
27
+ @extend .flex-grow-1;
28
+ }
29
+ }
30
+
31
+ .facet-list .dropdown {
32
+ @extend .mb-0;
33
+
34
+ .dropdown-toggle {
35
+ @extend .border-bottom;
36
+ @extend .py-3;
37
+ width: 100%;
38
+ }
39
+
40
+ &:first-child {
41
+ border: none;
42
+ }
43
+
44
+ .dropdown-menu, .typeahead-dropdown-menu-scrollable-items {
45
+ position: relative;
46
+ width: 100%;
47
+ box-shadow: none;
48
+ overflow-y: unset;
49
+ max-height: unset;
50
+ max-width: unset;
51
+ border: none;
52
+ @extend .border-bottom;
53
+ }
54
+
55
+ .dropdown-item {
56
+ padding-left: 30px;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,8 @@
1
+ .fe__searchbox-col--default {
2
+ padding: 0;
3
+
4
+ .container, .row {
5
+ padding: 0;
6
+ }
7
+ }
8
+
@@ -0,0 +1,14 @@
1
+ .fe__searchfield {
2
+ border-radius: 0 !important;
3
+ }
4
+
5
+ .fe__searchfield-input-box {
6
+ @extend .mb-2;
7
+ @extend .text-brand-primary !optional;
8
+ @extend .font-weight-normal;
9
+ }
10
+
11
+ .fe__searchfield--inverse {
12
+ border: 0 !important;
13
+ @extend .bg-white;
14
+ }
@@ -0,0 +1,5 @@
1
+ .pgn__data-table-wrapper {
2
+ .pagination {
3
+ margin: 0;
4
+ }
5
+ }
@@ -0,0 +1,97 @@
1
+ .suggestions {
2
+ position: absolute;
3
+ background: white;
4
+ margin-top: auto;
5
+ z-index: 1;
6
+ box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
7
+
8
+ }
9
+
10
+ .suggestion-item {
11
+ display: flex;
12
+ flex-direction: column;
13
+ margin: 5px 10px 5px 10px;
14
+ padding: 8px;
15
+ color: #000;
16
+ font-size: 75%;
17
+ white-space: pre-wrap;
18
+
19
+ &:hover {
20
+ color: white;
21
+ background-color: #000000;
22
+ text-decoration: none;
23
+ }
24
+
25
+ &:hover span {
26
+ color: white;
27
+ }
28
+
29
+ em {
30
+ font-weight: bold;
31
+ font-style: normal;
32
+
33
+ &:hover {
34
+ color: white;
35
+ }
36
+
37
+ &:not(:first-child) {
38
+ margin-left: 4px; // add space between _highlightResult.title.value hits
39
+ }
40
+ }
41
+
42
+ div {
43
+ display: flex;
44
+ }
45
+
46
+ .authoring-org-badge {
47
+ line-height: 1.5;
48
+ }
49
+
50
+ .program-type {
51
+ font-size: .9rem;
52
+ margin-bottom: 0px;
53
+ }
54
+
55
+ }
56
+
57
+ .prequery-item {
58
+ margin: 5px 0px;
59
+ color: #000;
60
+ white-space: pre-wrap;
61
+
62
+ &:hover {
63
+ color: white;
64
+ background-color: #000000;
65
+ text-decoration: none;
66
+ }
67
+
68
+ &:hover span {
69
+ color: white;
70
+ }
71
+ }
72
+
73
+ .prequery-image {
74
+ width: 40px;
75
+ height: 40px;
76
+ margin: 10px 10px;
77
+ object-fit: cover;
78
+ border-radius: 0 !important;
79
+ }
80
+
81
+ .suggestion-heading {
82
+ color: #707070 !important
83
+ }
84
+
85
+ .view-all-btn {
86
+ color: #000;
87
+ border-radius: 0px;
88
+
89
+ &:hover {
90
+ color: #000;
91
+ }
92
+ }
93
+
94
+ .suggestions-section {
95
+ color: #707070;
96
+ font-size: .9rem;
97
+ }
@@ -0,0 +1,7 @@
1
+ @import "./CurrentRefinements";
2
+ @import "./FacetList";
3
+ @import "./MobileSearchFilters";
4
+ @import "./SearchPagination";
5
+ @import "./SearchField";
6
+ @import "./SearchBox";
7
+ @import "SearchSuggestions";
package/tests/utils.js ADDED
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { renderWithRouter } from '@edx/frontend-enterprise-utils';
3
+ import { IntlProvider } from '@edx/frontend-platform/i18n';
4
+ import SearchData from '../SearchContext';
5
+ export var renderWithSearchContext = function renderWithSearchContext(children) {
6
+ return renderWithRouter(/*#__PURE__*/React.createElement(IntlProvider, {
7
+ locale: "en"
8
+ }, /*#__PURE__*/React.createElement(SearchData, null, children)));
9
+ };
10
+ export var renderWithSearchContextAndTracking = function renderWithSearchContextAndTracking(children, trackingName) {
11
+ return renderWithRouter(/*#__PURE__*/React.createElement(IntlProvider, {
12
+ locale: "en"
13
+ }, /*#__PURE__*/React.createElement(SearchData, {
14
+ trackingName: trackingName
15
+ }, children)));
16
+ };
17
+ export var renderWithIntlProvider = function renderWithIntlProvider(children) {
18
+ return renderWithRouter(/*#__PURE__*/React.createElement(IntlProvider, {
19
+ locale: "en"
20
+ }, children));
21
+ };
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["React","renderWithRouter","IntlProvider","SearchData","renderWithSearchContext","children","createElement","locale","renderWithSearchContextAndTracking","trackingName","renderWithIntlProvider"],"sources":["../../src/tests/utils.jsx"],"sourcesContent":["import React from 'react';\nimport { renderWithRouter } from '@edx/frontend-enterprise-utils';\nimport { IntlProvider } from '@edx/frontend-platform/i18n';\n\nimport SearchData from '../SearchContext';\n\nexport const renderWithSearchContext = (children) => renderWithRouter(\n <IntlProvider locale=\"en\">\n <SearchData>\n {children}\n </SearchData>\n </IntlProvider>,\n);\n\nexport const renderWithSearchContextAndTracking = (children, trackingName) => renderWithRouter(\n <IntlProvider locale=\"en\">\n <SearchData trackingName={trackingName}>\n {children}\n </SearchData>\n </IntlProvider>,\n);\n\nexport const renderWithIntlProvider = (children) => renderWithRouter(\n <IntlProvider locale=\"en\">\n {children}\n </IntlProvider>,\n);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,YAAY,QAAQ,6BAA6B;AAE1D,OAAOC,UAAU,MAAM,kBAAkB;AAEzC,OAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAIC,QAAQ;EAAA,OAAKJ,gBAAgB,cACnED,KAAA,CAAAM,aAAA,CAACJ,YAAY;IAACK,MAAM,EAAC;EAAI,gBACvBP,KAAA,CAAAM,aAAA,CAACH,UAAU,QACRE,QACS,CACA,CAChB,CAAC;AAAA;AAED,OAAO,IAAMG,kCAAkC,GAAG,SAArCA,kCAAkCA,CAAIH,QAAQ,EAAEI,YAAY;EAAA,OAAKR,gBAAgB,cAC5FD,KAAA,CAAAM,aAAA,CAACJ,YAAY;IAACK,MAAM,EAAC;EAAI,gBACvBP,KAAA,CAAAM,aAAA,CAACH,UAAU;IAACM,YAAY,EAAEA;EAAa,GACpCJ,QACS,CACA,CAChB,CAAC;AAAA;AAED,OAAO,IAAMK,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIL,QAAQ;EAAA,OAAKJ,gBAAgB,cAClED,KAAA,CAAAM,aAAA,CAACJ,YAAY;IAACK,MAAM,EAAC;EAAI,GACtBF,QACW,CAChB,CAAC;AAAA","ignoreList":[]}
package/utils.js ADDED
@@ -0,0 +1,159 @@
1
+ import { defineMessages } from '@edx/frontend-platform/i18n';
2
+ import { features } from './config';
3
+ var messages = defineMessages({
4
+ skillsTitle: {
5
+ id: 'search.facetFilters.skills.title',
6
+ defaultMessage: 'Skills',
7
+ description: 'Title for the skills facet filter'
8
+ },
9
+ skillsTypeaheadPlaceholder: {
10
+ id: 'search.facetFilters.skills.typeahead.placeholder',
11
+ defaultMessage: 'Find a skill...',
12
+ description: 'Placeholder for the skills typeahead input'
13
+ },
14
+ skillsTypeaheadAriaLabel: {
15
+ id: 'search.facetFilters.skills.typeahead.aria.label',
16
+ defaultMessage: 'Type to find a skill',
17
+ description: 'Aria label for the skills typeahead input'
18
+ },
19
+ subjectsTitle: {
20
+ id: 'search.facetFilters.subjects.title',
21
+ defaultMessage: 'Subject',
22
+ description: 'Title for the subjects facet filter'
23
+ },
24
+ subjectsTypeaheadPlaceholder: {
25
+ id: 'search.facetFilters.subjects.typeahead.placeholder',
26
+ defaultMessage: 'Find a subject...',
27
+ description: 'Placeholder for the subjects typeahead input'
28
+ },
29
+ subjectsTypeaheadAriaLabel: {
30
+ id: 'search.facetFilters.subjects.typeahead.aria.label',
31
+ defaultMessage: 'Type to find a subject',
32
+ description: 'Aria label for the subjects typeahead input'
33
+ },
34
+ partnersTitle: {
35
+ id: 'search.facetFilters.partners.title',
36
+ defaultMessage: 'Partner',
37
+ description: 'Title for the partners facet filter'
38
+ },
39
+ partnersTypeaheadPlaceholder: {
40
+ id: 'search.facetFilters.partners.typeahead.placeholder',
41
+ defaultMessage: 'Find a partner...',
42
+ description: 'Placeholder for the partners typeahead input'
43
+ },
44
+ partnersTypeaheadAriaLabel: {
45
+ id: 'search.facetFilters.partners.typeahead.aria.label',
46
+ defaultMessage: 'Type to find a partner',
47
+ description: 'Aria label for the partners typeahead input'
48
+ },
49
+ programsTitle: {
50
+ id: 'search.facetFilters.programs.title',
51
+ defaultMessage: 'Program',
52
+ description: 'Title for the programs facet filter'
53
+ },
54
+ programsTypeaheadPlaceholder: {
55
+ id: 'search.facetFilters.programs.typeahead.placeholder',
56
+ defaultMessage: 'Find a program...',
57
+ description: 'Placeholder for the programs typeahead input'
58
+ },
59
+ programsTypeaheadAriaLabel: {
60
+ id: 'search.facetFilters.programs.typeahead.aria.label',
61
+ defaultMessage: 'Type to find a program',
62
+ description: 'Aria label for the programs typeahead input'
63
+ },
64
+ levelTitle: {
65
+ id: 'search.facetFilters.level.title',
66
+ defaultMessage: 'Level',
67
+ description: 'Title for the level facet filter'
68
+ },
69
+ availabilityTitle: {
70
+ id: 'search.facetFilters.availability.title',
71
+ defaultMessage: 'Availability',
72
+ description: 'Title for the availability facet filter'
73
+ },
74
+ languageTitle: {
75
+ id: 'search.facetFilters.language.title',
76
+ defaultMessage: 'Language',
77
+ description: 'Title for the language facet filter'
78
+ },
79
+ learningTypeTitle: {
80
+ id: 'search.facetFilters.learningType.title',
81
+ defaultMessage: 'Learning Type',
82
+ description: 'Title for the learning type facet filter'
83
+ },
84
+ subtitleTitle: {
85
+ id: 'search.facetFilters.subtitle.title',
86
+ defaultMessage: 'Subtitle',
87
+ description: 'Title for the subtitle facet filter'
88
+ }
89
+ });
90
+
91
+ // eslint-disable-next-line import/prefer-default-export
92
+ export function getSearchFacetFilters(intl) {
93
+ var searchFacetFilters = [{
94
+ attribute: 'skill_names',
95
+ title: intl.formatMessage(messages.skillsTitle),
96
+ typeaheadOptions: {
97
+ placeholder: intl.formatMessage(messages.skillsTypeaheadPlaceholder),
98
+ ariaLabel: intl.formatMessage(messages.skillsTypeaheadAriaLabel),
99
+ minLength: 3
100
+ }
101
+ }, {
102
+ attribute: 'subjects',
103
+ title: intl.formatMessage(messages.subjectsTitle),
104
+ typeaheadOptions: {
105
+ placeholder: intl.formatMessage(messages.subjectsTypeaheadPlaceholder),
106
+ ariaLabel: intl.formatMessage(messages.subjectsTypeaheadAriaLabel),
107
+ minLength: 3
108
+ }
109
+ }, {
110
+ attribute: 'partners.name',
111
+ title: intl.formatMessage(messages.partnersTitle),
112
+ isSortedAlphabetical: true,
113
+ typeaheadOptions: {
114
+ placeholder: intl.formatMessage(messages.partnersTypeaheadPlaceholder),
115
+ ariaLabel: intl.formatMessage(messages.partnersTypeaheadAriaLabel),
116
+ minLength: 3
117
+ }
118
+ }, {
119
+ attribute: features.PROGRAM_TITLES_FACET ? 'program_titles' : 'programs',
120
+ title: intl.formatMessage(messages.programsTitle),
121
+ isSortedAlphabetical: true,
122
+ typeaheadOptions: {
123
+ placeholder: intl.formatMessage(messages.programsTypeaheadPlaceholder),
124
+ ariaLabel: intl.formatMessage(messages.programsTypeaheadAriaLabel),
125
+ minLength: 3
126
+ }
127
+ }, {
128
+ attribute: 'level_type',
129
+ title: intl.formatMessage(messages.levelTitle)
130
+ }, {
131
+ attribute: 'availability',
132
+ title: intl.formatMessage(messages.availabilityTitle)
133
+ }];
134
+ if (features.LANGUAGE_FACET) {
135
+ searchFacetFilters.push({
136
+ attribute: 'language',
137
+ title: intl.formatMessage(messages.languageTitle),
138
+ isSortedAlphabetical: true
139
+ });
140
+ }
141
+ if (features.LEARNING_TYPE_FACET) {
142
+ searchFacetFilters.push({
143
+ attribute: 'content_type',
144
+ title: intl.formatMessage(messages.learningTypeTitle),
145
+ // algolia won't filter if not passed through connectRefinementsList,
146
+ // if we add without hiding, there will be a new facet created with courses and programs dropdown items only.
147
+ noDisplay: true
148
+ });
149
+ }
150
+ if (features.SUBTITLE_FACET) {
151
+ searchFacetFilters.push({
152
+ attribute: 'transcript_languages',
153
+ title: intl.formatMessage(messages.subtitleTitle),
154
+ isSortedAlphabetical: true
155
+ });
156
+ }
157
+ return searchFacetFilters;
158
+ }
159
+ //# sourceMappingURL=utils.js.map
package/utils.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["defineMessages","features","messages","skillsTitle","id","defaultMessage","description","skillsTypeaheadPlaceholder","skillsTypeaheadAriaLabel","subjectsTitle","subjectsTypeaheadPlaceholder","subjectsTypeaheadAriaLabel","partnersTitle","partnersTypeaheadPlaceholder","partnersTypeaheadAriaLabel","programsTitle","programsTypeaheadPlaceholder","programsTypeaheadAriaLabel","levelTitle","availabilityTitle","languageTitle","learningTypeTitle","subtitleTitle","getSearchFacetFilters","intl","searchFacetFilters","attribute","title","formatMessage","typeaheadOptions","placeholder","ariaLabel","minLength","isSortedAlphabetical","PROGRAM_TITLES_FACET","LANGUAGE_FACET","push","LEARNING_TYPE_FACET","noDisplay","SUBTITLE_FACET"],"sources":["../src/utils.js"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\nimport { features } from './config';\n\nconst messages = defineMessages({\n skillsTitle: {\n id: 'search.facetFilters.skills.title',\n defaultMessage: 'Skills',\n description: 'Title for the skills facet filter',\n },\n skillsTypeaheadPlaceholder: {\n id: 'search.facetFilters.skills.typeahead.placeholder',\n defaultMessage: 'Find a skill...',\n description: 'Placeholder for the skills typeahead input',\n },\n skillsTypeaheadAriaLabel: {\n id: 'search.facetFilters.skills.typeahead.aria.label',\n defaultMessage: 'Type to find a skill',\n description: 'Aria label for the skills typeahead input',\n },\n subjectsTitle: {\n id: 'search.facetFilters.subjects.title',\n defaultMessage: 'Subject',\n description: 'Title for the subjects facet filter',\n },\n subjectsTypeaheadPlaceholder: {\n id: 'search.facetFilters.subjects.typeahead.placeholder',\n defaultMessage: 'Find a subject...',\n description: 'Placeholder for the subjects typeahead input',\n },\n subjectsTypeaheadAriaLabel: {\n id: 'search.facetFilters.subjects.typeahead.aria.label',\n defaultMessage: 'Type to find a subject',\n description: 'Aria label for the subjects typeahead input',\n },\n partnersTitle: {\n id: 'search.facetFilters.partners.title',\n defaultMessage: 'Partner',\n description: 'Title for the partners facet filter',\n },\n partnersTypeaheadPlaceholder: {\n id: 'search.facetFilters.partners.typeahead.placeholder',\n defaultMessage: 'Find a partner...',\n description: 'Placeholder for the partners typeahead input',\n },\n partnersTypeaheadAriaLabel: {\n id: 'search.facetFilters.partners.typeahead.aria.label',\n defaultMessage: 'Type to find a partner',\n description: 'Aria label for the partners typeahead input',\n },\n programsTitle: {\n id: 'search.facetFilters.programs.title',\n defaultMessage: 'Program',\n description: 'Title for the programs facet filter',\n },\n programsTypeaheadPlaceholder: {\n id: 'search.facetFilters.programs.typeahead.placeholder',\n defaultMessage: 'Find a program...',\n description: 'Placeholder for the programs typeahead input',\n },\n programsTypeaheadAriaLabel: {\n id: 'search.facetFilters.programs.typeahead.aria.label',\n defaultMessage: 'Type to find a program',\n description: 'Aria label for the programs typeahead input',\n },\n levelTitle: {\n id: 'search.facetFilters.level.title',\n defaultMessage: 'Level',\n description: 'Title for the level facet filter',\n },\n availabilityTitle: {\n id: 'search.facetFilters.availability.title',\n defaultMessage: 'Availability',\n description: 'Title for the availability facet filter',\n },\n languageTitle: {\n id: 'search.facetFilters.language.title',\n defaultMessage: 'Language',\n description: 'Title for the language facet filter',\n },\n learningTypeTitle: {\n id: 'search.facetFilters.learningType.title',\n defaultMessage: 'Learning Type',\n description: 'Title for the learning type facet filter',\n },\n subtitleTitle: {\n id: 'search.facetFilters.subtitle.title',\n defaultMessage: 'Subtitle',\n description: 'Title for the subtitle facet filter',\n },\n});\n\n// eslint-disable-next-line import/prefer-default-export\nexport function getSearchFacetFilters(intl) {\n const searchFacetFilters = [\n {\n attribute: 'skill_names',\n title: intl.formatMessage(messages.skillsTitle),\n typeaheadOptions: {\n placeholder: intl.formatMessage(messages.skillsTypeaheadPlaceholder),\n ariaLabel: intl.formatMessage(messages.skillsTypeaheadAriaLabel),\n minLength: 3,\n },\n },\n {\n attribute: 'subjects',\n title: intl.formatMessage(messages.subjectsTitle),\n typeaheadOptions: {\n placeholder: intl.formatMessage(messages.subjectsTypeaheadPlaceholder),\n ariaLabel: intl.formatMessage(messages.subjectsTypeaheadAriaLabel),\n minLength: 3,\n },\n },\n {\n attribute: 'partners.name',\n title: intl.formatMessage(messages.partnersTitle),\n isSortedAlphabetical: true,\n typeaheadOptions: {\n placeholder: intl.formatMessage(messages.partnersTypeaheadPlaceholder),\n ariaLabel: intl.formatMessage(messages.partnersTypeaheadAriaLabel),\n minLength: 3,\n },\n },\n {\n attribute: (features.PROGRAM_TITLES_FACET ? 'program_titles' : 'programs'),\n title: intl.formatMessage(messages.programsTitle),\n isSortedAlphabetical: true,\n typeaheadOptions: {\n placeholder: intl.formatMessage(messages.programsTypeaheadPlaceholder),\n ariaLabel: intl.formatMessage(messages.programsTypeaheadAriaLabel),\n minLength: 3,\n },\n },\n {\n attribute: 'level_type',\n title: intl.formatMessage(messages.levelTitle),\n },\n {\n attribute: 'availability',\n title: intl.formatMessage(messages.availabilityTitle),\n },\n ];\n\n if (features.LANGUAGE_FACET) {\n searchFacetFilters.push({\n attribute: 'language',\n title: intl.formatMessage(messages.languageTitle),\n isSortedAlphabetical: true,\n });\n }\n\n if (features.LEARNING_TYPE_FACET) {\n searchFacetFilters.push({\n attribute: 'content_type',\n title: intl.formatMessage(messages.learningTypeTitle),\n // algolia won't filter if not passed through connectRefinementsList,\n // if we add without hiding, there will be a new facet created with courses and programs dropdown items only.\n noDisplay: true,\n });\n }\n\n if (features.SUBTITLE_FACET) {\n searchFacetFilters.push({\n attribute: 'transcript_languages',\n title: intl.formatMessage(messages.subtitleTitle),\n isSortedAlphabetical: true,\n });\n }\n return searchFacetFilters;\n}\n"],"mappings":"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","ignoreList":[]}