From 8f8d992da49244bee110c1228f0873a0e3f3d7d8 Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 29 May 2020 16:42:13 -0400 Subject: [PATCH] Only add to playlist songs from selected discNumber (if present) --- ui/src/common/AlbumContextMenu.js | 16 ++++++++-------- ui/src/dialogs/AddToPlaylistDialog.js | 27 +++++---------------------- ui/src/dialogs/dialogState.js | 4 +--- 3 files changed, 14 insertions(+), 33 deletions(-) diff --git a/ui/src/common/AlbumContextMenu.js b/ui/src/common/AlbumContextMenu.js index 796b842e9..e1ce0beb4 100644 --- a/ui/src/common/AlbumContextMenu.js +++ b/ui/src/common/AlbumContextMenu.js @@ -47,7 +47,7 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => { }, 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 }), {} ) - let ids = null - if (discNumber) { - ids = response.data - .filter((r) => r.discNumber === discNumber) - .map((r) => r.id) - } + + const ids = response.data + // Select only songs from discNumber if it is specified + .filter((r) => !discNumber || r.discNumber === discNumber) + .map((r) => r.id) + return { data, ids } } @@ -83,7 +83,7 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => { dataProvider .getList('albumSong', { pagination: { page: 1, perPage: -1 }, - sort: { field: 'trackNumber', order: 'ASC' }, + sort: { field: 'discNumber, trackNumber', order: 'ASC' }, filter: { album_id: record.id }, }) .then((response) => { diff --git a/ui/src/dialogs/AddToPlaylistDialog.js b/ui/src/dialogs/AddToPlaylistDialog.js index a89eeb9fc..0206196eb 100644 --- a/ui/src/dialogs/AddToPlaylistDialog.js +++ b/ui/src/dialogs/AddToPlaylistDialog.js @@ -3,8 +3,8 @@ import { useDispatch, useSelector } from 'react-redux' import { useCreate, useDataProvider, - useTranslate, useNotify, + useTranslate, } from 'react-admin' import { Button, @@ -17,7 +17,7 @@ import { closeAddToPlaylist } from './dialogState' import SelectPlaylistInput from './SelectPlaylistInput' const AddToPlaylistDialog = () => { - const { open, albumId, selectedIds, onSuccess } = useSelector( + const { open, selectedIds, onSuccess } = useSelector( (state) => state.addToPlaylistDialog ) const dispatch = useDispatch() @@ -37,31 +37,14 @@ const AddToPlaylistDialog = () => { } ) - const addTracksToPlaylist = (selectedIds, playlistId) => + const addToPlaylist = (playlistId) => { dataProvider .create('playlistTrack', { data: { ids: selectedIds }, filter: { playlist_id: playlistId }, }) - .then(() => 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) => { + .then(() => { + const len = selectedIds.length notify('message.songsAddedToPlaylist', 'info', { smart_count: len }) onSuccess && onSuccess(value, len) }) diff --git a/ui/src/dialogs/dialogState.js b/ui/src/dialogs/dialogState.js index da0e4f9f0..24702324d 100644 --- a/ui/src/dialogs/dialogState.js +++ b/ui/src/dialogs/dialogState.js @@ -1,9 +1,8 @@ const ADD_TO_PLAYLIST_OPEN = 'ADD_TO_PLAYLIST_OPEN' const ADD_TO_PLAYLIST_CLOSE = 'ADD_TO_PLAYLIST_CLOSE' -const openAddToPlaylist = ({ albumId, selectedIds, onSuccess }) => ({ +const openAddToPlaylist = ({ selectedIds, onSuccess }) => ({ type: ADD_TO_PLAYLIST_OPEN, - albumId, selectedIds, onSuccess, }) @@ -24,7 +23,6 @@ const addToPlaylistDialogReducer = ( return { ...previousState, open: true, - albumId: payload.albumId, selectedIds: payload.selectedIds, onSuccess: payload.onSuccess, }