Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 

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