fix(UI): Warn if track is already present when adding to playlist - 1604 (#1897)

* fix(UI): Warn if track is already present when adding to playlist - 1604

Signed-off-by: joaomqc <joaomqc@hotmail.com>

* fix tests

Signed-off-by: joaomqc <joaomqc@hotmail.com>

Signed-off-by: joaomqc <joaomqc@hotmail.com>
Co-authored-by: João Coelho <1120458@isep.ipp.pt>
This commit is contained in:
joaomqc 2022-09-29 18:19:14 +01:00 committed by GitHub
parent 218d14727a
commit 8befe10ee6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 19 deletions

View File

@ -20,6 +20,8 @@ import {
} from '../actions' } from '../actions'
import { SelectPlaylistInput } from './SelectPlaylistInput' import { SelectPlaylistInput } from './SelectPlaylistInput'
import DuplicateSongDialog from './DuplicateSongDialog' import DuplicateSongDialog from './DuplicateSongDialog'
import { httpClient } from '../dataProvider'
import { REST_URL } from '../consts'
export const AddToPlaylistDialog = () => { export const AddToPlaylistDialog = () => {
const { open, selectedIds, onSuccess, duplicateSong, duplicateIds } = const { open, selectedIds, onSuccess, duplicateSong, duplicateIds } =
@ -44,34 +46,37 @@ export const AddToPlaylistDialog = () => {
const addToPlaylist = (playlistId, distinctIds) => { const addToPlaylist = (playlistId, distinctIds) => {
const trackIds = Array.isArray(distinctIds) ? distinctIds : selectedIds const trackIds = Array.isArray(distinctIds) ? distinctIds : selectedIds
dataProvider if (trackIds.length) {
.create('playlistTrack', { dataProvider
data: { ids: trackIds }, .create('playlistTrack', {
filter: { playlist_id: playlistId }, data: { ids: trackIds },
}) filter: { playlist_id: playlistId },
.then(() => { })
const len = trackIds.length .then(() => {
notify('message.songsAddedToPlaylist', 'info', { smart_count: len }) const len = trackIds.length
onSuccess && onSuccess(value, len) notify('message.songsAddedToPlaylist', 'info', { smart_count: len })
refresh() onSuccess && onSuccess(value, len)
}) refresh()
.catch(() => { })
notify('ra.page.error', 'warning') .catch(() => {
}) notify('ra.page.error', 'warning')
})
} else {
notify('message.songsAddedToPlaylist', 'info', { smart_count: 0 })
}
} }
const checkDuplicateSong = (playlistObject) => { const checkDuplicateSong = (playlistObject) => {
dataProvider httpClient(`${REST_URL}/playlist/${playlistObject.id}/tracks`)
.getOne('playlist', { id: playlistObject.id })
.then((res) => { .then((res) => {
const tracks = res.data.tracks const tracks = res.json
if (tracks) { if (tracks) {
const dupSng = tracks.filter((song) => const dupSng = tracks.filter((song) =>
selectedIds.some((id) => id === song.id) selectedIds.some((id) => id === song.mediaFileId)
) )
if (dupSng.length) { if (dupSng.length) {
const dupIds = dupSng.map((song) => song.id) const dupIds = dupSng.map((song) => song.mediaFileId)
dispatch(openDuplicateSongWarning(dupIds)) dispatch(openDuplicateSongWarning(dupIds))
} }
} }

View File

@ -62,11 +62,19 @@ const createTestUtils = (mockDataProvider) =>
</DataProviderContext.Provider> </DataProviderContext.Provider>
) )
jest.mock('../dataProvider', () => ({
...jest.requireActual('../dataProvider'),
httpClient: jest.fn(),
}))
describe('AddToPlaylistDialog', () => { describe('AddToPlaylistDialog', () => {
beforeAll(() => localStorage.setItem('userId', 'admin')) beforeAll(() => localStorage.setItem('userId', 'admin'))
afterEach(cleanup) afterEach(cleanup)
it('adds distinct songs to already existing playlists', async () => { it('adds distinct songs to already existing playlists', async () => {
const dataProvider = require('../dataProvider')
jest.spyOn(dataProvider, 'httpClient').mockResolvedValue({ data: mockData })
const mockDataProvider = { const mockDataProvider = {
getList: jest getList: jest
.fn() .fn()