Only add to playlist songs from selected discNumber (if present)

This commit is contained in:
Deluan 2020-05-29 16:42:13 -04:00
parent 3fe8b02cbd
commit 8f8d992da4
3 changed files with 14 additions and 33 deletions

View File

@ -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) => {

View File

@ -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)
}) })

View File

@ -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,
} }