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.
 
 

189 line
6.5 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: "yamaha",
  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("/yamaha/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={12} sm={6} md={4}>
  95. <Card className={classes[cardAnimaton]}>
  96. <form onSubmit={submitHandler} className={classes.form}>
  97. <CardHeader color="info" className={classes.cardHeader}>
  98. <h4>Login</h4>
  99. <div className={classes.socialLine}>
  100. <Button
  101. justIcon
  102. href="#pablo"
  103. target="_blank"
  104. color="transparent"
  105. onClick={(e) => e.preventDefault()}
  106. >
  107. <i className={"fab fa-twitter"} />
  108. </Button>
  109. <Button
  110. justIcon
  111. href="#pablo"
  112. target="_blank"
  113. color="transparent"
  114. onClick={(e) => e.preventDefault()}
  115. >
  116. <i className={"fab fa-facebook"} />
  117. </Button>
  118. <Button
  119. justIcon
  120. href="#pablo"
  121. target="_blank"
  122. color="transparent"
  123. onClick={(e) => e.preventDefault()}
  124. >
  125. <i className={"fab fa-google-plus-g"} />
  126. </Button>
  127. </div>
  128. </CardHeader>
  129. <p className={classes.divider}>Welcome to Thamrin Brothers</p>
  130. <CardBody>
  131. <CustomInput
  132. labelText="Email..."
  133. id="email"
  134. value={email}
  135. formControlProps={{
  136. fullWidth: true,
  137. }}
  138. inputProps={{
  139. type: "email",
  140. onChange: (event) => setEmail(event.target.value),
  141. endAdornment: (
  142. <InputAdornment position="end">
  143. <Email className={classes.inputIconsColor} />
  144. </InputAdornment>
  145. ),
  146. }}
  147. />
  148. <CustomInput
  149. labelText="Password"
  150. id="pass"
  151. value={pass}
  152. formControlProps={{
  153. fullWidth: true,
  154. }}
  155. inputProps={{
  156. onChange: (event) => setPass(event.target.value),
  157. type: "password",
  158. endAdornment: (
  159. <InputAdornment position="end">
  160. <Icon className={classes.inputIconsColor}>
  161. lock_outline
  162. </Icon>
  163. </InputAdornment>
  164. ),
  165. autoComplete: "off",
  166. }}
  167. />
  168. </CardBody>
  169. <CardFooter className={classes.cardFooter}>
  170. <Button type="submit" color="info" size="lg">
  171. Login
  172. </Button>
  173. </CardFooter>
  174. </form>
  175. </Card>
  176. </GridItem>
  177. </GridContainer>
  178. </div>
  179. </div>
  180. </div>
  181. );
  182. }