Skip to content

Commit 7dc5c22

Browse files
author
arthosofteq
authored
Merge pull request #2571 from RedisInsight/fe/feature/RI-4938-send_utm_parameters
#RI-4938 send utm parameters to api with /me endpoint
2 parents 05950ad + b9b66ff commit 7dc5c22

File tree

4 files changed

+82
-2
lines changed

4 files changed

+82
-2
lines changed

redisinsight/ui/src/slices/interfaces/cloud.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,13 @@ export enum OAuthSocialSource {
7373
TriggersAndFunctions = 'triggers_and_functions',
7474
'triggers and functions' = 'workbench triggers_and_functions',
7575
}
76+
77+
export enum CloudSsoUtmCampaign {
78+
ListOfDatabases = 'list_of_databases',
79+
Workbench = 'redisinsight_workbench',
80+
BrowserSearch = 'redisinsight_browser_search',
81+
BrowserOverview = 'redisinsight_browser_search',
82+
BrowserFilter = 'browser_filter',
83+
GuidesAndTutorials = 'redisinsight_doc_guide',
84+
Unknown = 'other',
85+
}

redisinsight/ui/src/slices/oauth/cloud.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
} from '../app/notifications'
3333
import { checkConnectToInstanceAction, setConnectedInstanceId } from '../instances/instances'
3434
import { setAppContextInitialState } from '../app/context'
35+
import { getCloudSsoUtmParams } from 'uiSrc/utils/oauth/cloudSsoUtm';
3536

3637
export const initialState: StateAppOAuth = {
3738
loading: false,
@@ -264,11 +265,16 @@ export function createFreeDbSuccess(id: string, history: any) {
264265

265266
// Asynchronous thunk action
266267
export function fetchUserInfo(onSuccessAction?: (isMultiAccount: boolean) => void, onFailAction?: () => void) {
267-
return async (dispatch: AppDispatch) => {
268+
return async (dispatch: AppDispatch, getState: () => RootState) => {
268269
dispatch(getUserInfo())
269270

270271
try {
271-
const { data, status } = await apiService.get<CloudUser>(ApiEndpoints.CLOUD_ME)
272+
const { data, status } = await apiService.get<CloudUser>(
273+
ApiEndpoints.CLOUD_ME,
274+
{
275+
params: getCloudSsoUtmParams(getState().oauth?.cloud?.source),
276+
},
277+
)
272278

273279
if (isStatusSuccessful(status)) {
274280
const isMultiAccount = (data?.accounts?.length ?? 0) > 1
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { CloudSsoUtmCampaign, OAuthSocialSource } from 'uiSrc/slices/interfaces'
2+
3+
// Map oauth social source to utm campaign parameter
4+
export const getCloudSsoUtmCampaign = (source?: string | null): CloudSsoUtmCampaign => {
5+
switch (source) {
6+
case OAuthSocialSource.ListOfDatabases:
7+
return CloudSsoUtmCampaign.ListOfDatabases
8+
case OAuthSocialSource.BrowserSearch:
9+
return CloudSsoUtmCampaign.BrowserSearch
10+
case OAuthSocialSource.RediSearch:
11+
case OAuthSocialSource.RedisJSON:
12+
case OAuthSocialSource.RedisTimeSeries:
13+
case OAuthSocialSource.RedisGraph:
14+
case OAuthSocialSource.RedisBloom:
15+
case OAuthSocialSource['triggers and functions']:
16+
return CloudSsoUtmCampaign.Workbench
17+
case OAuthSocialSource.BrowserContentMenu:
18+
return CloudSsoUtmCampaign.BrowserOverview
19+
case OAuthSocialSource.BrowserFiltering:
20+
return CloudSsoUtmCampaign.BrowserFilter
21+
// todo: not implemented yet
22+
// case OAuthSocialSource.Guides:
23+
// return CloudSsoUtmCampaign.GuidesAndTutorials
24+
default:
25+
return CloudSsoUtmCampaign.Unknown
26+
}
27+
}
28+
29+
// Create search query utm parameters
30+
export const getCloudSsoUtmParams = (source?: string | null): URLSearchParams => new URLSearchParams([
31+
['source', 'redisinsight'],
32+
['medium', 'app'], // todo: distinguish between electron and web?
33+
['campaign', getCloudSsoUtmCampaign(source)],
34+
])
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { getCloudSsoUtmParams } from 'uiSrc/utils/oauth/cloudSsoUtm'
2+
import { CloudSsoUtmCampaign, OAuthSocialSource } from 'uiSrc/slices/interfaces'
3+
4+
const getCloudSsoUtmCampaignTestCases = [
5+
[OAuthSocialSource.ListOfDatabases, CloudSsoUtmCampaign.ListOfDatabases],
6+
[OAuthSocialSource.BrowserSearch, CloudSsoUtmCampaign.BrowserSearch],
7+
[OAuthSocialSource.RediSearch, CloudSsoUtmCampaign.Workbench],
8+
[OAuthSocialSource.RedisJSON, CloudSsoUtmCampaign.Workbench],
9+
[OAuthSocialSource.RedisTimeSeries, CloudSsoUtmCampaign.Workbench],
10+
[OAuthSocialSource.RedisGraph, CloudSsoUtmCampaign.Workbench],
11+
[OAuthSocialSource.RedisBloom, CloudSsoUtmCampaign.Workbench],
12+
[OAuthSocialSource['triggers and functions'], CloudSsoUtmCampaign.Workbench],
13+
[OAuthSocialSource.BrowserContentMenu, CloudSsoUtmCampaign.BrowserOverview],
14+
[OAuthSocialSource.BrowserFiltering, CloudSsoUtmCampaign.BrowserFilter],
15+
[null, CloudSsoUtmCampaign.Unknown],
16+
[undefined, CloudSsoUtmCampaign.Unknown],
17+
]
18+
19+
describe('getCloudSsoUtmCampaign', () => {
20+
test.each(getCloudSsoUtmCampaignTestCases)(
21+
'%j',
22+
(input, expected) => {
23+
expect(getCloudSsoUtmParams(input)).toEqual(new URLSearchParams([
24+
['source', 'redisinsight'],
25+
['medium', 'app'],
26+
['campaign', expected],
27+
]))
28+
}
29+
)
30+
})

0 commit comments

Comments
 (0)