From f156b8791d52efc59fa8bdd41261989d02d4eff8 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 6 Jul 2018 21:45:51 +0200
Subject: [PATCH] Fix #326: Can now order tracks on federated track list

---
 api/funkwhale_api/federation/factories.py     |  1 +
 changes/changelog.d/326.enhancement           |  1 +
 .../federation/LibraryTrackTable.vue          | 36 ++++++++++++++++++-
 3 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 changes/changelog.d/326.enhancement

diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py
index 7dad1daa97..4a13842da3 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 0000000000..48389b6b73
--- /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 082629197a..781cb86dd4 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()
-- 
GitLab