From 8ee59e9daa9629c7e568847b811c8e22aa3bdfad Mon Sep 17 00:00:00 2001 From: Jakob Schlanstedt Date: Sat, 22 Nov 2025 10:28:33 +0100 Subject: [PATCH] refactor(suggestion): improve naming --- apps/client/src/services/note_autocomplete.ts | 20 +++++++++---------- .../attribute_widgets/attribute_detail.ts | 4 ++-- .../src/widgets/collections/board/index.tsx | 4 ++-- .../src/widgets/collections/table/columns.tsx | 4 ++-- apps/client/src/widgets/dialogs/add_link.tsx | 4 ++-- .../src/widgets/dialogs/include_note.tsx | 4 ++-- .../src/widgets/dialogs/jump_to_note.tsx | 4 ++-- .../src/widgets/dialogs/note_type_chooser.tsx | 4 ++-- .../src/widgets/llm_chat/llm_chat_panel.ts | 4 ++-- .../ribbon/components/AttributeEditor.tsx | 4 ++-- .../client/src/widgets/type_widgets/Empty.tsx | 4 ++-- .../src/widgets/type_widgets/text/config.ts | 4 ++-- 12 files changed, 32 insertions(+), 32 deletions(-) diff --git a/apps/client/src/services/note_autocomplete.ts b/apps/client/src/services/note_autocomplete.ts index 557b4b9cc..6faabbaae 100644 --- a/apps/client/src/services/note_autocomplete.ts +++ b/apps/client/src/services/note_autocomplete.ts @@ -57,10 +57,10 @@ export enum SuggestionAction { Command = "command", } -export enum CreateMode { - None = "none", - CreateOnly = "create-only", - CreateAndLink = "create-and-link" +export enum SuggestionMode { + SuggestNothing = "nothing", + SuggestCreateOnly = "create-only", + SuggestCreateAndLink = "create-and-link" } // NOTE: Previously marked for deduplication with a server-side type, @@ -86,7 +86,7 @@ export interface Suggestion { export interface Options { container?: HTMLElement | null; fastSearch?: boolean; - createMode?: CreateMode; + suggestionMode?: SuggestionMode; allowJumpToSearchNotes?: boolean; allowExternalLinks?: boolean; /** If set, hides the right-side button corresponding to go to selected note. */ @@ -99,7 +99,7 @@ export interface Options { async function autocompleteSourceForCKEditor( queryText: string, - createMode: CreateMode + suggestionMode: SuggestionMode ): Promise { // Wrap the callback-based autocompleteSource in a Promise for async/await const rows = await new Promise((resolve) => { @@ -107,7 +107,7 @@ async function autocompleteSourceForCKEditor( queryText, (suggestions) => resolve(suggestions), { - createMode, + suggestionMode, } ); }); @@ -179,8 +179,8 @@ async function autocompleteSource( // --- Create Note suggestions --- if (trimmedTerm.length >= 1) { - switch (options.createMode) { - case CreateMode.CreateOnly: { + switch (options.suggestionMode) { + case SuggestionMode.SuggestCreateOnly: { results = [ { action: SuggestionAction.CreateNote, @@ -199,7 +199,7 @@ async function autocompleteSource( break; } - case CreateMode.CreateAndLink: { + case SuggestionMode.SuggestCreateAndLink: { results = [ { action: SuggestionAction.CreateAndLinkNote, diff --git a/apps/client/src/widgets/attribute_widgets/attribute_detail.ts b/apps/client/src/widgets/attribute_widgets/attribute_detail.ts index 8f144f63d..30643213c 100644 --- a/apps/client/src/widgets/attribute_widgets/attribute_detail.ts +++ b/apps/client/src/widgets/attribute_widgets/attribute_detail.ts @@ -3,7 +3,7 @@ import server from "../../services/server.js"; import froca from "../../services/froca.js"; import linkService from "../../services/link.js"; import attributeAutocompleteService from "../../services/attribute_autocomplete.js"; -import noteAutocompleteService, { CreateMode } from "../../services/note_autocomplete.js"; +import noteAutocompleteService, { SuggestionMode } from "../../services/note_autocomplete.js"; import promotedAttributeDefinitionParser from "../../services/promoted_attribute_definition_parser.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js"; import SpacedUpdate from "../../services/spaced_update.js"; @@ -429,7 +429,7 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { this.$rowTargetNote = this.$widget.find(".attr-row-target-note"); this.$inputTargetNote = this.$widget.find(".attr-input-target-note"); - noteAutocompleteService.initNoteAutocomplete(this.$inputTargetNote, { createMode: CreateMode.CreateAndLink }).on("autocomplete:noteselected", (event, suggestion, dataset) => { + noteAutocompleteService.initNoteAutocomplete(this.$inputTargetNote, { suggestionMode: SuggestionMode.SuggestCreateAndLink }).on("autocomplete:noteselected", (event, suggestion, dataset) => { if (!suggestion.notePath) { return false; } diff --git a/apps/client/src/widgets/collections/board/index.tsx b/apps/client/src/widgets/collections/board/index.tsx index 612a76a82..92810e037 100644 --- a/apps/client/src/widgets/collections/board/index.tsx +++ b/apps/client/src/widgets/collections/board/index.tsx @@ -15,7 +15,7 @@ import FormTextArea from "../../react/FormTextArea"; import FNote from "../../../entities/fnote"; import NoteAutocomplete from "../../react/NoteAutocomplete"; import toast from "../../../services/toast"; -import { CreateMode } from "../../../services/note_autocomplete"; +import { SuggestionMode } from "../../../services/note_autocomplete"; export interface BoardViewData { columns?: BoardColumnData[]; @@ -299,7 +299,7 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, mode, is noteId={currentValue ?? ""} opts={{ hideAllButtons: true, - createMode: CreateMode.CreateAndLink + suggestionMode: SuggestionMode.SuggestCreateAndLink }} onKeyDown={(e) => { if (e.key === "Escape") { diff --git a/apps/client/src/widgets/collections/table/columns.tsx b/apps/client/src/widgets/collections/table/columns.tsx index 60985cfe9..fd7d4ae05 100644 --- a/apps/client/src/widgets/collections/table/columns.tsx +++ b/apps/client/src/widgets/collections/table/columns.tsx @@ -6,7 +6,7 @@ import Icon from "../../react/Icon.jsx"; import { useEffect, useRef, useState } from "preact/hooks"; import froca from "../../../services/froca.js"; import NoteAutocomplete from "../../react/NoteAutocomplete.jsx"; -import { CreateMode } from "../../../services/note_autocomplete.js"; +import { SuggestionMode } from "../../../services/note_autocomplete.js"; type ColumnType = LabelType | "relation"; @@ -228,7 +228,7 @@ function RelationEditor({ cell, success }: EditorOpts) { inputRef={inputRef} noteId={cell.getValue()} opts={{ - createMode: CreateMode.CreateAndLink, + suggestionMode: SuggestionMode.SuggestCreateAndLink, hideAllButtons: true }} noteIdChanged={success} diff --git a/apps/client/src/widgets/dialogs/add_link.tsx b/apps/client/src/widgets/dialogs/add_link.tsx index 0cc3361df..dc3ad5aad 100644 --- a/apps/client/src/widgets/dialogs/add_link.tsx +++ b/apps/client/src/widgets/dialogs/add_link.tsx @@ -5,7 +5,7 @@ import FormRadioGroup from "../react/FormRadioGroup"; import NoteAutocomplete from "../react/NoteAutocomplete"; import { useRef, useState, useEffect } from "preact/hooks"; import tree from "../../services/tree"; -import note_autocomplete, { CreateMode, Suggestion } from "../../services/note_autocomplete"; +import note_autocomplete, { SuggestionMode, Suggestion } from "../../services/note_autocomplete"; import { logError } from "../../services/ws"; import FormGroup from "../react/FormGroup.js"; import { refToJQuerySelector } from "../react/react_utils"; @@ -133,7 +133,7 @@ export default function AddLinkDialog() { onChange={setSuggestion} opts={{ allowExternalLinks: true, - createMode: CreateMode.CreateAndLink, + suggestionMode: SuggestionMode.SuggestCreateAndLink, }} /> diff --git a/apps/client/src/widgets/dialogs/include_note.tsx b/apps/client/src/widgets/dialogs/include_note.tsx index c01d0c856..1ce1263d3 100644 --- a/apps/client/src/widgets/dialogs/include_note.tsx +++ b/apps/client/src/widgets/dialogs/include_note.tsx @@ -5,7 +5,7 @@ import FormRadioGroup from "../react/FormRadioGroup"; import Modal from "../react/Modal"; import NoteAutocomplete from "../react/NoteAutocomplete"; import Button from "../react/Button"; -import { CreateMode, Suggestion, triggerRecentNotes } from "../../services/note_autocomplete.js"; +import { SuggestionMode, Suggestion, triggerRecentNotes } from "../../services/note_autocomplete.js"; import tree from "../../services/tree"; import froca from "../../services/froca"; import { useTriliumEvent } from "../react/hooks"; @@ -50,7 +50,7 @@ export default function IncludeNoteDialog() { inputRef={autoCompleteRef} opts={{ hideGoToSelectedNoteButton: true, - createMode: CreateMode.CreateOnly, + suggestionMode: SuggestionMode.SuggestCreateOnly, }} /> diff --git a/apps/client/src/widgets/dialogs/jump_to_note.tsx b/apps/client/src/widgets/dialogs/jump_to_note.tsx index 94f3f37aa..9be43e0cf 100644 --- a/apps/client/src/widgets/dialogs/jump_to_note.tsx +++ b/apps/client/src/widgets/dialogs/jump_to_note.tsx @@ -3,7 +3,7 @@ import Button from "../react/Button"; import NoteAutocomplete from "../react/NoteAutocomplete"; import { t } from "../../services/i18n"; import { useRef, useState } from "preact/hooks"; -import note_autocomplete, { CreateMode, Suggestion } from "../../services/note_autocomplete.js"; +import note_autocomplete, { SuggestionMode, Suggestion } from "../../services/note_autocomplete.js"; import appContext from "../../components/app_context"; import commandRegistry from "../../services/command_registry"; import { refToJQuerySelector } from "../react/react_utils"; @@ -135,7 +135,7 @@ export default function JumpToNoteDialogComponent() { container={containerRef} text={initialText} opts={{ - createMode: CreateMode.CreateOnly, + suggestionMode: SuggestionMode.SuggestCreateOnly, hideGoToSelectedNoteButton: true, allowJumpToSearchNotes: true, isCommandPalette: true diff --git a/apps/client/src/widgets/dialogs/note_type_chooser.tsx b/apps/client/src/widgets/dialogs/note_type_chooser.tsx index 00a6e6170..4e0551018 100644 --- a/apps/client/src/widgets/dialogs/note_type_chooser.tsx +++ b/apps/client/src/widgets/dialogs/note_type_chooser.tsx @@ -7,7 +7,7 @@ import { useEffect, useState } from "preact/hooks"; import note_types from "../../services/note_types"; import { MenuCommandItem, MenuItem } from "../../menus/context_menu"; import { TreeCommandNames } from "../../menus/tree_context_menu"; -import { CreateMode, Suggestion } from "../../services/note_autocomplete.js"; +import { SuggestionMode, Suggestion } from "../../services/note_autocomplete.js"; import Badge from "../react/Badge"; import { useTriliumEvent } from "../react/hooks"; @@ -86,7 +86,7 @@ export default function NoteTypeChooserDialogComponent() { onChange={setParentNote} placeholder={t("note_type_chooser.search_placeholder")} opts={{ - createMode: CreateMode.None, + suggestionMode: SuggestionMode.SuggestNothing, hideGoToSelectedNoteButton: true, allowJumpToSearchNotes: false, }} diff --git a/apps/client/src/widgets/llm_chat/llm_chat_panel.ts b/apps/client/src/widgets/llm_chat/llm_chat_panel.ts index b17547f17..8da83ce5a 100644 --- a/apps/client/src/widgets/llm_chat/llm_chat_panel.ts +++ b/apps/client/src/widgets/llm_chat/llm_chat_panel.ts @@ -5,7 +5,7 @@ import BasicWidget from "../basic_widget.js"; import toastService from "../../services/toast.js"; import appContext from "../../components/app_context.js"; import server from "../../services/server.js"; -import noteAutocompleteService, { CreateMode } from "../../services/note_autocomplete.js"; +import noteAutocompleteService, { SuggestionMode } from "../../services/note_autocomplete.js"; import { TPL, addMessageToChat, showSources, hideSources, showLoadingIndicator, hideLoadingIndicator } from "./ui.js"; import { formatMarkdown } from "./utils.js"; @@ -163,7 +163,7 @@ export default class LlmChatPanel extends BasicWidget { const mentionSetup: MentionFeed[] = [ { marker: "@", - feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), + feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink), itemRenderer: (item) => { const suggestion = item as Suggestion; const itemElement = document.createElement("button"); diff --git a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx index 74bdec6cd..b573a96ad 100644 --- a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx +++ b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx @@ -2,7 +2,7 @@ import { MutableRef, useEffect, useImperativeHandle, useMemo, useRef, useState } import { AttributeEditor as CKEditorAttributeEditor, MentionFeed, ModelElement, ModelNode, ModelPosition } from "@triliumnext/ckeditor5"; import { t } from "../../../services/i18n"; import server from "../../../services/server"; -import note_autocomplete, { CreateMode, Suggestion } from "../../../services/note_autocomplete.js"; +import note_autocomplete, { SuggestionMode, Suggestion } from "../../../services/note_autocomplete.js"; import CKEditor, { CKEditorApi } from "../../react/CKEditor"; import { useLegacyImperativeHandlers, useLegacyWidget, useTooltip, useTriliumEvent, useTriliumOption } from "../../react/hooks"; import FAttribute from "../../../entities/fattribute"; @@ -34,7 +34,7 @@ const HELP_TEXT = ` const mentionSetup: MentionFeed[] = [ { marker: "@", - feed: (queryText) => note_autocomplete.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), + feed: (queryText) => note_autocomplete.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink), itemRenderer: (_item) => { const item = _item as Suggestion; const itemElement = document.createElement("button"); diff --git a/apps/client/src/widgets/type_widgets/Empty.tsx b/apps/client/src/widgets/type_widgets/Empty.tsx index 1941ea824..918c5b6a6 100644 --- a/apps/client/src/widgets/type_widgets/Empty.tsx +++ b/apps/client/src/widgets/type_widgets/Empty.tsx @@ -4,7 +4,7 @@ import FormGroup from "../react/FormGroup"; import NoteAutocomplete from "../react/NoteAutocomplete"; import "./Empty.css"; import { ParentComponent, refToJQuerySelector } from "../react/react_utils"; -import note_autocomplete, { CreateMode } from "../../services/note_autocomplete"; +import note_autocomplete, { SuggestionMode } from "../../services/note_autocomplete"; import appContext from "../../components/app_context"; import FNote from "../../entities/fnote"; import search from "../../services/search"; @@ -38,7 +38,7 @@ function NoteSearch() { inputRef={autocompleteRef} opts={{ hideGoToSelectedNoteButton: true, - createMode: CreateMode.CreateOnly, + suggestionMode: SuggestionMode.SuggestCreateOnly, allowJumpToSearchNotes: true, }} onChange={suggestion => { diff --git a/apps/client/src/widgets/type_widgets/text/config.ts b/apps/client/src/widgets/type_widgets/text/config.ts index 657024825..64fdf5766 100644 --- a/apps/client/src/widgets/type_widgets/text/config.ts +++ b/apps/client/src/widgets/type_widgets/text/config.ts @@ -7,7 +7,7 @@ import emojiDefinitionsUrl from "@triliumnext/ckeditor5/src/emoji_definitions/en import { copyTextWithToast } from "../../../services/clipboard_ext.js"; import { t } from "../../../services/i18n.js"; import { getMermaidConfig } from "../../../services/mermaid.js"; -import noteAutocompleteService, { CreateMode, type Suggestion } from "../../../services/note_autocomplete.js"; +import noteAutocompleteService, { SuggestionMode, type Suggestion } from "../../../services/note_autocomplete.js"; import mimeTypesService from "../../../services/mime_types.js"; import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons"; import { buildToolbarConfig } from "./toolbar.js"; @@ -181,7 +181,7 @@ export async function buildConfig(opts: BuildEditorOptions): Promise noteAutocompleteService.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), + feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink), itemRenderer: (item) => { const itemElement = document.createElement("button");