SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 4677660d authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Work on accounts listing

parent 500a8c10
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,25 @@ __license__ = "AGPL v3"
from django.urls import reverse
from rest_framework import serializers
from ..models import Event, StoredMessage, StoredMessageAttachment
from ..models import (
EmailAccount, EmailAccountAccess,
Event,
StoredMessage, StoredMessageAttachment)
class EmailAccountSerializer(serializers.ModelSerializer):
class Meta:
model = EmailAccount
fields = ['name', 'email', 'description']
class EmailAccountAccessSerializer(serializers.ModelSerializer):
"""For request.user, return list of email account accesses."""
account = EmailAccountSerializer()
class Meta:
model = EmailAccountAccess
fields = ['account', 'rights', 'date_from', 'date_until']
class EventSerializer(serializers.ModelSerializer):
......
......@@ -11,8 +11,24 @@ from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.permissions import AllowAny, IsAdminUser
from rest_framework import filters
from ..models import Event, StoredMessage
from .serializers import EventSerializer, StoredMessageSerializer
from ..models import EmailAccount, EmailAccountAccess, Event, StoredMessage
from .serializers import (
EmailAccountSerializer, EmailAccountAccessSerializer,
EventSerializer,
StoredMessageSerializer)
class EmailAccountListAPIView(ListAPIView):
permission_classes = (IsAdminUser,)
serializer_class = EmailAccountSerializer
class UserEmailAccountAccessListAPIView(ListAPIView):
"""ListAPIView returning request.user's email account accesses."""
serializer_class = EmailAccountAccessSerializer
def get_queryset(self):
return self.request.user.email_account_accesses.all()
class EventListAPIView(ListAPIView):
......
import Vue from 'vue';
import BootstrapVue from 'bootstrap-vue';
Vue.use(BootstrapVue);
import 'bootstrap-vue/dist/bootstrap-vue.css';
import UserAccountsTable from './components/Accounts.vue'
new Vue({
render: h => h(UserAccountsTable),
}).$mount('#user-accounts-table');
<template>
<div class="overflow-auto">
<b-card bg-variant="light">
<b-form-group>
<div v-for="access in accesses">
<input
type="radio"
v-model="accountSelected"
:id="access"
:value="access.account.email"
>
{{ access.account.email }}
</div>
<!-- <b-form-checkbox-group -->
<!-- v-model="accountSelected"> -->
<!-- <b-form-checkbox v-for="account in accounts" :value="account.email"> -->
<!-- {{ account }} -->
<!-- </b-form-checkbox> -->
<!-- </b-form-checkbox-group> -->
</b-form-group>
<p>Account to display: {{ accountSelected }}</p>
</b-card>
</div>
</template>
<script>
export default {
name: "user-accounts-table",
data() {
return {
accesses: null,
accountSelected: null,
}
},
methods: {
fetchAccounts () {
fetch('/mail/api/user_account_accesses')
.then(stream => stream.json())
.then(data => this.accesses = data.results)
.catch(error => console.error(error))
}
},
mounted() {
this.fetchAccounts()
},
}
</script>
......@@ -91,7 +91,7 @@
<script>
import MessageContent from './MessageContent.vue'
import MessageContent from './MessageContent.vue'
export default {
name: "messages-table",
......
......@@ -29,6 +29,12 @@
{% endfor %}
</table>
<h3>Accounts</h3>
<div id="user-accounts-table">
<user-accounts-table></user-accounts-table>
</div>
<h3>Messages</h3>
<div id="messages-table">
......
......@@ -16,6 +16,16 @@ urlpatterns = [
path('api/', include([
path( # /mail/api/accounts
'accounts',
apiviews.EmailAccountListAPIView.as_view(),
name='accounts'
),
path( # /mail/api/user_account_accesses
'user_account_accesses',
apiviews.UserEmailAccountAccessListAPIView.as_view(),
name='user_account_accesses'
),
path( # /mail/api/events
'events',
apiviews.EventListAPIView.as_view(),
......
......@@ -20,6 +20,7 @@ module.exports = {
"./scipost/static/scipost/assets/js/newsticker.js",
],
vue: [
"./apimail/static/apimail/assets/vue/accounts_table.js",
"./apimail/static/apimail/assets/vue/messages_table.js",
],
},
......
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