Files
cinny/src/app/components/editor/autocomplete/AutocompleteMenu.tsx
T

42 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-06-12 21:15:23 +10:00
import React, { ReactNode } from 'react';
import FocusTrap from 'focus-trap-react';
2023-10-21 18:14:33 +11:00
import { isKeyHotkey } from 'is-hotkey';
2023-06-12 21:15:23 +10:00
import { Header, Menu, Scroll, config } from 'folds';
import * as css from './AutocompleteMenu.css';
import { preventScrollWithArrowKey } from '../../../utils/keyboard';
type AutocompleteMenuProps = {
requestClose: () => void;
headerContent: ReactNode;
children: ReactNode;
};
export function AutocompleteMenu({ headerContent, requestClose, children }: AutocompleteMenuProps) {
return (
<div className={css.AutocompleteMenuBase}>
<div className={css.AutocompleteMenuContainer}>
<FocusTrap
focusTrapOptions={{
initialFocus: false,
onDeactivate: () => requestClose(),
2023-10-18 13:15:30 +11:00
returnFocusOnDeactivate: false,
2023-06-12 21:15:23 +10:00
clickOutsideDeactivates: true,
allowOutsideClick: true,
2023-10-21 18:14:33 +11:00
isKeyForward: (evt: KeyboardEvent) => isKeyHotkey('arrowdown', evt),
isKeyBackward: (evt: KeyboardEvent) => isKeyHotkey('arrowup', evt),
2023-06-12 21:15:23 +10:00
}}
>
<Menu className={css.AutocompleteMenu}>
<Header className={css.AutocompleteMenuHeader} size="400">
{headerContent}
</Header>
<Scroll style={{ flexGrow: 1 }} onKeyDown={preventScrollWithArrowKey}>
<div style={{ padding: config.space.S200 }}>{children}</div>
</Scroll>
</Menu>
</FocusTrap>
</div>
</div>
);
}