homepage_widget: improve notifications rows

This commit is contained in:
Mathieu Jaumotte 2022-01-26 14:06:49 +01:00
parent 41a6366efe
commit 39a7cecd24
4 changed files with 29 additions and 22 deletions

View File

@ -5,22 +5,24 @@
<template v-slot:thead>
<th scope="col">#</th>
<th scope="col">{{ $t('Date') }}</th>
<th scope="col">{{ $t('From') }}</th>
<th scope="col">{{ $t('Subject') }}</th>
<th scope="col">{{ $t('Entity') }}</th>
<th scope="col"></th>
</template>
<template v-slot:tbody>
<tr v-for="(n, i) in notifications.results" :key="`notify-${i}`">
<th scope="row">{{ i+1 }}</th>
<td>{{ $d(n.date.datetime, 'short') }}</td>
<td>{{ $d(n.date.datetime, 'long') }}</td>
<td>{{ n.sender.text }}</td>
<td>
<span class="unread">
<i class="fa fa-envelope-o"></i>
{{ n.title }}
<a :href="getNotificationUrl(n)">{{ n.title }}</a>
</span>
</td>
<td>
<a class="btn btn-sm btn-show"
:href="linkEntity(n)">
:href="getEntityUrl(n)">
{{ $t('show_entity', { entity: getEntityName(n) }) }}
</a>
</td>
@ -56,6 +58,9 @@ export default {
}
},
methods: {
getNotificationUrl(n) {
return `/fr/notification/${n.id}/show`
},
getEntityName(n) {
switch (n.relatedEntityClass) {
case 'Chill\\ActivityBundle\\Entity\\Activity':
@ -66,7 +71,7 @@ export default {
throw 'notification type unknown';
}
},
linkEntity(n) {
getEntityUrl(n) {
switch (n.relatedEntityClass) {
case 'Chill\\ActivityBundle\\Entity\\Activity':
return `/fr/activity/${n.relatedEntityId}/show`
@ -86,5 +91,8 @@ span.unread {
i {
margin-right: 0.5em;
}
a {
text-decoration: unset;
}
}
</style>

View File

@ -22,10 +22,14 @@
</h4>
</td>
<td>
<a class="btn btn-sm btn-update"
:href="linkEntity(w)">
{{ $t('show_entity', { entity: getEntityName(w) }) }}
</a>
<div class="btn-group" role="group" aria-label="Actions">
<a class="btn btn-sm btn-update" :href="getUrl(w)">
{{ $t('show_entity', { entity: $t('the_action') }) }}
</a>
<a class="btn btn-sm btn-show" :href="getUrl(w.accompanyingPeriod)">
{{ $t('show_entity', { entity: $t('the_course') }) }}
</a>
</div>
</td>
</tr>
</template>
@ -36,7 +40,6 @@
<script>
import { mapState, mapGetters } from "vuex";
import TabTable from "./TabTable";
import { appMessages } from 'ChillMainAssets/vuejs/HomepageWidget/js/i18n';
export default {
name: "MyWorks",
@ -59,20 +62,14 @@ export default {
}
},
methods: {
getEntityName(w) {
switch (w.type) {
getUrl(e) {
switch (e.type) {
case 'accompanying_period_work':
return appMessages.fr.the_action;
return `/fr/person/accompanying-period/work/${e.id}/edit`
case 'accompanying_period':
return `/fr/parcours/${e.id}`
default:
throw 'work type unknown';
}
},
linkEntity(w) {
switch (w.type) {
case 'accompanying_period_work':
return `/fr/person/accompanying-period/work/${w.id}/edit`
default:
throw 'work type unknown';
throw 'entity type unknown';
}
}
},

View File

@ -23,6 +23,7 @@ const appMessages = {
description: "Liste des notifications reçues et non lues.",
},
Date: "Date",
From: "De",
Subject: "Objet",
Entity: "Associé à",
show_entity: "Voir {entity}",

View File

@ -51,6 +51,7 @@ class NotificationNormalizer implements NormalizerAwareInterface, NormalizerInte
return [
'type' => 'notification',
'id' => $object->getId(),
'addressees' => $this->normalizer->normalize($object->getAddressees(), $format, $context),
'date' => $this->normalizer->normalize($object->getDate(), $format, $context),
'isRead' => $object->isReadBy($this->security->getUser()),