fix(client/ts): fix build errors & define command to event bridge

This commit is contained in:
Elian Doran 2025-01-14 20:08:57 +02:00
parent cf2535cb92
commit 0221039ebe
No known key found for this signature in database
6 changed files with 15 additions and 15 deletions

View File

@ -92,7 +92,7 @@ export type CommandMappings = {
filePath: string;
};
focusAndSelectTitle: CommandData & {
isNewNote: boolean;
isNewNote?: boolean;
};
showPromptDialog: PromptDialogOptions;
showInfoDialog: ConfirmWithMessageOptions;
@ -277,15 +277,16 @@ export type CommandListener<T extends CommandNames> = {
};
export type CommandListenerData<T extends CommandNames> = CommandMappings[T];
export type EventData<T extends EventNames> = EventMappings[T];
type CommandAndEventMappings = CommandMappings & EventMappings;
type EventOnlyNames = keyof EventMappings;
export type EventNames = CommandNames | EventOnlyNames;
export type EventData<T extends EventNames> = CommandAndEventMappings[T];
/**
* This type is a discriminated union which contains all the possible commands that can be triggered via {@link AppContext.triggerCommand}.
*/
export type CommandNames = keyof CommandMappings;
export type EventNames = keyof EventMappings;
type FilterByValueType<T, ValueType> = { [K in keyof T]: T[K] extends ValueType ? K : never }[keyof T];
@ -378,12 +379,10 @@ class AppContext extends Component {
this.child(rootWidget);
this.triggerEvent("initialRenderComplete");
this.triggerEvent("initialRenderComplete", {});
}
// TODO: Remove ignore once all commands are mapped out.
//@ts-ignore
triggerEvent<K extends EventNames | CommandNames>(name: K, data: CommandAndEventMappings[K] = {}) {
triggerEvent<K extends EventNames>(name: K, data: EventData<K>) {
return this.handleEvent(name, data);
}

View File

@ -46,7 +46,7 @@ export class TypedComponent<ChildT extends TypedComponent<ChildT>> {
return this;
}
handleEvent(name: string, data: unknown): Promise<unknown> | null {
handleEvent<T extends EventNames>(name: T, data: EventData<T>): Promise<unknown[] | unknown> | null {
try {
const callMethodPromise = this.initialized ? this.initialized.then(() => this.callMethod((this as any)[`${name}Event`], data)) : this.callMethod((this as any)[`${name}Event`], data);

View File

@ -463,7 +463,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
await ws.waitForMaxKnownEntityChangeId();
await appContext.tabManager.getActiveContext().setNote(notePath);
await appContext.triggerEvent("focusAndSelectTitle");
await appContext.triggerEvent("focusAndSelectTitle", {});
};
this.openTabWithNote = async (notePath, activate) => {
@ -472,7 +472,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
await appContext.tabManager.openTabWithNoteWithHoisting(notePath, { activate });
if (activate) {
await appContext.triggerEvent("focusAndSelectTitle");
await appContext.triggerEvent("focusAndSelectTitle", {});
}
};
@ -485,7 +485,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
await appContext.triggerCommand("openNewNoteSplit", { ntxId, notePath });
if (activate) {
await appContext.triggerEvent("focusAndSelectTitle");
await appContext.triggerEvent("focusAndSelectTitle", {});
}
};

View File

@ -74,9 +74,9 @@ ws.subscribeToMessages(async (message) => {
if (message.type === "protectedSessionLogin") {
await reloadData();
await appContext.triggerEvent("frocaReloaded");
await appContext.triggerEvent("frocaReloaded", {});
appContext.triggerEvent("protectedSessionStarted");
appContext.triggerEvent("protectedSessionStarted", {});
appContext.triggerCommand("closeProtectedSessionPasswordDialog");

View File

@ -51,7 +51,7 @@ export default class LauncherContainer extends FlexContainer<LauncherWidget> {
this.$widget.empty();
this.renderChildren();
await this.handleEventInChildren("initialRenderComplete");
await this.handleEventInChildren("initialRenderComplete", {});
const activeContext = appContext.tabManager.getActiveContext();

View File

@ -1,6 +1,7 @@
import FlexContainer from "./flex_container.js";
import splitService from "../../services/resizer.js";
import type RightPanelWidget from "../right_panel_widget.js";
import type { EventData, EventNames } from "../../components/app_context.js";
export default class RightPaneContainer extends FlexContainer<RightPanelWidget> {
private rightPaneHidden: boolean;
@ -19,7 +20,7 @@ export default class RightPaneContainer extends FlexContainer<RightPanelWidget>
return super.isEnabled() && !this.rightPaneHidden && this.children.length > 0 && !!this.children.find((ch) => ch.isEnabled() && ch.canBeShown());
}
handleEventInChildren(name: string, data: unknown) {
handleEventInChildren<T extends EventNames>(name: T, data: EventData<T>): Promise<unknown[] | unknown> | null {
const promise = super.handleEventInChildren(name, data);
if (["activeContextChanged", "noteSwitchedAndActivated", "noteSwitched"].includes(name)) {