From 074732b1dc4bb7d6ba68864947127e2db16b59af Mon Sep 17 00:00:00 2001 From: Deluan Date: Thu, 28 Oct 2021 13:58:06 -0400 Subject: [PATCH] Filter playlists by names and comments --- persistence/playlist_repository.go | 10 ++++++++++ persistence/sql_restful.go | 9 +++++++++ ui/src/playlist/PlaylistList.js | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/persistence/playlist_repository.go b/persistence/playlist_repository.go index 360e3914..5f780206 100644 --- a/persistence/playlist_repository.go +++ b/persistence/playlist_repository.go @@ -30,9 +30,19 @@ func NewPlaylistRepository(ctx context.Context, o orm.Ormer) model.PlaylistRepos r.ctx = ctx r.ormer = o r.tableName = "playlist" + r.filterMappings = map[string]filterFunc{ + "q": playlistFilter, + } return r } +func playlistFilter(field string, value interface{}) Sqlizer { + return Or{ + substringFilter("name", value), + substringFilter("comment", value), + } +} + func (r *playlistRepository) userFilter() Sqlizer { user := loggedUser(r.ctx) if user.IsAdmin { diff --git a/persistence/sql_restful.go b/persistence/sql_restful.go index dc4a62da..d0404831 100644 --- a/persistence/sql_restful.go +++ b/persistence/sql_restful.go @@ -68,6 +68,15 @@ func fullTextFilter(field string, value interface{}) Sqlizer { return fullTextExpr(value.(string)) } +func substringFilter(field string, value interface{}) Sqlizer { + parts := strings.Split(value.(string), " ") + filters := And{} + for _, part := range parts { + filters = append(filters, Like{field: "%" + part + "%"}) + } + return filters +} + func idFilter(tableName string) func(string, interface{}) Sqlizer { return func(field string, value interface{}) Sqlizer { return Eq{tableName + ".id": value} diff --git a/ui/src/playlist/PlaylistList.js b/ui/src/playlist/PlaylistList.js index dcad5c5b..33446a21 100644 --- a/ui/src/playlist/PlaylistList.js +++ b/ui/src/playlist/PlaylistList.js @@ -26,7 +26,7 @@ import PlaylistListActions from './PlaylistListActions' const PlaylistFilter = (props) => ( - + )