From 3ae15d9a42011b8217305248a30983a91805cb13 Mon Sep 17 00:00:00 2001 From: James Kachel Date: Thu, 10 Oct 2024 14:27:01 -0500 Subject: [PATCH] Shuffling around where the search_update event is fired so it happens in more places - Changed HeroSearch to use the SearchField component instead of SearchInput, so we get the event capture stuff - Updated SearchInput to not require setPage (for use on the homepage) - Moved facet events out of the SearchPage and into SearchDisplay so they get called on other pages that use it - Also trigger the facet events on more things - should also now get sorting changes, choosing between categories, and clearing facets --- .../SearchDisplay/SearchDisplay.tsx | 44 +++++++++++++++++-- .../SearchField/SearchField.tsx | 4 +- .../src/pages/HomePage/HeroSearch.tsx | 4 +- .../src/pages/SearchPage/SearchPage.tsx | 8 +--- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/frontends/mit-learn/src/page-components/SearchDisplay/SearchDisplay.tsx b/frontends/mit-learn/src/page-components/SearchDisplay/SearchDisplay.tsx index 1b021312c6..e82eeb00ed 100644 --- a/frontends/mit-learn/src/page-components/SearchDisplay/SearchDisplay.tsx +++ b/frontends/mit-learn/src/page-components/SearchDisplay/SearchDisplay.tsx @@ -51,6 +51,7 @@ import type { TabConfig } from "./ResourceCategoryTabs" import { ResourceCard } from "../ResourceCard/ResourceCard" import { useSearchParams } from "@mitodl/course-search-utils/react-router" import { useUserMe } from "api/hooks/user" +import { usePostHog } from "posthog-js/react" const StyledResourceTabs = styled(ResourceCategoryTabs.TabList)` margin-top: 0 px; @@ -532,11 +533,11 @@ const SearchDisplay: React.FC = ({ constantSearchParams, hasFacets, requestParams, - setParamValue, - clearAllFacets, - toggleParamValue, + setParamValue: actuallySetParamValue, + clearAllFacets: actuallyClearAllFacets, + toggleParamValue: actuallyToggleParamValue, showProfessionalToggle, - setSearchParams, + setSearchParams: actuallySetSearchParams, resultsHeadingEl, filterHeadingEl, }) => { @@ -588,10 +589,45 @@ const SearchDisplay: React.FC = ({ const [mobileDrawerOpen, setMobileDrawerOpen] = React.useState(false) + const posthog = usePostHog() + const { POSTHOG } = APP_SETTINGS + const toggleMobileDrawer = (newOpen: boolean) => () => { setMobileDrawerOpen(newOpen) } + const captureSearchEvent = () => { + if (!(!POSTHOG?.api_key || POSTHOG.api_key.length < 1)) { + posthog.capture("search_update") + } + } + + const setParamValue = (value: string, prev: string | string[]) => { + captureSearchEvent() + actuallySetParamValue(value, prev) + } + + const clearAllFacets = () => { + captureSearchEvent() + actuallyClearAllFacets() + } + + const setSearchParams = ( + value: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams), + ) => { + captureSearchEvent() + actuallySetSearchParams(value) + } + + const toggleParamValue = ( + name: string, + rawValue: string, + checked: boolean, + ) => { + captureSearchEvent() + actuallyToggleParamValue(name, rawValue, checked) + } + const searchModeDropdown = ( void - setPage: (page: number) => void + setPage?: (page: number) => void } const { POSTHOG } = APP_SETTINGS @@ -26,7 +26,7 @@ const SearchField: React.FC = ({ { isEnter } = {}, ) => { onSubmit(event) - setPage(1) + setPage && setPage(1) if (POSTHOG?.api_key) { posthog.capture("search_update", { isEnter: isEnter }) } diff --git a/frontends/mit-learn/src/pages/HomePage/HeroSearch.tsx b/frontends/mit-learn/src/pages/HomePage/HeroSearch.tsx index efe922953b..fc0fa00749 100644 --- a/frontends/mit-learn/src/pages/HomePage/HeroSearch.tsx +++ b/frontends/mit-learn/src/pages/HomePage/HeroSearch.tsx @@ -5,7 +5,6 @@ import { styled, ChipLink, Link, - SearchInput, SearchInputProps, } from "ol-components" import type { ChipLinkProps } from "ol-components" @@ -27,6 +26,7 @@ import { RiVerifiedBadgeLine, } from "@remixicon/react" import _ from "lodash" +import { SearchField } from "@/page-components/SearchField/SearchField" type SearchChip = { label: string @@ -236,7 +236,7 @@ const HeroSearch: React.FC = () => { - { const SearchPage: React.FC = () => { const [searchParams, setSearchParams] = useSearchParams() const facetManifest = useFacetManifest(searchParams.get("resource_category")) - const posthog = usePostHog() - const { POSTHOG } = APP_SETTINGS const setPage = useCallback( (newPage: number) => { @@ -189,11 +186,8 @@ const SearchPage: React.FC = () => { [setSearchParams], ) const onFacetsChange = useCallback(() => { - if (!(!POSTHOG?.api_key || POSTHOG.api_key.length < 1)) { - posthog.capture("search_update") - } setPage(1) - }, [setPage, posthog, POSTHOG]) + }, [setPage]) const { params,