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

Reply via email to