Niedzielski has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/380662 )
Change subject: Chore: remove state typing from Route and RouteResponse ...................................................................... Chore: remove state typing from Route and RouteResponse Replace Route and RouteResponse's State generic type parameter with any. Neither has a dependency on or interactions with the Component's state so it seems simpler to avoid typing it. Change-Id: I5f1eb3c299be4893a071c83f475f9aceddf45178 --- M src/client/index.tsx M src/common/routers/api.ts M src/common/routers/route.ts M src/common/routers/router.ts M src/server/index.tsx 5 files changed, 21 insertions(+), 25 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/62/380662/1 diff --git a/src/client/index.tsx b/src/client/index.tsx index 554a266..821b62a 100644 --- a/src/client/index.tsx +++ b/src/client/index.tsx @@ -14,7 +14,7 @@ throw new Error('Missing element with "root" ID.'); } -const renderPageRoot = ({ Component, props }: RouteResponse<any, any>) => { +const renderPageRoot = ({ Component, props }: RouteResponse<any>) => { render( <WithContext history={history}> <Component {...props} /> diff --git a/src/common/routers/api.ts b/src/common/routers/api.ts index 873ae7c..b562789 100644 --- a/src/common/routers/api.ts +++ b/src/common/routers/api.ts @@ -1,5 +1,4 @@ import { Props as WikiProps, Params as WikiParams } from "../pages/wiki"; -import { State as AboutState } from "../pages/about"; import { AnyRoute, Route, newRoute } from "./route"; export const home: Route = newRoute({ @@ -9,14 +8,14 @@ chunkName: "pages/home" }); -export const about: Route<void, AboutState> = newRoute({ +export const about: Route = newRoute({ path: "/about", importModule: () => import(/* webpackChunkName: "pages/about" */ "../pages/about"), chunkName: "pages/about" }); -export const wiki: Route<WikiProps, void, WikiParams> = newRoute({ +export const wiki: Route<WikiProps, WikiParams> = newRoute({ path: "/wiki/:title", importModule: () => import(/* webpackChunkName: "pages/wiki" */ "../pages/wiki"), diff --git a/src/common/routers/route.ts b/src/common/routers/route.ts index 639adcf..57fba9f 100644 --- a/src/common/routers/route.ts +++ b/src/common/routers/route.ts @@ -11,9 +11,9 @@ * pages/ subdirectory should implicitly implement this interface or typing will * fail in routers/api. */ -export interface PageModule<Props = void, State = void> { +export interface PageModule<Props = void> { /** A Preact view component. */ - Component: AnyComponent<Props, State>; + Component: AnyComponent<Props, any>; /** * A function that returns a Promise for the dependencies needed to construct @@ -22,29 +22,29 @@ initialProps?: (params: RouteParams) => Promise<Props>; } -export interface RouteConfiguration<Props = void, State = void> { +export interface RouteConfiguration<Props = void> { path: string; - importModule: () => Promise<PageModule<Props, State>>; + importModule: () => Promise<PageModule<Props>>; chunkName: string; status?: number; } -export interface Route<Props = void, State = void, Params = void> - extends RouteConfiguration<Props, State> { +export interface Route<Props = void, Params extends RouteParams = {}> + extends RouteConfiguration<Props> { status: number; /** Generates a URL from parameters. */ url: (params?: Params) => string; } -export type AnyRoute = Route<any, any, any>; +export type AnyRoute = Route<any, any>; -export const newRoute = <Props, State, Params>({ +export const newRoute = <Props, Params extends RouteParams>({ path, importModule, chunkName, status = 200 -}: RouteConfiguration<Props, State>): Route<Props, State, Params> => ({ +}: RouteConfiguration<Props>): Route<Props, Params> => ({ path, importModule, chunkName, diff --git a/src/common/routers/router.ts b/src/common/routers/router.ts index 2de064b..8a563d8 100644 --- a/src/common/routers/router.ts +++ b/src/common/routers/router.ts @@ -2,10 +2,10 @@ import { AnyComponent } from "../components/preact-utils"; import { AnyRoute, PageModule, RouteParams } from "../../common/routers/route"; -export interface RouteResponse<Props, State> { +export interface RouteResponse<Props> { chunkName: string; status: number; - Component: AnyComponent<Props, State>; + Component: AnyComponent<Props, any>; props: { path: string; url: string; @@ -15,7 +15,7 @@ } export interface Router { - route(url: string): Promise<RouteResponse<any, any>>; + route(url: string): Promise<RouteResponse<any>>; } interface ParsedRoute extends AnyRoute { @@ -46,21 +46,18 @@ ); function requestInitialProps<Props>( - module: PageModule<Props, any>, + module: PageModule<Props>, params: RouteParams -): Promise<Props | {}> { - if (module.initialProps) { - return module.initialProps(params); - } - return Promise.resolve({}); +): Promise<Props | void> { + return module.initialProps ? module.initialProps(params) : Promise.resolve(); } const respond = ( route: ParsedRoute, url: string, params: RouteParams -): Promise<RouteResponse<any, any>> => - route.importModule().then((module: PageModule<any, any>) => +): Promise<RouteResponse<any>> => + route.importModule().then((module: PageModule<any>) => requestInitialProps(module, params).then((props: any) => ({ chunkName: route.chunkName, status: route.status, diff --git a/src/server/index.tsx b/src/server/index.tsx index 445e801..cebf7ed 100644 --- a/src/server/index.tsx +++ b/src/server/index.tsx @@ -38,7 +38,7 @@ server.use("/public", express.static("dist/public")); -const render = ({ chunkName, Component, props }: RouteResponse<any, any>) => { +const render = ({ chunkName, Component, props }: RouteResponse<any>) => { return ( "<!doctype html>" + // eslint-disable-line prefer-template renderToString( -- To view, visit https://gerrit.wikimedia.org/r/380662 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5f1eb3c299be4893a071c83f475f9aceddf45178 Gerrit-PatchSet: 1 Gerrit-Project: marvin Gerrit-Branch: master Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org> Gerrit-Reviewer: Sniedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits