source: frontend/src/Dashboard/Review.js@ 13f1472

Last change on this file since 13f1472 was 63f5ced, checked in by Danilo <danilo.najkov@…>, 22 months ago

reviews pagination

  • Property mode set to 100644
File size: 3.6 KB
Line 
1import React, {useEffect, useState} from 'react'
2import {Button, Card, Input, List, notification, Pagination, Rate, Spin, Tooltip} from "antd";
3import axios from "axios";
4import env from "../env";
5import moment from "moment";
6
7const Review = props => {
8 const [reviews, setReviews] = useState([]);
9 const [restaurant, setRestaurant] = useState({})
10 const [loading, setLoading] = useState(true);
11 const [reviewSize, setReviewSize] = useState(0)
12
13
14 useEffect(()=> {
15 setLoading(true);
16 getRestaurant()
17 console.log(props.user)
18 },[])
19 useEffect(()=> {
20 getRestaurant()
21 },[props.refresh])
22
23
24 const getRestaurant = (pg = 1, size = 5) => {
25 axios.get(env.api + 'Reviews/count',).then(res=>{
26 setReviewSize(res.data);
27 });
28 axios.get(env.api + 'Restaurants').then(res=>{
29 setRestaurant(res.data);
30 console.log(pg, size)
31 axios.get(env.api + 'Reviews',{params:{page:pg-1, pageSize: size}}).then(res=>{
32 setReviews(res.data);
33 setLoading(false);
34 });
35 });
36 }
37
38 return(
39 <div style={{padding: props.front ? 0 : '20px',textAlign:'start'}}>
40 <div style={{
41 width: '100%',
42 backgroundColor: 'white',
43 padding: '20px',
44 height:'75px',
45 border: '1px solid lightgray'
46 }} id={'expandMain'}>
47 <h2 style={{float: 'left'}}>Оценки</h2>
48 {props.front ?
49 (props.user?
50 <Button style={{float:'right'}} type={'primary'} onClick={()=>props.user.isConfirmed ? props.setVisible(true) : notification['error']({message: <p>Мора да го потврдите вашиот мејл за да оставите оценка. <a href={'/confirm-email'}>Потврдете го тука</a></p>})}>Внеси оценка</Button>
51 : <Tooltip title={'Мора да се најавите за да оставите оценка'}><Button style={{float:'right'}} disabled type={'primary'} onClick={()=>props.setVisible(true)}>Внеси оценка</Button></Tooltip>)
52 : ''
53 }
54 </div>
55 {loading ? <Spin style={{margin: '20px'}}/> :
56 <div>
57 <div style={{backgroundColor: 'white',padding:'10px', border:'1px solid lightgray', borderTop: 'none'}}>
58 <h3>Средна оценка: <Rate disabled allowHalf value={restaurant.averageReview}/> од вкупно {reviewSize} оценки</h3>
59 </div>
60 <List dataSource={reviews} itemLayout={'horizontal'} locale={{emptyText:'Нема оставени оценки за овој ресторан'}}
61 renderItem={item => (
62 <Card title={item.title} style={{width:'98%',backgroundColor:'white',margin:'1%'}}>
63 <p>{item.description}</p>
64 <Rate disabled value={item.stars}/>
65 <p style={{color:'gray'}}>{item.username} / {moment(item.createdAt).format("DD.MM.yyyy")}</p>
66 </Card>
67 )}/>
68 <div style={{paddingBottom:'20px', textAlign:'center'}}>
69 <Pagination defaultPageSize={5} total={reviewSize} onChange={(pg,size)=>getRestaurant(pg,size)} showSizeChanger pageSizeOptions={[5,10,20,50]}/>
70 </div>
71 </div>
72 }
73 </div>
74 )
75}
76
77export default Review;
Note: See TracBrowser for help on using the repository browser.