jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/377374 )

Change subject: New: add wiki page route
......................................................................


New: add wiki page route

- New: add route for wiki articles and pages.
- Fix: off by one error in route parameter name to value mapping.
- Fix: Route.initialProperties() signature.

Bug: T173323
Change-Id: I6a90d39fa1feb39011ece7ecc00db37125d8ebc4
---
M src/common/components/app/index.tsx
A src/common/components/pages/wiki.tsx
M src/common/routers/api.ts
M src/common/routers/route.ts
M src/common/routers/router.ts
5 files changed, 50 insertions(+), 7 deletions(-)

Approvals:
  Jhernandez: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/common/components/app/index.tsx 
b/src/common/components/app/index.tsx
index 82f20c8..79372ef 100644
--- a/src/common/components/app/index.tsx
+++ b/src/common/components/app/index.tsx
@@ -12,6 +12,12 @@
         <Link href="/about">About</Link>
       </li>
       <li>
+        <Link href="/wiki/Banana">Banana</Link>
+      </li>
+      <li>
+        <Link href="/wiki/Cucumber">Cucumber</Link>
+      </li>
+      <li>
         <Link href="/404">404</Link>
       </li>
     </ul>
diff --git a/src/common/components/pages/wiki.tsx 
b/src/common/components/pages/wiki.tsx
new file mode 100644
index 0000000..45f77b1
--- /dev/null
+++ b/src/common/components/pages/wiki.tsx
@@ -0,0 +1,23 @@
+import App from "../app";
+import { RouteParameters } from "../../routers/route";
+import { h } from "preact";
+
+export interface Parameters extends RouteParameters {
+  title: string
+}
+
+export interface Properties {
+  title: string
+}
+
+export const initialProperties = ({
+  title
+}: Parameters): Promise<Properties> => {
+  return Promise.resolve({ title });
+};
+
+export const component = ({ title }: Properties): JSX.Element => (
+  <App>
+    <p>{title}</p>
+  </App>
+);
diff --git a/src/common/routers/api.ts b/src/common/routers/api.ts
index dc2fd96..7aa655a 100644
--- a/src/common/routers/api.ts
+++ b/src/common/routers/api.ts
@@ -1,4 +1,5 @@
 import { Route } from "./route";
+import { Properties as WikiProperties } from "../components/pages/wiki";
 
 export const index: Route<void, void> = {
   path: "/",
@@ -18,7 +19,18 @@
   status: 200
 };
 
+export const wiki: Route<WikiProperties, void> = {
+  path: "/wiki/:title",
+  endpoint: () =>
+    import(/* webpackChunkName: "components/pages/wiki" */
+    "../components/pages/wiki"),
+  chunkName: "components/pages/wiki",
+  status: 200
+};
+
 export const notFound: Route<void, void> = {
+  // `(.*)` is the new `*`. See
+  // https://github.com/pillarjs/path-to-regexp/issues/37.
   path: "(.*)",
   endpoint: () =>
     import(/* webpackChunkName: "components/pages/not-found" */
@@ -27,4 +39,4 @@
   status: 404
 };
 
-export const routes: Route<any, any>[] = [index, about, notFound];
+export const routes: Route<any, any>[] = [index, about, wiki, notFound];
diff --git a/src/common/routers/route.ts b/src/common/routers/route.ts
index b68d45b..4f82ad0 100644
--- a/src/common/routers/route.ts
+++ b/src/common/routers/route.ts
@@ -12,9 +12,7 @@
    * A function that returns a Promise for the dependencies needed to construct
    * the view component such as a remote resource.
    */
-  initialProperties?: (parameters: { parameters: RouteParameters }) => Promise<
-    Properties
-  >
+  initialProperties?: (parameters: RouteParameters) => Promise<Properties>
 }
 
 export interface Route<Properties, State> {
diff --git a/src/common/routers/router.ts b/src/common/routers/router.ts
index 19c0b30..86eb3fd 100644
--- a/src/common/routers/router.ts
+++ b/src/common/routers/router.ts
@@ -35,7 +35,7 @@
 
 const newRouteParameters = (
   parameterNames: pathToRegExp.Key[],
-  parameterValues: RegExpExecArray
+  parameterValues: string[]
 ): RouteParameters =>
   parameterNames.reduce(
     (
@@ -54,7 +54,7 @@
   parameters: RouteParameters
 ): Promise<Properties | {}> {
   if (endpoint.initialProperties) {
-    return endpoint.initialProperties({ parameters });
+    return endpoint.initialProperties(parameters);
   }
   return Promise.resolve({});
 }
@@ -87,7 +87,11 @@
       for (const route of parsedRoutes) {
         const matches = route.regularExpression.exec(url);
         if (matches) {
-          const parameters = newRouteParameters(route.parameterNames, matches);
+          const [url, ...parameterValues] = matches;
+          const parameters = newRouteParameters(
+            route.parameterNames,
+            parameterValues
+          );
           return respond(route, url, parameters);
         }
       }

-- 
To view, visit https://gerrit.wikimedia.org/r/377374
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6a90d39fa1feb39011ece7ecc00db37125d8ebc4
Gerrit-PatchSet: 1
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org>
Gerrit-Reviewer: Jhernandez <jhernan...@wikimedia.org>
Gerrit-Reviewer: Sniedzielski <sniedziel...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to