fix(mixpanel): simplify mixpanel logic

This commit is contained in:
oguzhankoral
2025-10-09 01:05:09 +03:00
parent aba19fa92a
commit b42d67b2e0
4 changed files with 30 additions and 67 deletions
+11 -13
View File
@@ -60,7 +60,7 @@ import { useAddByUrl } from '~/lib/core/composables/addByUrl'
import { getSlugFromHostAppNameAndVersion } from '~/lib/common/helpers/hostAppSlug'
import type { CardSetting } from '~/lib/models/card/setting'
const { trackEvent, trackSettingsChange } = useMixpanel()
const { trackEvent } = useMixpanel()
const showReceiveDialog = defineModel<boolean>('open', { default: false })
@@ -86,7 +86,6 @@ const selectedWorkspace = ref<WorkspaceListWorkspaceItemFragment>()
const selectedProject = ref<ProjectListProjectItemFragment>()
const selectedModel = ref<ModelListModelItemFragment>()
const receieveSettings = ref<CardSetting[] | undefined>(undefined)
const settingsWereChanged = ref(false)
const { tryParseUrl, urlParsedData, urlParseError } = useAddByUrl()
const updateSearchText = (text: string | undefined) => {
@@ -140,6 +139,16 @@ const handleUpdateSettings = (settings: CardSetting[]) => {
settingsWereChanged.value = true
}
watch(receieveSettings, (newSettings) => {
const settingProperties = Object.fromEntries(
newSettings?.map((setting) => [setting.id, setting.value]) ?? []
)
void trackEvent('DUI3 Action', {
name: 'Load Settings Changed',
...settingProperties
})
})
// accountId, serverUrl, ModelListModelItemFragment, VersionListItemFragment
const selectVersionAndAddModel = async (
version: VersionListItemFragment,
@@ -151,17 +160,6 @@ const selectVersionAndAddModel = async (
hasSelectedLatestVersion: version.id === latestVersion.id
})
// track settings only if user changed them on receive
if (settingsWereChanged.value && receieveSettings.value) {
trackSettingsChange(
'Load Settings Changed',
receieveSettings.value,
hostAppStore.receiveSettings || [],
selectedAccountId.value,
true
)
}
const existingModel = hostAppStore.models.find(
(m) =>
m.modelId === selectedModel.value?.id &&
+7 -5
View File
@@ -27,7 +27,7 @@ import { useMixpanel } from '~/lib/core/composables/mixpanel'
import { useHostAppStore } from '~/store/hostApp'
import type { CardSetting } from '~/lib/models/card/setting'
const { trackSettingsChange } = useMixpanel()
const { trackEvent } = useMixpanel()
const props = defineProps<{
settings?: CardSetting[]
@@ -48,11 +48,13 @@ const updateSettings = (settings: CardSetting[]) => {
}
const saveSettings = async () => {
trackSettingsChange(
'Model Card Settings Updated',
newSettings,
store.sendSettings || []
const settingProperties = Object.fromEntries(
newSettings?.map((setting) => [setting.id, setting.value]) ?? []
)
void trackEvent('DUI3 Action', {
name: 'Load Settings Changed',
...settingProperties
})
await store.patchModel(props.modelCardId, {
settings: newSettings,
+11 -13
View File
@@ -62,7 +62,7 @@ import { useMixpanel } from '~/lib/core/composables/mixpanel'
import type { CardSetting } from '~/lib/models/card/setting'
import { useAddByUrl } from '~/lib/core/composables/addByUrl'
const { trackEvent, trackSettingsChange } = useMixpanel()
const { trackEvent } = useMixpanel()
const showSendDialog = defineModel<boolean>('open', { default: false })
@@ -77,7 +77,6 @@ const selectedProject = ref<ProjectListProjectItemFragment>()
const selectedModel = ref<ModelListModelItemFragment>()
const filter = ref<ISendFilter | undefined>(undefined)
const settings = ref<CardSetting[] | undefined>(undefined)
const settingsWereChanged = ref(false)
const { tryParseUrl, urlParsedData, urlParseError } = useAddByUrl()
const updateSearchText = (text: string | undefined) => {
@@ -98,6 +97,16 @@ watch(showSendDialog, (newVal) => {
}
})
watch(settings, (newSettings) => {
const settingProperties = Object.fromEntries(
newSettings?.map((setting) => [setting.id, setting.value]) ?? []
)
void trackEvent('DUI3 Action', {
name: 'Publish Settings Changed',
...settingProperties
})
})
const selectProject = (accountId: string, project: ProjectListProjectItemFragment) => {
step.value++
selectedAccountId.value = accountId
@@ -140,17 +149,6 @@ const addModel = async () => {
filter: filter.value?.typeDiscriminator
})
// track settings only if user changed them
if (settingsWereChanged.value && settings.value) {
trackSettingsChange(
'Publish Settings Changed',
settings.value,
hostAppStore.sendSettings || [],
selectedAccountId.value,
true
)
}
const existingModel = hostAppStore.models.find(
(m) =>
m.modelId === selectedModel.value?.id &&
+1 -36
View File
@@ -1,7 +1,6 @@
import md5 from '~/lib/common/helpers/md5'
import { useHostAppStore } from '~/store/hostApp'
import { useAccountStore } from '~/store/accounts'
import type { CardSetting } from '~/lib/models/card/setting'
interface CustomProperties {
[key: string]: object | string | boolean | number | undefined | null
@@ -189,39 +188,5 @@ export function useMixpanel() {
}
}
function trackSettingsChange(
eventName: string,
settings: CardSetting[],
defaultSettings: CardSetting[],
accountId?: string,
requireChanges: boolean = false
) {
// building dynamic properties
// since this can change based on HostApp
const settingProperties: Record<string, string | boolean | number> = {
name: eventName
}
let hasAnyChange = false
settings.forEach((setting) => {
const defaultSetting = defaultSettings.find((s) => s.id === setting.id)
if (defaultSetting) {
const isDefault = setting.value === defaultSetting.value
if (!isDefault) {
hasAnyChange = true
}
// if user selects default, just use 'default'
settingProperties['setting_' + setting.id] = isDefault
? `${setting.value} (default)`
: setting.value
}
})
// only track if user changed a setting
if (!requireChanges || hasAnyChange) {
void trackEvent('DUI3 Action', settingProperties, accountId)
}
}
return { trackEvent, trackSettingsChange, addConnectorToProfile, identifyProfile }
return { trackEvent, addConnectorToProfile, identifyProfile }
}