From 33b34022bb8baa8fe656954a7c0fe7cfaf69fb0b Mon Sep 17 00:00:00 2001 From: Julien Tant <785518+JulienTant@users.noreply.github.com> Date: Mon, 3 Feb 2025 09:09:18 -0700 Subject: [PATCH] [MM-61848] Add Telemetry to capture Cross-Team Search usage (#30062) Co-authored-by: Mattermost Build --- .../src/components/new_search/new_search.tsx | 22 ++++++++++++++++--- .../src/constants/telemetry.ts | 7 ++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/webapp/channels/src/components/new_search/new_search.tsx b/webapp/channels/src/components/new_search/new_search.tsx index 4d6edd71a3..6562a07472 100644 --- a/webapp/channels/src/components/new_search/new_search.tsx +++ b/webapp/channels/src/components/new_search/new_search.tsx @@ -6,9 +6,12 @@ import {FormattedMessage} from 'react-intl'; import {useSelector, useDispatch} from 'react-redux'; import styled from 'styled-components'; +import {TrackCrossTeamSearchFeature, TrackCrossTeamSearchAllTeamsEvent, TrackCrossTeamSearchCurrentTeamEvent, TrackCrossTeamSearchDifferentTeamEvent} from 'mattermost-redux/constants/telemetry'; import {getCurrentChannelNameForSearchShortcut} from 'mattermost-redux/selectors/entities/channels'; import {getFeatureFlagValue} from 'mattermost-redux/selectors/entities/general'; +import {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams'; +import {trackFeatureEvent} from 'actions/telemetry_actions'; import {updateSearchTerms, showSearchResults, updateSearchType, updateSearchTeam} from 'actions/views/rhs'; import {getSearchButtons} from 'selectors/plugins'; import {getSearchTeam, getSearchTerms, getSearchType} from 'selectors/rhs'; @@ -111,6 +114,7 @@ const NewSearch = (): JSX.Element => { const searchType = useSelector(getSearchType) || ''; const searchTeam = useSelector(getSearchTeam); const pluginSearch = useSelector(getSearchButtons); + const currentTeamId = useSelector(getCurrentTeamId); const crossTeamSearchEnabled = useSelector((state: GlobalState) => getFeatureFlagValue(state, 'ExperimentalCrossTeamSearch')) === 'true'; const dispatch = useDispatch(); @@ -226,6 +230,10 @@ const NewSearch = (): JSX.Element => { dispatch(updateSearchTeam(searchTeam)); if (searchType === '' || searchType === 'messages' || searchType === 'files') { + if (crossTeamSearchEnabled) { + trackCrossTeamSearch(currentTeamId, searchTeam); + } + dispatch(showSearchResults(false)); } else { pluginSearch.forEach((pluginData: any) => { @@ -236,9 +244,17 @@ const NewSearch = (): JSX.Element => { } setFocused(false); setCurrentChannel(''); - }, - [pluginSearch], - ); + }, [pluginSearch, currentTeamId, crossTeamSearchEnabled]); + + const trackCrossTeamSearch = (currentTeamId: string, searchTeamId: string) => { + if (searchTeamId === '') { + trackFeatureEvent(TrackCrossTeamSearchFeature, TrackCrossTeamSearchAllTeamsEvent); + } else if (searchTeamId === currentTeamId) { + trackFeatureEvent(TrackCrossTeamSearchFeature, TrackCrossTeamSearchCurrentTeamEvent); + } else { + trackFeatureEvent(TrackCrossTeamSearchFeature, TrackCrossTeamSearchDifferentTeamEvent); + } + }; const onClose = useCallback((e: React.MouseEvent) => { e.stopPropagation(); diff --git a/webapp/channels/src/packages/mattermost-redux/src/constants/telemetry.ts b/webapp/channels/src/packages/mattermost-redux/src/constants/telemetry.ts index 9bf33409ae..13c67d70d9 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/constants/telemetry.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/constants/telemetry.ts @@ -9,10 +9,14 @@ export const TrackEnterpriseSKU = 'enterprise'; export const TrackGroupsFeature = 'custom_groups'; export const TrackPassiveKeywordsFeature = 'passive_keywords'; export const TrackScheduledPostsFeature = 'scheduled_posts'; +export const TrackCrossTeamSearchFeature = 'cross_team_search'; // Events export const TrackInviteGroupEvent = 'invite_group_to_channel__add_member'; export const TrackPassiveKeywordsEvent = 'update_passive_keywords'; +export const TrackCrossTeamSearchCurrentTeamEvent = 'cross_team_search__current_team'; +export const TrackCrossTeamSearchDifferentTeamEvent = 'cross_team_search__different_team'; +export const TrackCrossTeamSearchAllTeamsEvent = 'cross_team_search__all_teams'; // Categories export const TrackActionCategory = 'action'; @@ -30,4 +34,7 @@ export const eventSKUs: {[event: string]: string[]} = { export const eventCategory: {[event: string]: string} = { [TrackInviteGroupEvent]: TrackActionCategory, [TrackPassiveKeywordsEvent]: TrackActionCategory, + [TrackCrossTeamSearchAllTeamsEvent]: TrackActionCategory, + [TrackCrossTeamSearchCurrentTeamEvent]: TrackActionCategory, + [TrackCrossTeamSearchDifferentTeamEvent]: TrackActionCategory, };