Skip to content

Commit cdca619

Browse files
authored
[CSL-3053] Zero state recommendations a/b support (#129)
* zero state sectiosn a/b * reactify * fix * change feature toggle name * rename func
1 parent 4b7dbc1 commit cdca619

File tree

5 files changed

+45
-9
lines changed

5 files changed

+45
-9
lines changed

src/hooks/useCioAutocomplete.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import usePrevious from './usePrevious';
1414
import {
1515
getItemPosition,
1616
getItemsForActiveSections,
17-
getSearchSuggestionFeatures,
17+
getFeatures,
1818
trackRecommendationView,
1919
toKebabCase,
2020
} from '../utils';
@@ -102,6 +102,8 @@ const useCioAutocomplete = (options: UseCioAutocompleteOptions) => {
102102
advancedParameters
103103
);
104104

105+
const features = useMemo(() => getFeatures(request), [request]);
106+
105107
// Get dropdown items array from active sections (autocomplete + recommendations + custom)
106108
const items = useMemo(
107109
() => getItemsForActiveSections(activeSectionsWithData),
@@ -128,7 +130,7 @@ const useCioAutocomplete = (options: UseCioAutocompleteOptions) => {
128130
query,
129131
sections: activeSectionsWithData,
130132
request,
131-
featureToggles: getSearchSuggestionFeatures(request),
133+
featureToggles: features,
132134
isOpen: isOpen && items?.length > 0,
133135
getMenuProps: () => ({
134136
...getMenuProps(),
@@ -162,7 +164,11 @@ const useCioAutocomplete = (options: UseCioAutocompleteOptions) => {
162164
if (options.onFocus) {
163165
options.onFocus();
164166
}
165-
if (zeroStateActiveSections && openOnFocus !== false) {
167+
if (
168+
zeroStateActiveSections &&
169+
openOnFocus !== false &&
170+
features.featureDisplayZeroStateRecommendations
171+
) {
166172
openMenu();
167173
}
168174
if (query?.length) {

src/hooks/useFetchRecommendationPod.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const useFetchRecommendationPod = (
2323
);
2424
const recommendationsPodResults = {};
2525
const recommendationsPodsData = {};
26-
responses.forEach(({ response }, index) => {
26+
responses.forEach(({ response, request }, index) => {
2727
const { pod, results } = response;
2828
if (pod?.id) {
2929
recommendationsPodResults[pod.id] = results?.map((item: Item) => ({
@@ -32,7 +32,11 @@ const useFetchRecommendationPod = (
3232
section: recommendationPods[index]?.indexSectionName,
3333
podId: pod.id,
3434
}));
35-
recommendationsPodsData[pod.id] = { displayName: pod.display_name, podId: pod.id };
35+
recommendationsPodsData[pod.id] = {
36+
displayName: pod.display_name,
37+
podId: pod.id,
38+
request,
39+
};
3640
}
3741
});
3842

src/hooks/useSections.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
UserDefinedSection,
1010
Section,
1111
} from '../types';
12-
import { getActiveSectionsWithData } from '../utils';
12+
import { getActiveSectionsWithData, getFeatures } from '../utils';
1313
import useDebouncedFetchSection from './useDebouncedFetchSections';
1414
import useFetchRecommendationPod from './useFetchRecommendationPod';
1515
import { isAutocompleteSection, isRecommendationsSection } from '../typeGuards';
@@ -21,12 +21,15 @@ export default function useSections(
2121
zeroStateSections: UserDefinedSection[] | undefined,
2222
advancedParameters?: AdvancedParameters
2323
) {
24-
const zeroStateActiveSections = !query.length && zeroStateSections;
24+
const zeroStateActiveSections = !query.length && zeroStateSections?.length;
2525

2626
// Define All Sections
27-
const activeSections = zeroStateActiveSections ? zeroStateSections : sections;
27+
const [activeSections, setActiveSections] = useState<UserDefinedSection[]>(
28+
zeroStateActiveSections ? zeroStateSections : sections
29+
);
2830
const sectionsRefs = useRef<RefObject<HTMLLIElement>[]>(activeSections.map(() => createRef()));
2931
const [activeSectionsWithData, setActiveSectionsWithData] = useState<Section[]>([]);
32+
3033
const autocompleteSections = useMemo(
3134
() =>
3235
activeSections?.filter((config: UserDefinedSection) =>
@@ -56,6 +59,21 @@ export default function useSections(
5659
recommendationsSections
5760
);
5861

62+
// Remove sections if necessary
63+
useEffect(() => {
64+
const features = getFeatures(Object.values(podsData || {})?.[0]?.request);
65+
66+
if (zeroStateActiveSections) {
67+
if (!features.featureDisplayZeroStateRecommendations) {
68+
setActiveSections([]);
69+
} else {
70+
setActiveSections(zeroStateSections);
71+
}
72+
} else {
73+
setActiveSections(sections);
74+
}
75+
}, [zeroStateSections, zeroStateActiveSections, sections, podsData]);
76+
5977
// Merge Recommendation Pods Display Name from Dashboard
6078
const activeSectionConfigs = useMemo(
6179
() =>

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,5 @@ export type Translations = {
187187
export interface PodData {
188188
podId: string;
189189
displayName: string;
190+
request: Partial<AutocompleteRequestType>;
190191
}

src/utils.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ export type GetItemPosition = (args: { item: Item; items: Item[] }) => {
1313
sectionId: string;
1414
};
1515

16-
export function getSearchSuggestionFeatures(request: Partial<AutocompleteRequestType>) {
16+
export function getFeatures(request: Partial<AutocompleteRequestType>) {
1717
let featureDisplaySearchSuggestionImages = false;
1818
let featureDisplaySearchSuggestionResultCounts = false;
19+
let featureDisplayZeroStateRecommendations = true;
20+
1921
if (request?.features?.custom_autosuggest_ui === true) {
2022
switch (request?.feature_variants?.custom_autosuggest_ui) {
2123
case 'custom_autosuggest_ui_result_count':
@@ -28,13 +30,18 @@ export function getSearchSuggestionFeatures(request: Partial<AutocompleteRequest
2830
featureDisplaySearchSuggestionImages = true;
2931
featureDisplaySearchSuggestionResultCounts = true;
3032
break;
33+
case 'custom_autosuggest_ui_disable_recommendations_in_zero_state':
34+
featureDisplayZeroStateRecommendations = false;
35+
break;
3136
default:
3237
break;
3338
}
3439
}
40+
3541
return {
3642
featureDisplaySearchSuggestionImages,
3743
featureDisplaySearchSuggestionResultCounts,
44+
featureDisplayZeroStateRecommendations,
3845
};
3946
}
4047

0 commit comments

Comments
 (0)