Saved filters (#1474)

* Refactor list filter
* Filter/criterion refactor
* Rename option value to type
* Remove None from options
* Add saved filter button
* Integrate default filters
This commit is contained in:
WithoutPants
2021-06-16 14:53:32 +10:00
committed by GitHub
parent 4fe4da6c01
commit dc7584d77e
74 changed files with 2583 additions and 1263 deletions

View File

@@ -0,0 +1,89 @@
package api
import (
"context"
"errors"
"strconv"
"strings"
"github.com/stashapp/stash/pkg/models"
)
func (r *mutationResolver) SaveFilter(ctx context.Context, input models.SaveFilterInput) (ret *models.SavedFilter, err error) {
if strings.TrimSpace(input.Name) == "" {
return nil, errors.New("name must be non-empty")
}
var id *int
if input.ID != nil {
idv, err := strconv.Atoi(*input.ID)
if err != nil {
return nil, err
}
id = &idv
}
if err := r.withTxn(ctx, func(repo models.Repository) error {
f := models.SavedFilter{
Mode: input.Mode,
Name: input.Name,
Filter: input.Filter,
}
if id == nil {
ret, err = repo.SavedFilter().Create(f)
} else {
f.ID = *id
ret, err = repo.SavedFilter().Update(f)
}
return err
}); err != nil {
return nil, err
}
return ret, err
}
func (r *mutationResolver) DestroySavedFilter(ctx context.Context, input models.DestroyFilterInput) (bool, error) {
id, err := strconv.Atoi(input.ID)
if err != nil {
return false, err
}
if err := r.withTxn(ctx, func(repo models.Repository) error {
return repo.SavedFilter().Destroy(id)
}); err != nil {
return false, err
}
return true, nil
}
func (r *mutationResolver) SetDefaultFilter(ctx context.Context, input models.SetDefaultFilterInput) (bool, error) {
if err := r.withTxn(ctx, func(repo models.Repository) error {
qb := repo.SavedFilter()
if input.Filter == nil {
// clearing
def, err := qb.FindDefault(input.Mode)
if err != nil {
return err
}
if def != nil {
return qb.Destroy(def.ID)
}
return nil
}
_, err := qb.SetDefault(models.SavedFilter{
Mode: input.Mode,
Filter: *input.Filter,
})
return err
}); err != nil {
return false, err
}
return true, nil
}

View File

@@ -0,0 +1,27 @@
package api
import (
"context"
"github.com/stashapp/stash/pkg/models"
)
func (r *queryResolver) FindSavedFilters(ctx context.Context, mode models.FilterMode) (ret []*models.SavedFilter, err error) {
if err := r.withReadTxn(ctx, func(repo models.ReaderRepository) error {
ret, err = repo.SavedFilter().FindByMode(mode)
return err
}); err != nil {
return nil, err
}
return ret, err
}
func (r *queryResolver) FindDefaultFilter(ctx context.Context, mode models.FilterMode) (ret *models.SavedFilter, err error) {
if err := r.withReadTxn(ctx, func(repo models.ReaderRepository) error {
ret, err = repo.SavedFilter().FindDefault(mode)
return err
}); err != nil {
return nil, err
}
return ret, err
}