Skip to content
Snippets Groups Projects
Verified Commit 42a2ffbf authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Fix #109: List pending requests by default, added a status filter for requests

parent f2d20e1b
No related branches found
No related tags found
No related merge requests found
import django_filters import django_filters
from funkwhale_api.common import fields
from . import models from . import models
class ImportRequestFilter(django_filters.FilterSet): class ImportRequestFilter(django_filters.FilterSet):
q = fields.SearchFilter(search_fields=[
'artist_name',
'user__username',
'albums',
'comment',
])
class Meta: class Meta:
model = models.ImportRequest model = models.ImportRequest
fields = { fields = {
......
...@@ -15,6 +15,7 @@ STATUS_CHOICES = [ ...@@ -15,6 +15,7 @@ STATUS_CHOICES = [
('closed', 'closed'), ('closed', 'closed'),
] ]
class ImportRequest(models.Model): class ImportRequest(models.Model):
creation_date = models.DateTimeField(default=timezone.now) creation_date = models.DateTimeField(default=timezone.now)
imported_date = models.DateTimeField(null=True, blank=True) imported_date = models.DateTimeField(null=True, blank=True)
......
List pending requests by default, added a status filter for requests (#109)
...@@ -6,7 +6,11 @@ ...@@ -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/radios" exact><i18next path="Radios"/></router-link>
<router-link class="ui item" to="/library/playlists" exact><i18next path="Playlists"/></router-link> <router-link class="ui item" to="/library/playlists" exact><i18next path="Playlists"/></router-link>
<div class="ui secondary right menu"> <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"/> <i18next path="Requests"/>
<div class="ui teal label">{{ requestsCount }}</div> <div class="ui teal label">{{ requestsCount }}</div>
</router-link> </router-link>
......
...@@ -8,6 +8,16 @@ ...@@ -8,6 +8,16 @@
<label>{{ $t('Search') }}</label> <label>{{ $t('Search') }}</label>
<input type="text" v-model="query" placeholder="Enter an artist name, a username..."/> <input type="text" v-model="query" placeholder="Enter an artist name, a username..."/>
</div> </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"> <div class="field">
<label>{{ $t('Ordering') }}</label> <label>{{ $t('Ordering') }}</label>
<select class="ui dropdown" v-model="ordering"> <select class="ui dropdown" v-model="ordering">
...@@ -81,7 +91,8 @@ const FETCH_URL = 'requests/import-requests/' ...@@ -81,7 +91,8 @@ const FETCH_URL = 'requests/import-requests/'
export default { export default {
mixins: [OrderingMixin, PaginationMixin], mixins: [OrderingMixin, PaginationMixin],
props: { props: {
defaultQuery: {type: String, required: false, default: ''} defaultQuery: {type: String, required: false, default: ''},
defaultStatus: {required: false, default: 'any'}
}, },
components: { components: {
RequestCard, RequestCard,
...@@ -96,7 +107,8 @@ export default { ...@@ -96,7 +107,8 @@ export default {
query: this.defaultQuery, query: this.defaultQuery,
paginateBy: parseInt(this.defaultPaginateBy || 12), paginateBy: parseInt(this.defaultPaginateBy || 12),
orderingDirection: defaultOrdering.direction, orderingDirection: defaultOrdering.direction,
ordering: defaultOrdering.field ordering: defaultOrdering.field,
status: this.defaultStatus || 'any'
} }
}, },
created () { created () {
...@@ -107,14 +119,18 @@ export default { ...@@ -107,14 +119,18 @@ export default {
}, },
methods: { methods: {
updateQueryString: _.debounce(function () { updateQueryString: _.debounce(function () {
this.$router.replace({ let query = {
query: { query: {
query: this.query, query: this.query,
page: this.page, page: this.page,
paginateBy: this.paginateBy, paginateBy: this.paginateBy,
ordering: this.getOrderingAsString() ordering: this.getOrderingAsString()
} }
}) }
if (this.status !== 'any') {
query.query.status = this.status
}
this.$router.replace(query)
}, 500), }, 500),
fetchData: _.debounce(function () { fetchData: _.debounce(function () {
var self = this var self = this
...@@ -123,9 +139,12 @@ export default { ...@@ -123,9 +139,12 @@ export default {
let params = { let params = {
page: this.page, page: this.page,
page_size: this.paginateBy, page_size: this.paginateBy,
search: this.query, q: this.query,
ordering: this.getOrderingAsString() ordering: this.getOrderingAsString()
} }
if (this.status !== 'any') {
params.status = this.status
}
logger.default.debug('Fetching request...') logger.default.debug('Fetching request...')
axios.get(url, {params: params}).then((response) => { axios.get(url, {params: params}).then((response) => {
self.result = response.data self.result = response.data
...@@ -165,6 +184,10 @@ export default { ...@@ -165,6 +184,10 @@ export default {
query () { query () {
this.updateQueryString() this.updateQueryString()
this.fetchData() this.fetchData()
},
status () {
this.updateQueryString()
this.fetchData()
} }
} }
} }
......
...@@ -212,7 +212,7 @@ export default new Router({ ...@@ -212,7 +212,7 @@ export default new Router({
defaultQuery: route.query.query, defaultQuery: route.query.query,
defaultPaginateBy: route.query.paginateBy, defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page, defaultPage: route.query.page,
defaultStatus: route.query.status || 'pending' defaultStatus: route.query.status || 'any'
}), }),
children: [ children: [
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment