verify.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { useEffect } from "react";
  2. import Router from "next/router";
  3. import styled from "styled-components";
  4. import cookie from "js-cookie";
  5. import { Flex } from "reflexbox/styled-components";
  6. import decode from "jwt-decode";
  7. import BodyWrapper from "../components/BodyWrapper";
  8. import { Button } from "../components/Button";
  9. import { NextPage } from "next";
  10. import { TokenPayload } from "../types";
  11. import { useStoreActions } from "../store";
  12. interface Props {
  13. token?: string;
  14. }
  15. const MessageWrapper = styled(Flex).attrs({
  16. justifyContent: "center",
  17. alignItems: "center",
  18. my: 32
  19. })``;
  20. const Message = styled.p`
  21. font-size: 24px;
  22. font-weight: 300;
  23. @media only screen and (max-width: 768px) {
  24. font-size: 18px;
  25. }
  26. `;
  27. const Icon = styled.img`
  28. width: 32px;
  29. height: 32px;
  30. margin-right: 16px;
  31. @media only screen and (max-width: 768px) {
  32. width: 26px;
  33. height: 26px;
  34. margin-right: 8px;
  35. }
  36. `;
  37. const Verify: NextPage<Props> = ({ token }) => {
  38. const addAuth = useStoreActions(s => s.auth.add);
  39. useEffect(() => {
  40. if (token) {
  41. cookie.set("token", token, { expires: 7 });
  42. const payload: TokenPayload = decode(token);
  43. addAuth(payload);
  44. }
  45. }, []);
  46. const goToHomepage = e => {
  47. e.preventDefault();
  48. Router.push("/");
  49. };
  50. const message = token ? (
  51. <Flex flexDirection="column" alignItems="center">
  52. <MessageWrapper>
  53. <Icon src="/images/check.svg" />
  54. <Message>Your account has been verified successfully!</Message>
  55. </MessageWrapper>
  56. <Button icon="arrow-left" onClick={goToHomepage}>
  57. Back to homepage
  58. </Button>
  59. </Flex>
  60. ) : (
  61. <MessageWrapper>
  62. <Icon src="/images/x.svg" />
  63. <Message>Invalid verification.</Message>
  64. </MessageWrapper>
  65. );
  66. return <BodyWrapper norenew>{message}</BodyWrapper>;
  67. };
  68. Verify.getInitialProps = async ({ req }) => {
  69. return { token: req && (req as any).token }; // TODO: types bro
  70. };
  71. export default Verify;