Ignore:
Timestamp:
09/18/22 18:09:53 (22 months ago)
Author:
Danilo <danilo.najkov@…>
Branches:
master
Parents:
49b0bbd
Message:

vip functionallity + menu fields + alergens filtering + google/fb login + email queueing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • frontend/src/FrontPage.js

    r49b0bbd r13f1472  
    22import {Header} from "./Header";
    33import {Link, useNavigate} from "react-router-dom";
    4 import {Button, Card, DatePicker, Form, Image, Input, Modal, notification, Rate, Spin} from "antd";
     4import {Button, Card, DatePicker, Form, Image, Input, Modal, notification, Rate, Spin, Upload} from "antd";
    55import placeholderImage from '../src/Assets/placeholder.png'
    66import AddNewReservation from "./Dashboard/AddNewReservation";
     
    88import env from "./env";
    99import Review from "./Dashboard/Review";
     10import {PlusOutlined} from "@ant-design/icons";
    1011
    1112const FrontPage = ({user, logout}) => {
     
    1718    const [refreshToggle, setRefreshToggle] = useState(false);
    1819    const history = useNavigate();
     20    const [filteredMenuItems, setFilteredMenuItems] = useState([]);
    1921
    2022    useEffect(()=>{
     
    2224        axios.get(env.api + 'Restaurants').then(res=>{
    2325            setRestaurant(res.data);
     26            console.log(user);
     27            if(!user || !user.isVip){
     28                setFilteredMenuItems(res.data.menu.filter(x => !x.isVipOnly));
     29            }else{
     30                setFilteredMenuItems(res.data.menu.sort((x,y) => x.isVipOnly ? -1 : 1));
     31            }
    2432            setLoading(false);
    2533        });
    26     },[])
     34    },[user])
    2735
    2836    useEffect(()=>{
     
    3341        }
    3442    },[user])
     43
     44    const updateSearchValue = (value) => {
     45        const val = value.target.value.toLowerCase();
     46        setFilteredMenuItems(items=>{
     47            if(val.length==0){
     48                return restaurant.menu;
     49            }
     50            const its = val.split(' ');
     51            let allItems = []
     52            if(!user || !user.isVip){
     53                allItems = [...restaurant.menu.filter(x => !x.isVipOnly)]
     54            }else{
     55                allItems = [...restaurant.menu.sort(x => x.isVipOnly)]
     56            }
     57            for(let it of its){
     58                if(it.length>0)
     59                    allItems = allItems.filter(x => !x.alergens.includes(it));
     60            }
     61            return allItems;
     62        })
     63    }
    3564
    3665    const saveNewReview = data =>{
     
    5382    return(
    5483        <div>
    55             <Header onClickButton={!user?()=>history('/login'):logout} buttonText={!user?'Најави се':'Одјави се'}/>
     84            <Header onClickButton={!user?()=>history('/login'):logout} buttonText={!user?'Најави се':'Одјави се'} isVip={user && user.isVip}/>
    5685            {loading ? <Spin style={{margin: 20}}/> :
    5786                <div style={{
     
    105134                        }} >
    106135                            <h2 style={{float: 'left'}}>Мени</h2>
     136                            <Input.Search onChange={updateSearchValue} placeholder={'Филтрирај алергени'} style={{float:'right', width:'200px'}}/>
    107137                        </div>
    108                         {restaurant.menu.map(el =>
    109                             <Card key={el.id} title={el.title} style={{ width: 280, display:'inline-block', margin:'10px' }} size="small">
     138                        {filteredMenuItems.map(el =>
     139                            <Card
     140                                key={el.id}
     141                                title={el.title}
     142                                extra={el.isVipOnly ? <span style={{color:'orange',fontWeight:'bold'}}>VIP </span>:''}
     143                                style={{ width: 280, display:'inline-block', margin:'10px',verticalAlign:'middle' }}
     144                                size="small"
     145                                cover={el.image != "data:image/png;base64," ? <img style={{cursor: 'pointer'}} src={el.image} alt="avatar"
     146                                                                                    height='100px' width={'270px'}/> : ''}
     147                            >
    110148                                <p>{el.description}</p>
     149                                <p>Алергени: {el.alergens.length ==0 ? 'Нема' : el.alergens}</p>
    111150                                <b>{el.price} ден.</b>
    112151                            </Card>
Note: See TracChangeset for help on using the changeset viewer.