UI Mechanics / New Look (orange - gray)
This commit is contained in:
@@ -6,6 +6,7 @@ import Footer from "./components/Footer";
|
|||||||
import SearchPanel from "./components/SearchPanel";
|
import SearchPanel from "./components/SearchPanel";
|
||||||
import SearchResults from "./components/SearchResults";
|
import SearchResults from "./components/SearchResults";
|
||||||
import Restaurant from "./components/Restaurant";
|
import Restaurant from "./components/Restaurant";
|
||||||
|
import Dialogs from "./components/Dialogs";
|
||||||
import { createMuiTheme, ThemeProvider } from "@material-ui/core/styles";
|
import { createMuiTheme, ThemeProvider } from "@material-ui/core/styles";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
|
|
||||||
@@ -14,6 +15,12 @@ const theme = createMuiTheme({
|
|||||||
primary: {
|
primary: {
|
||||||
main: "#0e8496",
|
main: "#0e8496",
|
||||||
},
|
},
|
||||||
|
secondary: {
|
||||||
|
light: "#ffffff",
|
||||||
|
main: "#ffffff",
|
||||||
|
dark: "#ffffff",
|
||||||
|
contrastText: "#ffffff",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -37,6 +44,7 @@ function App() {
|
|||||||
{appMode === "search results" && <SearchResults />}
|
{appMode === "search results" && <SearchResults />}
|
||||||
{appMode === "restaurant" && <Restaurant />}
|
{appMode === "restaurant" && <Restaurant />}
|
||||||
</div>
|
</div>
|
||||||
|
<Dialogs />
|
||||||
<Footer />
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
|
|||||||
21
src/App.scss
21
src/App.scss
@@ -6,8 +6,12 @@
|
|||||||
@import "./styles/Pictograms.scss";
|
@import "./styles/Pictograms.scss";
|
||||||
@import "./styles/Restaurant.scss";
|
@import "./styles/Restaurant.scss";
|
||||||
@import "./styles/DishList.scss";
|
@import "./styles/DishList.scss";
|
||||||
|
@import "./styles/Dialogs.scss";
|
||||||
|
|
||||||
.App {
|
.App {
|
||||||
|
background-image: url("./public/bg_tile.jpg");
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: round;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -16,6 +20,7 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
@@ -30,14 +35,17 @@
|
|||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 300;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.darkParagraph {
|
.darkParagraph {
|
||||||
color: $darker-color;
|
color: $accents-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-container {
|
.main-container {
|
||||||
|
scroll-margin-top: 5rem;
|
||||||
|
scroll-margin-bottom: 5rem;
|
||||||
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -45,3 +53,12 @@ p {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
flex-grow: 20;
|
flex-grow: 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vertical-divider {
|
||||||
|
background-color: $bg-color;
|
||||||
|
width: 1px;
|
||||||
|
height: 70%;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
$main-color: #eb9800;
|
$main-color: #d68000;
|
||||||
$secondary-color: #307482;
|
$secondary-color: #b46c00;
|
||||||
$darker-color: #234f53;
|
$darker-color: #494949;
|
||||||
$bg-color: #f8f8f8;
|
$bg-color: #fafafa;
|
||||||
$accents-color: #0e8496;
|
$accents-color: #af6900;
|
||||||
$lighter-color: #00d1b5;
|
$lighter-color: #b46c00;
|
||||||
|
$gray: #bbbbbb;
|
||||||
|
$dark-gray: #2b2b2b;
|
||||||
|
$mint: #01c3a9;
|
||||||
/* $main-color: #01c3a9;
|
/* $main-color: #01c3a9;
|
||||||
$secondary-color: #307482;
|
$secondary-color: #01c3a9;
|
||||||
$darker-color: #234f53;
|
$darker-color: #234f53;
|
||||||
$bg-color: #ffffff;
|
$bg-color: #ffffff;
|
||||||
$accents-color: #0e8496;
|
$accents-color: #0e8496;
|
||||||
|
|||||||
@@ -1 +1,12 @@
|
|||||||
import axios from "axios";
|
export function extractTags(tags) {
|
||||||
|
var results = [];
|
||||||
|
|
||||||
|
if (typeof tags !== "undefined") {
|
||||||
|
for (let [key, value] of Object.entries(tags)) {
|
||||||
|
if (value === true) {
|
||||||
|
results.push(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|||||||
@@ -108,3 +108,16 @@ export const fetchAllDishes = (id) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const tryLogin = (username) => {
|
||||||
|
return function (dispatch) {
|
||||||
|
dispatch(toggles.setLoggedIn(username));
|
||||||
|
dispatch(toggles.hideLoginDialog());
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const logout = () => {
|
||||||
|
return function (dispatch) {
|
||||||
|
dispatch(toggles.setLoggedOut());
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|||||||
@@ -9,3 +9,28 @@ export const hideDishes = () => {
|
|||||||
type: "SET_DISHLIST_HIDDEN",
|
type: "SET_DISHLIST_HIDDEN",
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const showLoginDialog = () => {
|
||||||
|
return {
|
||||||
|
type: "DIALOG_LOGIN_VISIBLE",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const hideLoginDialog = () => {
|
||||||
|
return {
|
||||||
|
type: "DIALOG_LOGIN_HIDDEN",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setLoggedIn = (username) => {
|
||||||
|
return {
|
||||||
|
type: "SET_LOGGEDIN",
|
||||||
|
payload: username,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setLoggedOut = () => {
|
||||||
|
return {
|
||||||
|
type: "SET_LOGGEDOUT",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ import Button from "@material-ui/core/Button";
|
|||||||
|
|
||||||
const StyledButton = withStyles({
|
const StyledButton = withStyles({
|
||||||
root: {
|
root: {
|
||||||
background: "white",
|
background: "none",
|
||||||
color: "#0e8496",
|
color: "white",
|
||||||
|
border: "solid 1px white",
|
||||||
margin: "16px 16px 16px 0px",
|
margin: "16px 16px 16px 0px",
|
||||||
padding: "8px 12px 8px 12px",
|
padding: "8px 12px 8px 12px",
|
||||||
"&:hover": {
|
"&:hover": {
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import Button from "@material-ui/core/Button";
|
|||||||
const StylizedButton = withStyles({
|
const StylizedButton = withStyles({
|
||||||
root: {
|
root: {
|
||||||
background: "#01c3a9",
|
background: "#01c3a9",
|
||||||
color: "white",
|
color: "#262626",
|
||||||
margin: "16px 16px 16px 0px",
|
margin: "16px 16px 16px 16px",
|
||||||
padding: "8px 12px 8px 12px",
|
padding: "8px 16px 8px 16px",
|
||||||
borderColor: "white",
|
borderColor: "white",
|
||||||
"&:hover": {
|
"&:hover": {
|
||||||
backgroundColor: "#00af98",
|
backgroundColor: "#00af98",
|
||||||
|
|||||||
@@ -1,7 +1,18 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import Pictograms from "./Pictograms";
|
||||||
|
import { extractTags } from "../Services";
|
||||||
|
|
||||||
export default function CardDish(props) {
|
export default function CardDish(props) {
|
||||||
const { name, price, imgUrl } = props.dish;
|
const {
|
||||||
|
name,
|
||||||
|
price,
|
||||||
|
imgUrl,
|
||||||
|
notes,
|
||||||
|
weight,
|
||||||
|
vegan,
|
||||||
|
vegetarian,
|
||||||
|
allergens,
|
||||||
|
} = props.dish;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="carddish-container">
|
<div className="carddish-container">
|
||||||
@@ -10,10 +21,14 @@ export default function CardDish(props) {
|
|||||||
className="carddish-img"
|
className="carddish-img"
|
||||||
style={{ backgroundImage: "url(" + imgUrl + ")" }}
|
style={{ backgroundImage: "url(" + imgUrl + ")" }}
|
||||||
/>
|
/>
|
||||||
<h2>{name}</h2>
|
<div className="carddish-left-info">
|
||||||
|
<h2>{name}</h2>
|
||||||
|
<p>{weight}</p>
|
||||||
|
<Pictograms pictograms={extractTags(allergens)} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="carddish-right">
|
<div className="carddish-right">
|
||||||
<h5>{price}</h5>
|
<h5>{price} zł</h5>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export default function CardRestaurant(props) {
|
|||||||
<h1>{props.name}</h1>
|
<h1>{props.name}</h1>
|
||||||
<hr />
|
<hr />
|
||||||
<h3>Miasto: {props.city}</h3>
|
<h3>Miasto: {props.city}</h3>
|
||||||
<h3>Godziny otwarcia: {props.hours}</h3>
|
<h3>Otwarte: {props.hours}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="card-description">
|
<div className="card-description">
|
||||||
<p>{props.description}</p>
|
<p>{props.description}</p>
|
||||||
|
|||||||
98
src/components/Dialogs.js
Normal file
98
src/components/Dialogs.js
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { makeStyles } from "@material-ui/core/styles";
|
||||||
|
import DialogTitle from "@material-ui/core/DialogTitle";
|
||||||
|
import DialogContent from "@material-ui/core/DialogContent";
|
||||||
|
import Dialog from "@material-ui/core/Dialog";
|
||||||
|
import Divider from "@material-ui/core/Divider";
|
||||||
|
import ButtonSecondary from "./ButtonSecondary";
|
||||||
|
import IconButton from "@material-ui/core/IconButton";
|
||||||
|
import TextField from "@material-ui/core/TextField";
|
||||||
|
import CloseIcon from "@material-ui/icons/Close";
|
||||||
|
import { useSelector, useDispatch } from "react-redux";
|
||||||
|
import { hideLoginDialog } from "../actions/toggles";
|
||||||
|
import { tryLogin } from "../actions";
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
var loginDialog = useSelector((state) => state.data.dialogs.logIn);
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
|
const loginStyles = makeStyles((theme) => ({
|
||||||
|
root: {
|
||||||
|
textAlign: "center",
|
||||||
|
"& .MuiPaper-root": {
|
||||||
|
backgroundColor: "#262626",
|
||||||
|
color: "#bbbbbb",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
closeButton: {
|
||||||
|
color: "#bbbbbb",
|
||||||
|
position: "absolute",
|
||||||
|
right: theme.spacing(1),
|
||||||
|
top: theme.spacing(1),
|
||||||
|
},
|
||||||
|
textInput: {
|
||||||
|
marginTop: "20px",
|
||||||
|
marginBottom: "10px",
|
||||||
|
width: "90%",
|
||||||
|
"& .MuiInputBase-root": {
|
||||||
|
color: "#01c3a9",
|
||||||
|
},
|
||||||
|
"& .MuiInputLabel-root": {
|
||||||
|
color: "#bbbbbb",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
const loginClass = loginStyles();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Dialog
|
||||||
|
className={loginClass.root}
|
||||||
|
onClose={() => dispatch(hideLoginDialog())}
|
||||||
|
open={loginDialog}
|
||||||
|
aria-labelledby="login-title"
|
||||||
|
>
|
||||||
|
<DialogTitle id="login-title">Logowanie</DialogTitle>
|
||||||
|
<IconButton
|
||||||
|
className={loginClass.closeButton}
|
||||||
|
onClick={() => dispatch(hideLoginDialog())}
|
||||||
|
aria-label="close"
|
||||||
|
>
|
||||||
|
<CloseIcon />
|
||||||
|
</IconButton>
|
||||||
|
<Divider />
|
||||||
|
<DialogContent>
|
||||||
|
<TextField
|
||||||
|
className={loginClass.textInput}
|
||||||
|
required
|
||||||
|
id="email"
|
||||||
|
label="Email"
|
||||||
|
type="email"
|
||||||
|
variant="outlined"
|
||||||
|
/>
|
||||||
|
<TextField
|
||||||
|
className={loginClass.textInput}
|
||||||
|
required
|
||||||
|
id="password"
|
||||||
|
label="Hasło"
|
||||||
|
type="password"
|
||||||
|
variant="outlined"
|
||||||
|
/>
|
||||||
|
<div className="login-dialog-buttons">
|
||||||
|
<ButtonSecondary
|
||||||
|
onClick={() => dispatch(tryLogin("jonasz@bankai.pl"))}
|
||||||
|
text="Zaloguj"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Nie masz konta?
|
||||||
|
<span>
|
||||||
|
<p>Zarejestruj się.</p>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -5,8 +5,20 @@ import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
|
|||||||
import List from "@material-ui/core/List";
|
import List from "@material-ui/core/List";
|
||||||
import ListItem from "@material-ui/core/ListItem";
|
import ListItem from "@material-ui/core/ListItem";
|
||||||
import CardDish from "./CardDish";
|
import CardDish from "./CardDish";
|
||||||
|
import { makeStyles } from "@material-ui/core/styles";
|
||||||
|
|
||||||
|
const useStyles = makeStyles((theme) => ({
|
||||||
|
root: {
|
||||||
|
backgroundColor: "#262626",
|
||||||
|
color: "#bbbbbb",
|
||||||
|
},
|
||||||
|
expandIcon: {
|
||||||
|
color: "#bbbbbb",
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
export default function DishesCategory(props) {
|
export default function DishesCategory(props) {
|
||||||
|
const classes = useStyles();
|
||||||
const dishes = props.dishes;
|
const dishes = props.dishes;
|
||||||
const dishCards = dishes.map((dish) => {
|
const dishCards = dishes.map((dish) => {
|
||||||
return (
|
return (
|
||||||
@@ -17,8 +29,10 @@ export default function DishesCategory(props) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Accordion>
|
<Accordion className={classes.root}>
|
||||||
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
|
<AccordionSummary
|
||||||
|
expandIcon={<ExpandMoreIcon className={classes.expandIcon} />}
|
||||||
|
>
|
||||||
<h4>{props.name}</h4>
|
<h4>{props.name}</h4>
|
||||||
</AccordionSummary>
|
</AccordionSummary>
|
||||||
<List>{dishCards}</List>
|
<List>{dishCards}</List>
|
||||||
|
|||||||
@@ -16,6 +16,19 @@ import soy from "../public/i_soy.svg";
|
|||||||
import vegan from "../public/i_vegan.svg";
|
import vegan from "../public/i_vegan.svg";
|
||||||
import vegetarian from "../public/i_vegetarian.svg";
|
import vegetarian from "../public/i_vegetarian.svg";
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
const pictograms = props.pictograms.map((pictogram, index) => (
|
||||||
|
<img
|
||||||
|
key={index}
|
||||||
|
className="pictogram"
|
||||||
|
src={getImage(pictogram)}
|
||||||
|
alt={pictogram}
|
||||||
|
/>
|
||||||
|
));
|
||||||
|
|
||||||
|
return <div className="pictograms-container">{pictograms}</div>;
|
||||||
|
}
|
||||||
|
|
||||||
function getImage(name) {
|
function getImage(name) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "alcohol":
|
case "alcohol":
|
||||||
@@ -52,16 +65,3 @@ function getImage(name) {
|
|||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function (props) {
|
|
||||||
const pictograms = props.pictograms.map((pictogram, index) => (
|
|
||||||
<img
|
|
||||||
key={index}
|
|
||||||
className="pictogram"
|
|
||||||
src={getImage(pictogram)}
|
|
||||||
alt={pictogram}
|
|
||||||
/>
|
|
||||||
));
|
|
||||||
|
|
||||||
return <div className="pictograms-container">{pictograms}</div>;
|
|
||||||
}
|
|
||||||
|
|||||||
104
src/components/PictogramsSeparate.js
Normal file
104
src/components/PictogramsSeparate.js
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import React from "react";
|
||||||
|
// ICONS
|
||||||
|
import alcohol from "../public/i_alcohol.svg";
|
||||||
|
import card from "../public/i_card.svg";
|
||||||
|
import delivery from "../public/i_delivery.svg";
|
||||||
|
import eggs from "../public/i_eggs.svg";
|
||||||
|
import gluten from "../public/i_gluten.svg";
|
||||||
|
import glutenFree from "../public/i_glutenFree.svg";
|
||||||
|
import lactose from "../public/i_lactose.svg";
|
||||||
|
import lactoseFree from "../public/i_lactoseFree.svg";
|
||||||
|
import peanuts from "../public/i_peanuts.svg";
|
||||||
|
import pets from "../public/i_pets.svg";
|
||||||
|
import seaFood from "../public/i_seaFood.svg";
|
||||||
|
import sesame from "../public/i_sesame.svg";
|
||||||
|
import soy from "../public/i_soy.svg";
|
||||||
|
import vegan from "../public/i_vegan.svg";
|
||||||
|
import vegetarian from "../public/i_vegetarian.svg";
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
const pictogramsSeparated = props.pictograms.map((pictogram, index) => (
|
||||||
|
<div key={index} className="separate-pictogram">
|
||||||
|
<h4>{getName(pictogram)}</h4>
|
||||||
|
<img className="pictogram" src={getImage(pictogram)} alt={pictogram} />
|
||||||
|
</div>
|
||||||
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="pictograms-container-separated">{pictogramsSeparated}</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getImage(name) {
|
||||||
|
switch (name) {
|
||||||
|
case "alcohol":
|
||||||
|
return alcohol;
|
||||||
|
case "cardPayments":
|
||||||
|
return card;
|
||||||
|
case "delivery":
|
||||||
|
return delivery;
|
||||||
|
case "eggs":
|
||||||
|
return eggs;
|
||||||
|
case "gluten":
|
||||||
|
return gluten;
|
||||||
|
case "glutenFree":
|
||||||
|
return glutenFree;
|
||||||
|
case "lactose":
|
||||||
|
return lactose;
|
||||||
|
case "lactoseFree":
|
||||||
|
return lactoseFree;
|
||||||
|
case "peanuts":
|
||||||
|
return peanuts;
|
||||||
|
case "petFriendly":
|
||||||
|
return pets;
|
||||||
|
case "seaFood":
|
||||||
|
return seaFood;
|
||||||
|
case "sesame":
|
||||||
|
return sesame;
|
||||||
|
case "soy":
|
||||||
|
return soy;
|
||||||
|
case "vegan":
|
||||||
|
return vegan;
|
||||||
|
case "vegetarian":
|
||||||
|
return vegetarian;
|
||||||
|
default:
|
||||||
|
return card;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getName(name) {
|
||||||
|
switch (name) {
|
||||||
|
case "alcohol":
|
||||||
|
return "Alkohol";
|
||||||
|
case "cardPayments":
|
||||||
|
return "Płatność kartą";
|
||||||
|
case "delivery":
|
||||||
|
return "Dostawa";
|
||||||
|
case "eggs":
|
||||||
|
return "Jaja";
|
||||||
|
case "gluten":
|
||||||
|
return "Gluten";
|
||||||
|
case "glutenFree":
|
||||||
|
return "Bezglutenowe";
|
||||||
|
case "lactose":
|
||||||
|
return "Laktoza";
|
||||||
|
case "lactoseFree":
|
||||||
|
return "Bez laktozy";
|
||||||
|
case "peanuts":
|
||||||
|
return "Orzechy";
|
||||||
|
case "petFriendly":
|
||||||
|
return "Lubimy zwierzaki";
|
||||||
|
case "seaFood":
|
||||||
|
return "Owoce morza";
|
||||||
|
case "sesame":
|
||||||
|
return "Sezam";
|
||||||
|
case "soy":
|
||||||
|
return "Soja";
|
||||||
|
case "vegan":
|
||||||
|
return "Wegańskie";
|
||||||
|
case "vegetarian":
|
||||||
|
return "Wegetariańskie";
|
||||||
|
default:
|
||||||
|
return "Płatność kartą";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,37 +1,49 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import Pictograms from "./Pictograms";
|
import PictogramsSeparate from "./PictogramsSeparate";
|
||||||
import DishList from "./DishList";
|
import DishList from "./DishList";
|
||||||
import CircularProgress from "@material-ui/core/CircularProgress";
|
import CircularProgress from "@material-ui/core/CircularProgress";
|
||||||
|
import { extractTags } from "../Services";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
|
|
||||||
export default function Restaurant(props) {
|
export default function Restaurant(props) {
|
||||||
const restaurant = useSelector((state) => state.restaurant);
|
const restaurant = useSelector((state) => state.restaurant);
|
||||||
const showDishList = useSelector((state) => state.toggles.showDishList);
|
const showDishList = useSelector((state) => state.data.showDishList);
|
||||||
function extractTags(tags) {
|
|
||||||
var results = [];
|
|
||||||
for (let [key, value] of Object.entries(tags)) {
|
|
||||||
if (value === true) {
|
|
||||||
results.push(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="restaurant-container">
|
<div className="restaurant-container">
|
||||||
<div
|
<div className="restaurant-content">
|
||||||
className="restaurant-hero"
|
<div className="restaurant-info">
|
||||||
style={{ backgroundImage: "url(" + restaurant.imgUrl + ")" }}
|
<div
|
||||||
>
|
className="restaurant-hero"
|
||||||
<div className="restaurant-pictograms">
|
style={{ backgroundImage: "url(" + restaurant.imgUrl + ")" }}
|
||||||
<Pictograms pictograms={extractTags(restaurant.tags)} />
|
></div>
|
||||||
|
<h1>{restaurant.name}</h1>
|
||||||
|
<p>{restaurant.description}</p>
|
||||||
|
<hr />
|
||||||
|
<p>
|
||||||
|
Miejscowość:{" "}
|
||||||
|
<span className="restaurant-span">{restaurant.city}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Godziny pracy:{" "}
|
||||||
|
<span className="restaurant-span">{restaurant.workingHours}</span>
|
||||||
|
</p>
|
||||||
|
{restaurant.phone && (
|
||||||
|
<p>
|
||||||
|
Kontakt:{" "}
|
||||||
|
<span className="restaurant-span">{restaurant.phone}</span>
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
<hr />
|
||||||
|
<div className="restaurant-pictograms">
|
||||||
|
<PictogramsSeparate pictograms={extractTags(restaurant.tags)} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="restaurant-dishes">
|
||||||
|
<h3>Menu</h3>
|
||||||
|
{showDishList === false && <CircularProgress />}
|
||||||
|
{showDishList === true && <DishList />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<h1>{restaurant.name}</h1>
|
|
||||||
<p>{restaurant.city}</p>
|
|
||||||
<div className="restaurant-dishes">
|
|
||||||
{showDishList === false && <CircularProgress />}
|
|
||||||
{showDishList === true && <DishList />}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,14 +1,32 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { makeStyles } from "@material-ui/core/styles";
|
||||||
import ButtonSecondary from "./ButtonSecondary";
|
import ButtonSecondary from "./ButtonSecondary";
|
||||||
import TextField from "@material-ui/core/TextField";
|
import TextField from "@material-ui/core/TextField";
|
||||||
import Autocomplete from "@material-ui/lab/Autocomplete";
|
import Autocomplete from "@material-ui/lab/Autocomplete";
|
||||||
import { useSelector, useDispatch } from "react-redux";
|
import { useSelector, useDispatch } from "react-redux";
|
||||||
import { fetchAutocomplete, setSearchQuery, fetchSearch } from "../actions";
|
import { fetchAutocomplete, setSearchQuery, fetchSearch } from "../actions";
|
||||||
|
|
||||||
|
const useStyles = makeStyles((theme) => ({
|
||||||
|
root: {
|
||||||
|
"& .MuiOutlinedInput-root": {
|
||||||
|
"& fieldset": {
|
||||||
|
borderColor: "#01c3a9",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"& .MuiInputBase-root": {
|
||||||
|
color: "#01c3a9",
|
||||||
|
},
|
||||||
|
"& .MuiInputLabel-root": {
|
||||||
|
color: "#01c3a9",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
export default function SearchPanel() {
|
export default function SearchPanel() {
|
||||||
let options = useSelector((store) => store.autocomplete);
|
let options = useSelector((store) => store.autocomplete);
|
||||||
let searchQuery = useSelector((store) => store.searchQuery);
|
let searchQuery = useSelector((store) => store.searchQuery);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const classes = useStyles();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="searchPanel">
|
<div className="searchPanel">
|
||||||
@@ -20,6 +38,7 @@ export default function SearchPanel() {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
|
className={classes.root}
|
||||||
label="Miasto, Nazwa lokalu, ..."
|
label="Miasto, Nazwa lokalu, ..."
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={(event) => dispatch(setSearchQuery(event.target.value))}
|
onChange={(event) => dispatch(setSearchQuery(event.target.value))}
|
||||||
|
|||||||
@@ -1,27 +1,176 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import ButtonPrimary from "./ButtonPrimary";
|
|
||||||
import logo from "../public/logo_white.svg";
|
import logo from "../public/logo_white.svg";
|
||||||
import { useDispatch } from "react-redux";
|
import IconButton from "@material-ui/core/IconButton";
|
||||||
|
import MenuIcon from "@material-ui/icons/Menu";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import { setAppMode } from "../actions";
|
import { setAppMode } from "../actions";
|
||||||
|
import Drawer from "@material-ui/core/Drawer";
|
||||||
|
import List from "@material-ui/core/List";
|
||||||
|
import ListItem from "@material-ui/core/ListItem";
|
||||||
|
import Divider from "@material-ui/core/Divider";
|
||||||
|
import ListItemText from "@material-ui/core/ListItemText";
|
||||||
|
import ListItemIcon from "@material-ui/core/ListItemIcon";
|
||||||
|
import HomeIcon from "@material-ui/icons/Home";
|
||||||
|
import MailIcon from "@material-ui/icons/Mail";
|
||||||
|
import PaymentIcon from "@material-ui/icons/Payment";
|
||||||
|
import FastfoodIcon from "@material-ui/icons/Fastfood";
|
||||||
|
import AddCircleIcon from "@material-ui/icons/AddCircle";
|
||||||
|
import FacebookIcon from "@material-ui/icons/Facebook";
|
||||||
|
import TwitterIcon from "@material-ui/icons/Twitter";
|
||||||
|
import InstagramIcon from "@material-ui/icons/Instagram";
|
||||||
|
import { showLoginDialog } from "../actions/toggles";
|
||||||
|
import { logout } from "../actions";
|
||||||
|
import { makeStyles } from "@material-ui/core/styles";
|
||||||
|
import ButtonSecondary from "./ButtonSecondary";
|
||||||
|
|
||||||
|
const useStyles = makeStyles((theme) => ({
|
||||||
|
paper: {
|
||||||
|
backgroundColor: "#262626",
|
||||||
|
color: "#bbbbbb",
|
||||||
|
"& .MuiListItemIcon-root": {
|
||||||
|
color: "#01c3a9",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
export default function TopBar() {
|
export default function TopBar() {
|
||||||
|
const classes = useStyles();
|
||||||
|
const loggedIn = useSelector((state) => state.data.loggedIn);
|
||||||
|
const username = useSelector((state) => state.data.username);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const imgClick = () => {
|
const imgClick = () => {
|
||||||
dispatch(setAppMode("APP_INIT"));
|
dispatch(setAppMode("APP_INIT"));
|
||||||
};
|
};
|
||||||
|
const handleClick = (button) => {
|
||||||
|
setState((state.menuOpen = false));
|
||||||
|
switch (button) {
|
||||||
|
case "menui":
|
||||||
|
dispatch(setAppMode("APP_INIT"));
|
||||||
|
break;
|
||||||
|
case "logIn":
|
||||||
|
dispatch(showLoginDialog());
|
||||||
|
break;
|
||||||
|
case "logOut":
|
||||||
|
dispatch(logout());
|
||||||
|
break;
|
||||||
|
case "myRestaurant":
|
||||||
|
dispatch(setAppMode("APP_RESTAURANT"));
|
||||||
|
break;
|
||||||
|
case "addDish":
|
||||||
|
dispatch(setAppMode("APP_ADD_DISH"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const [state, setState] = React.useState({
|
||||||
|
menuOpen: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const toggleDrawer = (open) => (event) => {
|
||||||
|
if (
|
||||||
|
event.type === "keydown" &&
|
||||||
|
(event.key === "Tab" || event.key === "Shift")
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setState({ menuOpen: open });
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="topBar">
|
<div className="topBar">
|
||||||
<img
|
<div className="topBar-logo-container">
|
||||||
src={logo}
|
<img
|
||||||
className="topBarLogo"
|
src={logo}
|
||||||
alt="Menui logo"
|
className="topBarLogo"
|
||||||
onClick={() => imgClick()}
|
alt="Menui logo"
|
||||||
/>
|
onClick={() => imgClick()}
|
||||||
<div>
|
/>
|
||||||
<ButtonPrimary text="Dodaj Lokal" />
|
<div className="vertical-divider"></div>
|
||||||
<ButtonPrimary text="Logowanie" />
|
<h5>Food guide</h5>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="topBar-hamburger">
|
||||||
|
{loggedIn && (
|
||||||
|
<div className="topbar-username">
|
||||||
|
{" "}
|
||||||
|
<p>Witaj {username}</p>{" "}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<IconButton onClick={toggleDrawer(true)} aria-label="menu">
|
||||||
|
<MenuIcon color="secondary" />
|
||||||
|
</IconButton>
|
||||||
|
</div>
|
||||||
|
<Drawer
|
||||||
|
className={classes.root}
|
||||||
|
anchor="right"
|
||||||
|
open={state.menuOpen}
|
||||||
|
onClose={toggleDrawer(false)}
|
||||||
|
PaperProps={{ className: classes.paper }}
|
||||||
|
>
|
||||||
|
<List style={{ width: "300px" }}>
|
||||||
|
<ListItem button onClick={() => handleClick("menui")}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<HomeIcon />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Menui" />
|
||||||
|
</ListItem>
|
||||||
|
<ListItem button onClick={() => handleClick("contact")}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<MailIcon />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Skontaktuj się" />
|
||||||
|
</ListItem>
|
||||||
|
<ListItem button onClick={() => handleClick("pricing")}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<PaymentIcon />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Cennik" />
|
||||||
|
</ListItem>
|
||||||
|
<Divider />
|
||||||
|
{loggedIn && (
|
||||||
|
<ListItem button onClick={() => handleClick("myRestaurant")}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<FastfoodIcon />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Moja restauracja" />
|
||||||
|
</ListItem>
|
||||||
|
)}
|
||||||
|
{loggedIn && (
|
||||||
|
<ListItem button onClick={() => handleClick("addDish")}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<AddCircleIcon />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Dodaj danie" />
|
||||||
|
</ListItem>
|
||||||
|
)}
|
||||||
|
</List>
|
||||||
|
<div className="drawer-buttons">
|
||||||
|
{!loggedIn && (
|
||||||
|
<ButtonSecondary
|
||||||
|
onClick={() => handleClick("logIn")}
|
||||||
|
text="Zaloguj się"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{loggedIn && (
|
||||||
|
<ButtonSecondary
|
||||||
|
onClick={() => handleClick("logOut")}
|
||||||
|
text="Wyloguj"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="drawer-bottom">
|
||||||
|
<IconButton color="secondary">
|
||||||
|
<FacebookIcon />
|
||||||
|
</IconButton>
|
||||||
|
<IconButton color="secondary">
|
||||||
|
<TwitterIcon />
|
||||||
|
</IconButton>
|
||||||
|
<IconButton color="secondary">
|
||||||
|
<InstagramIcon />
|
||||||
|
</IconButton>
|
||||||
|
</div>
|
||||||
|
</Drawer>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/public/bg.jpg
Normal file
BIN
src/public/bg.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
BIN
src/public/bg_tile.jpg
Normal file
BIN
src/public/bg_tile.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 104 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 174 KiB |
@@ -4,8 +4,6 @@ const appModeReducer = (state = "init", action) => {
|
|||||||
return (state = "init");
|
return (state = "init");
|
||||||
case "APP_SEARCH_RESULTS":
|
case "APP_SEARCH_RESULTS":
|
||||||
return (state = "search results");
|
return (state = "search results");
|
||||||
case "APP_LOGIN":
|
|
||||||
return (state = "login");
|
|
||||||
case "APP_RESTAURANT":
|
case "APP_RESTAURANT":
|
||||||
return (state = "restaurant");
|
return (state = "restaurant");
|
||||||
case "APP_DISH":
|
case "APP_DISH":
|
||||||
|
|||||||
36
src/reducers/data.js
Normal file
36
src/reducers/data.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
const initialState = {
|
||||||
|
showDishList: false,
|
||||||
|
loggedIn: false,
|
||||||
|
jwt: "",
|
||||||
|
username: "",
|
||||||
|
dialogs: {
|
||||||
|
logIn: false,
|
||||||
|
register: false,
|
||||||
|
contact: false,
|
||||||
|
pricing: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = (state = initialState, action) => {
|
||||||
|
switch (action.type) {
|
||||||
|
case "SET_DISHLIST_VISIBLE":
|
||||||
|
return (state = { ...state, showDishList: true });
|
||||||
|
case "SET_DISHLIST_HIDDEN":
|
||||||
|
return (state = { ...state, showDishList: false });
|
||||||
|
case "DIALOG_LOGIN_VISIBLE":
|
||||||
|
return (state = { ...state, dialogs: { ...state.dialogs, logIn: true } });
|
||||||
|
case "SET_LOGGEDIN":
|
||||||
|
return (state = { ...state, loggedIn: true, username: action.payload });
|
||||||
|
case "SET_LOGGEDOUT":
|
||||||
|
return (state = { ...state, loggedIn: false, username: "" });
|
||||||
|
case "DIALOG_LOGIN_HIDDEN":
|
||||||
|
return (state = {
|
||||||
|
...state,
|
||||||
|
dialogs: { ...state.dialogs, logIn: false },
|
||||||
|
});
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default data;
|
||||||
@@ -5,7 +5,7 @@ import appMode from "./appMode";
|
|||||||
import searchQuery from "./searchQuery";
|
import searchQuery from "./searchQuery";
|
||||||
import restaurant from "./restaurant";
|
import restaurant from "./restaurant";
|
||||||
import dishes from "./dishes";
|
import dishes from "./dishes";
|
||||||
import toggles from "./toggles";
|
import data from "./data";
|
||||||
|
|
||||||
const rootReducer = combineReducers({
|
const rootReducer = combineReducers({
|
||||||
autocomplete: autoCompleteReducer,
|
autocomplete: autoCompleteReducer,
|
||||||
@@ -14,7 +14,7 @@ const rootReducer = combineReducers({
|
|||||||
searchQuery: searchQuery,
|
searchQuery: searchQuery,
|
||||||
restaurant: restaurant,
|
restaurant: restaurant,
|
||||||
dishes: dishes,
|
dishes: dishes,
|
||||||
toggles: toggles,
|
data: data,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default rootReducer;
|
export default rootReducer;
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
const initialState = {
|
|
||||||
showDishList: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const toggles = (state = initialState, action) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case "SET_DISHLIST_VISIBLE":
|
|
||||||
return (state = { ...state, showDishList: true });
|
|
||||||
case "SET_DISHLIST_HIDDEN":
|
|
||||||
return (state = { ...state, showDishList: false });
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default toggles;
|
|
||||||
7
src/styles/Dialogs.scss
Normal file
7
src/styles/Dialogs.scss
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.dialog-login {
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
@@ -3,16 +3,30 @@
|
|||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
margin-left: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carddish-container {
|
.carddish-container {
|
||||||
margin-top: 20px;
|
background-color: #303030;
|
||||||
margin-bottom: 20px;
|
border-radius: 10px;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
justify-content: space-between;
|
||||||
|
width: 95%;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.25s;
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
|
color: $main-color;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background-color: #3a3a3a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,10 +34,18 @@ h4 {
|
|||||||
background-color: $secondary-color;
|
background-color: $secondary-color;
|
||||||
width: 150px;
|
width: 150px;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
border-radius: 75px;
|
border-radius: 10px;
|
||||||
margin: 0px 20px 0px 0px;
|
margin: 0px 20px 0px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carddish-left {
|
.carddish-left {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.carddish-right {
|
||||||
|
h5 {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@import "../Design.scss";
|
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
background-color: $main-color;
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: $dark-gray;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: white;
|
color: white;
|
||||||
|
|||||||
@@ -3,8 +3,30 @@
|
|||||||
margin: 8px 8px 8px 0px;
|
margin: 8px 8px 8px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pictograms-container-separated {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
.pictogram {
|
.pictogram {
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.separate-pictogram {
|
||||||
|
background-color: $dark-gray;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 25px;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
padding: 4px;
|
||||||
|
margin: 8px;
|
||||||
|
h4 {
|
||||||
|
margin: 8px;
|
||||||
|
}
|
||||||
|
.pictogram {
|
||||||
|
margin: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
.restaurant-container {
|
.restaurant-container {
|
||||||
min-width: 100vw;
|
width: 100vw;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: flex-start;
|
||||||
h1 {
|
h1 {
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
|
color: $gray;
|
||||||
|
background-color: $dark-gray;
|
||||||
|
padding: 15px;
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
margin: 16px;
|
margin-bottom: 16px;
|
||||||
margin-bottom: 4px;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
p {
|
p {
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
@@ -21,17 +24,17 @@
|
|||||||
|
|
||||||
.restaurant-hero {
|
.restaurant-hero {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 400px;
|
height: 500px;
|
||||||
|
border-top-left-radius: 15px;
|
||||||
|
border-top-right-radius: 15px;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
display: flex;
|
|
||||||
align-items: flex-end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.restaurant-pictograms {
|
.restaurant-pictograms {
|
||||||
background-color: white;
|
width: 100%;
|
||||||
width: fit-content;
|
display: flex;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 20px;
|
margin-top: 20px;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
.pictograms-container {
|
.pictograms-container {
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
@@ -39,5 +42,47 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.restaurant-dishes {
|
.restaurant-dishes {
|
||||||
|
min-width: 60%;
|
||||||
|
h3 {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.restaurant-content {
|
||||||
|
padding-top: 10rem;
|
||||||
|
padding-bottom: 10rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
min-width: 70%;
|
min-width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.restaurant-info {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 30%;
|
||||||
|
background-color: #1d1d1d;
|
||||||
|
box-shadow: -2px 10px 20px rgba(0, 0, 0, 0.212);
|
||||||
|
border-radius: 15px;
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border: 1px solid $dark-gray;
|
||||||
|
margin-top: 18px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.restaurant-span {
|
||||||
|
font-weight: 500;
|
||||||
|
color: $gray;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
@import "./Design.scss";
|
@import "./Design.scss";
|
||||||
|
|
||||||
.search-results {
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-restaurant {
|
.card-restaurant {
|
||||||
border: solid 1px rgb(224, 224, 224);
|
border-radius: 15px;
|
||||||
border-radius: 25px;
|
padding: 10px;
|
||||||
margin: 20px 0px 20px 0px;
|
margin: 20px 0px 20px 0px;
|
||||||
|
background-color: #202020;
|
||||||
color: $secondary-color;
|
color: $secondary-color;
|
||||||
max-width: 70vw;
|
max-width: 70vw;
|
||||||
min-height: 200px;
|
min-height: 200px;
|
||||||
@@ -14,8 +12,7 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.25s;
|
transition: all 0.25s;
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #fcfcfc;
|
background-color: #2e2e2e;
|
||||||
border-color: rgba(241, 177, 38, 0.87);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,33 +20,39 @@
|
|||||||
min-width: 180px;
|
min-width: 180px;
|
||||||
height: 180px;
|
height: 180px;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
border-radius: 18px;
|
border-radius: 10px;
|
||||||
//border-radius: 100px;
|
//border-radius: 100px;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-info {
|
.card-info {
|
||||||
text-align: start;
|
text-align: start;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
flex-grow: 6;
|
flex-grow: 6;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
color: $main-color;
|
color: $secondary-color;
|
||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
h3 {
|
h3 {
|
||||||
|
color: $gray;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
margin-bottom: 2px;
|
margin-bottom: 2px;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
p {
|
||||||
|
color: $gray;
|
||||||
|
}
|
||||||
hr {
|
hr {
|
||||||
color: $main-color;
|
color: #2e2e2e;
|
||||||
border: solid 1px;
|
border: solid 1px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +68,7 @@
|
|||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
hr {
|
hr {
|
||||||
border: solid 1px rgb(238, 238, 238);
|
border: solid 1px rgb(44, 44, 44);
|
||||||
}
|
}
|
||||||
p {
|
p {
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
background-color: $main-color;
|
background-color: $main-color;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBarLogo {
|
.topBarLogo {
|
||||||
@@ -15,3 +17,44 @@
|
|||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.topBar-logo-container {
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
color: $bg-color;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.topBar-hamburger {
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar-username {
|
||||||
|
color: rgb(221, 221, 221);
|
||||||
|
margin-right: 16px;
|
||||||
|
padding-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer-bottom {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer-buttons {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user