Page MenuHomeSealhub

page.ts
No OneTemporary

import Router from "@koa/router";
import { BaseContext } from "koa";
import { FlatTemplatable, Templatable, tempstream } from "tempstream";
import { AllQueryParams } from "..";
import { FormDataValue } from "../forms/form";
import { Fields, Mountable, PageErrorMessage } from "./mountable";
import { PagePropsParser } from "./props-parser";
export abstract class Page<
F extends Fields = Record<string, never>
> extends Mountable<F> {
propsParser: PagePropsParser<Record<keyof Fields, unknown>> =
new AllQueryParams();
controls = [];
mount(router: Router, path: string): void {
router.get(path, async (ctx) => {
ctx.body = await this.render(ctx);
});
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async canAccess(_: BaseContext) {
return { canAccess: true, message: "" };
}
async renderError(
_: BaseContext,
error: PageErrorMessage
): Promise<FlatTemplatable> {
return tempstream/* HTML */ `<div>${error.message}</div>`;
}
public abstract render(ctx: BaseContext): Promise<FlatTemplatable>;
extractRawValues(ctx: BaseContext): Record<string, FormDataValue> {
return this.propsParser.decode(ctx);
}
}

File Metadata

Mime Type
text/x-java
Expires
Wed, May 7, 19:47 (1 d, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
674838
Default Alt Text
page.ts (1 KB)

Event Timeline