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:
parent
218d14727a
commit
8befe10ee6
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue