From 3acc51716153bb950a2f2363363549eb0fdb9787 Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Sat, 13 Oct 2018 17:51:20 +0200 Subject: [PATCH] Extract styles Feature #14229 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- src/components/chips-input/chips-input.tsx | 137 ++++++++++++--------- 1 file changed, 79 insertions(+), 58 deletions(-) diff --git a/src/components/chips-input/chips-input.tsx b/src/components/chips-input/chips-input.tsx index c35db1b3..210feae9 100644 --- a/src/components/chips-input/chips-input.tsx +++ b/src/components/chips-input/chips-input.tsx @@ -4,7 +4,8 @@ import * as React from 'react'; import { Chips } from '~/components/chips/chips'; -import { Input } from '@material-ui/core'; +import { Input, withStyles, WithStyles } from '@material-ui/core'; +import { StyleRulesCallback } from '@material-ui/core/styles'; interface ChipsInputProps { values: Value[]; @@ -13,73 +14,93 @@ interface ChipsInputProps { createNewValue: (value: string) => Value; } -export class ChipsInput extends React.Component> { +type CssRules = 'chips' | 'input' | 'inputContainer'; - state = { - text: '', - }; +const styles: StyleRulesCallback = () => ({ + chips: { + minHeight: '40px', + zIndex: 1, + position: 'relative', + }, + input: { + position: 'relative', + top: '-5px', + zIndex: 1, + }, + inputContainer: { + top: '-24px', + }, +}); + +export const ChipsInput = withStyles(styles)( + class ChipsInput extends React.Component & WithStyles> { - filler = React.createRef(); - timeout = -1; + state = { + text: '', + }; - setText = (event: React.ChangeEvent) => { - this.setState({ text: event.target.value }); - } + filler = React.createRef(); + timeout = -1; - handleKeyPress = ({ key }: React.KeyboardEvent) => { - if (key === 'Enter') { - this.createNewValue(); - } else if (key === 'Backspace') { - this.deleteLastValue(); + setText = (event: React.ChangeEvent) => { + this.setState({ text: event.target.value }); } - } - createNewValue = () => { - if (this.state.text) { - const newValue = this.props.createNewValue(this.state.text); - this.setState({ text: '' }); - this.props.onChange([...this.props.values, newValue]); + handleKeyPress = ({ key }: React.KeyboardEvent) => { + if (key === 'Enter') { + this.createNewValue(); + } else if (key === 'Backspace') { + this.deleteLastValue(); + } } - } - deleteLastValue = () => { - if (this.state.text.length === 0 && this.props.values.length > 0) { - this.props.onChange(this.props.values.slice(0, -1)); + createNewValue = () => { + if (this.state.text) { + const newValue = this.props.createNewValue(this.state.text); + this.setState({ text: '' }); + this.props.onChange([...this.props.values, newValue]); + } } - } - updateStyles = () => { - if(this.timeout){ - clearTimeout(this.timeout); + deleteLastValue = () => { + if (this.state.text.length === 0 && this.props.values.length > 0) { + this.props.onChange(this.props.values.slice(0, -1)); + } } - this.timeout = setTimeout(() => this.forceUpdate()); - } - render() { - this.updateStyles(); - return <> -
- } /> -
- - ; - } + updateCursorPosition = () => { + if (this.timeout) { + clearTimeout(this.timeout); + } + this.timeout = setTimeout(() => this.forceUpdate()); + } - getInputStyles = (): React.CSSProperties => ({ - width: this.filler.current - ? this.filler.current.offsetWidth + 8 - : '100%', - position: 'relative', - right: this.filler.current - ? `calc(${this.filler.current.offsetWidth}px - 100%)` - : 0, - top: '-5px', - zIndex: 1, - }) -} \ No newline at end of file + render() { + this.updateCursorPosition(); + return <> +
+ } /> +
+ + ; + } + + getInputStyles = (): React.CSSProperties => ({ + width: this.filler.current + ? this.filler.current.offsetWidth + 8 + : '100%', + right: this.filler.current + ? `calc(${this.filler.current.offsetWidth}px - 100%)` + : 0, + + }) + }); -- 2.30.2