diff --git a/pages/admin/createItem.tsx b/pages/admin/createItem.tsx index 995e1954..d546553a 100644 --- a/pages/admin/createItem.tsx +++ b/pages/admin/createItem.tsx @@ -14,7 +14,7 @@ import { } from '@chakra-ui/react'; import axios from 'axios'; import { getCookie } from 'cookies-next'; -import { NextPageContext, NextApiRequest } from 'next'; +import { NextApiRequest, GetServerSidePropsContext } from 'next'; import React, { useState } from 'react'; import HeaderCard from '../../components/Card/HeaderCard'; import Layout from '../../components/Layout'; @@ -264,7 +264,7 @@ const CreateItem = () => { export default CreateItem; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { try { const token = getCookie('userToken', { req: context.req, res: context.res }) as | string @@ -285,7 +285,7 @@ export async function getServerSideProps(context: NextPageContext) { } catch (e) { return { redirect: { - destination: '/', + destination: `/login?redirect=${encodeURIComponent(context.resolvedUrl)}`, permanent: false, }, }; diff --git a/pages/feedback/trades.tsx b/pages/feedback/trades.tsx index 65ff9900..12c4bb60 100644 --- a/pages/feedback/trades.tsx +++ b/pages/feedback/trades.tsx @@ -20,7 +20,7 @@ import { } from '@chakra-ui/react'; import axios from 'axios'; import { getCookie } from 'cookies-next'; -import { NextApiRequest, NextPageContext } from 'next'; +import { GetServerSidePropsContext, NextApiRequest } from 'next'; import { ReactElement, useEffect, useRef, useState } from 'react'; import { BsXLg, BsXCircleFill, BsCheckCircleFill, BsCheckLg } from 'react-icons/bs'; import CardBase from '../../components/Card/CardBase'; @@ -344,7 +344,7 @@ export const TradeGuidelines = () => { ); }; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { try { const token = getCookie('userToken', { req: context.req, res: context.res }) as | string @@ -371,7 +371,7 @@ export async function getServerSideProps(context: NextPageContext) { } catch (e) { return { redirect: { - destination: '/login', + destination: `/login?redirect=${encodeURIComponent(context.resolvedUrl)}`, permanent: false, }, }; diff --git a/pages/feedback/vote.tsx b/pages/feedback/vote.tsx index 5c18c7d9..4ddf2d65 100644 --- a/pages/feedback/vote.tsx +++ b/pages/feedback/vote.tsx @@ -28,7 +28,7 @@ import { Feedback, TradeData } from '../../types'; import { useAuth } from '../../utils/auth'; import { TradeGuidelines } from './trades'; import { getCookie } from 'cookies-next'; -import { NextPageContext, NextApiRequest } from 'next'; +import { NextApiRequest, GetServerSidePropsContext } from 'next'; import { CheckAuth } from '../../utils/googleCloud'; import { createTranslator, useTranslations } from 'next-intl'; import dynamic from 'next/dynamic'; @@ -352,7 +352,7 @@ export default FeedbackVotingPage; // ); // }; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { try { const token = getCookie('userToken', { req: context.req, res: context.res }) as | string @@ -379,7 +379,7 @@ export async function getServerSideProps(context: NextPageContext) { } catch (e) { return { redirect: { - destination: '/login', + destination: `/login?redirect=${encodeURIComponent(context.resolvedUrl)}`, permanent: false, }, }; diff --git a/pages/lists/[username]/[list_id].tsx b/pages/lists/[username]/[list_id].tsx index 693a039b..e5cc7d4e 100644 --- a/pages/lists/[username]/[list_id].tsx +++ b/pages/lists/[username]/[list_id].tsx @@ -35,7 +35,7 @@ import Color from 'color'; import SortableArea from '../../../components/Sortable/SortableArea'; import { SelectItemsCheckbox } from '../../../components/Input/SelectItemsCheckbox'; import { ItemActionModalProps } from '../../../components/Modal/ItemActionModal'; -import { NextPageContext } from 'next'; +import { GetServerSidePropsContext } from 'next'; import { getList } from '../../api/v1/lists/[username]/[list_id]'; import { getCookie } from 'cookies-next'; @@ -842,7 +842,7 @@ const ListPage = (props: Props) => { export default ListPage; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { const { list_id, username } = context.query; if (!username || !list_id || Array.isArray(username) || Array.isArray(list_id)) return { notFound: true }; diff --git a/pages/lists/[username]/index.tsx b/pages/lists/[username]/index.tsx index 1af6a788..348c94ab 100644 --- a/pages/lists/[username]/index.tsx +++ b/pages/lists/[username]/index.tsx @@ -31,7 +31,7 @@ import { FaTrash } from 'react-icons/fa'; import { DeleteListModalProps } from '../../../components/Modal/DeleteListModal'; import { BiLinkExternal } from 'react-icons/bi'; import { EditProfileModalProps } from '../../../components/Modal/EditProfileModal'; -import { NextPageContext } from 'next'; +import { GetServerSidePropsContext } from 'next'; import { getUser } from '../../api/v1/users/[username]'; import NextImage from 'next/image'; import icon from '../../../public/logo_icon.svg'; @@ -40,15 +40,15 @@ import dynamic from 'next/dynamic'; import { useTranslations } from 'next-intl'; const CreateListModal = dynamic( - () => import('../../../components/Modal/CreateListModal'), + () => import('../../../components/Modal/CreateListModal') ); const DeleteListModal = dynamic( - () => import('../../../components/Modal/DeleteListModal'), + () => import('../../../components/Modal/DeleteListModal') ); const EditProfileModal = dynamic( - () => import('../../../components/Modal/EditProfileModal'), + () => import('../../../components/Modal/EditProfileModal') ); type ExtendedUserList = UserList & { @@ -234,7 +234,7 @@ const UserListsPage = (props: Props) => { headers: { authorization: `Bearer ${token}`, }, - }, + } ); if (res.data.success) { @@ -508,7 +508,7 @@ const UserListsPage = (props: Props) => { ); }; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { const { username } = context.query; if (!username || Array.isArray(username)) return { notFound: true }; diff --git a/pages/login.tsx b/pages/login.tsx index ef50928b..e0314a8e 100644 --- a/pages/login.tsx +++ b/pages/login.tsx @@ -47,6 +47,7 @@ const LoginPage = () => { const init = async () => { setIsLoading(true); const { auth, isSignInWithEmailLink, signInWithEmailLink } = await getAuth(); + const redirectTo = (router.query.redirect as string | undefined) ?? '/'; if (isSignInWithEmailLink(auth, window.location.href) && !user) { let mailAddr = window.localStorage.getItem('emailForSignIn'); @@ -77,7 +78,7 @@ const LoginPage = () => { setUser(user); - router.replace('/'); + router.replace(decodeURIComponent(redirectTo)); } catch (e: any) { setError(e.message); console.error(error); @@ -90,7 +91,7 @@ const LoginPage = () => { return setNeedInfo(true); } - router.replace('/'); + router.replace(decodeURIComponent(redirectTo)); } else onOpen(); }; @@ -109,6 +110,8 @@ const LoginPage = () => { }; const saveChanges = async () => { + const redirectTo = (router.query.redirect as string | undefined) ?? '/'; + setError(''); if (!neopetsUser || !username) { setError(t('Login.please-fill-all-fields')); @@ -151,7 +154,7 @@ const LoginPage = () => { setUser(user); - router.replace('/'); + router.replace(decodeURIComponent(redirectTo)); } catch (e: any) { setError(e.message); console.error(error); @@ -160,7 +163,8 @@ const LoginPage = () => { const closeLogin = () => { onClose(); - router.replace('/'); + const redirectTo = (router.query.redirect as string | undefined) ?? '/'; + router.replace(decodeURIComponent(redirectTo)); }; const checkUsername = async (): Promise => { diff --git a/pages/tools/data-collecting.tsx b/pages/tools/data-collecting.tsx index c330e9f0..b98d6e88 100644 --- a/pages/tools/data-collecting.tsx +++ b/pages/tools/data-collecting.tsx @@ -20,7 +20,7 @@ import { ReactElement, useState } from 'react'; import ItemCard from '../../components/Items/ItemCard'; import axios from 'axios'; import { getCookie } from 'cookies-next'; -import { NextPageContext, NextApiRequest } from 'next'; +import { NextApiRequest, GetServerSidePropsContext } from 'next'; import { CheckAuth } from '../../utils/googleCloud'; const DATA_COLLECTING_OPTIONS: { @@ -183,7 +183,7 @@ const DataCollectingPage = () => { export default DataCollectingPage; -export async function getServerSideProps(context: NextPageContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { try { const token = getCookie('userToken', { req: context.req, res: context.res }) as | string @@ -210,7 +210,7 @@ export async function getServerSideProps(context: NextPageContext) { } catch (e) { return { redirect: { - destination: '/login', + destination: `/login?redirect=${encodeURIComponent(context.resolvedUrl)}`, permanent: false, }, };