You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
6.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 Collapse from "@material-ui/core/Collapse";
  6. import Alert from "@material-ui/lab/Alert";
  7. import IconButton from "@material-ui/core/IconButton";
  8. import CloseIcon from "@material-ui/icons/Close";
  9. import Icon from "@material-ui/core/Icon";
  10. // @material-ui/icons
  11. import Email from "@material-ui/icons/Email";
  12. import People from "@material-ui/icons/People";
  13. // core components
  14. import Header from "components/Header/Header.js";
  15. import HeaderLinks from "components/Header/HeaderLinks.js";
  16. import Footer from "components/Footer/Footer.js";
  17. import GridContainer from "components/Grid/GridContainer.js";
  18. import GridItem from "components/Grid/GridItem.js";
  19. import Button from "components/CustomButtons/Button.js";
  20. import Card from "components/Card/Card.js";
  21. import CardBody from "components/Card/CardBody.js";
  22. import CardHeader from "components/Card/CardHeader.js";
  23. import CardFooter from "components/Card/CardFooter.js";
  24. import CustomInput from "components/CustomInput/CustomInput.js";
  25. import styles from "assets/jss/nextjs-material-kit/pages/loginPage.js";
  26. import image from "assets/img/bgtbg.jpg";
  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: "suzuki",
  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("/suzuki/home");
  57. } else {
  58. setError(await res.text());
  59. setOpen(true);
  60. }
  61. };
  62. return (
  63. <>
  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. <div>
  84. <Header absolute color="info" rightLinks={<HeaderLinks />} {...rest} />
  85. <div
  86. className={classes.pageHeader}
  87. style={{
  88. backgroundImage: "url(" + image + ")",
  89. backgroundSize: "cover",
  90. backgroundPosition: "top center",
  91. }}
  92. >
  93. <div className={classes.container}>
  94. <GridContainer justify="center">
  95. <GridItem xs={12} sm={6} md={4}>
  96. <Card className={classes[cardAnimaton]}>
  97. <form onSubmit={submitHandler} className={classes.form}>
  98. <CardHeader color="info" className={classes.cardHeader}>
  99. <h4>Login</h4>
  100. <div className={classes.socialLine}>
  101. <Button
  102. justIcon
  103. href="#pablo"
  104. target="_blank"
  105. color="transparent"
  106. onClick={(e) => e.preventDefault()}
  107. >
  108. <i className={"fab fa-twitter"} />
  109. </Button>
  110. <Button
  111. justIcon
  112. href="#pablo"
  113. target="_blank"
  114. color="transparent"
  115. onClick={(e) => e.preventDefault()}
  116. >
  117. <i className={"fab fa-facebook"} />
  118. </Button>
  119. <Button
  120. justIcon
  121. href="#pablo"
  122. target="_blank"
  123. color="transparent"
  124. onClick={(e) => e.preventDefault()}
  125. >
  126. <i className={"fab fa-google-plus-g"} />
  127. </Button>
  128. </div>
  129. </CardHeader>
  130. <p className={classes.divider}>
  131. Welcome to Thamrin Brothers
  132. </p>
  133. <CardBody>
  134. <input type="hidden" name="partner" value="YAMAHA" />
  135. <CustomInput
  136. labelText="Email..."
  137. id="email"
  138. value={email}
  139. formControlProps={{
  140. fullWidth: true,
  141. }}
  142. inputProps={{
  143. type: "email",
  144. onChange: (event) => setEmail(event.target.value),
  145. endAdornment: (
  146. <InputAdornment position="end">
  147. <Email className={classes.inputIconsColor} />
  148. </InputAdornment>
  149. ),
  150. }}
  151. />
  152. <CustomInput
  153. labelText="Password"
  154. id="pass"
  155. value={pass}
  156. formControlProps={{
  157. fullWidth: true,
  158. }}
  159. inputProps={{
  160. onChange: (event) => setPass(event.target.value),
  161. type: "password",
  162. endAdornment: (
  163. <InputAdornment position="end">
  164. <Icon className={classes.inputIconsColor}>
  165. lock_outline
  166. </Icon>
  167. </InputAdornment>
  168. ),
  169. autoComplete: "off",
  170. }}
  171. />
  172. </CardBody>
  173. <CardFooter className={classes.cardFooter}>
  174. <Button type="submit" color="info" size="lg">
  175. Login
  176. </Button>
  177. </CardFooter>
  178. </form>
  179. </Card>
  180. </GridItem>
  181. </GridContainer>
  182. </div>
  183. <Footer whiteFont />
  184. </div>
  185. </div>
  186. </>
  187. );
  188. }