From c467d277abeb1464e696fb2257fc2d456e64e293 Mon Sep 17 00:00:00 2001 From: Spencer Elliott Date: Thu, 31 Jan 2019 10:47:37 -0500 Subject: [PATCH] [next] Add `enhanceApp` / `enhanceComponent` https://github.com/zeit/next.js/tree/cf31021e25f8d90f91ef3f7cb4f36a46d52fc56d#customizing-renderpage https://github.com/zeit/next.js/blob/7e7be0e2e8419b28d9c562e04cba1fc52a39f086/packages/next-server/server/render.tsx#L13-L32 --- types/next/document.d.ts | 11 +++++++++-- types/next/test/next-document-tests.tsx | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/types/next/document.d.ts b/types/next/document.d.ts index e0879e1c68..d0e6d2c91b 100644 --- a/types/next/document.d.ts +++ b/types/next/document.d.ts @@ -27,8 +27,15 @@ export type Enhancer = ( */ export interface NextDocumentContext extends NextContext { /** A callback that executes the actual React rendering logic (synchronously) */ - renderPage( - enhancer?: Enhancer // tslint:disable-line no-unnecessary-generics + renderPage< + E extends PageProps = AnyPageProps, + P = E, + EA extends PageProps = AnyPageProps, + PA = EA, + >( + enhancer?: + | Enhancer // tslint:disable-line no-unnecessary-generics + | { enhanceApp?: Enhancer; enhanceComponent?: Enhancer } // tslint:disable-line no-unnecessary-generics ): RenderPageResponse; } diff --git a/types/next/test/next-document-tests.tsx b/types/next/test/next-document-tests.tsx index 83d0a0e8a3..1cd217a749 100644 --- a/types/next/test/next-document-tests.tsx +++ b/types/next/test/next-document-tests.tsx @@ -38,12 +38,20 @@ class MyDoc extends Document { static async getInitialProps(ctx: NextDocumentContext) { const { req, renderPage } = ctx; - // without callback + // without enhancer const _page = renderPage(); - // with callback - const enhancer: Enhancer = App => props => ; - const { html, head, buildManifest } = renderPage(enhancer); + // with component enhancer + const enhancer: Enhancer = Component => props => ; + const _enhancedPage = renderPage(enhancer); + + // with app and component enhancers + const enhanceApp: Enhancer = App => props => ; + const enhanceComponent: Enhancer = Component => props => ; + const { html, head, buildManifest } = renderPage({ + enhanceApp, + enhanceComponent + }); const initialProps = await Document.getInitialProps(ctx);