inkdrop-command-palette/lib/components/palette.js

52 lines
1.3 KiB
JavaScript
Raw Normal View History

2022-08-16 21:11:16 +00:00
"use babel";
import React, { useEffect, useCallback, useRef, useLayoutEffect } from "react";
import { logger, useModal } from "inkdrop";
const CommandPalette = (props) => {
const modal = useModal();
const { Dialog } = inkdrop.components.classes;
const toggle = useCallback(() => {
modal.show();
logger.debug("Dialog was toggled!");
}, []);
useEffect(() => {
const sub = inkdrop.commands.add(document.body, {
"commandpalette:toggle": toggle,
});
return () => sub.dispose();
}, [toggle]);
2022-08-22 07:17:43 +00:00
// focus text box when dialog is shown
2022-08-16 21:11:16 +00:00
useLayoutEffect(() => {
2022-08-22 07:17:43 +00:00
setTimeout(() => {
const textbox = document.getElementById("cpInput");
textbox.focus();
}, 50);
2022-08-16 21:11:16 +00:00
});
return (
<Dialog {...modal.state} onBackdropClick={modal.close}>
<Dialog.Content className="commandpalette">
<div role="dialog" aria-modal="true">
<div>
<div className="ui small input">
<input
type="text"
placeholder="Search files by name (append > for actions or ! for formatting)"
spellCheck="false"
className="cpInput"
id="cpInput"
/>
</div>
</div>
</div>
</Dialog.Content>
</Dialog>
);
};
export default CommandPalette;