ApplETS / ApplETS/Notre-Dame-v3

Afficher la liste des notifications dans l'app

Open
#190 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Kotlin
Stars
13
Forks
3
PR merge metrics
No merged PRs in 30d

Description

L'application devrait permettre d'afficher les notifications sous la forme d'une liste. Cette dernière devrait permettre à l'utilisateur de distinguer entre les notifications et non lues. Un clic sur une notification devrait marquer celle-ci comme étant lue et mener l'utilisateur vers l'écran concernée. Pour ce faire, il serait judicieux de partager la logique avec #189.

### Endpoints
Une collection Postman est disponible pour les membres d'ApplETS.

Si vous n'y avez pas accès, vous pouvez consulter les appels AJAX effectués sur [MonÉTS](https://portail.etsmtl.ca/).

Pour ce faire, naviguez vers votre page [MonÉTS](https://portail.etsmtl.ca/) et assurez-vous que votre tableau de bord comporte le portlet des notifications. Ensuite, ouvez l'inspecteur de votre navigateur.

L'onglet « Network » avec le filtre « XHR » vous permettra de visualiser les appels AJAX.
Alternativement, dans l'onglet « Sources », consultez `(index)` pour connaître dont ceux-si sont utilisés.
![image](https://user-images.githubusercontent.com/22182973/62833601-957c6680-bc0f-11e9-8411-5029624fa225.png)

Au moment de la création de cet issue, il est possible de consulter, entre autres, les appels AJAX suivants :
Cliquez pour développer ou masquer les extraits de code

Archivage :
```javascript
onSubmitClick: function() {
//archiver les notfications

ko.utils.arrayForEach(this.Notifications(), function(item) {
item.IdDossier = 2; //Dossier archive
$.ajax({
url: '/api/notification/' + item.Id,
type: 'PUT',
data: item,
success: function (result) {

}
});
});
$("#wid-notifications-enseignants").hide('blind');
}
```
Chargement des nouvelles notifications :
```javascript
loadNewNotifications: function () {
//Vérifier si nouvelles notifications on été ajoutés depuis que la page est ouverte
//seulement utile si dans dossier reception
if (notification.viewModel.selectedDossier() == notification.viewModel.idDossierReception()){
var request = $.ajax({
url: '/api/notification/dossier/' + notification.viewModel.selectedDossier(),
type: 'GET',
cache:false,
data: JSON.stringify({skip: 0, nbMessages: 10}),
contentType: "application/json; charset=utf-8",
success: function (data) {

ko.utils.arrayForEach(data, function (item) {
var isInArray = false;
ko.utils.arrayForEach(notification.viewModel.notifications(), function(notification){
if ( notification.Id == item.Id)
{
isInArray = true;
}
});
if (!isInArray)
{
item.recentlyAdded = true;
notification.viewModel.newNotifications(notification.viewModel.newNotifications()+1)
notification.viewModel.notifications.splice(0,0,item); //add on top
}
});
//notification.viewModel.pendingRequest(false);
}});
request.fail(function (jqXHR, textStatus, errorThrown) {
console.log("ERROR: obtenir notifications du dossier " + notification.viewModel.selectedDossier());
console.log("textStatus: " + textStatus);
console.log("errorThrown " + errorThrown);
});
request.always(function () {
// console.log("loadNewNotifications() complete");
//notification.viewModel.pendingRequest(false);
});
}
}
```

Chargement des notifications :
```javascript
var request = $.ajax({
url: '/api/notification/dossier/' + notification.viewModel.selectedDossier(),
type: 'GET',
cache:false,
data: {skip: notification.viewModel.notifications().length, nbMessages: 10 },
contentType: "application/json; charset=utf-8",
success: function (data) {
//notification.viewModel.notifications(data);
if (data !== null){
if (data.length > 0)
{
ko.utils.arrayForEach(data, function (item) {
notification.viewModel.notifications.push(item);
})
notification.viewModel.notifications.sort(notification.viewModel.sortNotificationByDateAffichageDesc);
}
if (data.length < 10 ) {
$("#notification_load-more").css("display","none");
}

notification.viewModel.newNotifications(0);
}
notification.viewModel.pendingRequest(false);
}});
request.fail(function (jqXHR, textStatus, errorThrown) {
console.log("ERROR: obtenir notifications du dossier " + notification.viewModel.selectedDossier());
console.log("textStatus: " + textStatus);
console.log("errorThrown " + errorThrown);
animatePortletError('#notification-zone-notification', "Impossible de récupérer les notifications.");
});
request.always(function () {
// console.log("loadNotifications() complete");
$('#wid-id-message .jarviswidget-loader').css("display", "none");
notification.viewModel.pendingRequest(false);
**});**
```

Voici un tableau présentant les endoints qui ont été utilisé dans ce code.

| API | Description |
|------------------------------------------------------------------------------ |-------------------------------------------------------------------------------------------- |
| PUT api/notification/{id} | Modification / Archivage de la notification (dans le dossier spécifié) |
| GET api/notification/dossier/{idDossier}?skip={skip}&nbMessages={nbMessages} | Obtention de toutes les notifications du dossier spécifié de l'utilisateur (limite de 100) |
| GET api/notification | Obtention de toutes les notifications de l'utilisateur **(à éviter, car la requête peut durer longtemps)** |

### Contenu des notifications
Si vous êtes ou étiez un étudiant de l'ÉTS, afin de vous renseigner davantage à propos du contenu des notifications, il serait possible de consulter directement le site web [MonÉTS](https://portail.etsmtl.ca/). En effet, le portlet « Notifications » vous permet de consulter les notifications vous ayant été transmises. Pour consulter le contenu de celles-ci, il suffit d'observer l'activité réseau en utilisant l'inspecteur de votre navigateur.

Sinon, effectuez simplement une requête GET vers `https://portail.etsmtl.ca/api/notification` après vous êtes authentifié via une requête POST vers `https://portail.etsmtl.ca/api/authentification`. Pour l'authentification, spécifiez dans l'entête, `Content-Type: application/json`. De plus, le corps doit contenir votre code universel et votre mot de passe :
```json
{
"Username": "ens\\AX12345",
"Password": ""
}
```
Le cookie obtenu vous permettra d'effectuer la plupart des autres requêtes.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.