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:
@@ -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,6 +46,7 @@ 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
|
||||||
|
if (trackIds.length) {
|
||||||
dataProvider
|
dataProvider
|
||||||
.create('playlistTrack', {
|
.create('playlistTrack', {
|
||||||
data: { ids: trackIds },
|
data: { ids: trackIds },
|
||||||
@@ -58,20 +61,22 @@ export const AddToPlaylistDialog = () => {
|
|||||||
.catch(() => {
|
.catch(() => {
|
||||||
notify('ra.page.error', 'warning')
|
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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user