refactor: further improve task context types

This commit is contained in:
Elian Doran 2025-09-13 13:06:28 +03:00
parent 4cd0702cbb
commit 39fecb3ffe
No known key found for this signature in database
3 changed files with 18 additions and 16 deletions

View File

@ -82,7 +82,7 @@ ws.subscribeToMessages(async (message) => {
toastService.showPersistent(toast);
if (typeof message.result === "object" && message.result.importedNoteId) {
if (message.result.importedNoteId) {
await appContext.tabManager.getActiveContext()?.setNote(message.result.importedNoteId);
}
}
@ -104,7 +104,7 @@ ws.subscribeToMessages(async (message: WebSocketMessage) => {
toastService.showPersistent(toast);
if (typeof message.result === "object" && message.result.parentNoteId) {
if (message.result.parentNoteId) {
await appContext.tabManager.getActiveContext()?.setNote(message.result.importedNoteId, {
viewScope: {
viewMode: "attachments"

View File

@ -1,20 +1,20 @@
"use strict";
import type { TaskData } from "@triliumnext/commons";
import type { TaskType } from "@triliumnext/commons";
import ws from "./ws.js";
// taskId => TaskContext
const taskContexts: Record<string, TaskContext> = {};
const taskContexts: Record<string, TaskContext<TaskType>> = {};
class TaskContext {
class TaskContext<TaskTypeT extends TaskType> {
private taskId: string;
private taskType: string | null;
private taskType: TaskType;
private progressCount: number;
private lastSentCountTs: number;
data: TaskData | null;
noteDeletionHandlerTriggered: boolean;
constructor(taskId: string, taskType: string | null = null, data: {} | null = {}) {
constructor(taskId: string, taskType: TaskTypeT, data: {} | null = {}) {
this.taskId = taskId;
this.taskType = taskType;
this.data = data;
@ -31,7 +31,7 @@ class TaskContext {
this.increaseProgressCount();
}
static getInstance(taskId: string, taskType: string, data: {} | null = null): TaskContext {
static getInstance<TaskTypeT extends TaskType>(taskId: string, taskType: TaskTypeT, data: {} | null = null): TaskContext<TaskTypeT> {
if (!taskContexts[taskId]) {
taskContexts[taskId] = new TaskContext(taskId, taskType, data);
}

View File

@ -271,7 +271,7 @@ export interface EntityChangeRecord {
entity?: EntityRow;
}
type TaskStatus<TypeT, DataT> = {
type TaskStatus<TypeT, DataT, ResultT> = {
type: "taskProgressCount",
taskId: string;
taskType: TypeT;
@ -288,18 +288,20 @@ type TaskStatus<TypeT, DataT> = {
taskId: string;
taskType: TypeT;
data: DataT;
result?: string | Record<string, string | undefined>
result: ResultT;
}
type TaskDefinitions =
TaskStatus<"protectNotes", { protect: boolean; }>
| TaskStatus<"importNotes", null>
| TaskStatus<"importAttachments", null>
| TaskStatus<"deleteNotes", null>
| TaskStatus<"undeleteNotes", null>
| TaskStatus<"export", null>
TaskStatus<"protectNotes", { protect: boolean; }, null>
| TaskStatus<"importNotes", null, { importedNoteId: string }>
| TaskStatus<"importAttachments", null, { parentNoteId?: string; importedNoteId: string }>
| TaskStatus<"deleteNotes", null, null>
| TaskStatus<"undeleteNotes", null, null>
| TaskStatus<"export", null, null>
;
export type TaskType = TaskDefinitions["taskType"];
export interface OpenedFileUpdateStatus {
entityType: string;
entityId: string;