70 lines
1.4 KiB
TypeScript
Raw Normal View History

2022-08-03 23:48:39 +08:00
import { css, cx } from '@emotion/css'
import Cover from './Cover'
import Actions from './Actions'
import Info from './Info'
import React from 'react'
interface Props {
className?: string
2022-08-22 16:51:23 +08:00
isLoading?: boolean
2022-08-03 23:48:39 +08:00
title?: string
creatorName?: string
creatorLink?: string
description?: string
extraInfo?: string | React.ReactNode
cover?: string
videoCover?: string
isLiked: boolean
onPlay: () => void
onLike?: () => void
}
const TrackListHeader = ({
className,
2022-08-22 16:51:23 +08:00
isLoading,
2022-08-03 23:48:39 +08:00
title,
creatorName,
creatorLink,
description,
extraInfo,
cover,
videoCover,
isLiked,
onPlay,
onLike,
}: Props) => {
return (
<div
className={cx(
className,
'mx-2.5 rounded-48 p-8 dark:bg-white/10',
'lg:mx-0 lg:grid lg:grid-rows-1 lg:gap-10 lg:rounded-none lg:p-0 lg:dark:bg-transparent',
css`
grid-template-columns: 318px auto;
`
)}
>
<Cover {...{ cover, videoCover }} />
<div className='flex flex-col justify-between'>
<Info
2022-08-22 16:51:23 +08:00
{...{
title,
creatorName,
creatorLink,
description,
extraInfo,
isLoading,
}}
2022-08-03 23:48:39 +08:00
/>
2022-08-22 16:51:23 +08:00
<Actions {...{ onPlay, onLike, isLiked, isLoading }} />
2022-08-03 23:48:39 +08:00
</div>
</div>
)
}
const memoized = React.memo(TrackListHeader)
memoized.displayName = 'TrackListHeader'
export default memoized