Add os preference tracking (#20740)
* Set cookie on os switch * Set os based on cookie value * Add os preference schema details * Send os preference on page request * Send os preference on os switch
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
|
import Cookies from 'js-cookie'
|
||||||
import parseUserAgent from './user-agent'
|
import parseUserAgent from './user-agent'
|
||||||
|
import { sendEvent, EventType } from './events'
|
||||||
|
|
||||||
const supportedPlatforms = ['mac', 'windows', 'linux']
|
const supportedPlatforms = ['mac', 'windows', 'linux']
|
||||||
const detectedPlatforms = new Set()
|
const detectedPlatforms = new Set()
|
||||||
|
|
||||||
@@ -35,6 +38,18 @@ export default function displayPlatformSpecificContent() {
|
|||||||
const target = event.target as HTMLElement
|
const target = event.target as HTMLElement
|
||||||
setActiveSwitcherLinks(target.dataset.platform || '')
|
setActiveSwitcherLinks(target.dataset.platform || '')
|
||||||
showPlatformSpecificContent(target.dataset.platform || '')
|
showPlatformSpecificContent(target.dataset.platform || '')
|
||||||
|
|
||||||
|
Cookies.set('osPreferred', target.dataset.platform || '', {
|
||||||
|
sameSite: 'strict',
|
||||||
|
secure: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
// Send event data
|
||||||
|
sendEvent({
|
||||||
|
type: EventType.preference,
|
||||||
|
preference_name: 'os',
|
||||||
|
preference_value: target.dataset.platform,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -108,6 +123,8 @@ function detectPlatforms(el: HTMLElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDefaultPlatform() {
|
function getDefaultPlatform() {
|
||||||
|
if (Cookies.get('osPreferred')) return Cookies.get('osPreferred')
|
||||||
|
|
||||||
const el = document.querySelector('[data-default-platform]') as HTMLElement
|
const el = document.querySelector('[data-default-platform]') as HTMLElement
|
||||||
if (el) return el.dataset.defaultPlatform
|
if (el) return el.dataset.defaultPlatform
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ export function sendEvent({ type, version = '1.0.0', ...props }: SendEventProps)
|
|||||||
// Preference information
|
// Preference information
|
||||||
application_preference: Cookies.get('toolPreferred'),
|
application_preference: Cookies.get('toolPreferred'),
|
||||||
color_mode_preference: getColorModePreference(),
|
color_mode_preference: getColorModePreference(),
|
||||||
|
os_preference: Cookies.get('osPreferred'),
|
||||||
},
|
},
|
||||||
|
|
||||||
...props,
|
...props,
|
||||||
|
|||||||
@@ -107,10 +107,11 @@ const context = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Preference information
|
// Preference information
|
||||||
/* os_preference: {
|
os_preference: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
description: 'The os for examples selected by the user.'
|
enum: ['linux', 'mac', 'windows'],
|
||||||
}, */
|
description: 'The os for examples selected by the user.',
|
||||||
|
},
|
||||||
application_preference: {
|
application_preference: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
enum: ['webui', 'cli', 'desktop', 'curl'],
|
enum: ['webui', 'cli', 'desktop', 'curl'],
|
||||||
@@ -360,13 +361,26 @@ const preferenceSchema = {
|
|||||||
},
|
},
|
||||||
preference_name: {
|
preference_name: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
enum: ['application', 'color_mode'], // os
|
enum: ['application', 'color_mode', 'os'],
|
||||||
description: 'The preference name, such as os, application, or color_mode',
|
description: 'The preference name, such as os, application, or color_mode',
|
||||||
},
|
},
|
||||||
preference_value: {
|
preference_value: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
enum: ['webui', 'cli', 'desktop', 'curl', 'dark', 'light', 'auto', 'auto:dark', 'auto:light'],
|
enum: [
|
||||||
description: 'The application or color_mode selected by the user.',
|
'webui',
|
||||||
|
'cli',
|
||||||
|
'desktop',
|
||||||
|
'curl',
|
||||||
|
'dark',
|
||||||
|
'light',
|
||||||
|
'auto',
|
||||||
|
'auto:dark',
|
||||||
|
'auto:light',
|
||||||
|
'linux',
|
||||||
|
'mac',
|
||||||
|
'windows',
|
||||||
|
],
|
||||||
|
description: 'The application, color_mode, or os selected by the user.',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user