@web-atoms/core
Version:
80 lines • 3.2 kB
TypeScript
import type { App } from "../App";
import type { AtomControl } from "../web/controls/AtomControl";
import EventScope from "./EventScope";
import Route from "./Route";
import { type IDisposable } from "./types";
export declare const routeSymbol: unique symbol;
export declare const displayRouteSymbol: unique symbol;
export type CustomEventEx<T, TR> = CustomEvent<T> & {
executed?: boolean;
promise?: Promise<TR>;
returnResult?: boolean;
};
export declare class PageCommands {
static pushPage: (page: any, parameters: any) => any;
static pushPageForResult: (page: any, parameters: any) => Promise<any>;
static openPage: (page: any, parameters: any) => any;
}
export type IPage<TIn, TOut> = {
default: abstract new (...a: any[]) => {
parameters: TIn;
close(result: TOut): any;
};
} | (abstract new (...a: any[]) => {
parameters: TIn;
close(result: TOut): any;
});
export default class Command<T = any, TR = any> {
readonly name: string;
readonly eventScope: EventScope<T>;
readonly registerOnClick: (p: T) => {
"data-click-command": string;
commandParameter: T;
};
static routePrefix: string;
static registry: Map<string, Command>;
static routes: Command[];
static invokeRoute(route?: string, forceDisplay?: boolean): Command<any, any>;
static create<TIn = any, TOut = any>({ name, eventScope, route, routeQueries, routeOrder, routeDefaults, pageLoader, pageListener, openPage, pushPage, registerOnClick, pushPageForResult, pushPageForResultOrCancel, listener }: {
name?: string;
eventScope?: EventScope<TIn>;
route?: string;
routeQueries?: string[];
routeOrder?: number;
routeDefaults?: Partial<TIn>;
registerOnClick?: (p: TIn) => any;
pageLoader?: (() => Promise<IPage<TIn, TOut>>);
pageListener?: ((page: IPage<TIn, TOut>) => (ce: CustomEvent<TIn>) => any);
openPage?: (() => Promise<IPage<TIn, TOut>>);
pushPage?: (() => Promise<IPage<TIn, TOut>>);
pushPageForResult?: (() => Promise<IPage<TIn, TOut>>);
pushPageForResultOrCancel?: (() => Promise<IPage<TIn, TOut>>);
listener?: ((ce: CustomEvent<TIn>) => any);
}): Command<TIn, TOut>;
private listener;
/**
* This name does not contain `event-` prefix
*/
get eventName(): string;
private routeObj;
get route(): Route;
defaults?: any;
constructor(name?: string, eventScope?: EventScope<T>, registerOnClick?: (p: T) => {
"data-click-command": string;
commandParameter: T;
});
displayRoute(p: Partial<T>, absoluteUrl?: boolean): string;
withRoute(route: string, queries?: string[], order?: number, defaults?: any): this;
listen(r: {
app: App;
registerDisposable: (d: IDisposable) => void;
}, handler?: (ce: CustomEventEx<T, TR>) => any): void;
dispatch(detail?: T, cancelable?: boolean): void;
private updateRoute;
dispatchAsync(detail?: T, cancelable?: boolean): Promise<TR>;
}
export declare class Commands {
protected static app: App;
static install(control: AtomControl): void;
}
//# sourceMappingURL=Command.d.ts.map