From 8befe10ee637be8868129b3ec22126168dfe3c6d Mon Sep 17 00:00:00 2001 From: joaomqc Date: Thu, 29 Sep 2022 18:19:14 +0100 Subject: [PATCH] fix(UI): Warn if track is already present when adding to playlist - 1604 (#1897) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(UI): Warn if track is already present when adding to playlist - 1604 Signed-off-by: joaomqc * fix tests Signed-off-by: joaomqc Signed-off-by: joaomqc Co-authored-by: João Coelho <1120458@isep.ipp.pt> --- ui/src/dialogs/AddToPlaylistDialog.js | 43 ++++++++++++---------- ui/src/dialogs/AddToPlaylistDialog.test.js | 8 ++++ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/ui/src/dialogs/AddToPlaylistDialog.js b/ui/src/dialogs/AddToPlaylistDialog.js index bb8c48fc..02df2fe6 100644 --- a/ui/src/dialogs/AddToPlaylistDialog.js +++ b/ui/src/dialogs/AddToPlaylistDialog.js @@ -20,6 +20,8 @@ import { } from '../actions' import { SelectPlaylistInput } from './SelectPlaylistInput' import DuplicateSongDialog from './DuplicateSongDialog' +import { httpClient } from '../dataProvider' +import { REST_URL } from '../consts' export const AddToPlaylistDialog = () => { const { open, selectedIds, onSuccess, duplicateSong, duplicateIds } = @@ -44,34 +46,37 @@ export const AddToPlaylistDialog = () => { const addToPlaylist = (playlistId, distinctIds) => { const trackIds = Array.isArray(distinctIds) ? distinctIds : selectedIds - dataProvider - .create('playlistTrack', { - data: { ids: trackIds }, - filter: { playlist_id: playlistId }, - }) - .then(() => { - const len = trackIds.length - notify('message.songsAddedToPlaylist', 'info', { smart_count: len }) - onSuccess && onSuccess(value, len) - refresh() - }) - .catch(() => { - notify('ra.page.error', 'warning') - }) + if (trackIds.length) { + dataProvider + .create('playlistTrack', { + data: { ids: trackIds }, + filter: { playlist_id: playlistId }, + }) + .then(() => { + const len = trackIds.length + notify('message.songsAddedToPlaylist', 'info', { smart_count: len }) + onSuccess && onSuccess(value, len) + refresh() + }) + .catch(() => { + notify('ra.page.error', 'warning') + }) + } else { + notify('message.songsAddedToPlaylist', 'info', { smart_count: 0 }) + } } const checkDuplicateSong = (playlistObject) => { - dataProvider - .getOne('playlist', { id: playlistObject.id }) + httpClient(`${REST_URL}/playlist/${playlistObject.id}/tracks`) .then((res) => { - const tracks = res.data.tracks + const tracks = res.json if (tracks) { const dupSng = tracks.filter((song) => - selectedIds.some((id) => id === song.id) + selectedIds.some((id) => id === song.mediaFileId) ) if (dupSng.length) { - const dupIds = dupSng.map((song) => song.id) + const dupIds = dupSng.map((song) => song.mediaFileId) dispatch(openDuplicateSongWarning(dupIds)) } } diff --git a/ui/src/dialogs/AddToPlaylistDialog.test.js b/ui/src/dialogs/AddToPlaylistDialog.test.js index 5f433dfc..850b1d03 100644 --- a/ui/src/dialogs/AddToPlaylistDialog.test.js +++ b/ui/src/dialogs/AddToPlaylistDialog.test.js @@ -62,11 +62,19 @@ const createTestUtils = (mockDataProvider) => ) +jest.mock('../dataProvider', () => ({ + ...jest.requireActual('../dataProvider'), + httpClient: jest.fn(), +})) + describe('AddToPlaylistDialog', () => { beforeAll(() => localStorage.setItem('userId', 'admin')) afterEach(cleanup) it('adds distinct songs to already existing playlists', async () => { + const dataProvider = require('../dataProvider') + jest.spyOn(dataProvider, 'httpClient').mockResolvedValue({ data: mockData }) + const mockDataProvider = { getList: jest .fn()