diff --git a/package-lock.json b/package-lock.json index d5a7bb6..ac6bf8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "net": "^1.0.2", "next": "^15.0.3", "next-seo": "^6.6.0", + "nextjs-toploader": "^3.7.15", "node-cron": "^3.0.3", "nodemailer": "^6.9.16", "promise-socket": "^8.0.0", @@ -9427,6 +9428,23 @@ "tslib": "^2.4.0" } }, + "node_modules/nextjs-toploader": { + "version": "3.7.15", + "resolved": "https://registry.npmjs.org/nextjs-toploader/-/nextjs-toploader-3.7.15.tgz", + "integrity": "sha512-DvvXEJVRPfE2j1HVXgFhmPl8pRcLb/4mvyVBDuYdMdkbEY7KJghp0fG5iOZ002cV6awbBw9j/Di7vQL8LRazxQ==", + "dependencies": { + "nprogress": "^0.2.0", + "prop-types": "^15.8.1" + }, + "funding": { + "url": "https://buymeacoffee.com/thesgj" + }, + "peerDependencies": { + "next": ">= 6.0.0", + "react": ">= 16.0.0", + "react-dom": ">= 16.0.0" + } + }, "node_modules/node-cron": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", @@ -9529,6 +9547,11 @@ "node": ">=8" } }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", diff --git a/package.json b/package.json index 97af63c..5c8292f 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "net": "^1.0.2", "next": "^15.0.3", "next-seo": "^6.6.0", + "nextjs-toploader": "^3.7.15", "node-cron": "^3.0.3", "nodemailer": "^6.9.16", "promise-socket": "^8.0.0", diff --git a/src/components/Panel.tsx b/src/components/Panel.tsx index 46074eb..2a614da 100644 --- a/src/components/Panel.tsx +++ b/src/components/Panel.tsx @@ -1,19 +1,16 @@ import React, { ReactNode } from "react"; import Loader from "./Loader"; -import { Flex, Box, Text, Grid, FlexProps, useColorModeValue } from "@chakra-ui/react"; -import { IoMdTime } from "react-icons/io"; -import { formatDate } from "@lib/."; +import { Flex, Box, Text, Grid, FlexProps } from "@chakra-ui/react"; import { useColors } from "@hook/useColors"; export interface PanelProps extends FlexProps { header?: string; - date?: string | null; identifier?: string | null; children?: ReactNode; isLoading?: boolean; } -const Panel = ({ header, date, identifier, children, isLoading = false, borderRadius = "none", padding = "10px", ...props }: PanelProps) => { +const Panel = ({ header, identifier, children, isLoading = false, borderRadius = "none", padding = "10px", ...props }: PanelProps) => { const { bgColor, textColor } = useColors(); return ( @@ -31,16 +28,9 @@ const Panel = ({ header, date, identifier, children, isLoading = false, borderRa {...props} > {header && ( - - + + {header} - {date && ( - - - {formatDate(date)} - - - )} )} diff --git a/src/layout/TopBar/index.tsx b/src/layout/TopBar/index.tsx index c615f1a..dc242b6 100644 --- a/src/layout/TopBar/index.tsx +++ b/src/layout/TopBar/index.tsx @@ -40,7 +40,7 @@ export const navigationItems: NavigationItems[] = [ ]; export const TopBar = () => { - const user = trpc.me.me.useQuery().data; + const account = trpc.me.me.useQuery().data; const status = trpc.status.status.useQuery().data; const router = useRouter(); @@ -79,9 +79,9 @@ export const TopBar = () => { ))} - {user ? ( + {account ? ( { const { bgColor } = useColors(); @@ -12,6 +13,7 @@ const Layout = ({ children }: PropsWithChildren) => { return ( <> + {TopBarComponent && } {children} diff --git a/src/lib/session.ts b/src/lib/session.ts index 646f153..08b0792 100644 --- a/src/lib/session.ts +++ b/src/lib/session.ts @@ -2,13 +2,11 @@ import { IronSessionOptions } from "iron-session"; import { withIronSessionApiRoute, withIronSessionSsr } from "iron-session/next"; import { GetServerSidePropsContext, GetServerSidePropsResult, NextApiHandler } from "next"; import { dev } from "./config"; -import type { accounts } from "@prisma/client"; - -export interface User extends accounts {} +import { AccountWithPlayers } from "@shared/types/PrismaAccount"; declare module "iron-session" { interface IronSessionData { - user?: User; + account?: AccountWithPlayers; } } diff --git a/src/pages/account/changeemail.tsx b/src/pages/account/changeemail.tsx index 1d32f83..bb1d32a 100644 --- a/src/pages/account/changeemail.tsx +++ b/src/pages/account/changeemail.tsx @@ -72,8 +72,8 @@ export default function ChangeEmail() { } export const getServerSideProps = withSessionSsr(async function ({ req }) { - const { user } = req.session; - if (!user) { + const { account } = req.session; + if (!account) { return { redirect: { destination: `/account/login?redirect=${encodeURIComponent(req.url!)}`, diff --git a/src/pages/account/changepassword.tsx b/src/pages/account/changepassword.tsx index 1432a89..8a89bd6 100644 --- a/src/pages/account/changepassword.tsx +++ b/src/pages/account/changepassword.tsx @@ -92,8 +92,8 @@ export default function ChangePassword() { } export const getServerSideProps = withSessionSsr(function ({ req }) { - const { user } = req.session; - if (!user) { + const { account } = req.session; + if (!account) { return { redirect: { destination: `/account/login?redirect=${encodeURIComponent(req.url!)}`, diff --git a/src/pages/account/createcharacter.tsx b/src/pages/account/createcharacter.tsx index 77ade82..0c86723 100644 --- a/src/pages/account/createcharacter.tsx +++ b/src/pages/account/createcharacter.tsx @@ -116,8 +116,8 @@ export default function CreateCharacter() { } export const getServerSideProps = withSessionSsr(async function ({ req }) { - const { user } = req.session; - if (!user) { + const { account } = req.session; + if (!account) { return { redirect: { destination: `/account/login?redirect=${encodeURIComponent(req.url!)}`, diff --git a/src/pages/account/deletecharacter.tsx b/src/pages/account/deletecharacter.tsx index 97f11dd..4e9fdff 100644 --- a/src/pages/account/deletecharacter.tsx +++ b/src/pages/account/deletecharacter.tsx @@ -1,6 +1,6 @@ import React from "react"; import Panel from "@component/Panel"; -import { User, withSessionSsr } from "@lib/session"; +import { withSessionSsr } from "@lib/session"; import { Select, Text, Container, VStack, Wrap } from "@chakra-ui/react"; import { trpc } from "@util/trpc"; import { useFormFeedback } from "@hook/useFormFeedback"; @@ -10,6 +10,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import TextInput from "@component/TextInput"; import Button from "@component/Button"; import { FormField } from "@component/FormField"; +import type { AccountWithPlayers } from "@shared/types/PrismaAccount"; const schema = z.object({ name: z.string(), @@ -17,10 +18,10 @@ const schema = z.object({ }); export interface DeleteCharacterProps { - user: User; + account: AccountWithPlayers; } -export default function DeleteCharacter({ user }: DeleteCharacterProps) { +export default function DeleteCharacter({ account }: DeleteCharacterProps) { const { register, handleSubmit, @@ -29,14 +30,10 @@ export default function DeleteCharacter({ user }: DeleteCharacterProps) { } = useForm>({ resolver: zodResolver(schema), }); - const account = trpc.account.singleById.useQuery({ id: user.id }); + const deleteCharacter = trpc.account.deleteCharacter.useMutation(); const { showResponse, handleResponse } = useFormFeedback(); - if (account.isLoading) { - return ; - } - const onSubmit: SubmitHandler> = async ({ name, password }) => { handleResponse(async () => { await deleteCharacter.mutateAsync({ name, password }); @@ -57,7 +54,7 @@ export default function DeleteCharacter({ user }: DeleteCharacterProps) {