support likes & duration resolve

This commit is contained in:
SrGooglo 2023-07-05 19:01:48 +00:00
parent 1938916e56
commit 76267ef0e6
3 changed files with 43 additions and 5 deletions

View File

@ -1,6 +1,8 @@
import React from "react" import React from "react"
import * as antd from "antd" import * as antd from "antd"
import classnames from "classnames" import classnames from "classnames"
import LikeButton from "components/LikeButton"
import seekToTimeLabel from "utils/seekToTimeLabel"
import { ImageViewer } from "components" import { ImageViewer } from "components"
import { Icons } from "components/Icons" import { Icons } from "components/Icons"
@ -16,6 +18,7 @@ export default (props) => {
playbackStatus, playbackStatus,
} = React.useContext(Context) } = React.useContext(Context)
const isLiked = props.track?.liked
const isCurrent = currentManifest?._id === props.track._id const isCurrent = currentManifest?._id === props.track._id
const isPlaying = isCurrent && playbackStatus === "playing" const isPlaying = isCurrent && playbackStatus === "playing"
@ -49,9 +52,11 @@ export default (props) => {
/> />
</div> </div>
</div> </div>
<div className="music-track_cover"> <div className="music-track_cover">
<ImageViewer src={props.track.cover ?? props.track.thumbnail} /> <ImageViewer src={props.track.cover ?? props.track.thumbnail} />
</div> </div>
<div className="music-track_details"> <div className="music-track_details">
<div className="music-track_title"> <div className="music-track_title">
{props.track.title} {props.track.title}
@ -61,10 +66,21 @@ export default (props) => {
</div> </div>
</div> </div>
<div className="music-track_info"> <div className="music-track_right_actions">
<div className="music-track_info_duration"> <div className="music-track_info">
{props.track.duration ?? "00:00"} <div className="music-track_info_duration">
{
props.track.metadata?.duration
? seekToTimeLabel(props.track.metadata?.duration)
: "00:00"
}
</div>
</div> </div>
<LikeButton
liked={isLiked}
onClick={props.onLike}
/>
</div> </div>
</div> </div>
} }

View File

@ -152,14 +152,21 @@
} }
} }
.music-track_info { .music-track_right_actions {
display: flex; display: flex;
flex-direction: column; flex-direction: row;
align-items: center;
justify-content: center;
gap: 10px;
margin-left: auto; margin-left: auto;
color: var(--text-color); color: var(--text-color);
}
.music-track_info {
.music-track_duration { .music-track_duration {
font-size: 0.8rem; font-size: 0.8rem;
} }

View File

@ -0,0 +1,15 @@
export default (value) => {
// convert seek to minutes and seconds
const minutes = Math.floor(value / 60)
// add leading zero if minutes is less than 10
const minutesString = minutes < 10 ? `0${minutes}` : minutes
// get seconds
const seconds = Math.floor(value - minutes * 60)
// add leading zero if seconds is less than 10
const secondsString = seconds < 10 ? `0${seconds}` : seconds
return `${minutesString}:${secondsString}`
}