- {review && user && restaurant &&(
-
-
-
{ review.title }
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
{ user.name}
-
{ restaurant.name}
-
{ review.text}
-
Sabor:
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
Atendimento:
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
Tempo de Espera
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
Preço:
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
- {isOwner ? (
-
-
- Editar Review
-
-
-
-
-
- ): ("")}
-
-
Avalie este review:
-
-
-
-
-
-
-
-
-
-
- Voltar
-
-
-
+ };
+
+ const handleLike = async () => {
+ setLikes((prevCount) => (prevCount === review.likes ? review.likes + 1 : review.likes));
+ setDislikes(review.dislikes);
+ try {
+ await axios.put(`${API_BASE}/reviews/${idrest}/${iduser}/edit`, {
+ title: review.title,
+ user: iduser,
+ restaurant: idrest,
+ rating: review.rating,
+ text: review.text,
+ sabor: review.sabor,
+ atendimento: review.atendimento,
+ tempoDeEspera: review.tempoDeEspera,
+ preco: review.preco,
+ likes: likes,
+ dislikes: dislikes,
+ });
+ } catch (error) {
+ console.error("Erro ao editar review", error);
+ }
+ };
+
+ const handleDislike = async () => {
+ setDislikes((prevCount) => (prevCount === review.dislikes ? review.dislikes + 1 : review.dislikes));
+ setLikes(review.likes);
+ try {
+ await axios.put(`${API_BASE}/reviews/${idrest}/${iduser}/edit`, {
+ title: review.title,
+ user: iduser,
+ restaurant: idrest,
+ rating: review.rating,
+ text: review.text,
+ sabor: review.sabor,
+ atendimento: review.atendimento,
+ tempoDeEspera: review.tempoDeEspera,
+ preco: review.preco,
+ likes: likes,
+ dislikes: dislikes,
+ });
+ } catch (error) {
+ console.error("Erro ao editar review", error);
+ }
+ };
+
+ if (redirect) {
+ navigate(`/reviews/${idrest}`);
+ }
+
+ return (
+
+ {review && user && restaurant && (
+
+
+ {restaurant.profileImage ? (
+

+ ) : (
+

)}
+
{restaurant.name}
+
+
+
+
{review.title}
+
+ {[...Array(5)].map((_, index) => (
+
+ ★
+
+ ))}
+
+
+
+
Por: {user.name} {isOwner && "(você)"}
+
{review.text}
+
+
+
Sabor:
+
+ {[...Array(5)].map((_, index) => (
+
+ ★
+
+ ))}
+
+
Atendimento:
+
+ {[...Array(5)].map((_, index) => (
+
+ ★
+
+ ))}
+
+
Tempo de Espera:
+
+ {[...Array(5)].map((_, index) => (
+
+ ★
+
+ ))}
+
+
Preço:
+
+ {[...Array(5)].map((_, index) => (
+
+ ★
+
+ ))}
+
+
+
+ {isOwner && (
+
+
+ Editar Review
+
+
+
+ )}
+
+
Avalie este review:
+
+
+
+
+
+ Voltar
+
+
- );
+ )}
+
+ );
};
export default ReviewPage;
diff --git a/frontend/src/routes/reviews/ReviewsRestaurant.js b/frontend/src/routes/reviews/ReviewsRestaurant.js
index 420b6482c0..f2e1da576d 100644
--- a/frontend/src/routes/reviews/ReviewsRestaurant.js
+++ b/frontend/src/routes/reviews/ReviewsRestaurant.js
@@ -1,9 +1,8 @@
import { useState, useEffect } from "react";
import { useParams, Link } from "react-router-dom";
import axios from 'axios';
-
import '../../style/Restaurants.css';
-
+import NoImg from "../../assets/almocin_logo_red.png"
import { jwtDecode } from "jwt-decode";
const API_BASE = "http://localhost:3001";
@@ -40,11 +39,6 @@ const ReviewsRestaurant = () => {
getUserInfoFromToken()
}, []);
- let user = {
- name: "pedro",
- id: "65d51e36c3b06ec45cdd2ac8"
- }
-
useEffect(() => {
const getRestaurant = async () => {
try {
@@ -119,12 +113,13 @@ const ReviewsRestaurant = () => {
return (
- {restaurant && (
-
-
+ {restaurant && (
+
-
{restaurant.profileImage}
-
{restaurant.name}
+ {restaurant.profileImage !== "Noneundefined" &&

}
+
+ {restaurant.profileImage == "Noneundefined" &&

}
+
{restaurant.name}
Nota média:
{[...Array(5)].map((star, index) => {
@@ -133,7 +128,7 @@ const ReviewsRestaurant = () => {
return (
★
@@ -142,8 +137,8 @@ const ReviewsRestaurant = () => {
-
- {reviews.length !== 1 ? (
+
+
{reviews.length !== 1 ? (
{reviews.length} Reviews
@@ -152,48 +147,43 @@ const ReviewsRestaurant = () => {
{reviews.length} Review
- )}
-
-
- {error &&
{error}
}
-
+ )}
{reviews.map(review => (
-
+
-
+
+
{review.title}
-
- {[...Array(5)].map((star, index) => {
- const starValue = index + 1;
-
- return (
-
- ★
-
- );
- })}
-
-
{usernames[review.user]}
- {review.user == idUserLogin ? (
-
(você)
- ):(
-
- )}
+
+ {[...Array(5)].map((star, index) => {
+ const starValue = index + 1;
+
+ return (
+
+ ★
+
+ );
+ })}
+
+
Por: {usernames[review.user]}
+ {(review.user == idUserLogin) && (
+
(você)
+ )}
-
+
))}
-
+
)}
diff --git a/frontend/src/style/ReviewPage.css b/frontend/src/style/ReviewPage.css
new file mode 100644
index 0000000000..8e62f715a1
--- /dev/null
+++ b/frontend/src/style/ReviewPage.css
@@ -0,0 +1,121 @@
+.review-page-container {
+ display: flex;
+ justify-content: center;
+ }
+
+ .review-page {
+ max-width: 800px;
+ margin: 20px;
+ padding: 20px;
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ background-color: #fff;
+ }
+
+ .restaurant-details {
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ .restaurant-img {
+ width: 200px;
+ height: 200px;
+ border-radius: 50%;
+ object-fit: cover;
+ }
+
+ .restaurant-details p {
+ margin-top: 10px;
+ font-size: 18px;
+ }
+
+ .review-data {
+ background-color: #f9f9f9;
+ border-radius: 10px;
+ padding: 20px;
+ margin-bottom: 20px;
+ }
+
+ .review-main-details h2 {
+ font-size: 24px;
+ margin-bottom: 10px;
+ }
+
+ .star-rating {
+ margin-bottom: 10px;
+ }
+
+ .star-rating span {
+ font-size: 20px;
+ margin-right: 5px;
+ }
+
+ .review-details p {
+ margin-bottom: 10px;
+ }
+
+ .review-ratings p {
+ font-weight: bold;
+ }
+
+ .review-ratings div {
+ margin-bottom: 10px;
+ }
+
+ .review-buttons {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .simple-button,
+ .delete-button {
+ padding: 8px 16px;
+ border: none;
+ border-radius: 5px;
+ background-color: #007bff;
+ color: white;
+ cursor: pointer;
+ text-decoration: none;
+ }
+
+ .delete-button {
+ background-color: #dc3545;
+ }
+
+ .simple-button:hover,
+ .delete-button:hover {
+ opacity: 0.7;
+ }
+
+ .review-voting {
+ margin-top: 20px;
+ }
+
+ .review-voting p {
+ font-weight: bold;
+ }
+
+ .review-voting button {
+ display: flex;
+ align-items: center;
+ padding: 5px 10px;
+ margin-right: 10px;
+ border: none;
+ background-color: transparent;
+ cursor: pointer;
+ }
+
+ .review-return {
+ display: block;
+ margin-top: 20px;
+ text-align: center;
+ color: blue;
+ text-decoration: none;
+ font-weight: bold;
+ }
+
+ .review-return:hover {
+ text-decoration: underline;
+ }
+
\ No newline at end of file