diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py index 7dad1daa97337c2466f92dd2fd4317892aa389d9..4a13842da3b668b7aeed409b042192e238c6f42b 100644 --- a/api/funkwhale_api/federation/factories.py +++ b/api/funkwhale_api/federation/factories.py @@ -171,6 +171,7 @@ class LibraryTrackFactory(factory.DjangoModelFactory): audio_url = factory.Faker("url") audio_mimetype = "audio/ogg" metadata = factory.SubFactory(LibraryTrackMetadataFactory) + published_date = factory.LazyFunction(timezone.now) class Meta: model = models.LibraryTrack diff --git a/changes/changelog.d/326.enhancement b/changes/changelog.d/326.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..48389b6b73fc4298c54f7bf1922f06160413692e --- /dev/null +++ b/changes/changelog.d/326.enhancement @@ -0,0 +1 @@ +Can now order tracks on federated track list (#326) diff --git a/front/src/components/federation/LibraryTrackTable.vue b/front/src/components/federation/LibraryTrackTable.vue index 082629197adbef65232b27184add7bc410dbece5..781cb86dd4eea3d1a87a6c67349c28469912f288 100644 --- a/front/src/components/federation/LibraryTrackTable.vue +++ b/front/src/components/federation/LibraryTrackTable.vue @@ -15,6 +15,21 @@ <option :value="'import_pending'"><translate>Import pending</translate></option> </select> </div> + <div class="field"> + <label><translate>Ordering</translate></label> + <select class="ui dropdown" v-model="ordering"> + <option v-for="option in orderingOptions" :value="option[0]"> + {{ option[1] }} + </option> + </select> + </div> + <div class="field"> + <label><translate>Ordering direction</translate></label> + <select class="ui dropdown" v-model="orderingDirection"> + <option value="+"><translate>Ascending</translate></option> + <option value="-"><translate>Descending</translate></option> + </select> + </div> </div> </div> <div class="dimmable"> @@ -96,8 +111,10 @@ import _ from 'lodash' import Pagination from '@/components/Pagination' import ActionTable from '@/components/common/ActionTable' +import OrderingMixin from '@/components/mixins/Ordering' export default { + mixins: [OrderingMixin], props: { filters: {type: Object, required: false}, showLibrary: {type: Boolean, default: false} @@ -113,7 +130,15 @@ export default { page: 1, paginateBy: 25, search: '', - importedFilter: null + importedFilter: null, + orderingDirection: '-', + ordering: 'published_date', + orderingOptions: [ + ['published_date', 'Published date'], + ['title', 'Title'], + ['album_title', 'Album title'], + ['artist_name', 'Artist name'] + ] } }, created () { @@ -130,6 +155,7 @@ export default { let params = _.merge({ 'page': this.page, 'page_size': this.paginateBy, + 'ordering': this.getOrderingAsString(), 'q': this.search }, this.filters) if (this.importedFilter !== null) { @@ -178,6 +204,14 @@ export default { } }, watch: { + orderingDirection: function () { + this.page = 1 + this.fetchData() + }, + ordering: function () { + this.page = 1 + this.fetchData() + }, search (newValue) { this.page = 1 this.fetchData()