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

[PAY-1658] Artist pick, hidden track tile tags moved to mid-left #3889

Merged
merged 1 commit into from
Aug 15, 2023
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
6 changes: 2 additions & 4 deletions packages/mobile/src/components/lineup-tile/LineupTile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,7 @@ export const LineupTile = ({
<LineupTileTopRight
duration={duration}
trackId={id}
isUnlisted={isUnlisted}
premiumConditions={premiumConditions}
isArtistPick={isArtistPick}
isLongFormContent={isLongFormContent}
showArtistPick={showArtistPick}
/>
<LineupTileMetadata
artistName={name}
Expand Down Expand Up @@ -140,6 +136,8 @@ export const LineupTile = ({
doesUserHaveAccess={doesUserHaveAccess}
premiumConditions={premiumConditions}
isOwner={isOwner}
isArtistPick={isArtistPick}
showArtistPick={showArtistPick}
/>
</View>
{children}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { View } from 'react-native'
import IconCart from 'app/assets/images/iconCart.svg'
import IconCollectible from 'app/assets/images/iconCollectible.svg'
import IconSpecialAccess from 'app/assets/images/iconSpecialAccess.svg'
import Text from 'app/components/text'
import { Text } from 'app/components/core'
import { useIsUSDCEnabled } from 'app/hooks/useIsUSDCEnabled'
import { makeStyles, flexRowCentered } from 'app/styles'
import { spacing } from 'app/styles/spacing'
Expand All @@ -27,10 +27,6 @@ const useStyles = makeStyles(({ spacing, palette, typography }) => ({
root: {
...flexRowCentered(),
gap: spacing(1)
},
text: {
fontSize: typography.fontSize.xs,
fontFamily: typography.fontByWeight.medium
}
}))

Expand Down Expand Up @@ -94,7 +90,9 @@ export const LineupTilePremiumContentTypeTag = ({
return (
<View style={styles.root}>
<Icon fill={color} height={spacing(4)} width={spacing(4)} />
<Text style={[styles.text, { color }]}>{text}</Text>
<Text fontSize='xs' colorValue={color}>
{text}
</Text>
</View>
)
}
44 changes: 41 additions & 3 deletions packages/mobile/src/components/lineup-tile/LineupTileStats.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@ import { View, TouchableOpacity } from 'react-native'
import { useDispatch } from 'react-redux'

import IconHeart from 'app/assets/images/iconHeart.svg'
import IconHidden from 'app/assets/images/iconHidden.svg'
import IconRepost from 'app/assets/images/iconRepost.svg'
import { LockedStatusBadge } from 'app/components/core'
import IconStar from 'app/assets/images/iconStar.svg'
import { LockedStatusBadge, Text } from 'app/components/core'
import { CollectionDownloadStatusIndicator } from 'app/components/offline-downloads/CollectionDownloadStatusIndicator'
import { TrackDownloadStatusIndicator } from 'app/components/offline-downloads/TrackDownloadStatusIndicator'
import Text from 'app/components/text'
import { useNavigation } from 'app/hooks/useNavigation'
import { makeStyles, flexRowCentered } from 'app/styles'
import { spacing } from 'app/styles/spacing'
Expand All @@ -42,6 +43,11 @@ const formatPlayCount = (playCount?: number) => {
return `${formatCount(playCount)} ${suffix}`
}

const messages = {
artistPick: "Artist's Pick",
hiddenTrack: 'Hidden Track'
}

const useStyles = makeStyles(({ spacing, palette }) => ({
root: {
flexDirection: 'row',
Expand Down Expand Up @@ -76,6 +82,10 @@ const useStyles = makeStyles(({ spacing, palette }) => ({
repostStat: {
height: spacing(4),
width: spacing(4)
},
tagContainer: {
...flexRowCentered(),
gap: spacing(1)
}
}))

Expand All @@ -96,6 +106,8 @@ type Props = {
doesUserHaveAccess?: boolean
premiumConditions: Nullable<PremiumConditions>
isOwner: boolean
isArtistPick?: boolean
showArtistPick?: boolean
}

export const LineupTileStats = ({
Expand All @@ -114,7 +126,9 @@ export const LineupTileStats = ({
showRankIcon,
doesUserHaveAccess,
premiumConditions,
isOwner
isOwner,
isArtistPick,
showArtistPick
}: Props) => {
const styles = useStyles()
const trackTileStyles = useTrackTileStyles()
Expand Down Expand Up @@ -155,6 +169,30 @@ export const LineupTileStats = ({
isOwner={isOwner}
/>
) : null}
{!premiumConditions && showArtistPick && isArtistPick ? (
<View style={styles.tagContainer}>
<IconStar
fill={neutralLight4}
height={spacing(4)}
width={spacing(4)}
/>
<Text fontSize='xs' colorValue={neutralLight4}>
{messages.artistPick}
</Text>
</View>
) : null}
{isUnlisted ? (
<View style={styles.tagContainer}>
<IconHidden
fill={neutralLight4}
height={spacing(4)}
width={spacing(4)}
/>
<Text fontSize='xs' colorValue={neutralLight4}>
{messages.hiddenTrack}
</Text>
</View>
) : null}
<View style={styles.leftStats}>
{hasEngagement && !isUnlisted ? (
<>
Expand Down
76 changes: 2 additions & 74 deletions packages/mobile/src/components/lineup-tile/LineupTileTopRight.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { PremiumConditions, Nullable } from '@audius/common'
import {
FeatureFlags,
accountSelectors,
Expand All @@ -7,12 +6,9 @@ import {
} from '@audius/common'
import type { ViewStyle } from 'react-native'
import { StyleSheet, View } from 'react-native'
import type { SvgProps } from 'react-native-svg'
import { useSelector } from 'react-redux'

import IconCheck from 'app/assets/images/iconCheck.svg'
import IconHidden from 'app/assets/images/iconHidden.svg'
import IconStar from 'app/assets/images/iconStar.svg'
import Text from 'app/components/text'
import { useFeatureFlag } from 'app/hooks/useRemoteConfig'
import { flexRowCentered } from 'app/styles'
Expand All @@ -26,8 +22,6 @@ const { getUserId } = accountSelectors
const { getTrackPosition } = playbackPositionSelectors

const messages = {
artistPick: "Artist's Pick",
hiddenTrack: 'Hidden Track',
timeLeft: 'left',
played: 'Played'
}
Expand All @@ -44,41 +38,9 @@ const styles = StyleSheet.create({
top: 10,
right: 10,
left: 0
},
item: {
...flexRowEnd(),
marginRight: 8
},
icon: {
marginRight: 4
}
})

type ItemProps = {
/**
* Icon shown on the left hand side of the item
*/
icon: React.FC<SvgProps>
/**
* Label shown on the right hand side of the item
*/
label: string
/**
* Color of icon and label
*/
color: string
}

const LineupTileTopRightItem = ({ icon: Icon, label, color }: ItemProps) => {
const trackTileStyles = useTrackTileStyles()
return (
<View style={styles.item}>
<Icon height={16} width={16} fill={color} style={styles.icon} />
<Text style={{ ...trackTileStyles.statText, color }}>{label}</Text>
</View>
)
}

type Props = {
/**
* The duration of the track or tracks
Expand All @@ -88,42 +50,22 @@ type Props = {
* The id of the track
*/
trackId?: number
/**
* Whether or not the track is the artist pick
*/
isArtistPick?: boolean
/**
* Whether or not the track is long-form content (podcast/audiobook/etc)
*/
isLongFormContent?: boolean
/**
* Whether or not the track is unlisted (hidden)
*/
isUnlisted?: boolean
/**
* Whether or not to show the artist pick icon
*/
showArtistPick?: boolean
/**
* Premium conditions to determine what icon and label to show
*/
premiumConditions?: Nullable<PremiumConditions>
}

export const LineupTileTopRight = ({
duration,
trackId,
isArtistPick,
isLongFormContent,
isUnlisted,
showArtistPick,
premiumConditions
isLongFormContent
}: Props) => {
const { isEnabled: isNewPodcastControlsEnabled } = useFeatureFlag(
FeatureFlags.PODCAST_CONTROL_UPDATES_ENABLED,
FeatureFlags.PODCAST_CONTROL_UPDATES_ENABLED_FALLBACK
)
const { neutralLight4, secondary } = useThemeColors()
const { secondary } = useThemeColors()
const trackTileStyles = useTrackTileStyles()
const currentUserId = useSelector(getUserId)
const playbackPositionInfo = useSelector((state) =>
Expand All @@ -147,20 +89,6 @@ export const LineupTileTopRight = ({

return (
<View style={styles.topRight}>
{!premiumConditions && showArtistPick && isArtistPick ? (
<LineupTileTopRightItem
icon={IconStar}
label={messages.artistPick}
color={neutralLight4}
/>
) : null}
{isUnlisted && (
<LineupTileTopRightItem
icon={IconHidden}
label={messages.hiddenTrack}
color={neutralLight4}
/>
)}
<View style={trackTileStyles.statTextContainer}>
<Text
style={[
Expand Down