diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json
index a6468031f..00c489830 100644
--- a/resources/i18n/pt.json
+++ b/resources/i18n/pt.json
@@ -150,7 +150,9 @@
"actions": {
"selectPlaylist": "Selecione a playlist:",
"addNewPlaylist": "Criar \"%{name}\"",
- "export": "Exportar"
+ "export": "Exportar",
+ "makePublic": "Pública",
+ "makePrivate": "Pessoal"
},
"message": {
"duplicate_song": "Adicionar músicas duplicadas",
diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json
index 46742a88c..cc40dcf99 100644
--- a/ui/src/i18n/en.json
+++ b/ui/src/i18n/en.json
@@ -150,7 +150,9 @@
"actions": {
"selectPlaylist": "Select a playlist:",
"addNewPlaylist": "Create \"%{name}\"",
- "export": "Export"
+ "export": "Export",
+ "makePublic": "Make Public",
+ "makePrivate": "Make Private"
},
"message": {
"duplicate_song": "Add duplicated songs",
diff --git a/ui/src/playlist/ChangePublicStatusButton.js b/ui/src/playlist/ChangePublicStatusButton.js
new file mode 100644
index 000000000..4f537d653
--- /dev/null
+++ b/ui/src/playlist/ChangePublicStatusButton.js
@@ -0,0 +1,17 @@
+import * as React from 'react'
+import { LockOpen, Lock } from '@material-ui/icons'
+import { BulkUpdateButton, useTranslate } from 'react-admin'
+
+const ChangePublicStatusButton = (props) => {
+ const translate = useTranslate()
+ const playlists = { public: props?.public }
+ const label = props?.public
+ ? translate('resources.playlist.actions.makePublic')
+ : translate('resources.playlist.actions.makePrivate')
+ const icon = props?.public ? :
+ return (
+
+ )
+}
+
+export default ChangePublicStatusButton
diff --git a/ui/src/playlist/PlaylistEdit.js b/ui/src/playlist/PlaylistEdit.js
index d15611296..23f9cc1b5 100644
--- a/ui/src/playlist/PlaylistEdit.js
+++ b/ui/src/playlist/PlaylistEdit.js
@@ -13,7 +13,7 @@ import {
ReferenceInput,
SelectInput,
} from 'react-admin'
-import { isSmartPlaylist, isWritable, Title } from '../common'
+import { isWritable, Title } from '../common'
const SyncFragment = ({ formData, variant, ...rest }) => {
return (
@@ -52,10 +52,7 @@ const PlaylistEditForm = (props) => {
) : (
)}
-
+
{(formDataProps) => }
diff --git a/ui/src/playlist/PlaylistList.js b/ui/src/playlist/PlaylistList.js
index 31ce6579c..bd4f09030 100644
--- a/ui/src/playlist/PlaylistList.js
+++ b/ui/src/playlist/PlaylistList.js
@@ -12,6 +12,8 @@ import {
useUpdate,
useNotify,
useRecordContext,
+ BulkDeleteButton,
+ usePermissions,
} from 'react-admin'
import Switch from '@material-ui/core/Switch'
import { useMediaQuery } from '@material-ui/core'
@@ -22,24 +24,29 @@ import {
isWritable,
useSelectedFields,
useResourceRefresh,
- isSmartPlaylist,
} from '../common'
import PlaylistListActions from './PlaylistListActions'
+import ChangePublicStatusButton from './ChangePublicStatusButton'
-const PlaylistFilter = (props) => (
-
-
-
-
-
-
-)
+const PlaylistFilter = (props) => {
+ const { permissions } = usePermissions()
+ return (
+
+
+ {permissions === 'admin' && (
+
+
+
+ )}
+
+ )
+}
const TogglePublicInput = ({ resource, source }) => {
const record = useRecordContext()
@@ -69,11 +76,19 @@ const TogglePublicInput = ({ resource, source }) => {
)
}
+const PlaylistListBulkActions = (props) => (
+ <>
+
+
+
+ >
+)
+
const PlaylistList = (props) => {
const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs'))
const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md'))
@@ -81,9 +96,9 @@ const PlaylistList = (props) => {
const toggleableFields = useMemo(
() => ({
- ownerName: ,
- songCount: isDesktop && ,
- duration: isDesktop && ,
+ ownerName: isDesktop && ,
+ songCount: !isXsmall && ,
+ duration: ,
updatedAt: isDesktop && (
),
@@ -105,6 +120,7 @@ const PlaylistList = (props) => {
exporter={false}
filters={}
actions={}
+ bulkActionButtons={!isXsmall && }
>
isWritable(r?.ownerId)}>