Merge branch '1053-allow-hiding-compilation-artists-in-the-artists-tab' into 'develop'
Resolve "Allow hiding compilation artists in the Artists tab" Closes #1063 and #1053 See merge request funkwhale/funkwhale!1179
This commit is contained in:
		
						commit
						2d31262179
					
				| 
						 | 
					@ -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