| @@ -0,0 +1,46 @@ | |||||
| import apollo from "../../lib/apollo.js"; | |||||
| async function GetYGP(token="") { | |||||
| var res = await apollo.query( | |||||
| ` | |||||
| query { | |||||
| accessories(where: { category: "YGP" }) { | |||||
| id | |||||
| name | |||||
| description | |||||
| price | |||||
| part_code | |||||
| img { | |||||
| url | |||||
| } | |||||
| } | |||||
| }`, | |||||
| token | |||||
| ); | |||||
| return res; | |||||
| } | |||||
| async function GetYamalube(token="") { | |||||
| var res = await apollo.query( | |||||
| ` | |||||
| query { | |||||
| accessories(where: { category: "Yamalube" }) { | |||||
| id | |||||
| name | |||||
| description | |||||
| price | |||||
| part_code | |||||
| img { | |||||
| url | |||||
| } | |||||
| } | |||||
| }`, | |||||
| token | |||||
| ); | |||||
| return res; | |||||
| } | |||||
| module.exports = { | |||||
| GetYGP:GetYGP, | |||||
| GetYamalube:GetYamalube, | |||||
| }; | |||||
| @@ -45,7 +45,6 @@ async function GetDetailProduct(id, token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -79,7 +78,6 @@ async function GetProductYamaha(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -110,7 +108,6 @@ async function GetProductSuzuki(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -141,7 +138,6 @@ async function GetProductHonda(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -172,7 +168,6 @@ async function GetProductHino(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -203,7 +198,6 @@ async function GetProductMercedes(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -234,7 +228,6 @@ async function GetProductBPR(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -265,7 +258,6 @@ async function GetProductEmilia(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -296,7 +288,6 @@ async function GetProductHomes(token="") { | |||||
| } | } | ||||
| overview | overview | ||||
| specification | specification | ||||
| accessories | |||||
| film{ | film{ | ||||
| url | url | ||||
| } | } | ||||
| @@ -48,10 +48,10 @@ export default function HeaderLinks(props) { | |||||
| }} | }} | ||||
| buttonIcon={Apps} | buttonIcon={Apps} | ||||
| dropdownList={[ | dropdownList={[ | ||||
| <Link href="/product"> | |||||
| <Link href="/product/product"> | |||||
| <a className={classes.dropdownLink}>Motor</a> | <a className={classes.dropdownLink}>Motor</a> | ||||
| </Link>, | </Link>, | ||||
| <Link href="/product"> | |||||
| <Link href="/product/ygp"> | |||||
| <a className={classes.dropdownLink}>YGP</a> | <a className={classes.dropdownLink}>YGP</a> | ||||
| </Link>, | </Link>, | ||||
| <Link href="/product"> | <Link href="/product"> | ||||
| @@ -59,6 +59,7 @@ | |||||
| "react-slick": "0.25.2", | "react-slick": "0.25.2", | ||||
| "react-swipeable-views": "0.13.9", | "react-swipeable-views": "0.13.9", | ||||
| "rsuite": "^4.9.2", | "rsuite": "^4.9.2", | ||||
| "scss": "^0.2.4", | |||||
| "styled-components": "5.1.0", | "styled-components": "5.1.0", | ||||
| "webpack": "4.43.0" | "webpack": "4.43.0" | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| import React from "react"; | |||||
| import React, { useState, useEffect } from "react"; | |||||
| import classNames from "classnames"; | import classNames from "classnames"; | ||||
| import { makeStyles } from "@material-ui/core/styles"; | import { makeStyles } from "@material-ui/core/styles"; | ||||
| import ReactHtmlParser from "react-html-parser"; | import ReactHtmlParser from "react-html-parser"; | ||||
| @@ -50,9 +50,11 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||||
| <Card carousel> | <Card carousel> | ||||
| <Carousel {...settings}> | <Carousel {...settings}> | ||||
| <img className={navImageClasses} width="300px" alt="First slide" src={`${backend}${data.img[0]["url"]}`} /> | <img className={navImageClasses} width="300px" alt="First slide" src={`${backend}${data.img[0]["url"]}`} /> | ||||
| <img className={navImageClasses} width="300px" alt="First slide" src={`${backend}${data.img[1]["url"]}`} /> | |||||
| </Carousel> | </Carousel> | ||||
| </Card> | </Card> | ||||
| {/* <Button color="info" round href={"/product_detail?s="+data.id}> | |||||
| <Icon className={classes.icons}>shopping_cart</Icon>Add To Cart | |||||
| </Button> */} | |||||
| </GridItem> | </GridItem> | ||||
| </GridContainer> | </GridContainer> | ||||
| </div> | </div> | ||||
| @@ -66,9 +68,18 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||||
| <div align="justify"> | <div align="justify"> | ||||
| <p>{ReactHtmlParser(data.description)}</p> | <p>{ReactHtmlParser(data.description)}</p> | ||||
| </div> | </div> | ||||
| <Button color="info" round href={"/product_detail?s="+data.id} > | |||||
| <Icon className={classes.icons}>shopping_cart</Icon>Add To Cart | |||||
| </Button> | |||||
| <GridContainer> | |||||
| <Grid className={classes.marginAuto} style={{padding:"10px", marginTop:"-30px"}}> | |||||
| <Card className={classes.marginAuto} style={{height: "165px", width: "165px"}}> | |||||
| <img src="https://www.yamaha-motor.co.id/uploads/products/2021022311424212835Z1732.png"/> | |||||
| </Card> | |||||
| </Grid> | |||||
| <Grid className={classes.marginAuto} style={{padding:"10px", marginTop:"-30px"}}> | |||||
| <Card className={classes.marginAuto} style={{height: "165px", width: "165px"}}> | |||||
| <img src="https://www.yamaha-motor.co.id/uploads/products/2021022311424235104F62455.png"/> | |||||
| </Card> | |||||
| </Grid> | |||||
| </GridContainer> | |||||
| </Grid> | </Grid> | ||||
| </GridContainer> | </GridContainer> | ||||
| <GridContainer justify="center"> | <GridContainer justify="center"> | ||||
| @@ -85,7 +96,7 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||||
| <div> | <div> | ||||
| <GridContainer justify="center" style={{padding:"40px", marginTop:"-30px"}}> | <GridContainer justify="center" style={{padding:"40px", marginTop:"-30px"}}> | ||||
| <GridItem className={classes.marginAuto}> | <GridItem className={classes.marginAuto}> | ||||
| <div align="justify"> | |||||
| <div align="justify"> | |||||
| {ReactHtmlParser(data.overview)} | {ReactHtmlParser(data.overview)} | ||||
| </div> | </div> | ||||
| </GridItem> | </GridItem> | ||||
| @@ -107,29 +118,18 @@ const DataProduct = function ({ backend, detailproduct, ...props }) { | |||||
| ), | ), | ||||
| }, | }, | ||||
| { | { | ||||
| tabButton: "Accessories", | |||||
| tabButton: "Film", | |||||
| tabIcon: Dashboard, | tabIcon: Dashboard, | ||||
| tabContent: ( | tabContent: ( | ||||
| <GridContainer justify="center" style={{padding:"40px", marginTop:"-30px"}}> | <GridContainer justify="center" style={{padding:"40px", marginTop:"-30px"}}> | ||||
| <GridItem className={classes.marginAuto}> | <GridItem className={classes.marginAuto}> | ||||
| <div align="justify"> | <div align="justify"> | ||||
| {ReactHtmlParser(data.accessories)} | |||||
| {ReactHtmlParser(data.film)} | |||||
| </div> | </div> | ||||
| </GridItem> | </GridItem> | ||||
| </GridContainer> | </GridContainer> | ||||
| ), | ), | ||||
| }, | }, | ||||
| { | |||||
| tabButton: "Film", | |||||
| tabIcon: Dashboard, | |||||
| tabContent: ( | |||||
| <GridContainer justify="center" style={{padding:"40px", marginTop:"-30px"}}> | |||||
| <GridItem className={classes.marginAuto}> | |||||
| <img className={navImageClasses} width="300px" height="400px" alt="First slide" src={`${backend}${data.img[0]["url"]}`} /> | |||||
| </GridItem> | |||||
| </GridContainer> | |||||
| ), | |||||
| }, | |||||
| ]} | ]} | ||||
| /> | /> | ||||
| </GridItem> | </GridItem> | ||||
| @@ -0,0 +1,29 @@ | |||||
| import React from "react"; | |||||
| import { makeStyles } from "@material-ui/core/styles"; | |||||
| import styles from "assets/jss/nextjs-material-kit/pages/componentsSections/notificationsStyles.js"; | |||||
| import Card from "components/Card/Card.js"; | |||||
| import CardBody from "components/Card/CardBody.js"; | |||||
| import CardHeader from "components/Card/CardHeader.js"; | |||||
| const useStyles = makeStyles(styles); | |||||
| const DataYGP = function ({ backend, ygp, ...props }) { | |||||
| const classes = useStyles(); | |||||
| return ( | |||||
| <div> | |||||
| <Card className={classes.textCenter} align="center" style={{padding:"5px"}}> | |||||
| <div align="center"> | |||||
| <CardHeader justify="center" color="info" style={{padding:"10px"}}> | |||||
| <h2>Yamaha Geniue Part</h2> | |||||
| </CardHeader> | |||||
| </div> | |||||
| <CardBody> | |||||
| <h2>Yamaha Geniue Part</h2> | |||||
| </CardBody> | |||||
| </Card> | |||||
| </div> | |||||
| ); | |||||
| } | |||||
| export default DataYGP; | |||||
| @@ -5,7 +5,7 @@ import { makeStyles } from "@material-ui/core/styles"; | |||||
| import Header from "components/Header/Header.js"; | import Header from "components/Header/Header.js"; | ||||
| import HeaderLinks from "components/Header/HeaderLinks.js"; | import HeaderLinks from "components/Header/HeaderLinks.js"; | ||||
| import Footer from "components/Footer/Footer.js"; | import Footer from "components/Footer/Footer.js"; | ||||
| // import SectionChart from "pages-sections/Components-Sections/SectionChart.js"; | |||||
| // import SectionChart from "pages-sections/cart/SectionChart.js"; | |||||
| import Parallax from "components/Parallax/Parallax.js"; | import Parallax from "components/Parallax/Parallax.js"; | ||||
| import styles from "../assets/jss/nextjs-material-kit/pages/components.js"; | import styles from "../assets/jss/nextjs-material-kit/pages/components.js"; | ||||
| @@ -9,7 +9,7 @@ import DataProduct from "pages-sections/product/product.js"; | |||||
| import Parallax from "components/Parallax/Parallax.js"; | import Parallax from "components/Parallax/Parallax.js"; | ||||
| import styles from "assets/jss/nextjs-material-kit/pages/components.js"; | import styles from "assets/jss/nextjs-material-kit/pages/components.js"; | ||||
| import Getproduct from "../api/product/product.js"; | |||||
| import Getproduct from "../../api/product/product.js"; | |||||
| const useStyles = makeStyles(styles); | const useStyles = makeStyles(styles); | ||||
| @@ -8,7 +8,7 @@ import Footer from "components/Footer/Footer.js"; | |||||
| import ProductDetail from "pages-sections/product/product_details.js"; | import ProductDetail from "pages-sections/product/product_details.js"; | ||||
| import Parallax from "components/Parallax/Parallax.js"; | import Parallax from "components/Parallax/Parallax.js"; | ||||
| import styles from "assets/jss/nextjs-material-kit/pages/components.js"; | import styles from "assets/jss/nextjs-material-kit/pages/components.js"; | ||||
| import GetDetailproduct from "../api/product/product.js" | |||||
| import GetDetailproduct from "../../api/product/product.js" | |||||
| const useStyles = makeStyles(styles); | const useStyles = makeStyles(styles); | ||||
| @@ -48,8 +48,6 @@ export async function getServerSideProps(context) { | |||||
| detailproduct = res["DATA"]["products"]; | detailproduct = res["DATA"]["products"]; | ||||
| } | } | ||||
| console.log(res); | |||||
| return { | return { | ||||
| props: { detailproduct, backend }, // will be passed to the page component as props | props: { detailproduct, backend }, // will be passed to the page component as props | ||||
| }; | }; | ||||
| @@ -0,0 +1,54 @@ | |||||
| import React from "react"; | |||||
| import classNames from "classnames"; | |||||
| import { makeStyles } from "@material-ui/core/styles"; | |||||
| import Header from "components/Header/Header.js"; | |||||
| import HeaderLinks from "components/Header/HeaderLinks.js"; | |||||
| import Footer from "components/Footer/Footer.js"; | |||||
| import DataYGP from "pages-sections/product/ygp.js"; | |||||
| import Parallax from "components/Parallax/Parallax.js"; | |||||
| import styles from "assets/jss/nextjs-material-kit/pages/components.js"; | |||||
| import GetAccessories from "../../api/product/accessories.js"; | |||||
| const useStyles = makeStyles(styles); | |||||
| const Product = function ({ backend, ygp, ...props }) { | |||||
| const classes = useStyles(); | |||||
| const { ...rest } = props; | |||||
| return ( | |||||
| <div> | |||||
| <Header | |||||
| rightLinks={<HeaderLinks />} | |||||
| fixed | |||||
| color="info" | |||||
| changeColorOnScroll={{ | |||||
| height: 400, | |||||
| color: "white", | |||||
| }} | |||||
| {...rest} | |||||
| /> | |||||
| <Parallax image={require("assets/img/Promotion_2-1.jpg")} width="200px"/> | |||||
| <div className={classNames(classes.main, classes.mainRaised)}> | |||||
| <DataYGP backend={backend} /> | |||||
| </div> | |||||
| <Footer /> | |||||
| </div> | |||||
| ); | |||||
| }; | |||||
| export default Product; | |||||
| export async function getServerSideProps(context) { | |||||
| var ygp = []; | |||||
| const backend = process.env.BACKEND_SERVER_URI; | |||||
| var res = await GetAccessories.GetYGP(); | |||||
| if (res["STATUS"] === 1) { | |||||
| ygp = res["DATA"]["accessories"]; | |||||
| } | |||||
| return { | |||||
| props: { backend, ygp, }, // will be passed to the page component as props | |||||
| }; | |||||
| } | |||||
| @@ -5221,6 +5221,11 @@ object.values@^1.1.0: | |||||
| es-abstract "^1.18.0-next.1" | es-abstract "^1.18.0-next.1" | ||||
| has "^1.0.3" | has "^1.0.3" | ||||
| ometa@0.2.2: | |||||
| version "0.2.2" | |||||
| resolved "https://registry.yarnpkg.com/ometa/-/ometa-0.2.2.tgz#f53c4735ba6d56af5a46b04dfb7c4334c596d44e" | |||||
| integrity sha1-9TxHNbptVq9aRrBN+3xDNMWW1E4= | |||||
| once@^1.3.0, once@^1.3.1, once@^1.4.0: | once@^1.3.0, once@^1.3.1, once@^1.4.0: | ||||
| version "1.4.0" | version "1.4.0" | ||||
| resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" | ||||
| @@ -6779,6 +6784,13 @@ scss-tokenizer@^0.2.3: | |||||
| js-base64 "^2.1.8" | js-base64 "^2.1.8" | ||||
| source-map "^0.4.2" | source-map "^0.4.2" | ||||
| scss@^0.2.4: | |||||
| version "0.2.4" | |||||
| resolved "https://registry.yarnpkg.com/scss/-/scss-0.2.4.tgz#040d903ed37c5d4fa4ad33ae1fd389ac12a4e065" | |||||
| integrity sha1-BA2QPtN8XU+krTOuH9OJrBKk4GU= | |||||
| dependencies: | |||||
| ometa "0.2.2" | |||||
| "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: | "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: | ||||
| version "5.7.1" | version "5.7.1" | ||||
| resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" | ||||