From d4625c92443d088c2319f81ea516c2613b8d3943 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Tue, 2 Jan 2024 09:21:11 -0700 Subject: [PATCH] fix: remove pathways from customers search (#366) --- .../src/LearningTypeRadioFacet.jsx | 15 ++++++++++-- packages/catalog-search/src/SearchFilters.jsx | 6 +++-- packages/catalog-search/src/SearchHeader.jsx | 10 ++++---- .../src/tests/LearningTypeRadioFacet.test.jsx | 24 ++++++++++++++----- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/packages/catalog-search/src/LearningTypeRadioFacet.jsx b/packages/catalog-search/src/LearningTypeRadioFacet.jsx index e2a86264..4551e25a 100644 --- a/packages/catalog-search/src/LearningTypeRadioFacet.jsx +++ b/packages/catalog-search/src/LearningTypeRadioFacet.jsx @@ -1,4 +1,5 @@ import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; import classNames from 'classnames'; import { Dropdown, Input } from '@edx/paragon'; import { SearchContext } from './SearchContext'; @@ -8,7 +9,7 @@ import { import { features } from './config'; import { LEARNING_TYPE_COURSE, LEARNING_TYPE_PROGRAM, LEARNING_TYPE_PATHWAY } from './data/constants'; -const LearningTypeRadioFacet = () => { +const LearningTypeRadioFacet = ({ enablePathways }) => { const { refinements, dispatch } = useContext(SearchContext); // only bold the dropdown title if the learning type is Course or Program const typeCourseSelected = refinements.content_type && refinements.content_type.includes(LEARNING_TYPE_COURSE); @@ -72,7 +73,9 @@ const LearningTypeRadioFacet = () => { { - features.ENABlE_PATHWAYS && ( + // the first check is a global feature flag and the second is a check to see if + // the individual customer itself has enabled pathways + features.ENABlE_PATHWAYS && enablePathways && ( { ); }; +LearningTypeRadioFacet.defaultProps = { + enablePathways: null, +}; + +LearningTypeRadioFacet.propTypes = { + enablePathways: PropTypes.bool, +}; + export default LearningTypeRadioFacet; diff --git a/packages/catalog-search/src/SearchFilters.jsx b/packages/catalog-search/src/SearchFilters.jsx index ff2bd6b1..0bfb97c2 100644 --- a/packages/catalog-search/src/SearchFilters.jsx +++ b/packages/catalog-search/src/SearchFilters.jsx @@ -17,7 +17,7 @@ import LearningTypeRadioFacet from './LearningTypeRadioFacet'; export const FREE_ALL_TITLE = 'Free / All'; -const SearchFilters = ({ variant }) => { +const SearchFilters = ({ variant, enablePathways }) => { const { refinements, searchFacetFilters } = useContext(SearchContext); const searchFacets = useMemo( @@ -48,7 +48,7 @@ const SearchFilters = ({ variant }) => { return ( <> {filtersFromRefinements} - {features.LEARNING_TYPE_FACET && ()} + {features.LEARNING_TYPE_FACET && ()} ); }, @@ -76,10 +76,12 @@ const SearchFilters = ({ variant }) => { SearchFilters.defaultProps = { variant: STYLE_VARIANTS.inverse, + enablePathways: null, }; SearchFilters.propTypes = { variant: PropTypes.oneOf([STYLE_VARIANTS.default, STYLE_VARIANTS.inverse]), + enablePathways: PropTypes.bool, }; export default SearchFilters; diff --git a/packages/catalog-search/src/SearchHeader.jsx b/packages/catalog-search/src/SearchHeader.jsx index 5a42dfb1..ebd8bc0b 100644 --- a/packages/catalog-search/src/SearchHeader.jsx +++ b/packages/catalog-search/src/SearchHeader.jsx @@ -21,7 +21,7 @@ const SearchHeader = ({ index, filters, suggestionSubmitOverride, - enterpriseConfig: { slug }, + enterpriseConfig: { slug, enablePathways }, disableSuggestionRedirect, }) => { const { refinements } = useContext(SearchContext); @@ -64,7 +64,7 @@ const SearchHeader = ({ className={classNames('fe__searchbox-col', { 'fe__searchbox-col--default': variant === STYLE_VARIANTS.default })} xs={12} > - + @@ -78,7 +78,7 @@ SearchHeader.defaultProps = { headerTitle: undefined, hideTitle: false, filters: '', - enterpriseConfig: { slug: undefined }, + enterpriseConfig: { slug: undefined, enablePathways: undefined }, suggestionSubmitOverride: undefined, disableSuggestionRedirect: false, index: undefined, @@ -91,7 +91,9 @@ SearchHeader.propTypes = { hideTitle: PropTypes.bool, index: PropTypes.shape({ search: PropTypes.func.isRequired }), filters: PropTypes.string, - enterpriseConfig: PropTypes.shape({ slug: PropTypes.string }), + enterpriseConfig: PropTypes.shape( + { slug: PropTypes.string, enablePathways: PropTypes.bool }, + ), suggestionSubmitOverride: PropTypes.func, disableSuggestionRedirect: PropTypes.bool, }; diff --git a/packages/catalog-search/src/tests/LearningTypeRadioFacet.test.jsx b/packages/catalog-search/src/tests/LearningTypeRadioFacet.test.jsx index f0838add..6da184e4 100644 --- a/packages/catalog-search/src/tests/LearningTypeRadioFacet.test.jsx +++ b/packages/catalog-search/src/tests/LearningTypeRadioFacet.test.jsx @@ -22,13 +22,13 @@ describe('', () => { }); test('LearningTypeRadioFacet is rendered and isnt bold initially', () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); expect(screen.getByText('Learning Type').classList.contains('font-weight-bold')).toBeFalsy(); }); test('LearningTypeRadioFacet displays all the options', async () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); fireEvent.click(screen.getByText('Learning Type')); await waitFor(() => { @@ -39,8 +39,20 @@ describe('', () => { }); }); + test('LearningTypeRadioFacet doesnt display pathways if false', async () => { + renderWithSearchContext(); + expect(screen.getByText('Learning Type')).toBeInTheDocument(); + fireEvent.click(screen.getByText('Learning Type')); + await waitFor(() => { + expect(screen.getByText('Any')).toBeInTheDocument(); + expect(screen.getByText('Courses')).toBeInTheDocument(); + expect(screen.getByText('Programs')).toBeInTheDocument(); + expect(screen.queryByText('Pathways')).not.toBeInTheDocument(); + }); + }); + test('LearningTypeRadioFacet isnt bold when content type Any is selected', async () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); fireEvent.click(screen.getByText('Learning Type')); await waitFor(() => { @@ -50,7 +62,7 @@ describe('', () => { }); test('LearningTypeRadioFacet is bold content type Courses is selected', async () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); fireEvent.click(screen.getByText('Learning Type')); fireEvent.click(screen.getByTestId('learning-type-courses')); @@ -61,7 +73,7 @@ describe('', () => { }); test('LearningTypeRadioFacet is bold content type Courses is selected', async () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); fireEvent.click(screen.getByText('Learning Type')); fireEvent.click(screen.getByTestId('learning-type-programs')); @@ -72,7 +84,7 @@ describe('', () => { }); test('LearningTypeRadioFacet is bold content type Courses is selected', async () => { - renderWithSearchContext(); + renderWithSearchContext(); expect(screen.getByText('Learning Type')).toBeInTheDocument(); fireEvent.click(screen.getByText('Learning Type')); fireEvent.click(screen.getByTestId('learning-type-pathways'));