Skip to content

Commit ad2e7c6

Browse files
Merge pull request #120 from Nathan-Etave/feat/utilisateur
Merge de la branche feat/utilisateur dans dev
2 parents bb82e74 + d566226 commit ad2e7c6

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

app/file_handler/routes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from flask_login import current_user, login_required
55
from app import socketio
66
from app.extensions import db
7+
from app.models.favoris import FAVORIS
78

89
@bp.route('/dossier/<int:folder_id>/fichier/<int:file_id>', methods=['GET'])
910
@login_required
@@ -22,10 +23,13 @@ def file(folder_id, file_id):
2223
@socketio.on('get_files_details', namespace='/file_handler')
2324
def get_files_details(data):
2425
files_id = data['files']
26+
favoris = db.session.query(FAVORIS.c.id_Fichier).filter(FAVORIS.c.id_Utilisateur == current_user.id_Utilisateur).all()
27+
favoris_ids = [favori.id_Fichier for favori in favoris]
2528
files = []
2629
for file_id in files_id:
2730
file = db.session.query(FICHIER).filter(FICHIER.id_Fichier == file_id).first()
2831
dict_file = file.to_dict()
2932
dict_file['id_Dossier'] = file.DOSSIER_.id_Dossier
33+
dict_file['is_favorite'] = file.id_Fichier in favoris_ids
3034
files.append(dict_file)
3135
socketio.emit('files_details', files, namespace='/file_handler')

app/static/js/desktop.js

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
import { previewAfterRender } from './preview.js';
2+
import { baseAfterRender } from './base.js';
23

34
document.addEventListener('DOMContentLoaded', function () {
45
let deskList = JSON.parse(localStorage.getItem('desktop'));
56
if (deskList === null) {
67
deskList = [];
78
localStorage.setItem('desktop', JSON.stringify(deskList));
89
}
10+
let csrfToken = document.querySelector('meta[name="csrf-token"]').content;
911

1012
const socket = io.connect('/file_handler');
11-
1213
socket.emit('get_files_details', { 'files': deskList });
1314

1415
let currentFile = 1;
16+
let desktop = document.getElementById('desk-section');
1517

1618
socket.on('files_details', function (data) {
17-
let desktop = document.getElementById('desk-section');
1819
let modalFooter = document.querySelector('.nav-tabs');
1920
desktop.innerHTML = '';
2021

2122
let deskFileNumber = 1;
2223
data.forEach(function (file) {
2324
let div = document.createElement('div');
2425
div.className = 'col-2';
26+
div.id = "div-file-" + file.id_Fichier;
27+
div.setAttribute('data-number', deskFileNumber);
2528

2629
let card = document.createElement('div');
2730
card.className = 'card';
@@ -43,6 +46,15 @@ document.addEventListener('DOMContentLoaded', function () {
4346
</div>
4447
<div>
4548
<p class="card-title h5" style="font-size: 1.5em; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;">${file.nom_Fichier}<p>
49+
</div>
50+
<div class="desktop-element">
51+
<a href="#" id="${ file.id_Fichier }" class="favori" is-fav="${ file.is_favorite }" onclick="event.stopPropagation();">
52+
<i class="fa-solid fa-star fa-lg me-2" style="color: #FFD43B;"
53+
id="fav-${ file.id_Fichier }"></i>
54+
</a>
55+
<a href="#" id="${ file.id_Fichier }" class="desktop-btn" onclick="event.stopPropagation();">
56+
<i class="fa-regular fa-square-minus fa-lg" id="desk-${ file.id_Fichier }"></i>
57+
</a>
4658
</div>`;
4759

4860
fileDiv.addEventListener('click', function () {
@@ -86,6 +98,78 @@ document.addEventListener('DOMContentLoaded', function () {
8698
deskFileNumber++;
8799

88100
});
101+
102+
let favs = document.querySelectorAll('.favori');
103+
favs.forEach(function (fav) {
104+
let id = fav.id;
105+
let isFav = fav.getAttribute('is-fav');
106+
let etoile = document.getElementById("fav-" + id);
107+
if (isFav === "true") {
108+
fav.className = "favori-true";
109+
}
110+
else {
111+
fav.className = "favori-false";
112+
etoile.className = "fa-regular fa-star fa-lg me-2";
113+
}
114+
fav.addEventListener('click', function (event) {
115+
event.preventDefault();
116+
if (fav.className === "favori-true") {
117+
fetch("/favori/" + id, {
118+
method: "DELETE",
119+
headers: {
120+
"Content-Type": "application/json",
121+
'X-CSRFToken': csrfToken
122+
}
123+
})
124+
.then(response => response.json())
125+
.then(data => {
126+
if (data.status === "ok") {
127+
fav.className = "favori-false";
128+
etoile.className = "fa-regular fa-star fa-lg me-2";
129+
}
130+
else {
131+
alert("Erreur lors de la suppression du favori");
132+
}
133+
});
134+
}
135+
else {
136+
fetch("/recherche/favori/" + id, {
137+
method: "POST",
138+
headers: {
139+
"Content-Type": "application/json",
140+
'X-CSRFToken': csrfToken
141+
}
142+
})
143+
.then(response => response.json())
144+
.then(data => {
145+
if (data.status === "ok") {
146+
fav.className = "favori-true";
147+
etoile.className = "fa-solid fa-star fa-lg me-2";
148+
}
149+
else {
150+
alert("Erreur lors de l'ajout du favori");
151+
}
152+
});
153+
}
154+
});
155+
});
156+
157+
158+
let deskBtns = document.querySelectorAll('.desktop-btn');
159+
deskBtns.forEach(function (btn) {
160+
btn.addEventListener('click', function () {
161+
let id = btn.id;
162+
let deskList = JSON.parse(localStorage.getItem('desktop'));
163+
let index = deskList.indexOf(id);
164+
if (index !== -1) {
165+
deskList.splice(index, 1);
166+
}
167+
localStorage.setItem('desktop', JSON.stringify(deskList));
168+
window.location.reload();
169+
});
170+
});
171+
172+
89173
previewAfterRender();
90174

91175
});
@@ -119,4 +203,11 @@ document.addEventListener('DOMContentLoaded', function () {
119203
currentFile = 0;
120204
});
121205

206+
let btnClear = document.getElementById("clear");
207+
btnClear.addEventListener('click', function () {
208+
localStorage.setItem('desktop', JSON.stringify([]));
209+
desktop.innerHTML = '';
210+
baseAfterRender(0);
211+
});
212+
122213
});

app/templates/desktop/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ <h1 class="text-center mb-5">Bureau</h1>
2525
<section id="desk-section" class="d-flex flex-wrap row">
2626

2727
</section>
28+
<button type="button" class="btn btn-primary position-fixed bottom-0 end-0 m-3" id="clear">Tout supprimer</button>
2829

2930
{% include 'components/desktop_preview.html' %}
3031
{% endblock %}

0 commit comments

Comments
 (0)