From 42a2ffbf24d2df0f29b423f14a2acd7195959d89 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Fri, 27 Apr 2018 22:23:25 +0200 Subject: [PATCH] Fix #109: List pending requests by default, added a status filter for requests --- api/funkwhale_api/requests/filters.py | 8 +++++ api/funkwhale_api/requests/models.py | 1 + changes/changelog.d/109.enhancement | 1 + front/src/components/library/Library.vue | 6 +++- .../src/components/requests/RequestsList.vue | 33 ++++++++++++++++--- front/src/router/index.js | 2 +- 6 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 changes/changelog.d/109.enhancement diff --git a/api/funkwhale_api/requests/filters.py b/api/funkwhale_api/requests/filters.py index bf353e8a..7d060336 100644 --- a/api/funkwhale_api/requests/filters.py +++ b/api/funkwhale_api/requests/filters.py @@ -1,10 +1,18 @@ import django_filters +from funkwhale_api.common import fields from . import models class ImportRequestFilter(django_filters.FilterSet): + q = fields.SearchFilter(search_fields=[ + 'artist_name', + 'user__username', + 'albums', + 'comment', + ]) + class Meta: model = models.ImportRequest fields = { diff --git a/api/funkwhale_api/requests/models.py b/api/funkwhale_api/requests/models.py index c2985243..d08dd400 100644 --- a/api/funkwhale_api/requests/models.py +++ b/api/funkwhale_api/requests/models.py @@ -15,6 +15,7 @@ STATUS_CHOICES = [ ('closed', 'closed'), ] + class ImportRequest(models.Model): creation_date = models.DateTimeField(default=timezone.now) imported_date = models.DateTimeField(null=True, blank=True) diff --git a/changes/changelog.d/109.enhancement b/changes/changelog.d/109.enhancement new file mode 100644 index 00000000..60e740d7 --- /dev/null +++ b/changes/changelog.d/109.enhancement @@ -0,0 +1 @@ +List pending requests by default, added a status filter for requests (#109) diff --git a/front/src/components/library/Library.vue b/front/src/components/library/Library.vue index 507ecd26..fb5cc87c 100644 --- a/front/src/components/library/Library.vue +++ b/front/src/components/library/Library.vue @@ -6,7 +6,11 @@ <router-link class="ui item" to="/library/radios" exact><i18next path="Radios"/></router-link> <router-link class="ui item" to="/library/playlists" exact><i18next path="Playlists"/></router-link> <div class="ui secondary right menu"> - <router-link v-if="$store.state.auth.authenticated" class="ui item" to="/library/requests/" exact> + <router-link + v-if="$store.state.auth.authenticated" + class="ui item" + :to="{name: 'library.requests', query: {status: 'pending' }}" + exact> <i18next path="Requests"/> <div class="ui teal label">{{ requestsCount }}</div> </router-link> diff --git a/front/src/components/requests/RequestsList.vue b/front/src/components/requests/RequestsList.vue index 4464031c..130214c3 100644 --- a/front/src/components/requests/RequestsList.vue +++ b/front/src/components/requests/RequestsList.vue @@ -8,6 +8,16 @@ <label>{{ $t('Search') }}</label> <input type="text" v-model="query" placeholder="Enter an artist name, a username..."/> </div> + <div class="field"> + <label>{{ $t('Status') }}</label> + <select class="ui dropdown" v-model="status"> + <option :value="'any'">{{ $t('Any') }}</option> + <option :value="'pending'">{{ $t('Pending') }}</option> + <option :value="'accepted'">{{ $t('Accepted') }}</option> + <option :value="'imported'">{{ $t('Imported') }}</option> + <option :value="'closed'">{{ $t('Closed') }}</option> + </select> + </div> <div class="field"> <label>{{ $t('Ordering') }}</label> <select class="ui dropdown" v-model="ordering"> @@ -81,7 +91,8 @@ const FETCH_URL = 'requests/import-requests/' export default { mixins: [OrderingMixin, PaginationMixin], props: { - defaultQuery: {type: String, required: false, default: ''} + defaultQuery: {type: String, required: false, default: ''}, + defaultStatus: {required: false, default: 'any'} }, components: { RequestCard, @@ -96,7 +107,8 @@ export default { query: this.defaultQuery, paginateBy: parseInt(this.defaultPaginateBy || 12), orderingDirection: defaultOrdering.direction, - ordering: defaultOrdering.field + ordering: defaultOrdering.field, + status: this.defaultStatus || 'any' } }, created () { @@ -107,14 +119,18 @@ export default { }, methods: { updateQueryString: _.debounce(function () { - this.$router.replace({ + let query = { query: { query: this.query, page: this.page, paginateBy: this.paginateBy, ordering: this.getOrderingAsString() } - }) + } + if (this.status !== 'any') { + query.query.status = this.status + } + this.$router.replace(query) }, 500), fetchData: _.debounce(function () { var self = this @@ -123,9 +139,12 @@ export default { let params = { page: this.page, page_size: this.paginateBy, - search: this.query, + q: this.query, ordering: this.getOrderingAsString() } + if (this.status !== 'any') { + params.status = this.status + } logger.default.debug('Fetching request...') axios.get(url, {params: params}).then((response) => { self.result = response.data @@ -165,6 +184,10 @@ export default { query () { this.updateQueryString() this.fetchData() + }, + status () { + this.updateQueryString() + this.fetchData() } } } diff --git a/front/src/router/index.js b/front/src/router/index.js index a2bf7819..2e06bda9 100644 --- a/front/src/router/index.js +++ b/front/src/router/index.js @@ -212,7 +212,7 @@ export default new Router({ defaultQuery: route.query.query, defaultPaginateBy: route.query.paginateBy, defaultPage: route.query.page, - defaultStatus: route.query.status || 'pending' + defaultStatus: route.query.status || 'any' }), children: [ ] -- GitLab