Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'
import { useDispatch } from 'react-redux'

import { useQueryContext } from '~/api/tan-query/utils'
import { useAppContext } from '~/context/appContext'
import { Name } from '~/models/Analytics'
import { ID } from '~/models/Identifiers'
import { accountActions } from '~/store'

Expand All @@ -28,9 +26,6 @@ export const useDeleteCollection = () => {
const queryClient = useQueryClient()
const dispatch = useDispatch()
const { data: currentUserId } = useCurrentUserId()
const {
analytics: { track: trackEvent }
} = useAppContext()

return useMutation({
mutationFn: async ({ collectionId }: DeleteCollectionArgs) => {
Expand All @@ -44,7 +39,7 @@ export const useDeleteCollection = () => {

return { collectionId }
},
onMutate: async ({ collectionId, source }): Promise<MutationContext> => {
onMutate: async ({ collectionId }): Promise<MutationContext> => {
if (!currentUserId) {
throw new Error('User ID is required')
}
Expand All @@ -60,16 +55,6 @@ export const useDeleteCollection = () => {
)
if (!previousCollection) throw new Error('Collection not found')

// Analytics tracking
trackEvent({
eventName: Name.DELETE,
properties: {
kind: previousCollection.is_album ? 'album' : 'playlist',
id: collectionId,
source
}
})

// Optimistic updates - mark as deleted in cache
primeCollectionData({
collections: [
Expand Down
24 changes: 1 addition & 23 deletions packages/common/src/api/tan-query/search/useSearchResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { useCurrentUserId } from '~/api'
import { useQueryContext } from '~/api/tan-query/utils'
import {
ID,
Name,
SearchSource,
UserMetadata,
UserCollectionMetadata,
Expand Down Expand Up @@ -128,7 +127,7 @@ const useSearchQueryProps = <T>(
pageSize,
...filters
}
const { audiusSdk, getFeatureEnabled, analytics } = useQueryContext()
const { audiusSdk, getFeatureEnabled } = useQueryContext()
const queryClient = useQueryClient()

return {
Expand Down Expand Up @@ -182,27 +181,6 @@ const useSearchQueryProps = <T>(
isPurchaseable: filters.isPremium
}

// Fire analytics only for the first page of results
if (pageParam === 0 && !disableAnalytics) {
analytics.track(
analytics.make(
isTagsSearch
? {
eventName: Name.SEARCH_TAG_SEARCH,
tag: query,
source,
...searchParams
}
: {
eventName: Name.SEARCH_SEARCH,
term: query,
source,
...searchParams
}
)
)
}

const { data } = isTagsSearch
? await sdk.search.searchTags(searchParams)
: await sdk.search.search(searchParams)
Expand Down
30 changes: 1 addition & 29 deletions packages/common/src/api/tan-query/tracks/useDeleteTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import { Id } from '@audius/sdk'
import { useMutation, useQueryClient } from '@tanstack/react-query'

import { useQueryContext } from '~/api/tan-query/utils'
import { useAppContext } from '~/context/appContext'
import { Name } from '~/models/Analytics'
import { ID } from '~/models/Identifiers'
import { Track } from '~/models/Track'
import { UserMetadata } from '~/models/User'
Expand All @@ -30,9 +28,6 @@ export const useDeleteTrack = () => {
const queryClient = useQueryClient()
const { data: currentUserId } = useCurrentUserId()
const { data: currentUser } = useUser(currentUserId)
const {
analytics: { track: trackEvent }
} = useAppContext()

return useMutation({
mutationFn: async ({ trackId }: DeleteTrackArgs) => {
Expand All @@ -46,7 +41,7 @@ export const useDeleteTrack = () => {

return { trackId }
},
onMutate: async ({ trackId, source }): Promise<MutationContext> => {
onMutate: async ({ trackId }): Promise<MutationContext> => {
if (!currentUserId || !currentUser) {
throw new Error('User ID is required')
}
Expand Down Expand Up @@ -81,31 +76,8 @@ export const useDeleteTrack = () => {
forceReplace: true
})

trackEvent({
eventName: Name.DELETE,
properties: {
kind: 'track',
id: trackId,
source
}
})

return { previousTrack, previousUser: currentUser }
},
onSuccess: async (_, { trackId }) => {
const track = queryClient.getQueryData(getTrackQueryKey(trackId))

if (track?.stem_of) {
trackEvent({
eventName: Name.STEM_DELETE,
properties: {
id: track.track_id,
parent_track_id: track.stem_of.parent_track_id,
category: track.stem_of.category
}
})
}
},
onError: (error, { trackId }, context) => {
if (!context || !currentUserId || !context.previousTrack) return

Expand Down
39 changes: 0 additions & 39 deletions packages/common/src/api/tan-query/tracks/useFavoriteTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,48 +105,9 @@ export const useFavoriteTrack = () => {
return { previousTrack, previousUser: currentUser }
},
onSuccess: async (_, { trackId }) => {
// Handle co-sign events after successful save
const track = queryClient.getQueryData(getTrackQueryKey(trackId))
if (!track) return

const remixTrack = track.remix_of?.tracks?.[0]
const isCoSign = remixTrack?.user?.user_id === currentUserId
if (isCoSign) {
const parentTrackId = remixTrack?.parent_track_id
const hasAlreadyCoSigned =
remixTrack?.has_remix_author_reposted ||
remixTrack?.has_remix_author_saved

const parentTrack = queryClient.getQueryData(
getTrackQueryKey(parentTrackId)
)

// Dispatch co-sign events
trackEvent({
eventName: Name.REMIX_COSIGN_INDICATOR,
properties: {
id: trackId,
handle: currentUser?.handle,
original_track_id: parentTrack?.track_id,
original_track_title: parentTrack?.title,
action: 'favorited'
}
})

if (!hasAlreadyCoSigned) {
trackEvent({
eventName: Name.REMIX_COSIGN,
properties: {
id: trackId,
handle: currentUser?.handle,
original_track_id: parentTrack?.track_id,
original_track_title: parentTrack?.title,
action: 'favorited'
}
})
}
}

// Dispatch the saveTrackSucceeded action
dispatch(tracksSocialActions.saveTrackSucceeded(trackId))
},
Expand Down
126 changes: 2 additions & 124 deletions packages/common/src/api/tan-query/tracks/useUpdateTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,8 @@ import { useDispatch, useStore } from 'react-redux'
import { trackMetadataForUploadToSdk } from '~/adapters/track'
import { useQueryContext } from '~/api/tan-query/utils'
import { Track, UserTrackMetadata } from '~/models'
import { Name } from '~/models/Analytics'
import { ID } from '~/models/Identifiers'
import {
TrackAccessType,
isContentFollowGated,
isContentTokenGated,
isContentUSDCPurchaseGated
} from '~/models/Track'
import { isContentUSDCPurchaseGated } from '~/models/Track'
import { createUserBankIfNeeded } from '~/services/audius-backend'
import { CommonState } from '~/store/commonStore'
import { stemsUploadSelectors } from '~/store/stems-upload'
Expand All @@ -31,7 +25,6 @@ import { QUERY_KEYS } from '../queryKeys'
import { addPremiumMetadata } from '../upload/usePublishTracks'
import { useCurrentAccountUser } from '../users/account/accountSelectors'
import { useCurrentUserId } from '../users/account/useCurrentUserId'
import { getUserQueryKey } from '../users/useUser'
import { handleStemUpdates } from '../utils/handleStemUpdates'
import { primeTrackData } from '../utils/primeTrackData'

Expand All @@ -52,22 +45,6 @@ export type UpdateTrackParams = {
imageFile?: CrossPlatformFile
}

const getTrackAccess = ({
is_stream_gated,
stream_conditions
}: Partial<Track>): TrackAccessType => {
if (is_stream_gated && stream_conditions) {
if (isContentFollowGated(stream_conditions)) {
return TrackAccessType.FOLLOW_GATED
} else if (isContentTokenGated(stream_conditions)) {
return TrackAccessType.TOKEN_GATED
} else if (isContentUSDCPurchaseGated(stream_conditions)) {
return TrackAccessType.USDC_GATED
}
}
return TrackAccessType.PUBLIC
}

/**
* Edit-track formatting that lived in the legacy `editTrackAsync` saga:
* normalize description, format musical key, coerce bpm, and recompute the
Expand Down Expand Up @@ -201,35 +178,6 @@ export const useUpdateTrack = () => {
dispatch
)

// New-remix analytics — replaces the legacy `trackNewRemixEvent` saga
// helper. Fires when the parent_track_id changes.
const prevParentId =
previousMetadata?.remix_of?.tracks?.[0]?.parent_track_id ?? null
const nextParentId =
metadata.remix_of?.tracks?.[0]?.parent_track_id ?? null
if (nextParentId && prevParentId !== nextParentId) {
const accountUser = userId
? queryClient.getQueryData(getUserQueryKey(userId))
: undefined
const parentTrack = queryClient.getQueryData(
getTrackQueryKey(nextParentId)
)
const parentUser = parentTrack
? queryClient.getQueryData(getUserQueryKey(parentTrack.owner_id))
: undefined
analytics.track(
analytics.make({
eventName: Name.REMIX_NEW_REMIX,
id: trackId,
handle: accountUser?.handle ?? '',
title: metadata.title ?? previousMetadata?.title ?? '',
parent_track_id: nextParentId,
parent_track_title: parentTrack?.title ?? '',
parent_track_user_handle: parentUser?.handle ?? ''
})
)
}

return response
},
onMutate: async ({
Expand Down Expand Up @@ -269,81 +217,11 @@ export const useUpdateTrack = () => {
// Return context with the previous track and metadata
return { previousTrack }
},
onSuccess: (_, params, context?: MutationContext) => {
onSuccess: (_, params) => {
queryClient.invalidateQueries({
queryKey: getTrackQueryKey(params.trackId)
})
dispatch(toast({ content: 'Changes saved!' }))

// Edit-track analytics — replaces the `recordEditTrackAnalytics`
// generator the legacy `editTrackAsync` saga ran on confirmer success.
const prev = context?.previousTrack
if (!prev) return
const next = { ...prev, ...params.metadata } as Track

// Hide-remixes
if (
(prev?.field_visibility?.remixes ?? true) &&
next?.field_visibility?.remixes === false
) {
const accountUser = userId
? queryClient.getQueryData(getUserQueryKey(userId))
: undefined
analytics.track(
analytics.make({
eventName: Name.REMIX_HIDE,
id: next.track_id,
handle: accountUser?.handle ?? ''
})
)
}
// Access changed
const prevAccess = getTrackAccess(prev)
const nextAccess = getTrackAccess(next)
if (prevAccess !== nextAccess) {
analytics.track(
analytics.make({
eventName: Name.TRACK_EDIT_ACCESS_CHANGED,
id: next.track_id,
from: prevAccess,
to: nextAccess
})
)
}
// BPM changed
if (prev.bpm !== next.bpm && next.bpm) {
analytics.track(
analytics.make({
eventName: Name.TRACK_EDIT_BPM_CHANGED,
id: next.track_id,
from: prev.bpm ?? 0,
to: next.bpm
})
)
}
// Musical key changed
if (prev.musical_key !== next.musical_key && next.musical_key) {
analytics.track(
analytics.make({
eventName: Name.TRACK_EDIT_MUSICAL_KEY_CHANGED,
id: next.track_id,
from: prev.musical_key ?? '',
to: next.musical_key
})
)
}
// Comments disabled
if (
prev.comments_disabled !== next.comments_disabled &&
next.comments_disabled
) {
analytics.track(
analytics.make({
eventName: Name.COMMENTS_DISABLE_TRACK_COMMENTS,
trackId: next.track_id
})
)
}
},
onError: (error, { trackId }, context?: MutationContext) => {
// If the mutation fails, roll back track data
Expand Down
Loading
Loading