From 47cc2a3920fecca516f2c8002388a0adf6da940e Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Tue, 22 May 2018 23:30:37 +0200
Subject: [PATCH] Fix #179: fixed broken ordering in front-end lists

---
 api/funkwhale_api/music/views.py               | 6 +++---
 changes/changelog.d/179.bugfix                 | 1 +
 front/src/components/favorites/List.vue        | 7 ++++---
 front/src/components/library/Artists.vue       | 4 ++--
 front/src/components/library/Radios.vue        | 4 ++--
 front/src/components/mixins/Ordering.vue       | 8 ++++++--
 front/src/components/requests/RequestsList.vue | 4 ++--
 front/src/views/federation/LibraryList.vue     | 4 ++--
 front/src/views/playlists/List.vue             | 4 ++--
 9 files changed, 24 insertions(+), 18 deletions(-)
 create mode 100644 changes/changelog.d/179.bugfix

diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py
index 24a9cbbcd0..5e3a7a4c17 100644
--- a/api/funkwhale_api/music/views.py
+++ b/api/funkwhale_api/music/views.py
@@ -153,11 +153,11 @@ class TrackViewSet(TagViewSetMixin, viewsets.ReadOnlyModelViewSet):
     filter_class = filters.TrackFilter
     ordering_fields = (
         'creation_date',
-        'title__unaccent',
-        'album__title__unaccent',
+        'title',
+        'album__title',
         'album__release_date',
         'position',
-        'artist__name__unaccent',
+        'artist__name',
     )
 
     def get_queryset(self):
diff --git a/changes/changelog.d/179.bugfix b/changes/changelog.d/179.bugfix
new file mode 100644
index 0000000000..ac6c489e2b
--- /dev/null
+++ b/changes/changelog.d/179.bugfix
@@ -0,0 +1 @@
+Fixed broken ordering in front-end lists (#179)
diff --git a/front/src/components/favorites/List.vue b/front/src/components/favorites/List.vue
index d189f2b85e..120aae2a90 100644
--- a/front/src/components/favorites/List.vue
+++ b/front/src/components/favorites/List.vue
@@ -26,7 +26,7 @@
           <div class="field">
             <i18next tag="label" path="Ordering direction"/>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value=""><i18next path="Ascending"/></option>
+              <option value="+"><i18next path="Ascending"/></option>
               <option value="-"><i18next path="Descending"/></option>
             </select>
           </div>
@@ -74,7 +74,7 @@ export default {
     Pagination
   },
   data () {
-    let defaultOrdering = this.getOrderingFromString(this.defaultOrdering || 'artist__name')
+    let defaultOrdering = this.getOrderingFromString(this.defaultOrdering || '-creation_date')
     return {
       results: null,
       isLoading: false,
@@ -82,9 +82,10 @@ export default {
       previousLink: null,
       page: parseInt(this.defaultPage),
       paginateBy: parseInt(this.defaultPaginateBy || 25),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       orderingOptions: [
+        ['creation_date', 'Creation date'],
         ['title', 'Track name'],
         ['album__title', 'Album name'],
         ['artist__name', 'Artist name']
diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue
index aafa3a160e..9f324eef34 100644
--- a/front/src/components/library/Artists.vue
+++ b/front/src/components/library/Artists.vue
@@ -19,7 +19,7 @@
           <div class="field">
             <i18next tag="label" path="Ordering direction"/>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value="">Ascending</option>
+              <option value="+">Ascending</option>
               <option value="-">Descending</option>
             </select>
           </div>
@@ -95,7 +95,7 @@ export default {
       page: parseInt(this.defaultPage),
       query: this.defaultQuery,
       paginateBy: parseInt(this.defaultPaginateBy || 12),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       orderingOptions: [
         ['creation_date', 'Creation date'],
diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue
index 9fcadf0a61..794e3a13b6 100644
--- a/front/src/components/library/Radios.vue
+++ b/front/src/components/library/Radios.vue
@@ -23,7 +23,7 @@
           <div class="field">
             <i18next tag="label" path="Ordering direction"/>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value=""><i18next path="Ascending"/></option>
+              <option value="+"><i18next path="Ascending"/></option>
               <option value="-"><i18next path="Descending"/></option>
             </select>
           </div>
@@ -99,7 +99,7 @@ export default {
       page: parseInt(this.defaultPage),
       query: this.defaultQuery,
       paginateBy: parseInt(this.defaultPaginateBy || 12),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       orderingOptions: [
         ['creation_date', 'Creation date'],
diff --git a/front/src/components/mixins/Ordering.vue b/front/src/components/mixins/Ordering.vue
index 494dddcee1..6235fd7d04 100644
--- a/front/src/components/mixins/Ordering.vue
+++ b/front/src/components/mixins/Ordering.vue
@@ -13,13 +13,17 @@ export default {
         }
       } else {
         return {
-          direction: '',
+          direction: '+',
           field: s
         }
       }
     },
     getOrderingAsString () {
-      return [this.orderingDirection, this.ordering].join('')
+      let direction = this.orderingDirection
+      if (direction === '+') {
+        direction = ''
+      }
+      return [direction, this.ordering].join('')
     }
   }
 }
diff --git a/front/src/components/requests/RequestsList.vue b/front/src/components/requests/RequestsList.vue
index 130214c3a5..58b7f5fa9c 100644
--- a/front/src/components/requests/RequestsList.vue
+++ b/front/src/components/requests/RequestsList.vue
@@ -29,7 +29,7 @@
           <div class="field">
             <label>{{ $t('Ordering direction') }}</label>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value="">Ascending</option>
+              <option value="+">Ascending</option>
               <option value="-">Descending</option>
             </select>
           </div>
@@ -106,7 +106,7 @@ export default {
       page: parseInt(this.defaultPage),
       query: this.defaultQuery,
       paginateBy: parseInt(this.defaultPaginateBy || 12),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       status: this.defaultStatus || 'any'
     }
diff --git a/front/src/views/federation/LibraryList.vue b/front/src/views/federation/LibraryList.vue
index cc833d3a3d..d067705fa7 100644
--- a/front/src/views/federation/LibraryList.vue
+++ b/front/src/views/federation/LibraryList.vue
@@ -26,7 +26,7 @@
           <div class="field">
             <label>{{ $t('Ordering direction') }}</label>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value="">{{ $t('Ascending') }}</option>
+              <option value="+">{{ $t('Ascending') }}</option>
               <option value="-">{{ $t('Descending') }}</option>
             </select>
           </div>
@@ -102,7 +102,7 @@ export default {
       page: parseInt(this.defaultPage),
       query: this.defaultQuery,
       paginateBy: parseInt(this.defaultPaginateBy || 50),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       orderingOptions: [
         ['creation_date', 'Creation date'],
diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue
index 5001fb14db..cc6ad49bb8 100644
--- a/front/src/views/playlists/List.vue
+++ b/front/src/views/playlists/List.vue
@@ -25,7 +25,7 @@
           <div class="field">
             <label>{{ $t('Ordering direction') }}</label>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value="">{{ $t('Ascending') }}</option>
+              <option value="+">{{ $t('Ascending') }}</option>
               <option value="-">{{ $t('Descending') }}</option>
             </select>
           </div>
@@ -83,7 +83,7 @@ export default {
       page: parseInt(this.defaultPage),
       query: this.defaultQuery,
       paginateBy: parseInt(this.defaultPaginateBy || 12),
-      orderingDirection: defaultOrdering.direction,
+      orderingDirection: defaultOrdering.direction || '+',
       ordering: defaultOrdering.field,
       orderingOptions: [
         ['creation_date', 'Creation date'],
-- 
GitLab