Merge branch '109-filter-requests' into 'develop'
Resolve "Archive completed import requests" Closes #109 See merge request funkwhale/funkwhale!170
This commit is contained in:
commit
e0fce26820
|
@ -1,10 +1,18 @@
|
||||||
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 = [
|
||||||
('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)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
List pending requests by default, added a status filter for requests (#109)
|
|
@ -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 @@
|
||||||
<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/'
|
||||||
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 {
|
||||||
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 {
|
||||||
},
|
},
|
||||||
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 {
|
||||||
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 {
|
||||||
query () {
|
query () {
|
||||||
this.updateQueryString()
|
this.updateQueryString()
|
||||||
this.fetchData()
|
this.fetchData()
|
||||||
|
},
|
||||||
|
status () {
|
||||||
|
this.updateQueryString()
|
||||||
|
this.fetchData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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: [
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue