Skip to content
This repository has been archived by the owner on Oct 4, 2023. It is now read-only.

[C-1269] Fix now-playing drawer and scrubber #2074

Merged
merged 2 commits into from
Oct 5, 2022
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
@@ -1,6 +1,6 @@
import { useCallback, useLayoutEffect } from 'react'

import type { Track } from '@audius/common'
import type { Nullable, Track } from '@audius/common'
import {
removeNullable,
FavoriteSource,
Expand Down Expand Up @@ -60,7 +60,7 @@ const useStyles = makeStyles(({ palette, spacing }) => ({
}))

type ActionsBarProps = {
track: Track
track: Nullable<Track>
}

export const ActionsBar = ({ track }: ActionsBarProps) => {
Expand Down Expand Up @@ -153,7 +153,7 @@ export const ActionsBar = ({ track }: ActionsBarProps) => {
const renderRepostButton = () => {
return (
<RepostButton
iconIndex={track.has_current_user_reposted ? 1 : 0}
iconIndex={track?.has_current_user_reposted ? 1 : 0}
onPress={handleRepost}
style={styles.button}
wrapperStyle={styles.animatedIcon}
Expand All @@ -164,7 +164,7 @@ export const ActionsBar = ({ track }: ActionsBarProps) => {
const renderFavoriteButton = () => {
return (
<FavoriteButton
iconIndex={track.has_current_user_saved ? 1 : 0}
iconIndex={track?.has_current_user_saved ? 1 : 0}
onPress={handleFavorite}
style={styles.button}
wrapperStyle={styles.animatedIcon}
Expand Down
58 changes: 28 additions & 30 deletions packages/mobile/src/components/now-playing-drawer/Artwork.tsx
Original file line number Diff line number Diff line change
@@ -1,52 +1,50 @@
import React from 'react'

import type { CommonState, Track } from '@audius/common'
import type { CommonState, Nullable, Track } from '@audius/common'
import { SquareSizes, averageColorSelectors } from '@audius/common'
import { Dimensions, StyleSheet, View } from 'react-native'
import { Dimensions, View } from 'react-native'
import { Shadow } from 'react-native-shadow-2'
import { useSelector } from 'react-redux'

import { DynamicImage } from 'app/components/core'
import { useThemedStyles } from 'app/hooks/useThemedStyles'
import { useTrackCoverArt } from 'app/hooks/useTrackCoverArt'
import type { ThemeColors } from 'app/utils/theme'
import { makeStyles } from 'app/styles'
const { getDominantColorsByTrack } = averageColorSelectors

const dimensions = Dimensions.get('window')
const spacing = 24

const createStyles = (themeColors: ThemeColors) =>
StyleSheet.create({
root: {
marginLeft: spacing,
marginRight: spacing,
maxHeight: dimensions.width - spacing * 2,
alignSelf: 'center'
},
shadow: {
alignSelf: 'flex-start'
},
image: {
alignSelf: 'center',
borderRadius: 8,
borderColor: themeColors.white,
borderWidth: 2,
overflow: 'hidden',
height: '100%',
width: '100%',
aspectRatio: 1
}
})
const useStyles = makeStyles(({ palette }) => ({
root: {
marginLeft: spacing,
marginRight: spacing,
maxHeight: dimensions.width - spacing * 2,
alignSelf: 'center'
},
shadow: {
alignSelf: 'flex-start'
},
image: {
alignSelf: 'center',
borderRadius: 8,
borderColor: palette.white,
borderWidth: 2,
overflow: 'hidden',
height: '100%',
width: '100%',
aspectRatio: 1
}
}))

type ArtworkProps = {
track: Track
track: Nullable<Track>
}

export const Artwork = ({ track }: ArtworkProps) => {
const styles = useThemedStyles(createStyles)
const styles = useStyles()
const image = useTrackCoverArt({
id: track.track_id,
sizes: track._cover_art_sizes,
id: track?.track_id,
sizes: track?._cover_art_sizes ?? null,
size: SquareSizes.SIZE_1000_BY_1000
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,53 +271,46 @@ const NowPlayingDrawer = (props: NowPlayingDrawerProps) => {
{ paddingTop: staticTopInset.current, paddingBottom: insets.bottom }
]}
>
{track && user && (
<>
<View style={styles.playBarContainer}>
<PlayBar
track={track}
user={user}
onPress={onDrawerOpen}
translationAnim={translationAnim}
/>
</View>
<Logo translationAnim={translationAnim} />
<View style={styles.titleBarContainer}>
<TitleBar onClose={handleDrawerCloseFromSwipe} />
</View>
<Pressable
onPress={handlePressTitle}
style={styles.artworkContainer}
>
<Artwork track={track} />
</Pressable>
<View style={styles.trackInfoContainer}>
<TrackInfo
onPressArtist={handlePressArtist}
onPressTitle={handlePressTitle}
track={track}
user={user}
/>
</View>
<View style={styles.scrubberContainer}>
<Scrubber
mediaKey={`${mediaKey}`}
isPlaying={isPlaying}
onPressIn={onPressScrubberIn}
onPressOut={onPressScrubberOut}
duration={track.duration}
/>
</View>
<View style={styles.controlsContainer}>
<AudioControls
onNext={onNext}
onPrevious={onPrevious}
isPodcast={track.genre === Genre.PODCASTS}
/>
<ActionsBar track={track} />
</View>
</>
)}
<View style={styles.playBarContainer}>
<PlayBar
track={track}
user={user}
onPress={onDrawerOpen}
translationAnim={translationAnim}
/>
</View>
<Logo translationAnim={translationAnim} />
<View style={styles.titleBarContainer}>
<TitleBar onClose={handleDrawerCloseFromSwipe} />
</View>
<Pressable onPress={handlePressTitle} style={styles.artworkContainer}>
<Artwork track={track} />
</Pressable>
<View style={styles.trackInfoContainer}>
<TrackInfo
onPressArtist={handlePressArtist}
onPressTitle={handlePressTitle}
track={track}
user={user}
/>
</View>
<View style={styles.scrubberContainer}>
<Scrubber
mediaKey={`${mediaKey}`}
isPlaying={isPlaying}
onPressIn={onPressScrubberIn}
onPressOut={onPressScrubberOut}
duration={track?.duration ?? 0}
/>
</View>
<View style={styles.controlsContainer}>
<AudioControls
onNext={onNext}
onPrevious={onPrevious}
isPodcast={track?.genre === Genre.PODCASTS}
/>
<ActionsBar track={track} />
</View>
</View>
</Drawer>
)
Expand Down
6 changes: 3 additions & 3 deletions packages/mobile/src/components/now-playing-drawer/PlayBar.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback } from 'react'

import type { Track, User } from '@audius/common'
import type { Nullable, Track, User } from '@audius/common'
import {
FavoriteSource,
SquareSizes,
Expand Down Expand Up @@ -82,8 +82,8 @@ const useStyles = makeStyles(({ palette, spacing }) => ({
}))

type PlayBarProps = {
track: Track
user: User
track: Nullable<Track>
user: Nullable<User>
onPress: () => void
translationAnim: Animated.Value
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Track, User } from '@audius/common'
import type { Nullable, Track, User } from '@audius/common'
import { Pressable, View } from 'react-native'

import { Text } from 'app/components/core'
Expand All @@ -25,8 +25,8 @@ const useStyles = makeStyles(({ typography, spacing }) => ({
}))

type TrackInfoProps = {
track: Track
user: User
track: Nullable<Track>
user: Nullable<User>
onPressArtist: GestureResponderHandler
onPressTitle: GestureResponderHandler
}
Expand Down
Loading