diff --git a/ui/src/App.js b/ui/src/App.js
index 3677da3b0..4b4de694d 100644
--- a/ui/src/App.js
+++ b/ui/src/App.js
@@ -17,6 +17,7 @@ import { albumViewReducer } from './album/albumState'
import config from './config'
import customRoutes from './routes'
import themeReducer from './personal/themeReducer'
+import { newPlaylistDialogReducer } from './dialogs/dialogState'
import createAdminStore from './store/createAdminStore'
import { i18nProvider } from './i18n'
@@ -32,6 +33,7 @@ const App = () => (
queue: playQueueReducer,
albumView: albumViewReducer,
theme: themeReducer,
+ newPlaylistDialog: newPlaylistDialogReducer,
},
})}
>
diff --git a/ui/src/common/AddToPlaylistMenu.js b/ui/src/common/AddToPlaylistMenu.js
index 404e2a134..4d993448b 100644
--- a/ui/src/common/AddToPlaylistMenu.js
+++ b/ui/src/common/AddToPlaylistMenu.js
@@ -1,12 +1,16 @@
import React from 'react'
+import { useDispatch } from 'react-redux'
+import PropTypes from 'prop-types'
import {
useDataProvider,
useGetList,
useNotify,
useTranslate,
} from 'react-admin'
-import { MenuItem } from '@material-ui/core'
-import PropTypes from 'prop-types'
+import { MenuItem, Divider } from '@material-ui/core'
+import NewPlaylistIcon from '@material-ui/icons/Add'
+import { openNewPlaylist } from '../dialogs/dialogState'
+import NewPlaylistDialog from '../dialogs/NewPlaylist'
export const addTracksToPlaylist = (dataProvider, selectedIds, playlistId) =>
dataProvider
@@ -29,6 +33,7 @@ export const addAlbumToPlaylist = (dataProvider, albumId, playlistId) =>
const AddToPlaylistMenu = React.forwardRef(
({ selectedIds, albumId, onClose, onItemAdded }, ref) => {
const notify = useNotify()
+ const dispatch = useDispatch()
const translate = useTranslate()
const dataProvider = useDataProvider()
const { ids, data, loaded } = useGetList(
@@ -42,48 +47,55 @@ const AddToPlaylistMenu = React.forwardRef(
return
}
- // TODO: This is temporary, while we don't have the "New Playlist" option in the menu
- if (ids.length === 0) {
- return (
-
- )
+ const addToPlaylist = (playlistId) => {
+ const add = albumId
+ ? addAlbumToPlaylist(dataProvider, albumId, playlistId)
+ : addTracksToPlaylist(dataProvider, selectedIds, playlistId)
+
+ add
+ .then((len) => {
+ notify('message.songsAddedToPlaylist', 'info', { smart_count: len })
+ onItemAdded(playlistId)
+ })
+ .catch(() => {
+ notify('ra.page.error', 'warning')
+ })
}
const handleItemClick = (e) => {
e.preventDefault()
const playlistId = e.target.getAttribute('value')
if (playlistId !== '') {
- const add = albumId
- ? addAlbumToPlaylist(dataProvider, albumId, playlistId)
- : addTracksToPlaylist(dataProvider, selectedIds, playlistId)
-
- add
- .then((len) => {
- notify('message.songsAddedToPlaylist', 'info', { smart_count: len })
- onItemAdded && onItemAdded(playlistId, selectedIds)
- })
- .catch(() => {
- notify('ra.page.error', 'warning')
- })
+ addToPlaylist(playlistId)
}
e.stopPropagation()
- onClose && onClose(e)
+ onClose(e)
+ }
+
+ const handleOpenDialog = (e) => {
+ e.preventDefault()
+ dispatch(openNewPlaylist(albumId, selectedIds))
+ e.stopPropagation()
+ onClose(e)
}
return (
<>
+