mirror of
https://github.com/navidrome/navidrome.git
synced 2025-05-11 23:56:37 +03:00
Only add to playlist songs from selected discNumber (if present)
This commit is contained in:
parent
3fe8b02cbd
commit
8f8d992da4
@ -47,7 +47,7 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => {
|
|||||||
},
|
},
|
||||||
addToPlaylist: {
|
addToPlaylist: {
|
||||||
label: translate('resources.song.actions.addToPlaylist'),
|
label: translate('resources.song.actions.addToPlaylist'),
|
||||||
action: () => openAddToPlaylist({ albumId: record.id }),
|
action: (data, ids) => openAddToPlaylist({ selectedIds: ids }),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,12 +68,12 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => {
|
|||||||
(acc, cur) => ({ ...acc, [cur.id]: cur }),
|
(acc, cur) => ({ ...acc, [cur.id]: cur }),
|
||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
let ids = null
|
|
||||||
if (discNumber) {
|
const ids = response.data
|
||||||
ids = response.data
|
// Select only songs from discNumber if it is specified
|
||||||
.filter((r) => r.discNumber === discNumber)
|
.filter((r) => !discNumber || r.discNumber === discNumber)
|
||||||
.map((r) => r.id)
|
.map((r) => r.id)
|
||||||
}
|
|
||||||
return { data, ids }
|
return { data, ids }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => {
|
|||||||
dataProvider
|
dataProvider
|
||||||
.getList('albumSong', {
|
.getList('albumSong', {
|
||||||
pagination: { page: 1, perPage: -1 },
|
pagination: { page: 1, perPage: -1 },
|
||||||
sort: { field: 'trackNumber', order: 'ASC' },
|
sort: { field: 'discNumber, trackNumber', order: 'ASC' },
|
||||||
filter: { album_id: record.id },
|
filter: { album_id: record.id },
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
|
@ -3,8 +3,8 @@ import { useDispatch, useSelector } from 'react-redux'
|
|||||||
import {
|
import {
|
||||||
useCreate,
|
useCreate,
|
||||||
useDataProvider,
|
useDataProvider,
|
||||||
useTranslate,
|
|
||||||
useNotify,
|
useNotify,
|
||||||
|
useTranslate,
|
||||||
} from 'react-admin'
|
} from 'react-admin'
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
@ -17,7 +17,7 @@ import { closeAddToPlaylist } from './dialogState'
|
|||||||
import SelectPlaylistInput from './SelectPlaylistInput'
|
import SelectPlaylistInput from './SelectPlaylistInput'
|
||||||
|
|
||||||
const AddToPlaylistDialog = () => {
|
const AddToPlaylistDialog = () => {
|
||||||
const { open, albumId, selectedIds, onSuccess } = useSelector(
|
const { open, selectedIds, onSuccess } = useSelector(
|
||||||
(state) => state.addToPlaylistDialog
|
(state) => state.addToPlaylistDialog
|
||||||
)
|
)
|
||||||
const dispatch = useDispatch()
|
const dispatch = useDispatch()
|
||||||
@ -37,31 +37,14 @@ const AddToPlaylistDialog = () => {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
const addTracksToPlaylist = (selectedIds, playlistId) =>
|
const addToPlaylist = (playlistId) => {
|
||||||
dataProvider
|
dataProvider
|
||||||
.create('playlistTrack', {
|
.create('playlistTrack', {
|
||||||
data: { ids: selectedIds },
|
data: { ids: selectedIds },
|
||||||
filter: { playlist_id: playlistId },
|
filter: { playlist_id: playlistId },
|
||||||
})
|
})
|
||||||
.then(() => selectedIds.length)
|
.then(() => {
|
||||||
|
const len = selectedIds.length
|
||||||
const addAlbumToPlaylist = (albumId, playlistId) =>
|
|
||||||
dataProvider
|
|
||||||
.getList('albumSong', {
|
|
||||||
pagination: { page: 1, perPage: -1 },
|
|
||||||
sort: { field: 'discNumber asc, trackNumber asc', order: 'ASC' },
|
|
||||||
filter: { album_id: albumId },
|
|
||||||
})
|
|
||||||
.then((response) => response.data.map((song) => song.id))
|
|
||||||
.then((ids) => addTracksToPlaylist(ids, playlistId))
|
|
||||||
|
|
||||||
const addToPlaylist = (playlistId) => {
|
|
||||||
const add = albumId
|
|
||||||
? addAlbumToPlaylist(albumId, playlistId)
|
|
||||||
: addTracksToPlaylist(selectedIds, playlistId)
|
|
||||||
|
|
||||||
add
|
|
||||||
.then((len) => {
|
|
||||||
notify('message.songsAddedToPlaylist', 'info', { smart_count: len })
|
notify('message.songsAddedToPlaylist', 'info', { smart_count: len })
|
||||||
onSuccess && onSuccess(value, len)
|
onSuccess && onSuccess(value, len)
|
||||||
})
|
})
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
const ADD_TO_PLAYLIST_OPEN = 'ADD_TO_PLAYLIST_OPEN'
|
const ADD_TO_PLAYLIST_OPEN = 'ADD_TO_PLAYLIST_OPEN'
|
||||||
const ADD_TO_PLAYLIST_CLOSE = 'ADD_TO_PLAYLIST_CLOSE'
|
const ADD_TO_PLAYLIST_CLOSE = 'ADD_TO_PLAYLIST_CLOSE'
|
||||||
|
|
||||||
const openAddToPlaylist = ({ albumId, selectedIds, onSuccess }) => ({
|
const openAddToPlaylist = ({ selectedIds, onSuccess }) => ({
|
||||||
type: ADD_TO_PLAYLIST_OPEN,
|
type: ADD_TO_PLAYLIST_OPEN,
|
||||||
albumId,
|
|
||||||
selectedIds,
|
selectedIds,
|
||||||
onSuccess,
|
onSuccess,
|
||||||
})
|
})
|
||||||
@ -24,7 +23,6 @@ const addToPlaylistDialogReducer = (
|
|||||||
return {
|
return {
|
||||||
...previousState,
|
...previousState,
|
||||||
open: true,
|
open: true,
|
||||||
albumId: payload.albumId,
|
|
||||||
selectedIds: payload.selectedIds,
|
selectedIds: payload.selectedIds,
|
||||||
onSuccess: payload.onSuccess,
|
onSuccess: payload.onSuccess,
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user