aboutsummaryrefslogtreecommitdiffstats
path: root/packages/forms/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/forms/src')
-rw-r--r--packages/forms/src/button/index.tsx1
-rw-r--r--packages/forms/src/input/index.tsx20
-rw-r--r--packages/forms/src/input/styles.ts7
-rw-r--r--packages/forms/src/label/index.tsx6
-rw-r--r--packages/forms/src/label/styles.ts4
-rw-r--r--packages/forms/src/select/index.tsx8
-rw-r--r--packages/forms/src/toggle/index.tsx4
-rw-r--r--packages/forms/src/typings/generic.ts1
8 files changed, 43 insertions, 8 deletions
diff --git a/packages/forms/src/button/index.tsx b/packages/forms/src/button/index.tsx
index 7a7f83dab..6959cde73 100644
--- a/packages/forms/src/button/index.tsx
+++ b/packages/forms/src/button/index.tsx
@@ -44,6 +44,7 @@ const styles = (theme: Theme) => ({
44 width: (props: IProps) => (props.stretch ? '100%' : 'auto') as CSS.WidthProperty<string>, 44 width: (props: IProps) => (props.stretch ? '100%' : 'auto') as CSS.WidthProperty<string>,
45 fontSize: theme.uiFontSize, 45 fontSize: theme.uiFontSize,
46 textDecoration: 'none', 46 textDecoration: 'none',
47 height: theme.buttonHeight,
47 48
48 '&:hover': { 49 '&:hover': {
49 opacity: 0.8, 50 opacity: 0.8,
diff --git a/packages/forms/src/input/index.tsx b/packages/forms/src/input/index.tsx
index 478738cad..a2d7c62d5 100644
--- a/packages/forms/src/input/index.tsx
+++ b/packages/forms/src/input/index.tsx
@@ -25,6 +25,7 @@ interface IProps extends React.InputHTMLAttributes<HTMLInputElement>, IFormField
25 showPasswordToggle?: boolean; 25 showPasswordToggle?: boolean;
26 data: IData; 26 data: IData;
27 inputClassName?: string; 27 inputClassName?: string;
28 onEnterKey?: Function;
28} 29}
29 30
30interface IState { 31interface IState {
@@ -33,7 +34,7 @@ interface IState {
33} 34}
34 35
35class InputComponent extends Component<IProps, IState> { 36class InputComponent extends Component<IProps, IState> {
36 public static defaultProps = { 37 static defaultProps = {
37 focus: false, 38 focus: false,
38 onChange: () => {}, 39 onChange: () => {},
39 onBlur: () => {}, 40 onBlur: () => {},
@@ -81,6 +82,13 @@ class InputComponent extends Component<IProps, IState> {
81 } 82 }
82 } 83 }
83 84
85 onInputKeyPress(e: React.KeyboardEvent) {
86 if (e.key === "Enter") {
87 const { onEnterKey } = this.props;
88 onEnterKey && onEnterKey();
89 }
90 }
91
84 render() { 92 render() {
85 const { 93 const {
86 classes, 94 classes,
@@ -102,6 +110,10 @@ class InputComponent extends Component<IProps, IState> {
102 spellCheck, 110 spellCheck,
103 onBlur, 111 onBlur,
104 onFocus, 112 onFocus,
113 min,
114 max,
115 step,
116 required,
105 } = this.props; 117 } = this.props;
106 118
107 const { 119 const {
@@ -120,6 +132,8 @@ class InputComponent extends Component<IProps, IState> {
120 title={label} 132 title={label}
121 showLabel={showLabel} 133 showLabel={showLabel}
122 htmlFor={id} 134 htmlFor={id}
135 className={classes.label}
136 isRequired={required}
123 > 137 >
124 <div 138 <div
125 className={classnames({ 139 className={classnames({
@@ -147,6 +161,10 @@ class InputComponent extends Component<IProps, IState> {
147 onFocus={onFocus} 161 onFocus={onFocus}
148 onBlur={onBlur} 162 onBlur={onBlur}
149 disabled={disabled} 163 disabled={disabled}
164 onKeyPress={this.onInputKeyPress.bind(this)}
165 min={min}
166 max={max}
167 step={step}
150 /> 168 />
151 {suffix && ( 169 {suffix && (
152 <span className={classes.suffix}> 170 <span className={classes.suffix}>
diff --git a/packages/forms/src/input/styles.ts b/packages/forms/src/input/styles.ts
index a64d2c340..e2ab30a4f 100644
--- a/packages/forms/src/input/styles.ts
+++ b/packages/forms/src/input/styles.ts
@@ -4,12 +4,17 @@ import CSS from 'csstype';
4const prefixStyles = (theme: Theme) => ({ 4const prefixStyles = (theme: Theme) => ({
5 background: theme.inputPrefixBackground, 5 background: theme.inputPrefixBackground,
6 color: theme.inputPrefixColor, 6 color: theme.inputPrefixColor,
7 lineHeight: theme.inputHeight, 7 lineHeight: `${theme.inputHeight}px`,
8 padding: '0 10px', 8 padding: '0 10px',
9 fontSize: theme.uiFontSize, 9 fontSize: theme.uiFontSize,
10}); 10});
11 11
12export default (theme: Theme) => ({ 12export default (theme: Theme) => ({
13 label: {
14 '& > div': {
15 marginTop: 5,
16 }
17 },
13 disabled: { 18 disabled: {
14 opacity: theme.inputDisabledOpacity, 19 opacity: theme.inputDisabledOpacity,
15 }, 20 },
diff --git a/packages/forms/src/label/index.tsx b/packages/forms/src/label/index.tsx
index 36fcfbedf..1b33ba22c 100644
--- a/packages/forms/src/label/index.tsx
+++ b/packages/forms/src/label/index.tsx
@@ -9,6 +9,7 @@ import styles from './styles';
9 9
10interface ILabel extends IFormField, React.LabelHTMLAttributes<HTMLLabelElement> { 10interface ILabel extends IFormField, React.LabelHTMLAttributes<HTMLLabelElement> {
11 classes: Classes; 11 classes: Classes;
12 isRequired: boolean;
12} 13}
13 14
14class LabelComponent extends Component<ILabel> { 15class LabelComponent extends Component<ILabel> {
@@ -24,8 +25,11 @@ class LabelComponent extends Component<ILabel> {
24 className, 25 className,
25 children, 26 children,
26 htmlFor, 27 htmlFor,
28 isRequired,
27 } = this.props; 29 } = this.props;
28 30
31 if (!showLabel) return children;
32
29 return ( 33 return (
30 <label 34 <label
31 className={classnames({ 35 className={classnames({
@@ -34,7 +38,7 @@ class LabelComponent extends Component<ILabel> {
34 htmlFor={htmlFor} 38 htmlFor={htmlFor}
35 > 39 >
36 {showLabel && ( 40 {showLabel && (
37 <span className={classes.label}>{title}</span> 41 <span className={classes.label}>{title}{isRequired && ' *'}</span>
38 )} 42 )}
39 <div className={classes.content}> 43 <div className={classes.content}>
40 {children} 44 {children}
diff --git a/packages/forms/src/label/styles.ts b/packages/forms/src/label/styles.ts
index f3998de04..c64c9b285 100644
--- a/packages/forms/src/label/styles.ts
+++ b/packages/forms/src/label/styles.ts
@@ -1,9 +1,7 @@
1import { Theme } from '../../../theme/lib'; 1import { Theme } from '../../../theme/lib';
2 2
3export default (theme: Theme) => ({ 3export default (theme: Theme) => ({
4 content: { 4 content: {},
5 marginTop: 5,
6 },
7 label: { 5 label: {
8 color: theme.labelColor, 6 color: theme.labelColor,
9 fontSize: theme.uiFontSize, 7 fontSize: theme.uiFontSize,
diff --git a/packages/forms/src/select/index.tsx b/packages/forms/src/select/index.tsx
index 4a9e3c56e..0e5ded176 100644
--- a/packages/forms/src/select/index.tsx
+++ b/packages/forms/src/select/index.tsx
@@ -56,6 +56,11 @@ const styles = (theme: Theme) => ({
56 textAlign: 'left', 56 textAlign: 'left',
57 color: theme.selectColor, 57 color: theme.selectColor,
58 }, 58 },
59 label: {
60 '& > div': {
61 marginTop: 5,
62 }
63 },
59 popup: { 64 popup: {
60 opacity: 0, 65 opacity: 0,
61 height: 0, 66 height: 0,
@@ -306,6 +311,7 @@ class SelectComponent extends Component<IProps> {
306 showLabel, 311 showLabel,
307 showSearch, 312 showSearch,
308 onChange, 313 onChange,
314 required,
309 } = this.props; 315 } = this.props;
310 316
311 const { 317 const {
@@ -334,6 +340,8 @@ class SelectComponent extends Component<IProps> {
334 title={label} 340 title={label}
335 showLabel={showLabel} 341 showLabel={showLabel}
336 htmlFor={id} 342 htmlFor={id}
343 className={classes.label}
344 isRequired={required}
337 > 345 >
338 <div 346 <div
339 className={classnames({ 347 className={classnames({
diff --git a/packages/forms/src/toggle/index.tsx b/packages/forms/src/toggle/index.tsx
index 6487f1d07..d84508a5f 100644
--- a/packages/forms/src/toggle/index.tsx
+++ b/packages/forms/src/toggle/index.tsx
@@ -1,7 +1,7 @@
1import { Theme } from '@meetfranz/theme'; 1import { Theme } from '@meetfranz/theme';
2import classnames from 'classnames'; 2import classnames from 'classnames';
3import CSS from 'csstype'; 3import CSS from 'csstype';
4import React, { Component, createRef } from 'react'; 4import React, { Component } from 'react';
5import injectStyle from 'react-jss'; 5import injectStyle from 'react-jss';
6 6
7import { IFormField, IWithStyle, Omit } from '../typings/generic'; 7import { IFormField, IWithStyle, Omit } from '../typings/generic';
@@ -45,11 +45,11 @@ const styles = (theme: Theme) => ({
45 }, 45 },
46 toggleLabel: { 46 toggleLabel: {
47 display: 'flex', 47 display: 'flex',
48 alignItems: 'center',
48 49
49 '& > span': { 50 '& > span': {
50 order: 1, 51 order: 1,
51 marginLeft: 15, 52 marginLeft: 15,
52 marginTop: 2,
53 }, 53 },
54 }, 54 },
55}); 55});
diff --git a/packages/forms/src/typings/generic.ts b/packages/forms/src/typings/generic.ts
index b7f2fc452..9688ce2c7 100644
--- a/packages/forms/src/typings/generic.ts
+++ b/packages/forms/src/typings/generic.ts
@@ -5,6 +5,7 @@ export interface IFormField {
5 showLabel?: boolean; 5 showLabel?: boolean;
6 label?: string; 6 label?: string;
7 error?: string; 7 error?: string;
8 required?: boolean;
8} 9}
9 10
10export interface IWithStyle { 11export interface IWithStyle {