From ec0002e77a9da015ddcd6328178fd0f47e4ad87b Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 22 May 2020 23:10:58 -0400 Subject: [PATCH] Add a sortable Starred column and a Starred filter to Song List --- persistence/mediafile_repository.go | 5 +++-- ui/src/album/AlbumSongs.js | 6 +++++- ui/src/i18n/en.json | 3 ++- ui/src/song/SongList.js | 10 +++++++++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/persistence/mediafile_repository.go b/persistence/mediafile_repository.go index d0d728f39..dec45155f 100644 --- a/persistence/mediafile_repository.go +++ b/persistence/mediafile_repository.go @@ -28,13 +28,14 @@ func NewMediaFileRepository(ctx context.Context, o orm.Ormer) *mediaFileReposito "random": "RANDOM()", } r.filterMappings = map[string]filterFunc{ - "title": fullTextFilter, + "title": fullTextFilter, + "starred": booleanFilter, } return r } func (r mediaFileRepository) CountAll(options ...model.QueryOptions) (int64, error) { - return r.count(Select(), options...) + return r.count(r.newSelectWithAnnotation("id", options...)) } func (r mediaFileRepository) Exists(id string) (bool, error) { diff --git a/ui/src/album/AlbumSongs.js b/ui/src/album/AlbumSongs.js index 19a00ee4c..c709a6605 100644 --- a/ui/src/album/AlbumSongs.js +++ b/ui/src/album/AlbumSongs.js @@ -6,6 +6,7 @@ import { ListToolbar, TextField, useListController, + useTranslate, } from 'react-admin' import classnames from 'classnames' import { useDispatch } from 'react-redux' @@ -65,6 +66,7 @@ const trackName = (r) => { const AlbumSongs = (props) => { const classes = useStyles(props) + const translate = useTranslate() const classesToolbar = useStylesListToolbar(props) const dispatch = useDispatch() const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs')) @@ -144,7 +146,9 @@ const AlbumSongs = (props) => { )} {isDesktop && } - + )} diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json index f30ddb00c..c027c90b5 100644 --- a/ui/src/i18n/en.json +++ b/ui/src/i18n/en.json @@ -18,7 +18,8 @@ "size": "File size", "bitRate": "Bit rate", "updatedAt": "Uploaded at", - "discSubtitle": "Disc Subtitle" + "discSubtitle": "Disc Subtitle", + "starred": "Starred" }, "actions": { "addToQueue": "Play Later", diff --git a/ui/src/song/SongList.js b/ui/src/song/SongList.js index 58eb1c1ba..94bc7c133 100644 --- a/ui/src/song/SongList.js +++ b/ui/src/song/SongList.js @@ -2,11 +2,14 @@ import React from 'react' import { Filter, FunctionField, + NullableBooleanInput, NumberField, SearchInput, TextField, + useTranslate, } from 'react-admin' import { useMediaQuery } from '@material-ui/core' +import StarBorderIcon from '@material-ui/icons/StarBorder' import { DurationField, SimpleList, @@ -23,11 +26,13 @@ import { AlbumLinkField } from './AlbumLinkField' const SongFilter = (props) => ( + ) const SongList = (props) => { const dispatch = useDispatch() + const translate = useTranslate() const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs')) const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md')) return ( @@ -66,7 +71,10 @@ const SongList = (props) => { r.year || ''} /> )} - + )}