From d9127e5b7cb8315bf53199c6ea3fd09deef14340 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 17 Jan 2022 18:42:23 +0700 Subject: [PATCH] (nextjs) fixed getServerSideProps typings --- src/pages/node/[id].tsx | 20 ++++++++++---------- src/store/index.ts | 5 ++--- src/types/node/index.ts | 2 +- src/utils/context/CommentContextProvider.tsx | 4 ++-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/pages/node/[id].tsx b/src/pages/node/[id].tsx index d7d7c153..89247805 100644 --- a/src/pages/node/[id].tsx +++ b/src/pages/node/[id].tsx @@ -13,14 +13,15 @@ import { NodeRelatedProvider } from '~/utils/providers/NodeRelatedProvider'; import { useLoadNode } from '~/hooks/node/useLoadNode'; import { observer } from 'mobx-react-lite'; import { useNodePageParams } from '~/hooks/node/useNodePageParams'; -import { GetServerSidePropsContext } from 'next'; +import { InferGetServerSidePropsType } from 'next'; import { apiGetNode } from '~/api/node'; -import { ApiGetNodeResponse } from '~/types/node'; -export async function getServerSideProps( - context: GetServerSidePropsContext<{ id: string }, ApiGetNodeResponse> -) { - const id = parseInt(context.query.id as string, 10); +export const getServerSideProps = async context => { + if (!context.params?.id) { + return { props: {} }; + } + + const id = parseInt(context.params.id, 10); if (!id) { return { props: {} }; @@ -36,12 +37,11 @@ export async function getServerSideProps( }, }, }; -} - -type Props = RouteComponentProps<{ id: string }> & { - fallbackData?: ApiGetNodeResponse; }; +type Props = RouteComponentProps<{ id: string }> & + InferGetServerSidePropsType; + const NodePage: FC = observer(props => { const id = useNodePageParams(); const { node, isLoading, update, lastSeen } = useLoadNode(parseInt(id, 10), props.fallbackData); diff --git a/src/store/index.ts b/src/store/index.ts index bb4d5feb..8abfc642 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -3,7 +3,7 @@ import { FlowStore } from '~/store/flow/FlowStore'; import { ModalStore } from '~/store/modal/ModalStore'; import { LabStore } from '~/store/lab/LabStore'; import { AuthStore } from '~/store/auth/AuthStore'; -import { useStaticRendering } from 'mobx-react-lite'; +import { enableStaticRendering, useStaticRendering } from 'mobx-react-lite'; export class Store { flow = new FlowStore(); @@ -24,5 +24,4 @@ const defaultStore = new Store(); export const getMOBXStore = () => defaultStore; -// eslint-disable-next-line react-hooks/rules-of-hooks -useStaticRendering(typeof window === 'undefined'); +enableStaticRendering(typeof window === 'undefined'); diff --git a/src/types/node/index.ts b/src/types/node/index.ts index 27473444..693d98f4 100644 --- a/src/types/node/index.ts +++ b/src/types/node/index.ts @@ -30,7 +30,7 @@ export type PostCellViewResult = unknown; // TODO: update it with actual type export type ApiGetNodeRequest = { id: string | number; }; -export type ApiGetNodeResponse = { node: INode; last_seen?: string }; +export type ApiGetNodeResponse = { node: INode; last_seen?: string | null }; export type ApiGetNodeRelatedRequest = { id: INode['id']; diff --git a/src/utils/context/CommentContextProvider.tsx b/src/utils/context/CommentContextProvider.tsx index b5475139..03c534d5 100644 --- a/src/utils/context/CommentContextProvider.tsx +++ b/src/utils/context/CommentContextProvider.tsx @@ -4,7 +4,7 @@ import React, { createContext, FC, useContext } from 'react'; export interface CommentProviderProps { comments: IComment[]; hasMore: boolean; - lastSeenCurrent?: string; + lastSeenCurrent?: string | null; isLoading: boolean; onShowImageModal: (images: IFile[], index: number) => void; onLoadMoreComments: () => void; @@ -16,7 +16,7 @@ const CommentContext = createContext({ // user: EMPTY_USER, comments: [], hasMore: false, - lastSeenCurrent: undefined, + lastSeenCurrent: null, isLoading: false, onSaveComment: async () => {}, onShowImageModal: () => {},