import React from 'react'; import { animation, contextMenu, Item, Menu } from 'react-contexify'; import { DefaultTheme } from 'styled-components'; import { SessionIconButton, SessionIconSize, SessionIconType } from './icon'; interface Props { searchString: string; onChange: any; handleNavigation?: any; placeholder: string; theme: DefaultTheme; } export class SessionSearchInput extends React.Component<Props> { public constructor(props: Props) { super(props); this.handleKeyDown = this.handleKeyDown.bind(this); } public render() { const { searchString } = this.props; const triggerId = 'session-search-input-context'; return ( <> <div className="session-search-input" onContextMenu={(e: any) => { contextMenu.show({ id: triggerId, event: e, }); }} > <SessionIconButton iconSize={SessionIconSize.Medium} iconType={SessionIconType.Search} theme={this.props.theme} /> <input value={searchString} onChange={e => this.props.onChange(e.target.value)} onKeyDown={this.handleKeyDown} placeholder={this.props.placeholder} /> </div> <Menu id={triggerId} animation={animation.fade}> <Item onClick={() => document.execCommand('undo')}> {window.i18n('editMenuUndo')} </Item> <Item onClick={() => document.execCommand('redo')}> {window.i18n('editMenuRedo')} </Item> <hr /> <Item onClick={() => document.execCommand('cut')}> {window.i18n('editMenuCut')} </Item> <Item onClick={() => document.execCommand('copy')}> {window.i18n('editMenuCopy')} </Item> <Item onClick={() => document.execCommand('paste')}> {window.i18n('editMenuPaste')} </Item> <Item onClick={() => document.execCommand('selectAll')}> {window.i18n('editMenuSelectAll')} </Item> </Menu> </> ); } public handleKeyDown(e: any) { if (e.keyCode === 38 || e.keyCode === 40 || e.key === 'Enter') { // Up or Bottom arrow pressed if (this.props.handleNavigation) { e.stopPropagation(); this.props.handleNavigation(e); } } } }