Page MenuHomeSealhub

page.ts
No OneTemporary

import Router from "@koa/router";
import { BaseContext } from "koa";
import { FlatTemplatable, Templatable, tempstream } from "tempstream";
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>>;
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<Templatable>;
extractRawValues(ctx: BaseContext): Record<string, FormDataValue> {
return this.propsParser.decode(ctx);
}
}

File Metadata

Mime Type
text/x-java
Expires
Sun, Nov 2, 18:40 (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1030485
Default Alt Text
page.ts (1 KB)

Event Timeline