Niedzielski has uploaded a new change for review. (
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(-)
git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/74/377374/1
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: newchange
Gerrit-Change-Id: I6a90d39fa1feb39011ece7ecc00db37125d8ebc4
Gerrit-PatchSet: 1
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits