refactor(suggestion): improve naming

This commit is contained in:
Jakob Schlanstedt 2025-11-22 10:28:33 +01:00
parent 4e5c26371e
commit 8ee59e9daa
12 changed files with 32 additions and 32 deletions

View File

@ -57,10 +57,10 @@ export enum SuggestionAction {
Command = "command", Command = "command",
} }
export enum CreateMode { export enum SuggestionMode {
None = "none", SuggestNothing = "nothing",
CreateOnly = "create-only", SuggestCreateOnly = "create-only",
CreateAndLink = "create-and-link" SuggestCreateAndLink = "create-and-link"
} }
// NOTE: Previously marked for deduplication with a server-side type, // NOTE: Previously marked for deduplication with a server-side type,
@ -86,7 +86,7 @@ export interface Suggestion {
export interface Options { export interface Options {
container?: HTMLElement | null; container?: HTMLElement | null;
fastSearch?: boolean; fastSearch?: boolean;
createMode?: CreateMode; suggestionMode?: SuggestionMode;
allowJumpToSearchNotes?: boolean; allowJumpToSearchNotes?: boolean;
allowExternalLinks?: boolean; allowExternalLinks?: boolean;
/** If set, hides the right-side button corresponding to go to selected note. */ /** If set, hides the right-side button corresponding to go to selected note. */
@ -99,7 +99,7 @@ export interface Options {
async function autocompleteSourceForCKEditor( async function autocompleteSourceForCKEditor(
queryText: string, queryText: string,
createMode: CreateMode suggestionMode: SuggestionMode
): Promise<MentionFeedObjectItem[]> { ): Promise<MentionFeedObjectItem[]> {
// Wrap the callback-based autocompleteSource in a Promise for async/await // Wrap the callback-based autocompleteSource in a Promise for async/await
const rows = await new Promise<Suggestion[]>((resolve) => { const rows = await new Promise<Suggestion[]>((resolve) => {
@ -107,7 +107,7 @@ async function autocompleteSourceForCKEditor(
queryText, queryText,
(suggestions) => resolve(suggestions), (suggestions) => resolve(suggestions),
{ {
createMode, suggestionMode,
} }
); );
}); });
@ -179,8 +179,8 @@ async function autocompleteSource(
// --- Create Note suggestions --- // --- Create Note suggestions ---
if (trimmedTerm.length >= 1) { if (trimmedTerm.length >= 1) {
switch (options.createMode) { switch (options.suggestionMode) {
case CreateMode.CreateOnly: { case SuggestionMode.SuggestCreateOnly: {
results = [ results = [
{ {
action: SuggestionAction.CreateNote, action: SuggestionAction.CreateNote,
@ -199,7 +199,7 @@ async function autocompleteSource(
break; break;
} }
case CreateMode.CreateAndLink: { case SuggestionMode.SuggestCreateAndLink: {
results = [ results = [
{ {
action: SuggestionAction.CreateAndLinkNote, action: SuggestionAction.CreateAndLinkNote,

View File

@ -3,7 +3,7 @@ import server from "../../services/server.js";
import froca from "../../services/froca.js"; import froca from "../../services/froca.js";
import linkService from "../../services/link.js"; import linkService from "../../services/link.js";
import attributeAutocompleteService from "../../services/attribute_autocomplete.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 promotedAttributeDefinitionParser from "../../services/promoted_attribute_definition_parser.js";
import NoteContextAwareWidget from "../note_context_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import SpacedUpdate from "../../services/spaced_update.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.$rowTargetNote = this.$widget.find(".attr-row-target-note");
this.$inputTargetNote = this.$widget.find(".attr-input-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) { if (!suggestion.notePath) {
return false; return false;
} }

View File

@ -15,7 +15,7 @@ import FormTextArea from "../../react/FormTextArea";
import FNote from "../../../entities/fnote"; import FNote from "../../../entities/fnote";
import NoteAutocomplete from "../../react/NoteAutocomplete"; import NoteAutocomplete from "../../react/NoteAutocomplete";
import toast from "../../../services/toast"; import toast from "../../../services/toast";
import { CreateMode } from "../../../services/note_autocomplete"; import { SuggestionMode } from "../../../services/note_autocomplete";
export interface BoardViewData { export interface BoardViewData {
columns?: BoardColumnData[]; columns?: BoardColumnData[];
@ -299,7 +299,7 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, mode, is
noteId={currentValue ?? ""} noteId={currentValue ?? ""}
opts={{ opts={{
hideAllButtons: true, hideAllButtons: true,
createMode: CreateMode.CreateAndLink suggestionMode: SuggestionMode.SuggestCreateAndLink
}} }}
onKeyDown={(e) => { onKeyDown={(e) => {
if (e.key === "Escape") { if (e.key === "Escape") {

View File

@ -6,7 +6,7 @@ import Icon from "../../react/Icon.jsx";
import { useEffect, useRef, useState } from "preact/hooks"; import { useEffect, useRef, useState } from "preact/hooks";
import froca from "../../../services/froca.js"; import froca from "../../../services/froca.js";
import NoteAutocomplete from "../../react/NoteAutocomplete.jsx"; import NoteAutocomplete from "../../react/NoteAutocomplete.jsx";
import { CreateMode } from "../../../services/note_autocomplete.js"; import { SuggestionMode } from "../../../services/note_autocomplete.js";
type ColumnType = LabelType | "relation"; type ColumnType = LabelType | "relation";
@ -228,7 +228,7 @@ function RelationEditor({ cell, success }: EditorOpts) {
inputRef={inputRef} inputRef={inputRef}
noteId={cell.getValue()} noteId={cell.getValue()}
opts={{ opts={{
createMode: CreateMode.CreateAndLink, suggestionMode: SuggestionMode.SuggestCreateAndLink,
hideAllButtons: true hideAllButtons: true
}} }}
noteIdChanged={success} noteIdChanged={success}

View File

@ -5,7 +5,7 @@ import FormRadioGroup from "../react/FormRadioGroup";
import NoteAutocomplete from "../react/NoteAutocomplete"; import NoteAutocomplete from "../react/NoteAutocomplete";
import { useRef, useState, useEffect } from "preact/hooks"; import { useRef, useState, useEffect } from "preact/hooks";
import tree from "../../services/tree"; 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 { logError } from "../../services/ws";
import FormGroup from "../react/FormGroup.js"; import FormGroup from "../react/FormGroup.js";
import { refToJQuerySelector } from "../react/react_utils"; import { refToJQuerySelector } from "../react/react_utils";
@ -133,7 +133,7 @@ export default function AddLinkDialog() {
onChange={setSuggestion} onChange={setSuggestion}
opts={{ opts={{
allowExternalLinks: true, allowExternalLinks: true,
createMode: CreateMode.CreateAndLink, suggestionMode: SuggestionMode.SuggestCreateAndLink,
}} }}
/> />
</FormGroup> </FormGroup>

View File

@ -5,7 +5,7 @@ import FormRadioGroup from "../react/FormRadioGroup";
import Modal from "../react/Modal"; import Modal from "../react/Modal";
import NoteAutocomplete from "../react/NoteAutocomplete"; import NoteAutocomplete from "../react/NoteAutocomplete";
import Button from "../react/Button"; 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 tree from "../../services/tree";
import froca from "../../services/froca"; import froca from "../../services/froca";
import { useTriliumEvent } from "../react/hooks"; import { useTriliumEvent } from "../react/hooks";
@ -50,7 +50,7 @@ export default function IncludeNoteDialog() {
inputRef={autoCompleteRef} inputRef={autoCompleteRef}
opts={{ opts={{
hideGoToSelectedNoteButton: true, hideGoToSelectedNoteButton: true,
createMode: CreateMode.CreateOnly, suggestionMode: SuggestionMode.SuggestCreateOnly,
}} }}
/> />
</FormGroup> </FormGroup>

View File

@ -3,7 +3,7 @@ import Button from "../react/Button";
import NoteAutocomplete from "../react/NoteAutocomplete"; import NoteAutocomplete from "../react/NoteAutocomplete";
import { t } from "../../services/i18n"; import { t } from "../../services/i18n";
import { useRef, useState } from "preact/hooks"; 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 appContext from "../../components/app_context";
import commandRegistry from "../../services/command_registry"; import commandRegistry from "../../services/command_registry";
import { refToJQuerySelector } from "../react/react_utils"; import { refToJQuerySelector } from "../react/react_utils";
@ -135,7 +135,7 @@ export default function JumpToNoteDialogComponent() {
container={containerRef} container={containerRef}
text={initialText} text={initialText}
opts={{ opts={{
createMode: CreateMode.CreateOnly, suggestionMode: SuggestionMode.SuggestCreateOnly,
hideGoToSelectedNoteButton: true, hideGoToSelectedNoteButton: true,
allowJumpToSearchNotes: true, allowJumpToSearchNotes: true,
isCommandPalette: true isCommandPalette: true

View File

@ -7,7 +7,7 @@ import { useEffect, useState } from "preact/hooks";
import note_types from "../../services/note_types"; import note_types from "../../services/note_types";
import { MenuCommandItem, MenuItem } from "../../menus/context_menu"; import { MenuCommandItem, MenuItem } from "../../menus/context_menu";
import { TreeCommandNames } from "../../menus/tree_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 Badge from "../react/Badge";
import { useTriliumEvent } from "../react/hooks"; import { useTriliumEvent } from "../react/hooks";
@ -86,7 +86,7 @@ export default function NoteTypeChooserDialogComponent() {
onChange={setParentNote} onChange={setParentNote}
placeholder={t("note_type_chooser.search_placeholder")} placeholder={t("note_type_chooser.search_placeholder")}
opts={{ opts={{
createMode: CreateMode.None, suggestionMode: SuggestionMode.SuggestNothing,
hideGoToSelectedNoteButton: true, hideGoToSelectedNoteButton: true,
allowJumpToSearchNotes: false, allowJumpToSearchNotes: false,
}} }}

View File

@ -5,7 +5,7 @@ import BasicWidget from "../basic_widget.js";
import toastService from "../../services/toast.js"; import toastService from "../../services/toast.js";
import appContext from "../../components/app_context.js"; import appContext from "../../components/app_context.js";
import server from "../../services/server.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 { TPL, addMessageToChat, showSources, hideSources, showLoadingIndicator, hideLoadingIndicator } from "./ui.js";
import { formatMarkdown } from "./utils.js"; import { formatMarkdown } from "./utils.js";
@ -163,7 +163,7 @@ export default class LlmChatPanel extends BasicWidget {
const mentionSetup: MentionFeed[] = [ const mentionSetup: MentionFeed[] = [
{ {
marker: "@", marker: "@",
feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink),
itemRenderer: (item) => { itemRenderer: (item) => {
const suggestion = item as Suggestion; const suggestion = item as Suggestion;
const itemElement = document.createElement("button"); const itemElement = document.createElement("button");

View File

@ -2,7 +2,7 @@ import { MutableRef, useEffect, useImperativeHandle, useMemo, useRef, useState }
import { AttributeEditor as CKEditorAttributeEditor, MentionFeed, ModelElement, ModelNode, ModelPosition } from "@triliumnext/ckeditor5"; import { AttributeEditor as CKEditorAttributeEditor, MentionFeed, ModelElement, ModelNode, ModelPosition } from "@triliumnext/ckeditor5";
import { t } from "../../../services/i18n"; import { t } from "../../../services/i18n";
import server from "../../../services/server"; 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 CKEditor, { CKEditorApi } from "../../react/CKEditor";
import { useLegacyImperativeHandlers, useLegacyWidget, useTooltip, useTriliumEvent, useTriliumOption } from "../../react/hooks"; import { useLegacyImperativeHandlers, useLegacyWidget, useTooltip, useTriliumEvent, useTriliumOption } from "../../react/hooks";
import FAttribute from "../../../entities/fattribute"; import FAttribute from "../../../entities/fattribute";
@ -34,7 +34,7 @@ const HELP_TEXT = `
const mentionSetup: MentionFeed[] = [ const mentionSetup: MentionFeed[] = [
{ {
marker: "@", marker: "@",
feed: (queryText) => note_autocomplete.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), feed: (queryText) => note_autocomplete.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink),
itemRenderer: (_item) => { itemRenderer: (_item) => {
const item = _item as Suggestion; const item = _item as Suggestion;
const itemElement = document.createElement("button"); const itemElement = document.createElement("button");

View File

@ -4,7 +4,7 @@ import FormGroup from "../react/FormGroup";
import NoteAutocomplete from "../react/NoteAutocomplete"; import NoteAutocomplete from "../react/NoteAutocomplete";
import "./Empty.css"; import "./Empty.css";
import { ParentComponent, refToJQuerySelector } from "../react/react_utils"; 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 appContext from "../../components/app_context";
import FNote from "../../entities/fnote"; import FNote from "../../entities/fnote";
import search from "../../services/search"; import search from "../../services/search";
@ -38,7 +38,7 @@ function NoteSearch() {
inputRef={autocompleteRef} inputRef={autocompleteRef}
opts={{ opts={{
hideGoToSelectedNoteButton: true, hideGoToSelectedNoteButton: true,
createMode: CreateMode.CreateOnly, suggestionMode: SuggestionMode.SuggestCreateOnly,
allowJumpToSearchNotes: true, allowJumpToSearchNotes: true,
}} }}
onChange={suggestion => { onChange={suggestion => {

View File

@ -7,7 +7,7 @@ import emojiDefinitionsUrl from "@triliumnext/ckeditor5/src/emoji_definitions/en
import { copyTextWithToast } from "../../../services/clipboard_ext.js"; import { copyTextWithToast } from "../../../services/clipboard_ext.js";
import { t } from "../../../services/i18n.js"; import { t } from "../../../services/i18n.js";
import { getMermaidConfig } from "../../../services/mermaid.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 mimeTypesService from "../../../services/mime_types.js";
import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons"; import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons";
import { buildToolbarConfig } from "./toolbar.js"; import { buildToolbarConfig } from "./toolbar.js";
@ -181,7 +181,7 @@ export async function buildConfig(opts: BuildEditorOptions): Promise<EditorConfi
feeds: [ feeds: [
{ {
marker: "@", marker: "@",
feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, CreateMode.CreateAndLink), feed: (queryText: string) => noteAutocompleteService.autocompleteSourceForCKEditor(queryText, SuggestionMode.SuggestCreateAndLink),
itemRenderer: (item) => { itemRenderer: (item) => {
const itemElement = document.createElement("button"); const itemElement = document.createElement("button");