// Copyright 2017-2018 @polkadot/ui-app authors & contributors // This software may be modified and distributed under the terms // of the ISC license. See the LICENSE file for details. import { BareProps } from './types'; import React from 'react'; import SUIInput from 'semantic-ui-react/dist/commonjs/elements/Input/Input'; import isUndefined from '@polkadot/util/is/undefined'; import Labelled from './Labelled'; type Input$Type = 'number' | 'password' | 'text'; type Props = BareProps & { autoFocus?: boolean, children?: React.ReactNode, defaultValue?: any, icon?: any, // node? isAction?: boolean, isDisabled?: boolean, isEditable?: boolean, isError?: boolean, isHidden?: boolean, label?: any, // node? max?: any, maxLength?: number, min?: any, name?: string, onChange: (value: string) => void, onKeyDown?: (event: React.KeyboardEvent) => void, onKeyUp?: (event: React.KeyboardEvent) => void, placeholder?: string, tabIndex?: number, type?: Input$Type, value?: any, withLabel?: boolean }; type State = { name: string; }; // note: KeyboardEvent.keyCode and KeyboardEvent.which are deprecated const KEYS = { A: 'a', ALT: 'Alt', ARROW_LEFT: 'ArrowLeft', ARROW_RIGHT: 'ArrowRight', BACKSPACE: 'Backspace', C: 'c', CMD: 'Meta', CTRL: 'Control', ENTER: 'Enter', ESCAPE: 'Escape', TAB: 'Tab', V: 'v', X: 'x', ZERO: '0' }; const KEYS_PRE: Array = [KEYS.ALT, KEYS.CMD, KEYS.CTRL]; // reference: degrade key to keyCode for cross-browser compatibility https://www.w3schools.com/jsref/event_key_keycode.asp const isCopy = (key: string, isPreKeyDown: boolean): boolean => isPreKeyDown && key === KEYS.C; const isCut = (key: string, isPreKeyDown: boolean): boolean => isPreKeyDown && key === KEYS.X; const isPaste = (key: string, isPreKeyDown: boolean): boolean => isPreKeyDown && key === KEYS.V; const isSelectAll = (key: string, isPreKeyDown: boolean): boolean => isPreKeyDown && key === KEYS.A; let counter = 0; export default class Input extends React.PureComponent { state: State = { name: `in_${counter++}_at_${Date.now()}` }; render () { const { autoFocus = false, children, className, defaultValue, icon, isEditable = false, isAction = false, isDisabled = false, isError = false, isHidden = false, label, max, maxLength, min, name, placeholder, style, tabIndex, type = 'text', value, withLabel } = this.props; return ( ); } onChange = (event: React.SyntheticEvent): void => { const { onChange } = this.props; const { value } = event.target as HTMLInputElement; onChange(value); } onKeyDown = (event: React.KeyboardEvent): void => { const { onKeyDown } = this.props; if (onKeyDown) { onKeyDown(event); } } onKeyUp = (event: React.KeyboardEvent): void => { const { onKeyUp } = this.props; if (onKeyUp) { onKeyUp(event); } } } export { isCopy, isCut, isPaste, isSelectAll, KEYS, KEYS_PRE };