"use babel"; import React, { useEffect, useCallback, useRef, useLayoutEffect } from "react"; import Option from "./command.js"; import Application from "../commands/application.js"; import Core from "../commands/core.js"; import NoteTags from "../commands/notetagsbar.js"; import Formatting from "../commands/formatting.js"; import { logger, useModal } from "inkdrop"; import useArrowKeyNavigation from "../navigation/hook.js"; const CommandPalette = (props) => { const Commands = [...Formatting, ...Application, ...Core, ...NoteTags]; const modal = useModal(); const { Dialog } = inkdrop.components.classes; const inputRef = useRef(null); const [searchQuery, setSearchQuery] = React.useState(""); const toggle = useCallback(() => { modal.show(); }, []); useEffect(() => { const sub = inkdrop.commands.add(document.body, { "commandpalette:toggle": toggle, }); console.log("useeffect triggered"); return () => sub.dispose(); }, [toggle]); // focus text box when dialog is shown useLayoutEffect(() => { setTimeout(() => { const textbox = document.getElementById("cpInput"); textbox.focus(); }, 50); console.log("use layout effect triggered"); }); const filter = (commands, query) => { if (!query) return commands; return commands.filter((command) => { const commandText = command.name.toLowerCase(); const commandCat = command.category.toLowerCase(); let textFilter = commandText.includes(query.toLowerCase()); let categoryFilter = commandCat.includes(query.toLowerCase()); return textFilter || categoryFilter; }); }; const changeHandler = (e) => { e.preventDefault(); setSearchQuery(e.currentTarget.value); }; const filteredResults = filter(Commands, searchQuery); return (
{filteredResults.length === 0 ? (

{"(。>﹏<)"}

no matching commands

try searching for a different term

) : null} {filteredResults.map((Command, index) => { return (
); }; export default CommandPalette;