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
22 changes: 9 additions & 13 deletions packages/web/src/app/web-player/WebPlayer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,7 @@ import DesktopRoute from 'components/routes/DesktopRoute'
import MobileRoute from 'components/routes/MobileRoute'
import TrendingGenreSelectionPage from 'components/trending-genre-selection/TrendingGenreSelectionPage'
import { USDCBalanceFetcher } from 'components/usdc-balance-fetcher/USDCBalanceFetcher'
import {
MainContentContext,
MainContentContextProvider,
MAIN_CONTENT_ID
} from 'pages/MainContentContext'
import { MainContentContext, MAIN_CONTENT_ID } from 'pages/MainContentContext'
import { AiAttributedTracksPage } from 'pages/ai-attributed-tracks-page'
import { AudioRewardsPage } from 'pages/audio-rewards-page/AudioRewardsPage'
import { AudioTransactionsPage } from 'pages/audio-transactions-page'
Expand Down Expand Up @@ -475,7 +471,7 @@ class WebPlayer extends Component {
<Notice />
<Navigator />
<div
ref={this.props.mainContentRef}
ref={this.props.setMainContentRef}
id={MAIN_CONTENT_ID}
role='main'
className={cn(styles.mainContentWrapper, {
Expand Down Expand Up @@ -1058,13 +1054,13 @@ const RouterWebPlayer = withRouter(

const MainContentRouterWebPlayer = () => {
return (
<MainContentContextProvider>
<MainContentContext.Consumer>
{({ mainContentRef }) => (
<RouterWebPlayer mainContentRef={mainContentRef} />
)}
</MainContentContext.Consumer>
</MainContentContextProvider>
<MainContentContext.Consumer>
{({ ref, setRef }) => {
return (
<RouterWebPlayer setMainContentRef={setRef} mainContentRef={ref} />
)
}}
</MainContentContext.Consumer>
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { RefObject, useContext } from 'react'
import { RefObject } from 'react'

import { ID, User } from '@audius/common/models'
import { cacheUsersSelectors } from '@audius/common/store'
import { Popup } from '@audius/harmony'
import { useSelector } from 'react-redux'

import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { AppState } from 'store/types'
import zIndex from 'utils/zIndex'

Expand All @@ -22,7 +22,7 @@ type Props = {

export const ArtistRecommendationsPopup = (props: Props) => {
const { anchorRef, artistId, isVisible, onClose } = props
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()

// Get the artist
const user = useSelector<AppState, User | null>((state) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ import Toast from 'components/toast/Toast'
import { ToastContext } from 'components/toast/ToastContext'
import { ComponentPlacement, MountPlacement } from 'components/types'
import UserBadges from 'components/user-badges/UserBadges'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { copyToClipboard, getCopyableLink } from 'utils/clipboardUtil'
import {
BASE_GA_URL,
Expand Down Expand Up @@ -560,7 +560,7 @@ const CollectiblesPage = (props: CollectiblesPageProps) => {
onClick: handleEditClick
})
}
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()

return (
<div
Expand Down
6 changes: 2 additions & 4 deletions packages/web/src/components/header/desktop/HeaderGutter.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import { useContext } from 'react'

import cn from 'classnames'

import { usePortal } from 'hooks/usePortal'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'

import styles from './HeaderGutter.module.css'

Expand All @@ -27,7 +25,7 @@ export const HeaderGutter = ({
scrollBarWidth,
className
}: HeaderGutterProps) => {
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()
// Portal to the main content parent, which is the app (not body, to account for banners)
const Portal = usePortal({
container: mainContentRef.current?.parentElement ?? undefined
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState, useCallback, useRef, useContext } from 'react'
import { useState, useCallback, useRef } from 'react'

import { RandomImage } from '@audius/common/services'
import { accountSelectors } from '@audius/common/store'
Expand All @@ -11,7 +11,7 @@ import { useWindowSize } from 'react-use'

import { Dropzone } from 'components/upload/Dropzone'
import InvalidFileType from 'components/upload/InvalidFileType'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import zIndex from 'utils/zIndex'

import styles from './ImageSelectionPopup.module.css'
Expand Down Expand Up @@ -228,7 +228,7 @@ const ImageSelectionPopup = ({
onSelect,
source
}) => {
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()
const [page, setPage] = useState(messages.uploadYourOwn)
const windowSize = useWindowSize()
const { collectibles, collectibleList, solanaCollectibleList } =
Expand Down
7 changes: 3 additions & 4 deletions packages/web/src/components/menu/Menu.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { forwardRef, useContext } from 'react'
import { forwardRef } from 'react'

import { PopupMenu, PopupMenuItem, PopupMenuProps } from '@audius/harmony'

import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'

import CollectionMenu, {
OwnProps as CollectionMenuProps
Expand All @@ -24,8 +24,7 @@ export type MenuProps = {

const Menu = forwardRef<HTMLDivElement, MenuProps>((props, ref) => {
const { menu, onClose, zIndex, children, ...other } = props

const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()

const renderMenu = (items: PopupMenuItem[]) => (
<PopupMenu
Expand Down
7 changes: 5 additions & 2 deletions packages/web/src/components/track/ViewerActionButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ type EntityDetails = {
}

const useTrackEntityDetails = (id: ID): EntityDetails => {
const { data: track } = useGetTrackById({ id })
const { data: track } = useGetTrackById({ id }, { disabled: id === -1 })

const {
stream_conditions: streamConditions,
Expand All @@ -67,7 +67,10 @@ const useTrackEntityDetails = (id: ID): EntityDetails => {
}

const useCollectionEntityDetails = (id: ID): EntityDetails => {
const { data: collection } = useGetPlaylistById({ playlistId: id })
const { data: collection } = useGetPlaylistById(
{ playlistId: id },
{ disabled: id === -1 }
)

const {
stream_conditions: streamConditions,
Expand Down
25 changes: 18 additions & 7 deletions packages/web/src/pages/MainContentContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,39 @@ import {
createContext,
memo,
useRef,
MutableRefObject,
useContext
useContext,
useState,
MutableRefObject
} from 'react'

export const MAIN_CONTENT_ID = 'mainContent'

export const MainContentContext = createContext({
mainContentRef: {} as MutableRefObject<HTMLDivElement | undefined>
setRef: (() => {}) as (node: HTMLDivElement) => void,
ref: {} as MutableRefObject<HTMLDivElement | undefined>,
ready: false
})

export const useMainContentRef = () => {
const { mainContentRef } = useContext(MainContentContext)
return mainContentRef
const { ref } = useContext(MainContentContext)
return ref
}

export const MainContentContextProvider = memo(
(props: { children: JSX.Element }) => {
const mainContentRef = useRef<HTMLDivElement>()
const ref = useRef<HTMLDivElement>()
const [ready, setReady] = useState(false)
return (
<MainContentContext.Provider
value={{
mainContentRef
setRef: (node: HTMLDivElement) => {
if (node && !ref.current) {
ref.current = node
setReady(true)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good stuff! Could maybe do the setstate in the useMainContentRef?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interesting! how would that work? the hook might not get called again to set that state?

}
},
ref,
ready
}}
>
{props.children}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
import {
useCallback,
useEffect,
useState,
useContext,
useLayoutEffect
} from 'react'
import { useCallback, useEffect, useState, useLayoutEffect } from 'react'

import { statusIsNotFinalized } from '@audius/common/models'
import {
Expand All @@ -23,7 +17,7 @@ import { AudioTransactionsTable } from 'components/audio-transactions-table'
import Header from 'components/header/desktop/Header'
import Page from 'components/page/Page'
import EmptyTable from 'components/tracks-table/EmptyTable'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { useSelector } from 'utils/reducer'

import styles from './AudioTransactionsPage.module.css'
Expand Down Expand Up @@ -80,7 +74,7 @@ export const AudioTransactionsPage = () => {
useState<full.GetAudioTransactionHistorySortDirectionEnum>(
full.GetAudioTransactionHistorySortDirectionEnum.Desc
)
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()
const dispatch = useDispatch()
const setVisibility = useSetVisibility()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useContext, useState } from 'react'
import { useCallback, useState } from 'react'

import { useGetPurchases, useGetPurchasesCount, Id } from '@audius/common/api'
import { useAllPaginatedQuery } from '@audius/common/audius-query'
Expand All @@ -18,7 +18,7 @@ import { useDispatch } from 'react-redux'

import { useErrorPageOnFailedStatus } from 'hooks/useErrorPageOnFailedStatus'
import { useIsMobile } from 'hooks/useIsMobile'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { audiusSdk } from 'services/audius-sdk'
import { formatToday } from 'utils/dateUtils'
import { useSelector } from 'utils/reducer'
Expand Down Expand Up @@ -181,7 +181,7 @@ export const PurchasesTab = ({
onClickRow,
fetchMore
}: Omit<ReturnType<typeof usePurchases>, 'downloadCSV'>) => {
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()
const isMobile = useIsMobile()

const columns = isMobile
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useContext, useState } from 'react'
import { useCallback, useState } from 'react'

import { useGetSales, useGetSalesCount, Id } from '@audius/common/api'
import { useAllPaginatedQuery } from '@audius/common/audius-query'
Expand All @@ -18,7 +18,7 @@ import { useDispatch } from 'react-redux'

import { useErrorPageOnFailedStatus } from 'hooks/useErrorPageOnFailedStatus'
import { useIsMobile } from 'hooks/useIsMobile'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { audiusSdk } from 'services/audius-sdk'
import { formatToday } from 'utils/dateUtils'
import { useSelector } from 'utils/reducer'
Expand Down Expand Up @@ -174,7 +174,7 @@ export const SalesTab = ({
isLoading
}: Omit<ReturnType<typeof useSales>, 'downloadCSV'>) => {
const isMobile = useIsMobile()
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()

const columns = isMobile
? (['contentName', 'date', 'value'] as SalesTableColumn[])
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useContext, useEffect, useState } from 'react'
import { useCallback, useEffect, useState } from 'react'

import {
Id,
Expand Down Expand Up @@ -35,7 +35,7 @@ import { ThunkDispatch } from 'redux-thunk'

import { useErrorPageOnFailedStatus } from 'hooks/useErrorPageOnFailedStatus'
import { useIsMobile } from 'hooks/useIsMobile'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'
import { make, track } from 'services/analytics'
import { audiusSdk } from 'services/audius-sdk'
import { formatToday } from 'utils/dateUtils'
Expand Down Expand Up @@ -308,7 +308,7 @@ export const WithdrawalsTab = ({
isLoading
}: Omit<ReturnType<typeof useWithdrawals>, 'downloadCSV'>) => {
const isMobile = useIsMobile()
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()

const columns = isMobile
? (['date', 'amount'] as WithdrawalsTableColumn[])
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { useContext } from 'react'

import { Kind, Status, ID, UID, Lineup, User } from '@audius/common/models'
import {
savedPageSelectors,
Expand Down Expand Up @@ -28,7 +26,7 @@ import { dateSorter } from 'components/table'
import { TracksTable, TracksTableColumn } from 'components/tracks-table'
import EmptyTable from 'components/tracks-table/EmptyTable'
import useTabs from 'hooks/useTabs/useTabs'
import { MainContentContext } from 'pages/MainContentContext'
import { useMainContentRef } from 'pages/MainContentContext'

import { emptyStateMessages } from '../emptyStateMessages'

Expand Down Expand Up @@ -120,7 +118,7 @@ const SavedPage = ({
onClickRepost,
onSortTracks
}: SavedPageProps) => {
const { mainContentRef } = useContext(MainContentContext)
const mainContentRef = useMainContentRef()
const initFetch = useSelector(getInitialFetchStatus)

const emptyTracksHeader = useSelector((state: CommonState) => {
Expand Down