From 1257e4685257a1ac9dbfacbe438720fcd650337f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 9 Nov 2025 15:10:40 +0200 Subject: [PATCH] chore(client): review from Gemini --- apps/client/src/components/app_context.ts | 2 +- apps/client/src/components/entrypoints.ts | 1 - apps/client/src/services/utils.ts | 23 ------------------- .../src/widgets/type_widgets/AiChat.tsx | 1 - apps/client/src/widgets/type_widgets/Doc.tsx | 1 - .../type_widgets/text/EditableText.tsx | 4 +++- .../src/services/hidden_subtree.spec.ts | 3 +-- apps/server/src/services/sql_init.ts | 4 ++-- apps/server/src/services/utils.spec.ts | 8 ------- apps/server/src/services/utils.ts | 22 ------------------ packages/commons/src/lib/utils.spec.ts | 9 ++++++++ packages/commons/src/lib/utils.ts | 21 +++++++++++++++++ 12 files changed, 37 insertions(+), 62 deletions(-) create mode 100644 packages/commons/src/lib/utils.spec.ts diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index 912e44cc0..23924edcb 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -668,7 +668,7 @@ export class AppContext extends Component { } removeBeforeUnloadListener(listener: (() => boolean)) { - this.beforeUnloadListeners = this.beforeUnloadListeners.filter(l => l === listener); + this.beforeUnloadListeners = this.beforeUnloadListeners.filter(l => l !== listener); } } diff --git a/apps/client/src/components/entrypoints.ts b/apps/client/src/components/entrypoints.ts index 57d359abe..8a902666f 100644 --- a/apps/client/src/components/entrypoints.ts +++ b/apps/client/src/components/entrypoints.ts @@ -175,7 +175,6 @@ export default class Entrypoints extends Component { return; } const { ntxId, note } = noteContext; - console.log("Run active note"); // ctrl+enter is also used elsewhere, so make sure we're running only when appropriate if (!note || note.type !== "code") { diff --git a/apps/client/src/services/utils.ts b/apps/client/src/services/utils.ts index be66f642d..68746c54b 100644 --- a/apps/client/src/services/utils.ts +++ b/apps/client/src/services/utils.ts @@ -873,29 +873,6 @@ export function getErrorMessage(e: unknown) { } } -// TODO: Deduplicate with server -export interface DeferredPromise extends Promise { - resolve: (value: T | PromiseLike) => void; - reject: (reason?: any) => void; -} - -// TODO: Deduplicate with server -export function deferred(): DeferredPromise { - return (() => { - let resolve!: (value: T | PromiseLike) => void; - let reject!: (reason?: any) => void; - - let promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }) as DeferredPromise; - - promise.resolve = resolve; - promise.reject = reject; - return promise as DeferredPromise; - })(); -} - /** * Handles left or right placement of e.g. tooltips in case of right-to-left languages. If the current language is a RTL one, then left and right are swapped. Other directions are unaffected. * @param placement a string optionally containing a "left" or "right" value. diff --git a/apps/client/src/widgets/type_widgets/AiChat.tsx b/apps/client/src/widgets/type_widgets/AiChat.tsx index 5c0df6681..b69446608 100644 --- a/apps/client/src/widgets/type_widgets/AiChat.tsx +++ b/apps/client/src/widgets/type_widgets/AiChat.tsx @@ -40,7 +40,6 @@ export default function AiChat({ note, noteContext }: TypeWidgetProps) { useEffect(() => { llmChatPanel.setNoteId(note.noteId); llmChatPanel.setCurrentNoteId(note.noteId); - console.log("Refresh!"); }, [ note ]); return ChatWidget; diff --git a/apps/client/src/widgets/type_widgets/Doc.tsx b/apps/client/src/widgets/type_widgets/Doc.tsx index f1465571c..4467c09e0 100644 --- a/apps/client/src/widgets/type_widgets/Doc.tsx +++ b/apps/client/src/widgets/type_widgets/Doc.tsx @@ -20,7 +20,6 @@ export default function Doc({ note, viewScope, ntxId }: TypeWidgetProps) { }, [ note ]); useTriliumEvent("executeWithContentElement", async ({ resolve, ntxId: eventNtxId}) => { - console.log("Got request for content ", ntxId, eventNtxId); if (eventNtxId !== ntxId) return; await initialized.current; resolve(refToJQuerySelector(containerRef)); diff --git a/apps/client/src/widgets/type_widgets/text/EditableText.tsx b/apps/client/src/widgets/type_widgets/text/EditableText.tsx index 3550546c7..7d07f59aa 100644 --- a/apps/client/src/widgets/type_widgets/text/EditableText.tsx +++ b/apps/client/src/widgets/type_widgets/text/EditableText.tsx @@ -1,7 +1,7 @@ import { useEffect, useRef, useState } from "preact/hooks"; import dialog from "../../../services/dialog"; import toast from "../../../services/toast"; -import utils, { deferred, hasTouchBar, isMobile } from "../../../services/utils"; +import utils, { hasTouchBar, isMobile } from "../../../services/utils"; import { useEditorSpacedUpdate, useKeyboardShortcuts, useLegacyImperativeHandlers, useNoteLabel, useTriliumEvent, useTriliumOption, useTriliumOptionBool } from "../../react/hooks"; import { TypeWidgetProps } from "../type_widget"; import CKEditorWithWatchdog, { CKEditorApi } from "./CKEditorWithWatchdog"; @@ -17,6 +17,7 @@ import note_create from "../../../services/note_create"; import TouchBar, { TouchBarButton, TouchBarGroup, TouchBarSegmentedControl } from "../../react/TouchBar"; import { RefObject } from "preact"; import { buildSelectedBackgroundColor } from "../../../components/touch_bar"; +import { deferred } from "@triliumnext/commons"; /** * The editor can operate into two distinct modes: @@ -202,6 +203,7 @@ export default function EditableText({ note, parentComponent, ntxId, noteContext const customDateTimeFormat = options.get("customDateTimeFormat"); const dateString = utils.formatDateTime(date, customDateTimeFormat); + console.log("Insert text ", ntxId, eventNtxId, dateString); addTextToEditor(dateString); }); useTriliumEvent("addTextToActiveEditor", ({ text }) => { diff --git a/apps/server/src/services/hidden_subtree.spec.ts b/apps/server/src/services/hidden_subtree.spec.ts index 623bed39e..6fc9403a9 100644 --- a/apps/server/src/services/hidden_subtree.spec.ts +++ b/apps/server/src/services/hidden_subtree.spec.ts @@ -4,9 +4,8 @@ import hiddenSubtreeService from "./hidden_subtree.js"; import sql_init from "./sql_init.js"; import branches from "./branches.js"; import becca from "../becca/becca.js"; -import { LOCALES } from "@triliumnext/commons"; +import { deferred, LOCALES } from "@triliumnext/commons"; import { changeLanguage } from "./i18n.js"; -import { deferred } from "./utils.js"; describe("Hidden Subtree", () => { beforeAll(async () => { diff --git a/apps/server/src/services/sql_init.ts b/apps/server/src/services/sql_init.ts index cdd6230bf..93452669f 100644 --- a/apps/server/src/services/sql_init.ts +++ b/apps/server/src/services/sql_init.ts @@ -2,7 +2,7 @@ import log from "./log.js"; import fs from "fs"; import resourceDir from "./resource_dir.js"; import sql from "./sql.js"; -import { isElectron, deferred } from "./utils.js"; +import { isElectron } from "./utils.js"; import optionService from "./options.js"; import port from "./port.js"; import BOption from "../becca/entities/boption.js"; @@ -10,7 +10,7 @@ import TaskContext from "./task_context.js"; import migrationService from "./migration.js"; import cls from "./cls.js"; import config from "./config.js"; -import type { OptionRow } from "@triliumnext/commons"; +import { deferred, type OptionRow } from "@triliumnext/commons"; import BNote from "../becca/entities/bnote.js"; import BBranch from "../becca/entities/bbranch.js"; import zipImportService from "./import/zip.js"; diff --git a/apps/server/src/services/utils.spec.ts b/apps/server/src/services/utils.spec.ts index e815de3f8..d767d2d25 100644 --- a/apps/server/src/services/utils.spec.ts +++ b/apps/server/src/services/utils.spec.ts @@ -379,14 +379,6 @@ describe("#timeLimit", () => { }); }); -describe("#deferred", () => { - it("should return a promise", () => { - const result = utils.deferred(); - expect(result).toBeInstanceOf(Promise); - }); - // TriliumNextTODO: Add further tests! -}); - describe("#removeDiacritic", () => { const testCases: TestCase[] = [ [ "w/ 'Äpfel' it should replace the 'Ä'", [ "Äpfel" ], "Apfel" ], diff --git a/apps/server/src/services/utils.ts b/apps/server/src/services/utils.ts index 6d567f15a..d8c9087ef 100644 --- a/apps/server/src/services/utils.ts +++ b/apps/server/src/services/utils.ts @@ -229,27 +229,6 @@ export function timeLimit(promise: Promise, limitMs: number, errorMessage? }); } -export interface DeferredPromise extends Promise { - resolve: (value: T | PromiseLike) => void; - reject: (reason?: any) => void; -} - -export function deferred(): DeferredPromise { - return (() => { - let resolve!: (value: T | PromiseLike) => void; - let reject!: (reason?: any) => void; - - let promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }) as DeferredPromise; - - promise.resolve = resolve; - promise.reject = reject; - return promise as DeferredPromise; - })(); -} - export function removeDiacritic(str: string) { if (!str) { return ""; @@ -508,7 +487,6 @@ function slugify(text: string) { export default { compareVersions, crash, - deferred, envToBoolean, escapeHtml, escapeRegExp, diff --git a/packages/commons/src/lib/utils.spec.ts b/packages/commons/src/lib/utils.spec.ts new file mode 100644 index 000000000..2a85b438d --- /dev/null +++ b/packages/commons/src/lib/utils.spec.ts @@ -0,0 +1,9 @@ +import { deferred } from "./utils.js"; + +describe("#deferred", () => { + it("should return a promise", () => { + const result = deferred(); + expect(result).toBeInstanceOf(Promise); + }); + // TriliumNextTODO: Add further tests! +}); diff --git a/packages/commons/src/lib/utils.ts b/packages/commons/src/lib/utils.ts index 936c63c16..93b953f46 100644 --- a/packages/commons/src/lib/utils.ts +++ b/packages/commons/src/lib/utils.ts @@ -9,3 +9,24 @@ export function formatLogMessage(message: string | object) { return message; } + +export interface DeferredPromise extends Promise { + resolve: (value: T | PromiseLike) => void; + reject: (reason?: any) => void; +} + +export function deferred(): DeferredPromise { + return (() => { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: any) => void; + + let promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }) as DeferredPromise; + + promise.resolve = resolve; + promise.reject = reject; + return promise as DeferredPromise; + })(); +}