@@ -1,20 +1,24 @@ | |||
import apollo from "../../lib/apollo.js"; | |||
async function GetNews(token="") { | |||
async function GetNews(token="", start = 0) { | |||
var res = await apollo.query( | |||
` | |||
query{ | |||
latestNews | |||
{ | |||
title | |||
description | |||
img{ | |||
url | |||
} | |||
` | |||
query($start: Int!) { | |||
latestNews(limit:6,start:$start) | |||
{ | |||
id | |||
title | |||
description | |||
img{ | |||
url | |||
} | |||
} | |||
`, | |||
token | |||
} | |||
`, | |||
token, | |||
{ | |||
start: start, | |||
} | |||
); | |||
return res; | |||
} | |||
@@ -1,11 +1,38 @@ | |||
import apollo from "../../lib/apollo.js"; | |||
async function GetProduct(token="") { | |||
// async function GetProduct(token="", start = 0) { | |||
// var res = await apollo.query( | |||
// ` | |||
// query($start: Int!) { | |||
// products(limit:1,start:$start) | |||
// { | |||
// id | |||
// name | |||
// price | |||
// description | |||
// img{ | |||
// url | |||
// } | |||
// business_partner | |||
// { | |||
// name | |||
// } | |||
// } | |||
// }`, | |||
// token, | |||
// { | |||
// start: start, | |||
// } | |||
// ); | |||
// return res; | |||
// } | |||
async function GetDetailProduct(token="") { | |||
var res = await apollo.query( | |||
` | |||
query{ | |||
products{ | |||
id | |||
products | |||
{ | |||
name | |||
price | |||
description | |||
@@ -23,15 +50,40 @@ async function GetProduct(token="") { | |||
return res; | |||
} | |||
async function GetDetailProduct(token="") { | |||
async function GetProductYamaha(token="") { | |||
var res = await apollo.query( | |||
` | |||
query{ | |||
products | |||
query { | |||
products(where: {business_partner: "1"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductSuzuki(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "2"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
@@ -40,13 +92,165 @@ async function GetDetailProduct(token="") { | |||
name | |||
} | |||
} | |||
} `, | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductHonda(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "3"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductHino(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "4"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductMercedes(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "5"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductBPR(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "6"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductEmilia(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "8"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
async function GetProductHomes(token="") { | |||
var res = await apollo.query( | |||
` | |||
query { | |||
products(where: {business_partner: "9"}) | |||
{ | |||
id | |||
name | |||
description | |||
price | |||
img{ | |||
url | |||
} | |||
business_partner | |||
{ | |||
name | |||
} | |||
} | |||
}`, | |||
token | |||
); | |||
return res; | |||
} | |||
module.exports = { | |||
GetProduct: GetProduct, | |||
// GetProduct: GetProduct, | |||
GetDetailProduct:GetDetailProduct, | |||
GetProductYamaha:GetProductYamaha, | |||
GetProductSuzuki:GetProductSuzuki, | |||
GetProductHonda:GetProductHonda, | |||
GetProductHino:GetProductHino, | |||
GetProductMercedes:GetProductMercedes, | |||
GetProductBPR:GetProductBPR, | |||
GetProductEmilia:GetProductEmilia, | |||
GetProductHomes:GetProductHomes, | |||
}; |
@@ -40,7 +40,7 @@ export default function HeaderLinks(props) { | |||
<CustomDropdown | |||
noLiPadding | |||
navDropdown | |||
buttonText="Facilities" | |||
buttonText="Product" | |||
buttonProps={{ | |||
className: classes.navLink, | |||
color: "transparent", | |||
@@ -55,6 +55,7 @@ | |||
"react": "16.13.1", | |||
"react-datetime": "2.16.3", | |||
"react-dom": "16.13.1", | |||
"react-paginate": "^7.1.0", | |||
"react-slick": "0.25.2", | |||
"react-swipeable-views": "0.13.9", | |||
"rsuite": "^4.8.6", | |||
@@ -1,7 +1,9 @@ | |||
import React from "react"; | |||
import React, { useState, useEffect } from 'react'; | |||
import Router, { withRouter } from 'next/router' | |||
// @material-ui/core components | |||
import { makeStyles } from "@material-ui/core/styles"; | |||
import ReactPaginate from 'react-paginate'; | |||
// component | |||
import styles from "assets/jss/nextjs-material-kit/pages/componentsSections/notificationsStyles.js"; | |||
@@ -16,6 +18,29 @@ import Paginations from "components/Pagination/Pagination.js"; | |||
const useStyles = makeStyles(styles); | |||
const DataLatestNews = function ({ backend, news, ...props }) { | |||
const [isLoading, setLoading] = useState(false); //State for the loading indicator | |||
const startLoading = () => setLoading(true); | |||
const stopLoading = () => setLoading(false); | |||
useEffect(() => { //After the component is mounted set router event handlers | |||
Router.events.on('routeChangeStart', startLoading); | |||
Router.events.on('routeChangeComplete', stopLoading); | |||
return () => { | |||
Router.events.off('routeChangeStart', startLoading); | |||
Router.events.off('routeChangeComplete', stopLoading); | |||
} | |||
}, []) | |||
const pagginationHandler = (page) => { | |||
const currentPath = props.router.pathname; | |||
const currentQuery = props.router.query; | |||
currentQuery.page = page.selected + 1; | |||
props.router.push({ | |||
pathname: currentPath, | |||
query: currentQuery, | |||
}); | |||
}; | |||
const classes = useStyles(); | |||
const latnews = news.map((data) => { | |||
return ( | |||
@@ -43,6 +68,7 @@ const DataLatestNews = function ({ backend, news, ...props }) { | |||
<div> | |||
<GridContainer justify="center"> | |||
{latnews} | |||
{latnews} | |||
</GridContainer> | |||
</div> | |||
<div align="center"> | |||
@@ -61,7 +87,7 @@ const DataLatestNews = function ({ backend, news, ...props }) { | |||
]} | |||
/> | |||
</div> | |||
</div> | |||
</div> | |||
); | |||
} | |||
@@ -8,7 +8,6 @@ import { makeStyles } from "@material-ui/core/styles"; | |||
// @material-ui/icons | |||
import Dashboard from "@material-ui/icons/Dashboard"; | |||
import LocalGroceryStoreIcon from "@material-ui/icons/LocalGroceryStore"; | |||
// Component | |||
import GridContainer from "components/Grid/GridContainer.js"; | |||
@@ -20,9 +19,10 @@ import CardHeader from "components/Card/CardHeader.js"; | |||
import CardFooter from "components/Card/CardFooter.js"; | |||
import Button from "components/CustomButtons/Button.js"; | |||
import styles from "assets/jss/nextjs-material-kit/pages/profilePage.js"; | |||
import Icon from "@material-ui/core/Icon"; | |||
const useStyles = makeStyles(styles); | |||
const DataProduct = function ({ backend, product, ...props }) { | |||
const DataProduct = function ({ backend, yamaha, suzuki, honda, hino, mercedes, bpr, emilia, homes, ...props }) { | |||
const classes = useStyles(); | |||
const { ...rest } = props; | |||
const imageClasses = classNames( | |||
@@ -31,8 +31,7 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
classes.imgFluid | |||
); | |||
const navImageClasses = classNames(classes.imgRounded, classes.imgGallery); | |||
const Product = product.map((data) => { | |||
console.log(data); | |||
const Productyamaha = yamaha.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
@@ -42,11 +41,167 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3><a href={"/product_detail?a="+data.id}>{data.name}</a></h3> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button color="info" round> | |||
<LocalGroceryStoreIcon className={classes.icons} />{" "} | |||
Buy | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Productsuzuki = suzuki.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Producthonda = honda.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Producthino = hino.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Productmercedes = mercedes.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Productbpr = bpr.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Productemilia = emilia.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
); | |||
}) | |||
const Producthomes = homes.map((data) => { | |||
return ( | |||
<div> | |||
<img | |||
alt="..." | |||
style={{ height: "350px", display: "block" }} | |||
src={`${backend}${data.img[0]["url"]}`} | |||
className={navImageClasses} | |||
/> | |||
<div align="center"> | |||
<h3>{data.name}</h3> | |||
<h4>Rp.{data.price}</h4> | |||
<Button | |||
color="info" round | |||
href={"/product_detail?a="+data.id} | |||
> | |||
<Icon className={classes.icons}>open_in_new</Icon>Detail Product | |||
</Button> | |||
</div> | |||
</div> | |||
@@ -72,7 +227,7 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Product} | |||
{Productyamaha} | |||
</GridContainer> | |||
), | |||
}, | |||
@@ -81,7 +236,7 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Product} | |||
{Productsuzuki} | |||
</GridContainer> | |||
), | |||
}, | |||
@@ -90,7 +245,16 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Producthonda} | |||
</GridContainer> | |||
), | |||
}, | |||
{ | |||
tabButton: "Hino", | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Producthino} | |||
</GridContainer> | |||
), | |||
}, | |||
@@ -99,7 +263,34 @@ const DataProduct = function ({ backend, product, ...props }) { | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Productmercedes} | |||
</GridContainer> | |||
), | |||
}, | |||
{ | |||
tabButton: "BPR Berkat Sejati", | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Productmercedes} | |||
</GridContainer> | |||
), | |||
}, | |||
{ | |||
tabButton: "Emilia Hotel", | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Productemilia} | |||
</GridContainer> | |||
), | |||
}, | |||
{ | |||
tabButton: "Thamrin Homes", | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
{Producthomes} | |||
</GridContainer> | |||
), | |||
}, | |||
@@ -22,12 +22,6 @@ import CardFooter from "components/Card/CardFooter.js"; | |||
import Button from "components/CustomButtons/Button.js"; | |||
import styles from "assets/jss/nextjs-material-kit/pages/profilePage.js"; | |||
import Carousel from "react-slick"; | |||
import Paper from '@material-ui/core/Paper'; | |||
import image1 from "assets/img/bg.jpg"; | |||
import image2 from "assets/img/bg2.png"; | |||
import image3 from "assets/img/bg3.jpg"; | |||
const useStyles = makeStyles(styles); | |||
@@ -59,6 +53,7 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||
<h3>{data.name}</h3> | |||
<h3>Rp.{data.price}</h3> | |||
<hr></hr> | |||
<p>{data.description}</p> | |||
</Grid> | |||
</GridContainer> | |||
); | |||
@@ -127,16 +122,6 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||
</GridContainer> | |||
), | |||
}, | |||
{ | |||
tabButton: "Test Drive", | |||
tabIcon: Dashboard, | |||
tabContent: ( | |||
<GridContainer justify="center"> | |||
<GridItem> | |||
</GridItem> | |||
</GridContainer> | |||
), | |||
}, | |||
]} | |||
/> | |||
</GridItem> | |||
@@ -20,7 +20,7 @@ import Getproduct from "../api/product/product.js" | |||
const useStyles = makeStyles(styles); | |||
const Product = function ({ backend, product, ...props }) { | |||
const Product = function ({ backend, yamaha, suzuki, honda, hino, mercedes, bpr, emilia, homes, ...props }) { | |||
const classes = useStyles(); | |||
const { ...rest } = props; | |||
return ( | |||
@@ -50,7 +50,7 @@ const Product = function ({ backend, product, ...props }) { | |||
</div> | |||
</Parallax> | |||
<div className={classNames(classes.main, classes.mainRaised)}> | |||
<DataProduct product={product} backend={backend}/> | |||
<DataProduct yamaha={yamaha} suzuki={suzuki} honda={honda} hino={hino} mercedes={mercedes} bpr={bpr} emilia={emilia} homes={homes} backend={backend}/> | |||
</div> | |||
<Footer /> | |||
</div> | |||
@@ -60,15 +60,57 @@ const Product = function ({ backend, product, ...props }) { | |||
export default Product; | |||
export async function getServerSideProps(context) { | |||
var product = []; | |||
var yamaha = []; | |||
var suzuki = []; | |||
var honda = []; | |||
var hino = []; | |||
var mercedes = []; | |||
var bpr = []; | |||
var emilia = []; | |||
var homes = []; | |||
const backend = process.env.BACKEND_SERVER_URI; | |||
var res = await Getproduct.GetProduct(); | |||
var res = await Getproduct.GetProductYamaha(); | |||
if (res["STATUS"] === 1) { | |||
product = res["DATA"]["products"]; | |||
yamaha = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductSuzuki(); | |||
if (res["STATUS"] === 1) { | |||
suzuki = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductHonda(); | |||
if (res["STATUS"] === 1) { | |||
honda = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductHino(); | |||
if (res["STATUS"] === 1) { | |||
hino = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductMercedes(); | |||
if (res["STATUS"] === 1) { | |||
mercedes = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductBPR(); | |||
if (res["STATUS"] === 1) { | |||
bpr = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductEmilia(); | |||
if (res["STATUS"] === 1) { | |||
emilia = res["DATA"]["products"]; | |||
} | |||
var res = await Getproduct.GetProductHomes(); | |||
if (res["STATUS"] === 1) { | |||
homes = res["DATA"]["products"]; | |||
} | |||
return { | |||
props: { product, backend }, // will be passed to the page component as props | |||
props: { yamaha, suzuki, honda, hino, mercedes, bpr, emilia, homes, backend }, // will be passed to the page component as props | |||
}; | |||
} |
@@ -7644,6 +7644,13 @@ react-onclickoutside@^6.5.0: | |||
resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.9.0.tgz#a54bc317ae8cf6131a5d78acea55a11067f37a1f" | |||
integrity sha512-8ltIY3bC7oGhj2nPAvWOGi+xGFybPNhJM0V1H8hY/whNcXgmDeaeoCMPPd8VatrpTsUWjb/vGzrmu6SrXVty3A== | |||
react-paginate@^7.1.0: | |||
version "7.1.0" | |||
resolved "https://registry.yarnpkg.com/react-paginate/-/react-paginate-7.1.0.tgz#7dc244ad7ca2db59b6eb83472655de3c126be1bc" | |||
integrity sha512-OZm87+Qsixw3UlpR57Va6I32wC3SJ9eRsMDi2PjWSdoMVszi3B35A6AcuXB0If/AwxJeEqspYVBJLNf8UScB7g== | |||
dependencies: | |||
prop-types "^15.6.1" | |||
react-popper@^1.3.7: | |||
version "1.3.7" | |||
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.7.tgz#f6a3471362ef1f0d10a4963673789de1baca2324" | |||