Skip to content

Commit c4d8258

Browse files
committed
Admin and userEditProfile bug fixes
1 parent 55ec4ca commit c4d8258

File tree

6 files changed

+227
-58
lines changed

6 files changed

+227
-58
lines changed

scripts/adminPanelReportsTab.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ function openReportsTab(tabName) {
1919
}
2020

2121
async function fetchReports() {
22-
// apiUrl = "https://recipiebeckend.azurewebsites.net/admin/reported-recipes";
23-
const apiUrl = "https://run.mocky.io/v3/18524b0e-7a6e-434c-b4cf-0b865a896383";
22+
apiUrl = "https://recipiebeckend.azurewebsites.net/admin/reported-recipes";
23+
// const apiUrl = "https://run.mocky.io/v3/18524b0e-7a6e-434c-b4cf-0b865a896383";
2424

2525
try {
2626
const response = await fetch(apiUrl);
@@ -161,8 +161,6 @@ function discardRecipe(recipeId) {
161161
function detailRecipe(report) {
162162
console.log('Report:', report);
163163
const reportRecipeResponse = report.userRecipeResponse;
164-
const reportItem = document.querySelector(`.report-item[data-recipe-id="${reportRecipeResponse.id}"]`);
165-
console.log("Report Item:", reportItem);
166164

167165
const detailSideBarWrapper = document.createElement('div');
168166
detailSideBarWrapper.classList.add('detail-sidebar-wrapper');
@@ -210,7 +208,7 @@ function fillDetailSideBar(reportedItem, detailSideBar){
210208

211209
const selectedReportReason = document.createElement('p');
212210
selectedReportReason.classList.add('selected-recipe-report');
213-
selectedReportReason.innerHTML = '<b>Report Reason: </b>' + reportDetail[0][1];
211+
selectedReportReason.innerHTML = '<b>Report Reason : </b>' + reportDetail[0][1];
214212
detailSideBar.appendChild(selectedReportReason);
215213

216214
const selectedAdditionalReportNotes = document.createElement('p');
@@ -220,7 +218,7 @@ function fillDetailSideBar(reportedItem, detailSideBar){
220218

221219
const selectedReportingUser = document.createElement('p');
222220
selectedReportingUser.classList.add('selected-recipe-report');
223-
selectedReportingUser.innerHTML = '<b>Reporting User: </b>' + reportDetail[0][2];
221+
selectedReportingUser.innerHTML = '<b>Reporting User : </b>' + reportDetail[0][2];
224222
detailSideBar.appendChild(selectedReportingUser);
225223

226224
const selectedPublisher = document.createElement('p');

scripts/adminPanelUsersTab.js

Lines changed: 191 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,18 @@ function displayUsers(users) {
1313
nameCell.classList.add('people');
1414

1515
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+
}
1726
image.alt = 'User Image';
18-
nameCell.appendChild(image);
27+
// nameCell.appendChild(image);
1928

2029
var nameEmailDiv = document.createElement('div');
2130
nameEmailDiv.classList.add('people-de');
@@ -44,18 +53,25 @@ function displayUsers(users) {
4453
userRow.appendChild(titleCell);
4554

4655
// Create cell for status
56+
const JWTAccessToken = sessionStorage.getItem('accessToken');
4757
var statusCell = document.createElement('td');
4858
statusCell.classList.add('active');
4959
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+
}
5167
statusCell.appendChild(statusParagraph);
5268
userRow.appendChild(statusCell);
5369

5470
// Create cell for role
5571
var roleCell = document.createElement('td');
5672
roleCell.classList.add('role');
5773
var roleParagraph = document.createElement('p');
58-
roleParagraph.textContent = user.role;
74+
roleParagraph.textContent = user.roles.map(role => role.name);
5975
roleCell.appendChild(roleParagraph);
6076
userRow.appendChild(roleCell);
6177

@@ -77,7 +93,7 @@ function displayUsers(users) {
7793
const deleteButton = createButton('Delete');
7894
deleteButton.classList.add('delete-button');
7995
deleteButton.addEventListener('click', function() {
80-
deleteRecipe(report);
96+
userDeleteWarnPopup(user);
8197
});
8298

8399
actionButtons.appendChild(deleteButton);
@@ -90,37 +106,17 @@ function displayUsers(users) {
90106
});
91107
}
92108

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-
113109
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";
116112

117113
try {
118114
const response = await fetch(apiUrl);
119115
if (!response.ok) {
120116
throw new Error(`Network response was not ok (status: ${response.status})`);
121117
}
122118
const data = await response.json();
123-
console.log("Data: ", data);
119+
console.log("All Data: ", data);
124120
displayUsers(data);
125121
} catch (error) {
126122
console.error('Error fetching reports:', error);
@@ -129,29 +125,25 @@ async function fetchAllUsers() {
129125

130126
fetchAllUsers();
131127

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+
// }
150144

151145
function userDetail(userData){
152146
console.log('User:', userData);
153-
const selectedUser = document.querySelector(`.people-de h5:contains('${userData.username}')`).closest('.people');
154-
console.log("Selected User:", selectedUser);
155147

156148
const detailSideBarWrapper = document.createElement('div');
157149
detailSideBarWrapper.classList.add('detail-sidebar-wrapper');
@@ -163,8 +155,158 @@ function userDetail(userData){
163155
detailSideBar.style.display = "flex";
164156
detailSideBarWrapper.appendChild(detailSideBar);
165157

166-
fillUserDetailSideBar(selectedUser, detailSideBar);
158+
fillUserDetailSideBar(userData, detailSideBar);
167159
}
168160

169161
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+
}
170312
}

scripts/register.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function registerUser() {
5959
lastName: lastName,
6060
username: userName,
6161
email: email,
62-
birthday: birthday,
62+
birthDay: birthday,
6363
password: password
6464
// add other fields as needed
6565
};

scripts/userProfile.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,21 @@ async function CreateUserInfoPage() {
1212
document.getElementById('userName').textContent = userInfo.name + ' ' + userInfo.lastName;
1313
document.getElementById('userEmail').textContent = userInfo.email;
1414
document.getElementById('userBio').textContent = userInfo.bio || "Type about yourself"; // Bio alanı boşsa "Type about yourself" yazısı
15-
document.getElementById('userPhoto').src = userInfo.userPhoto; // Kullanıcı fotoğrafı
15+
const userPhoto = userInfo.userPhoto;
16+
const profilePhotoContainer = document.getElementById('profilePhotoContainer');
17+
18+
if (userPhoto) {
19+
const imageElement = document.createElement('img');
20+
imageElement.src = userPhoto;
21+
imageElement.alt = "User Photo";
22+
imageElement.id = "userPhoto";
23+
profilePhotoContainer.appendChild(imageElement);
24+
} else {
25+
const iconElement = document.createElement('ion-icon');
26+
iconElement.setAttribute('name', 'person-circle-outline');
27+
iconElement.style.fontSize = '48px'; // Adjust size as needed
28+
profilePhotoContainer.appendChild(iconElement);
29+
}
1630

1731
// Kullanıcının yayınladığı tarifleri listele
1832
const userPublishedRecipesContainer = document.getElementById('userPublishedRecipes');
@@ -30,7 +44,12 @@ async function CreateUserInfoPage() {
3044
// Recipe Fotoğrafı
3145
const recipePhoto = document.createElement('img');
3246
recipePhoto.classList.add('recipe-photo');
33-
recipePhoto.src = recipe.photoPath || 'https://w7.pngwing.com/pngs/116/858/png-transparent-computer-icons-meal-food-meal-icon-food-logo-eating-thumbnail.png';
47+
if(recipe.photoPath != null){
48+
recipePhoto.src = recipe.photoPath
49+
}
50+
else{
51+
recipePhoto.src = 'https://w7.pngwing.com/pngs/116/858/png-transparent-computer-icons-meal-food-meal-icon-food-logo-eating-thumbnail.png'
52+
}
3453
photoTitleContainer.appendChild(recipePhoto);
3554

3655
// Başlık

0 commit comments

Comments
 (0)