Resolve "Allow hiding compilation artists in the Artists tab"
This commit is contained in:
parent
806912c05f
commit
7c031eb186
|
@ -101,6 +101,7 @@ class ArtistFilter(
|
||||||
|
|
||||||
q = fields.SearchFilter(search_fields=["name"], fts_search_fields=["body_text"])
|
q = fields.SearchFilter(search_fields=["name"], fts_search_fields=["body_text"])
|
||||||
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
||||||
|
has_albums = filters.BooleanFilter(field_name="_", method="filter_has_albums")
|
||||||
tag = TAG_FILTER
|
tag = TAG_FILTER
|
||||||
scope = common_filters.ActorScopeFilter(
|
scope = common_filters.ActorScopeFilter(
|
||||||
actor_field="tracks__uploads__library__actor", distinct=True
|
actor_field="tracks__uploads__library__actor", distinct=True
|
||||||
|
@ -130,6 +131,12 @@ class ArtistFilter(
|
||||||
actor = utils.get_actor_from_request(self.request)
|
actor = utils.get_actor_from_request(self.request)
|
||||||
return queryset.playable_by(actor, value).distinct()
|
return queryset.playable_by(actor, value).distinct()
|
||||||
|
|
||||||
|
def filter_has_albums(self, queryset, name, value):
|
||||||
|
if value is True:
|
||||||
|
return queryset.filter(albums__isnull=False)
|
||||||
|
else:
|
||||||
|
return queryset.filter(albums__isnull=True)
|
||||||
|
|
||||||
|
|
||||||
class TrackFilter(
|
class TrackFilter(
|
||||||
RelatedFilterSet,
|
RelatedFilterSet,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Allow users to hide compilation artists on the artist search page (#1053)
|
|
@ -67,6 +67,14 @@ Playable:
|
||||||
schema:
|
schema:
|
||||||
required: false
|
required: false
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
HasAlbums:
|
||||||
|
name: "has_albums"
|
||||||
|
in: "query"
|
||||||
|
default: null
|
||||||
|
description: "Filter/exclude artists with no associated albums"
|
||||||
|
schema:
|
||||||
|
required: false
|
||||||
|
type: "boolean"
|
||||||
Refresh:
|
Refresh:
|
||||||
name: "refresh"
|
name: "refresh"
|
||||||
in: "query"
|
in: "query"
|
||||||
|
|
|
@ -361,6 +361,7 @@ paths:
|
||||||
- name
|
- name
|
||||||
- random
|
- random
|
||||||
- $ref: "./api/parameters.yml#/Playable"
|
- $ref: "./api/parameters.yml#/Playable"
|
||||||
|
- $ref: "./api/parameters.yml#/HasAlbums"
|
||||||
- $ref: "./api/parameters.yml#/Library"
|
- $ref: "./api/parameters.yml#/Library"
|
||||||
- $ref: "./api/parameters.yml#/PageNumber"
|
- $ref: "./api/parameters.yml#/PageNumber"
|
||||||
- $ref: "./api/parameters.yml#/PageSize"
|
- $ref: "./api/parameters.yml#/PageSize"
|
||||||
|
|
|
@ -44,6 +44,13 @@
|
||||||
<option :value="parseInt(50)">50</option>
|
<option :value="parseInt(50)">50</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label><translate translate-context="Content/Search/Checkbox/Noun">Exclude Compilation Artists</translate></label>
|
||||||
|
<div id="excludeCompilation" class="ui fitted toggle checkbox">
|
||||||
|
<input id="exclude-compilation" v-model="excludeCompilation" true-value="true" false-value="null" type="checkbox">
|
||||||
|
<label></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="ui hidden divider"></div>
|
<div class="ui hidden divider"></div>
|
||||||
|
@ -116,6 +123,7 @@ export default {
|
||||||
return {
|
return {
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
result: null,
|
result: null,
|
||||||
|
excludeCompilation: true,
|
||||||
page: parseInt(this.defaultPage),
|
page: parseInt(this.defaultPage),
|
||||||
query: this.defaultQuery,
|
query: this.defaultQuery,
|
||||||
tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }),
|
tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }),
|
||||||
|
@ -161,6 +169,7 @@ export default {
|
||||||
scope: this.scope,
|
scope: this.scope,
|
||||||
page: this.page,
|
page: this.page,
|
||||||
page_size: this.paginateBy,
|
page_size: this.paginateBy,
|
||||||
|
has_albums: this.excludeCompilation,
|
||||||
q: this.query,
|
q: this.query,
|
||||||
ordering: this.getOrderingAsString(),
|
ordering: this.getOrderingAsString(),
|
||||||
playable: "true",
|
playable: "true",
|
||||||
|
@ -195,6 +204,9 @@ export default {
|
||||||
},
|
},
|
||||||
"$store.state.moderation.lastUpdate": function () {
|
"$store.state.moderation.lastUpdate": function () {
|
||||||
this.fetchData()
|
this.fetchData()
|
||||||
|
},
|
||||||
|
excludeCompilation() {
|
||||||
|
this.fetchData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ $bottom-player-height: 4rem;
|
||||||
@import "./pages/_admin_account_detail.scss";
|
@import "./pages/_admin_account_detail.scss";
|
||||||
@import "./pages/_admin_domain_detail.scss";
|
@import "./pages/_admin_domain_detail.scss";
|
||||||
@import "./pages/_admin_library.scss";
|
@import "./pages/_admin_library.scss";
|
||||||
|
@import "./pages/_artists.scss";
|
||||||
@import "./pages/_home.scss";
|
@import "./pages/_home.scss";
|
||||||
@import "./pages/_library.scss";
|
@import "./pages/_library.scss";
|
||||||
@import "./pages/_notifications.scss";
|
@import "./pages/_notifications.scss";
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#excludeCompilation {
|
||||||
|
margin-top: 0.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.multiple.search.dropdown > input.search {
|
||||||
|
width: auto;
|
||||||
|
}
|
Loading…
Reference in New Issue