Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 

175 wiersze
6.0 KiB

  1. import React from "react";
  2. // @material-ui/core components
  3. import { makeStyles } from "@material-ui/core/styles";
  4. import InputAdornment from "@material-ui/core/InputAdornment";
  5. import Icon from "@material-ui/core/Icon";
  6. // @material-ui/icons
  7. import Email from "@material-ui/icons/Email";
  8. import People from "@material-ui/icons/People";
  9. // core components
  10. import Header from "components/Header/Header.js";
  11. import HeaderLinks from "components/Header/HeaderLinks.js";
  12. import Footer from "components/Footer/Footer.js";
  13. import GridContainer from "components/Grid/GridContainer.js";
  14. import GridItem from "components/Grid/GridItem.js";
  15. import Button from "components/CustomButtons/Button.js";
  16. import Card from "components/Card/Card.js";
  17. import CardBody from "components/Card/CardBody.js";
  18. import CardHeader from "components/Card/CardHeader.js";
  19. import CardFooter from "components/Card/CardFooter.js";
  20. import CustomInput from "components/CustomInput/CustomInput.js";
  21. import Grid from "@material-ui/core/Grid";
  22. import styles from "assets/jss/nextjs-material-kit/pages/loginPage.js";
  23. import image from "assets/img/bgtbg.jpg";
  24. import Carousel from "react-slick";
  25. import Collapse from "@material-ui/core/Collapse";
  26. import Alert from "@material-ui/lab/Alert";
  27. import IconButton from "@material-ui/core/IconButton";
  28. import CloseIcon from "@material-ui/icons/Close";
  29. import { useRouter } from "next/router";
  30. const useStyles = makeStyles(styles);
  31. export default function LoginPage(props) {
  32. const [cardAnimaton, setCardAnimation] = React.useState("cardHidden");
  33. const [email, setEmail] = React.useState("");
  34. const [pass, setPass] = React.useState("");
  35. const [open, setOpen] = React.useState(false);
  36. const [error, setError] = React.useState("");
  37. const router = useRouter();
  38. setTimeout(function () {
  39. setCardAnimation("");
  40. }, 700);
  41. const classes = useStyles();
  42. const { ...rest } = props;
  43. const submitHandler = async (event) => {
  44. event.preventDefault();
  45. setEmail(event.target.email.value);
  46. setPass(event.target.pass.value);
  47. const res = await fetch("../api/auth/login", {
  48. body: JSON.stringify({
  49. partner: "yamaha",
  50. email: email,
  51. pass: pass,
  52. }),
  53. headers: {
  54. "Content-Type": "application/json",
  55. },
  56. method: "POST",
  57. });
  58. // console.log("res", res.S);
  59. if (res.ok) {
  60. router.push("/yamaha/home");
  61. } else {
  62. setError(await res.text());
  63. setOpen(true);
  64. }
  65. };
  66. return (
  67. <div>
  68. <Collapse className={classes.collapsible} in={open}>
  69. <Alert
  70. severity="error"
  71. action={
  72. <IconButton
  73. aria-label="close"
  74. color="inherit"
  75. size="small"
  76. onClick={() => {
  77. setOpen(false);
  78. }}
  79. >
  80. <CloseIcon fontSize="inherit" />
  81. </IconButton>
  82. }
  83. >
  84. {error}
  85. </Alert>
  86. </Collapse>
  87. {/* <Header absolute color="info" rightLinks={<HeaderLinks />} {...rest} /> */}
  88. <div
  89. className={classes.pageHeader}
  90. style={{
  91. backgroundImage: "url(" + image + ")",
  92. backgroundSize: "cover",
  93. backgroundPosition: "top center",
  94. }}
  95. >
  96. <div className={classes.container}>
  97. <Grid container>
  98. <GridItem className={classes.marginAuto}>
  99. <Carousel>
  100. <Card className={classes[cardAnimaton]}>
  101. <form onSubmit={submitHandler} className={classes.form}>
  102. <CardHeader color="info" className={classes.cardHeader}>
  103. <h4>
  104. <b>Login</b>
  105. </h4>
  106. </CardHeader>
  107. <h4 className={classes.divider}>
  108. <b>Selamat Datang di Halaman Login Thamrin Brothers</b>
  109. </h4>
  110. <CardBody>
  111. <CustomInput
  112. labelText="Email..."
  113. id="email"
  114. value={email}
  115. formControlProps={{
  116. fullWidth: true,
  117. }}
  118. inputProps={{
  119. type: "email",
  120. name: "email",
  121. onChange: (event) => setEmail(event.target.value),
  122. endAdornment: (
  123. <InputAdornment position="end">
  124. <Email className={classes.inputIconsColor} />
  125. </InputAdornment>
  126. ),
  127. }}
  128. />
  129. <CustomInput
  130. labelText="Password"
  131. id="pass"
  132. value={pass}
  133. formControlProps={{
  134. fullWidth: true,
  135. }}
  136. inputProps={{
  137. name: "pass",
  138. onChange: (event) => setPass(event.target.value),
  139. type: "password",
  140. endAdornment: (
  141. <InputAdornment position="end">
  142. <Icon className={classes.inputIconsColor}>
  143. lock_outline
  144. </Icon>
  145. </InputAdornment>
  146. ),
  147. autoComplete: "off",
  148. }}
  149. />
  150. </CardBody>
  151. <CardFooter className={classes.cardFooter}>
  152. <Button type="submit" color="info" size="lg">
  153. Login
  154. </Button>
  155. <Button href="/yamaha/register" color="info" size="lg">
  156. Register
  157. </Button>
  158. </CardFooter>
  159. </form>
  160. </Card>
  161. </Carousel>
  162. </GridItem>
  163. </Grid>
  164. </div>
  165. </div>
  166. </div>
  167. );
  168. }