mirror of
https://github.com/zadam/trilium.git
synced 2025-10-21 15:49:00 +02:00
feat(react/bulk_actions): improve note auto complete handling
This commit is contained in:
parent
5be9bb47a7
commit
5c8e4fd6fd
@ -4,15 +4,13 @@ import BulkAction, { BulkActionText } from "../BulkAction.jsx";
|
|||||||
import NoteAutocomplete from "../../react/NoteAutocomplete.jsx";
|
import NoteAutocomplete from "../../react/NoteAutocomplete.jsx";
|
||||||
import { useEffect, useState } from "preact/hooks";
|
import { useEffect, useState } from "preact/hooks";
|
||||||
import { useSpacedUpdate } from "../../react/hooks.jsx";
|
import { useSpacedUpdate } from "../../react/hooks.jsx";
|
||||||
import { Suggestion } from "../../../services/note_autocomplete.js";
|
|
||||||
|
|
||||||
function MoveNoteBulkActionComponent({ bulkAction, actionDef }: { bulkAction: AbstractBulkAction, actionDef: ActionDefinition }) {
|
function MoveNoteBulkActionComponent({ bulkAction, actionDef }: { bulkAction: AbstractBulkAction, actionDef: ActionDefinition }) {
|
||||||
const [ suggestion, setSuggestion ] = useState<Suggestion>();
|
const [ targetParentNoteId, setTargetParentNoteId ] = useState<string>();
|
||||||
const spacedUpdate = useSpacedUpdate(() => {
|
const spacedUpdate = useSpacedUpdate(() => {
|
||||||
const noteId = suggestion?.notePath?.split("/")?.at(-1);
|
return bulkAction.saveAction({ targetParentNoteId: targetParentNoteId })
|
||||||
return bulkAction.saveAction({ targetParentNoteId: noteId })
|
|
||||||
});
|
});
|
||||||
useEffect(() => spacedUpdate.scheduleUpdate(), [ suggestion ]);
|
useEffect(() => spacedUpdate.scheduleUpdate(), [ targetParentNoteId ]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BulkAction
|
<BulkAction
|
||||||
@ -32,7 +30,7 @@ function MoveNoteBulkActionComponent({ bulkAction, actionDef }: { bulkAction: Ab
|
|||||||
|
|
||||||
<NoteAutocomplete
|
<NoteAutocomplete
|
||||||
placeholder={t("move_note.target_parent_note")}
|
placeholder={t("move_note.target_parent_note")}
|
||||||
onChange={setSuggestion}
|
noteId={targetParentNoteId} noteIdChanged={setTargetParentNoteId}
|
||||||
/>
|
/>
|
||||||
</BulkAction>
|
</BulkAction>
|
||||||
)
|
)
|
||||||
|
@ -32,6 +32,7 @@ function AddRelationBulkActionComponent({ bulkAction, actionDef }: { bulkAction:
|
|||||||
|
|
||||||
<NoteAutocomplete
|
<NoteAutocomplete
|
||||||
placeholder={t("add_relation.target_note")}
|
placeholder={t("add_relation.target_note")}
|
||||||
|
noteId={targetNoteId} noteIdChanged={setTargetNoteId}
|
||||||
/>
|
/>
|
||||||
</BulkAction>
|
</BulkAction>
|
||||||
)
|
)
|
||||||
|
@ -12,9 +12,11 @@ interface NoteAutocompleteProps {
|
|||||||
opts?: Omit<Options, "container">;
|
opts?: Omit<Options, "container">;
|
||||||
onChange?: (suggestion: Suggestion | null) => void;
|
onChange?: (suggestion: Suggestion | null) => void;
|
||||||
onTextChange?: (text: string) => void;
|
onTextChange?: (text: string) => void;
|
||||||
|
noteIdChanged?: (noteId: string) => void;
|
||||||
|
noteId?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function NoteAutocomplete({ inputRef: _ref, text, placeholder, onChange, onTextChange, container, opts }: NoteAutocompleteProps) {
|
export default function NoteAutocomplete({ inputRef: _ref, text, placeholder, onChange, onTextChange, container, opts, noteId, noteIdChanged }: NoteAutocompleteProps) {
|
||||||
const ref = _ref ?? useRef<HTMLInputElement>(null);
|
const ref = _ref ?? useRef<HTMLInputElement>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -30,8 +32,15 @@ export default function NoteAutocomplete({ inputRef: _ref, text, placeholder, on
|
|||||||
...opts,
|
...opts,
|
||||||
container: container?.current
|
container: container?.current
|
||||||
});
|
});
|
||||||
if (onChange) {
|
if (onChange || noteIdChanged) {
|
||||||
const listener = (_e, suggestion) => onChange(suggestion);
|
const listener = (_e, suggestion) => {
|
||||||
|
onChange?.(suggestion);
|
||||||
|
|
||||||
|
if (noteIdChanged) {
|
||||||
|
const noteId = suggestion?.notePath?.split("/")?.at(-1);
|
||||||
|
noteIdChanged(noteId);
|
||||||
|
}
|
||||||
|
};
|
||||||
$autoComplete
|
$autoComplete
|
||||||
.on("autocomplete:noteselected", listener)
|
.on("autocomplete:noteselected", listener)
|
||||||
.on("autocomplete:externallinkselected", listener)
|
.on("autocomplete:externallinkselected", listener)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user