feat: display stems download links for CC tracks
Déploiement FRONT BETA / check (push) Successful in 2m15s
Déploiement FRONT PROD / check (push) Successful in 2m2s
Déploiement FRONT BETA / deploy (push) Successful in 20s
Déploiement FRONT PROD / deploy (push) Successful in 20s

This commit is contained in:
2026-07-03 14:16:26 +04:00
parent 85e9142a32
commit 25066e97ce
3 changed files with 91 additions and 2 deletions
+78
View File
@@ -0,0 +1,78 @@
import {useState} from 'react'
import PropTypes from 'prop-types'
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogActions from '@mui/material/DialogActions'
import DialogContent from '@mui/material/DialogContent'
import DialogTitle from '@mui/material/DialogTitle'
import List from '@mui/material/List'
import ListItem from '@mui/material/ListItem'
import ListItemButton from '@mui/material/ListItemButton'
import ListItemIcon from '@mui/material/ListItemIcon'
import ListItemText from '@mui/material/ListItemText'
import useMediaQuery from '@mui/material/useMediaQuery'
import {useTheme} from '@mui/material/styles'
import CloudDownloadIcon from '@mui/icons-material/CloudDownload'
import {Nextcloud} from '@icons-pack/react-simple-icons'
const PLATFORM_ICON = {
NIYAJ: Nextcloud,
kDrive: CloudDownloadIcon,
}
export default function StemsDialog({stems}) {
const [open, setOpen] = useState(false)
const theme = useTheme()
const fullScreen = useMediaQuery(theme.breakpoints.down('md'))
const handleClickOpen = () => {
setOpen(true)
}
const handleClose = () => {
setOpen(false)
}
return (
<>
<Button endIcon={<CloudDownloadIcon />} sx={{marginBottom: 2}} variant='outlined' onClick={handleClickOpen}>
Stems
</Button>
<Dialog
fullScreen={fullScreen}
open={open}
aria-labelledby='StemsDialog'
onClose={handleClose}
>
<DialogTitle>Télécharger les stems</DialogTitle>
<DialogContent dividers>
<List>
{stems.map((stem, index) => {
const PlatformIcon = PLATFORM_ICON[stem.plateforme] ?? CloudDownloadIcon
return (
<ListItem key={index} disablePadding>
<ListItemButton component='a' href={stem.url} target='_blank' rel='noopener noreferrer'>
<ListItemIcon>
<PlatformIcon />
</ListItemIcon>
<ListItemText primary={stem.plateforme} />
</ListItemButton>
</ListItem>
)
})}
</List>
</DialogContent>
<DialogActions>
<Button autoFocus onClick={handleClose}>
Fermer
</Button>
</DialogActions>
</Dialog>
</>
)
}
StemsDialog.propTypes = {
stems: PropTypes.array.isRequired
}
+10 -2
View File
@@ -21,6 +21,7 @@ import {formatKuveti} from '../../lib/kuveti'
import LicenseModal from '../cc/license-modal'
import FilesDialog from '../files/files-dialog'
import StemsDialog from '../files/stems-dialog'
import {StreamButton} from '../streaming-buttons'
import EntegreMizik from './entegre-mizik'
import OkiMizik from './oki-mizik'
@@ -182,8 +183,15 @@ export default function Teks({parole}) {
<LicenseModal license={parole.creativeCommons.toLowerCase()} sourceOriginale={parole.sourceOriginale ?? null} remixes={parole.remixes?.length ? parole.remixes : null} />
</Box>
)}
{parole?.files && (
<FilesDialog files={parole.files} />
{(parole?.files || (parole.creativeCommons && parole.stems?.length > 0)) && (
<Box sx={{display: 'flex', flexWrap: 'wrap', justifyContent: 'center', gap: 1}}>
{parole?.files && (
<FilesDialog files={parole.files} />
)}
{parole.creativeCommons && parole.stems?.length > 0 && (
<StemsDialog stems={parole.stems} />
)}
</Box>
)}
{(parole.okiMizikID || parole.streamAudio.length > 0 || parole.gadeEmbed) && (
<Box sx={{textAlign: 'center'}}>