Allow toggling a playlist public from the Playlist list view. Closes #344

This commit is contained in:
Deluan 2020-06-08 18:39:31 -04:00
parent 5e2d463129
commit b4e06c416d
2 changed files with 37 additions and 5 deletions

View File

@ -87,9 +87,13 @@ func (r *playlistRepository) Put(p *model.Playlist) error {
return err return err
} }
p.ID = id p.ID = id
err = r.updateTracks(id, tracks)
if err != nil { // Only update tracks if they are specified
return err if tracks != nil {
err = r.updateTracks(id, tracks)
if err != nil {
return err
}
} }
return r.loadTracks(p) return r.loadTracks(p)
} }

View File

@ -1,6 +1,5 @@
import React from 'react' import React from 'react'
import { import {
BooleanField,
Datagrid, Datagrid,
DateField, DateField,
EditButton, EditButton,
@ -8,7 +7,10 @@ import {
NumberField, NumberField,
SearchInput, SearchInput,
TextField, TextField,
useUpdate,
useNotify,
} from 'react-admin' } from 'react-admin'
import Switch from '@material-ui/core/Switch'
import { DurationField, List } from '../common' import { DurationField, List } from '../common'
import Writable, { isWritable } from '../common/Writable' import Writable, { isWritable } from '../common/Writable'
@ -18,15 +20,41 @@ const PlaylistFilter = (props) => (
</Filter> </Filter>
) )
const TogglePublicInput = ({ resource, record, source }) => {
const notify = useNotify()
const [togglePublic] = useUpdate(
resource,
record.id,
{
...record,
public: !record.public,
},
{
undoable: false,
onFailure: (error) => {
console.log(error)
notify('ra.page.error', 'warning')
},
}
)
const handleClick = (e) => {
togglePublic()
e.stopPropagation()
}
return <Switch checked={record[source]} onClick={handleClick} />
}
const PlaylistList = (props) => ( const PlaylistList = (props) => (
<List {...props} exporter={false} filters={<PlaylistFilter />}> <List {...props} exporter={false} filters={<PlaylistFilter />}>
<Datagrid rowClick="show" isRowSelectable={(r) => isWritable(r && r.owner)}> <Datagrid rowClick="show" isRowSelectable={(r) => isWritable(r && r.owner)}>
<TextField source="name" /> <TextField source="name" />
<TextField source="owner" /> <TextField source="owner" />
<BooleanField source="public" />
<NumberField source="songCount" /> <NumberField source="songCount" />
<DurationField source="duration" /> <DurationField source="duration" />
<DateField source="updatedAt" /> <DateField source="updatedAt" />
<TogglePublicInput source="public" />
<Writable> <Writable>
<EditButton /> <EditButton />
</Writable> </Writable>