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 <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