@@ -13,9 +13,18 @@ function displayUsers(users) {
13
13
nameCell . classList . add ( 'people' ) ;
14
14
15
15
var image = document . createElement ( 'img' ) ;
16
- image . src = '../Images/pizza.png' ; // Replace with actual image URL
16
+ if ( user . profilePhotoPath ) {
17
+ var image = document . createElement ( 'img' ) ;
18
+ image . src = user . profilePhotoPath ;
19
+ nameCell . appendChild ( image ) ;
20
+ } else {
21
+ var icon = document . createElement ( 'ion-icon' ) ;
22
+ icon . classList . add ( 'person-circle-outline' ) ;
23
+ icon . setAttribute ( 'name' , 'person-circle-outline' ) ;
24
+ nameCell . appendChild ( icon ) ;
25
+ }
17
26
image . alt = 'User Image' ;
18
- nameCell . appendChild ( image ) ;
27
+ // nameCell.appendChild(image);
19
28
20
29
var nameEmailDiv = document . createElement ( 'div' ) ;
21
30
nameEmailDiv . classList . add ( 'people-de' ) ;
@@ -44,18 +53,25 @@ function displayUsers(users) {
44
53
userRow . appendChild ( titleCell ) ;
45
54
46
55
// Create cell for status
56
+ const JWTAccessToken = sessionStorage . getItem ( 'accessToken' ) ;
47
57
var statusCell = document . createElement ( 'td' ) ;
48
58
statusCell . classList . add ( 'active' ) ;
49
59
var statusParagraph = document . createElement ( 'p' ) ;
50
- statusParagraph . textContent = user . status ;
60
+ if ( JWTAccessToken ) {
61
+ // statusCell.classList.add('active');
62
+ statusParagraph . textContent = "Active" ;
63
+ } else {
64
+ // statusCell.classList.add('inactive');
65
+ statusParagraph . textContent = "Inactive" ;
66
+ }
51
67
statusCell . appendChild ( statusParagraph ) ;
52
68
userRow . appendChild ( statusCell ) ;
53
69
54
70
// Create cell for role
55
71
var roleCell = document . createElement ( 'td' ) ;
56
72
roleCell . classList . add ( 'role' ) ;
57
73
var roleParagraph = document . createElement ( 'p' ) ;
58
- roleParagraph . textContent = user . role ;
74
+ roleParagraph . textContent = user . roles . map ( role => role . name ) ;
59
75
roleCell . appendChild ( roleParagraph ) ;
60
76
userRow . appendChild ( roleCell ) ;
61
77
@@ -77,7 +93,7 @@ function displayUsers(users) {
77
93
const deleteButton = createButton ( 'Delete' ) ;
78
94
deleteButton . classList . add ( 'delete-button' ) ;
79
95
deleteButton . addEventListener ( 'click' , function ( ) {
80
- deleteRecipe ( report ) ;
96
+ userDeleteWarnPopup ( user ) ;
81
97
} ) ;
82
98
83
99
actionButtons . appendChild ( deleteButton ) ;
@@ -90,37 +106,17 @@ function displayUsers(users) {
90
106
} ) ;
91
107
}
92
108
93
- // Example usage
94
- var users = [
95
- {
96
- name : 'John Doe' ,
97
- email : 'john@example.com' ,
98
- title : 'Full Stack Developer' ,
99
- subTitle : 'Web Developer' ,
100
- status : 'Active' ,
101
- role : 'Owner'
102
- } ,
103
- {
104
- name : 'Jane Smith' ,
105
- email : 'jane@example.com' ,
106
- title : 'Frontend Developer' ,
107
- subTitle : 'UI/UX Designer' ,
108
- status : 'Inactive' ,
109
- role : 'Admin'
110
- }
111
- ] ;
112
-
113
109
async function fetchAllUsers ( ) {
114
- // const apiUrl = "https://recipiebeckend.azurewebsites.net/user/all-users"
115
- const apiUrl = "https://run.mocky.io/v3/0c51aa1f-9f67-431d-b245-5dcf57b30197" ;
110
+ const apiUrl = "https://recipiebeckend.azurewebsites.net/user/all-users"
111
+ // const apiUrl = "https://run.mocky.io/v3/0c51aa1f-9f67-431d-b245-5dcf57b30197";
116
112
117
113
try {
118
114
const response = await fetch ( apiUrl ) ;
119
115
if ( ! response . ok ) {
120
116
throw new Error ( `Network response was not ok (status: ${ response . status } )` ) ;
121
117
}
122
118
const data = await response . json ( ) ;
123
- console . log ( "Data: " , data ) ;
119
+ console . log ( "All Data: " , data ) ;
124
120
displayUsers ( data ) ;
125
121
} catch ( error ) {
126
122
console . error ( 'Error fetching reports:' , error ) ;
@@ -129,29 +125,25 @@ async function fetchAllUsers() {
129
125
130
126
fetchAllUsers ( ) ;
131
127
132
- fetchAllUsers ( ) ;
133
-
134
- function fetchUserDetail ( username ) {
135
- //apiUrl = "https://recipiebeckend.azurewebsites.net/user/visit-user?username=username";
136
- const apiUrl = "https://run.mocky.io/v3/7dbf5932-96b9-40b5-92b2-81c65a26c832" ;
137
-
138
- try {
139
- const response = fetch ( apiUrl ) ;
140
- if ( ! response . ok ) {
141
- throw new Error ( `Network response was not ok (status: ${ response . status } )` ) ;
142
- }
143
- const data = response . json ( ) ;
144
- console . log ( "Data: " , data ) ;
145
- userDetail ( data ) ;
146
- } catch ( error ) {
147
- console . error ( 'Error fetching reports:' , error ) ;
148
- }
149
- }
128
+ // function fetchUserDetail(username){
129
+ // apiUrl = `https://recipiebeckend.azurewebsites.net/user/visit-user?username=${username}`;
130
+ // // const apiUrl = "https://run.mocky.io/v3/7dbf5932-96b9-40b5-92b2-81c65a26c832";
131
+
132
+ // try {
133
+ // const response = fetch(apiUrl);
134
+ // if (!response.ok) {
135
+ // throw new Error(`Network response was not ok (status: ${response.status})`);
136
+ // }
137
+ // const data = response.json();
138
+ // console.log("Data: " , data);
139
+ // userDetail(data);
140
+ // } catch (error) {
141
+ // console.error('Error fetching reports:', error);
142
+ // }
143
+ // }
150
144
151
145
function userDetail ( userData ) {
152
146
console . log ( 'User:' , userData ) ;
153
- const selectedUser = document . querySelector ( `.people-de h5:contains('${ userData . username } ')` ) . closest ( '.people' ) ;
154
- console . log ( "Selected User:" , selectedUser ) ;
155
147
156
148
const detailSideBarWrapper = document . createElement ( 'div' ) ;
157
149
detailSideBarWrapper . classList . add ( 'detail-sidebar-wrapper' ) ;
@@ -163,8 +155,158 @@ function userDetail(userData){
163
155
detailSideBar . style . display = "flex" ;
164
156
detailSideBarWrapper . appendChild ( detailSideBar ) ;
165
157
166
- fillUserDetailSideBar ( selectedUser , detailSideBar ) ;
158
+ fillUserDetailSideBar ( userData , detailSideBar ) ;
167
159
}
168
160
169
161
function fillUserDetailSideBar ( selectedUser , detailSideBar ) {
162
+ const usersResponse = selectedUser ;
163
+ console . log ( "Users Response: " , usersResponse ) ;
164
+
165
+
166
+ const closeIcon = document . createElement ( 'span' ) ;
167
+ closeIcon . classList . add ( 'close-icon' ) ;
168
+ closeIcon . innerHTML = '<ion-icon name="close-outline"></ion-icon>'
169
+ detailSideBar . appendChild ( closeIcon ) ;
170
+ closeIcon . addEventListener ( 'click' , ( ) => {
171
+ closeDetailSidebar ( ) ;
172
+ } ) ;
173
+
174
+ const usersGrid = document . querySelector ( '.reports-grid-container' ) ;
175
+ if ( detailSideBar ) {
176
+ usersGrid . style . width = '75%' ;
177
+ console . log ( "Width value: " , usersGrid . style . width ) ;
178
+ }
179
+
180
+ const selectedUserUsername = document . createElement ( 'h2' ) ;
181
+ selectedUserUsername . classList . add ( 'selected-report-title' ) ;
182
+ selectedUserUsername . textContent = usersResponse . username ;
183
+ detailSideBar . appendChild ( selectedUserUsername ) ;
184
+
185
+ const selectedReportImage = document . createElement ( 'img' ) ;
186
+ selectedReportImage . classList . add ( 'selected-report-image' ) ;
187
+ selectedReportImage . src = usersResponse . photoPath ;
188
+ selectedReportImage . alt = 'Selected User Image' ;
189
+ detailSideBar . appendChild ( selectedReportImage ) ;
190
+
191
+ const selectedUserEmail = document . createElement ( 'p' ) ;
192
+ selectedUserEmail . classList . add ( 'selected-recipe-report' ) ;
193
+ selectedUserEmail . innerHTML = '<b>E-mail : </b>' + usersResponse . email ;
194
+ detailSideBar . appendChild ( selectedUserEmail ) ;
195
+
196
+ const selectedUserName = document . createElement ( 'p' ) ;
197
+ selectedUserName . classList . add ( 'selected-recipe-report' ) ;
198
+ selectedUserName . innerHTML = '<b>Name : </b>' + usersResponse . name ;
199
+ detailSideBar . appendChild ( selectedUserName ) ;
200
+
201
+ const selectedUserLastname = document . createElement ( 'p' ) ;
202
+ selectedUserLastname . classList . add ( 'selected-recipe-report' ) ;
203
+ selectedUserLastname . innerHTML = '<b>Lastname : </b>' + usersResponse . lastName ;
204
+ detailSideBar . appendChild ( selectedUserLastname ) ;
205
+
206
+ const selectedUserBirthday = document . createElement ( 'p' ) ;
207
+ selectedUserBirthday . classList . add ( 'selected-recipe-report' ) ;
208
+ selectedUserBirthday . innerHTML = '<b>Birthday : </b>' + usersResponse . birthDay ;
209
+ detailSideBar . appendChild ( selectedUserBirthday ) ;
210
+
211
+ const selectedUserAllergicFoods = document . createElement ( 'p' ) ;
212
+ selectedUserAllergicFoods . classList . add ( 'selected-recipe-report' ) ;
213
+ selectedUserAllergicFoods . innerHTML = '<b>Allergic Foods : </b>' + usersResponse . allergicFoods ;
214
+ detailSideBar . appendChild ( selectedUserAllergicFoods ) ;
215
+
216
+ const selectedUserBio = document . createElement ( 'p' ) ;
217
+ selectedUserBio . classList . add ( 'selected-recipe-report' ) ;
218
+ selectedUserBio . innerHTML = '<b>Bio : </b>' + usersResponse . bio ;
219
+ detailSideBar . appendChild ( selectedUserBio ) ;
220
+
221
+ const selectedUserRoles = document . createElement ( 'p' ) ;
222
+ selectedUserRoles . classList . add ( 'selected-recipe-report' ) ;
223
+ selectedUserRoles . innerHTML = '<b>Roles : </b>' + usersResponse . roles . map ( role => role . name ) ;
224
+ detailSideBar . appendChild ( selectedUserRoles ) ;
225
+
226
+ // const selectedCuisine = document.createElement('p');
227
+ // selectedCuisine.classList.add('selected-recipe-report');
228
+ // selectedCuisine.innerHTML = '<b>Cuisine of the Recipe : </b>' + usersResponse.cuisine;
229
+ // detailSideBar.appendChild(selectedCuisine);
230
+
231
+ // const selectedPrepTime = document.createElement('p');
232
+ // selectedPrepTime.classList.add('selected-recipe-report');
233
+ // selectedPrepTime.innerHTML = '<b>Preparation Time of the Recipe : </b>' + usersResponse.preparationTime;
234
+ // detailSideBar.appendChild(selectedPrepTime);
235
+ }
236
+
237
+ function userDeleteWarnPopup ( user ) {
238
+ const overlay = document . createElement ( 'div' ) ;
239
+ overlay . id = 'popup1' ;
240
+ overlay . classList . add ( 'overlay' ) ;
241
+
242
+ // Create pop-up element
243
+ const popup = document . createElement ( 'div' ) ;
244
+ popup . classList . add ( 'popup' ) ;
245
+
246
+ const windowHeight = window . innerHeight ;
247
+ const popupHeight = popup . offsetHeight ;
248
+ const newTop = Math . max ( ( windowHeight - popupHeight ) / 2 , 0 ) ;
249
+ popup . style . top = newTop + 'px' ;
250
+
251
+ // Pop-up title
252
+ const title = document . createElement ( 'h2' ) ;
253
+ title . textContent = `Delete '${ user . username } ' User` ;
254
+
255
+ // Close button
256
+ const closeButton = document . createElement ( 'a' ) ;
257
+ closeButton . classList . add ( 'close' ) ;
258
+ closeButton . href = '#' ;
259
+ closeButton . textContent = '×' ; // Close symbol
260
+ closeButton . addEventListener ( 'click' , function ( ) {
261
+ overlay . remove ( ) ; // Remove overlay when close button is clicked
262
+ } ) ;
263
+
264
+ // Pop-up content
265
+ const content = document . createElement ( 'div' ) ;
266
+ // content.classList.add('content');
267
+ content . textContent = "Are you sure you want to permanently delete the selected user from the database? No return!" ;
268
+
269
+ const textboxContainer = document . createElement ( 'div' ) ;
270
+ textboxContainer . classList . add ( 'textbox-container' ) ;
271
+
272
+ const sendReportButton = document . createElement ( 'button' ) ;
273
+ sendReportButton . textContent = 'Submit' ;
274
+
275
+ sendReportButton . classList . add ( 'popup-delete-button' ) ;
276
+
277
+ sendReportButton . addEventListener ( 'click' , function ( ) {
278
+ //Delete Fetch
279
+ } ) ;
280
+
281
+
282
+ // Append elements to pop-up
283
+ popup . appendChild ( title ) ;
284
+ popup . appendChild ( closeButton ) ;
285
+ popup . appendChild ( content ) ;
286
+ popup . appendChild ( textboxContainer ) ;
287
+ popup . appendChild ( sendReportButton ) ;
288
+
289
+ // Append pop-up to overlay
290
+ overlay . appendChild ( popup ) ;
291
+
292
+ // Append overlay to body
293
+ document . body . appendChild ( overlay ) ;
294
+ deleteUser ( user . id ) ;
295
+ }
296
+
297
+ async function deleteUser ( userID ) {
298
+ const apiUrl = `https://recipiebeckend.azurewebsites.net/auth/delete-user?id=${ userID } ` ;
299
+
300
+ try {
301
+ const response = await fetch ( apiUrl , {
302
+ method : 'DELETE'
303
+ } ) ;
304
+ if ( ! response . ok ) {
305
+ throw new Error ( `Network response was not ok (status: ${ response . status } )` ) ;
306
+ }
307
+ const data = await response . json ( ) ;
308
+ console . log ( 'User deleted successfully:' , data ) ;
309
+ } catch ( error ) {
310
+ console . error ( 'Error deleting user:' , error ) ;
311
+ }
170
312
}
0 commit comments