diff --git a/src/components/atoms/Form/FormHelp.module.scss b/src/components/atoms/Form/Help.module.scss
similarity index 100%
rename from src/components/atoms/Form/FormHelp.module.scss
rename to src/components/atoms/Form/Help.module.scss
diff --git a/src/components/atoms/Form/FormHelp.test.js b/src/components/atoms/Form/Help.test.js
similarity index 68%
rename from src/components/atoms/Form/FormHelp.test.js
rename to src/components/atoms/Form/Help.test.js
index a82f58d..a74e15d 100644
--- a/src/components/atoms/Form/FormHelp.test.js
+++ b/src/components/atoms/Form/Help.test.js
@@ -1,12 +1,12 @@
import React from 'react'
import ReactDOM from 'react-dom'
-import FormHelp from './FormHelp'
+import Help from './Help'
it('FormHelp renders without crashing', () => {
const div = document.createElement('div')
ReactDOM.render(
- Price of your data set asset in Ocean Tokens. ,
+ Price of your data set asset in Ocean Tokens. ,
div
)
ReactDOM.unmountComponentAtNode(div)
diff --git a/src/components/atoms/Form/FormHelp.tsx b/src/components/atoms/Form/Help.tsx
similarity index 78%
rename from src/components/atoms/Form/FormHelp.tsx
rename to src/components/atoms/Form/Help.tsx
index ea4d739..f2af9f8 100644
--- a/src/components/atoms/Form/FormHelp.tsx
+++ b/src/components/atoms/Form/Help.tsx
@@ -1,5 +1,5 @@
import React from 'react'
-import styles from './FormHelp.module.scss'
+import styles from './Help.module.scss'
const FormHelp = ({ children }: { children: string }) => (
{children}
diff --git a/src/components/atoms/Form/FormInput.module.scss b/src/components/atoms/Form/Input.module.scss
similarity index 76%
rename from src/components/atoms/Form/FormInput.module.scss
rename to src/components/atoms/Form/Input.module.scss
index bd363ac..6367903 100644
--- a/src/components/atoms/Form/FormInput.module.scss
+++ b/src/components/atoms/Form/Input.module.scss
@@ -1,10 +1,10 @@
-@import '../../styles/variables';
+@import '../../../styles/variables';
.formGroup {
margin-bottom: $spacer;
}
-.input-wrap {
+.inputWrap {
background: $brand-gradient;
border-radius: $border-radius;
width: 100%;
@@ -12,10 +12,6 @@
display: flex;
position: relative;
- &.is-focused {
- background: $brand-black;
- }
-
.is-dimmed & {
background: $brand-grey-lighter;
@@ -25,7 +21,14 @@
}
}
-.input-wrap-search {
+.isFocused {
+ composes: inputWrap;
+ background: $brand-black;
+}
+
+.inputWrapSearch {
+ composes: inputWrap;
+
.input {
padding-left: $spacer * 1.25;
}
@@ -92,8 +95,29 @@
// }
}
-// stylelint-disable-next-line
-select.input {
+.label {
+ color: $brand-grey;
+ font-size: $font-size-base;
+ font-family: $font-family-title;
+ line-height: 1.2;
+ display: block;
+ margin-bottom: $spacer / 6;
+}
+
+.required {
+ composes: label;
+
+ &:after {
+ content: '*';
+ font-size: $font-size-base;
+ color: $brand-grey-light;
+ display: inline-block;
+ margin-left: .1rem;
+ }
+}
+
+.select {
+ composes: input;
height: 43px;
padding-right: 3rem;
border: 0;
@@ -118,45 +142,12 @@ select.input {
outline: 0;
font-family: $font-family-base;
}
- // stylelint-disable
- .is-dimmed & {
- background-image: linear-gradient(
- 45deg,
- transparent 50%,
- $brand-grey-light 50%
- ),
- linear-gradient(135deg, $brand-grey-light 50%, transparent 50%),
- linear-gradient(
- to right,
- $brand-grey-lighter 1px,
- lighten($brand-grey-lighter, 5%) 2px,
- lighten($brand-grey-lighter, 5%)
- );
- }
- // stylelint-enable
-}
-
-.label {
- color: $brand-grey;
- font-size: $font-size-base;
- font-family: $font-family-title;
- line-height: 1.2;
- display: block;
- margin-bottom: $spacer / 6;
-
- &.is-required {
- &:after {
- content: '*';
- font-size: $font-size-base;
- color: $brand-grey-light;
- display: inline-block;
- margin-left: .1rem;
- }
- }
}
// Size modifiers
-.input-sm {
+
+.inputSmall {
+ composes: input;
font-size: $font-size-small;
min-height: 32px;
padding: $spacer / 4;
@@ -166,8 +157,8 @@ select.input {
}
}
-// stylelint-disable-next-line
-select.input-sm {
+.selectSmall {
+ composes: select;
height: 32px;
padding-right: 2rem;
diff --git a/src/components/atoms/Form/FormInput.tsx b/src/components/atoms/Form/Input.tsx
similarity index 50%
rename from src/components/atoms/Form/FormInput.tsx
rename to src/components/atoms/Form/Input.tsx
index ae279e9..7034e0c 100644
--- a/src/components/atoms/Form/FormInput.tsx
+++ b/src/components/atoms/Form/Input.tsx
@@ -1,48 +1,51 @@
import React, { PureComponent } from 'react'
-import { ReactComponent as SearchIcon } from '../../../svg/search.svg'
-import FormHelp from './FormHelp'
-import styles from './FormInput.module.scss'
+// import { ReactComponent as SearchIcon } from '../../../svg/search.svg'
+import Help from './Help'
+import styles from './Input.module.scss'
-interface IFormInputProps {
+interface IInputProps {
name: string
label: string
- placeholder: string
+ placeholder?: string
required?: boolean
help?: string
tag?: string
- type: string
+ type?: string
small?: boolean
additionalComponent?: void
}
-interface IFormInputState {
+interface IInputState {
isFocused: boolean
}
-export default class FormInput extends PureComponent<
- IFormInputProps,
- IFormInputState
-> {
- public state: IFormInputState = { isFocused: false }
+const Tag = ({ ...props }) => {
+ if (props.tag && props.tag === 'select') {
+ return
+ } else if (props.tag && props.tag === 'textarea') {
+ return
+ } else {
+ return
+ }
+}
+
+export default class Input extends PureComponent {
+ public state: IInputState = { isFocused: false }
public inputWrapClasses() {
if (this.props.type === 'search') {
- return 'input-wrap input-wrap-search'
+ return styles.inputWrapSearch
} else if (this.props.type === 'search' && this.state.isFocused) {
return 'input-wrap input-wrap-search is-focused'
} else if (this.state.isFocused && this.props.type !== 'search') {
- return 'input-wrap is-focused'
+ return styles.isFocused
} else {
- return 'input-wrap'
+ return styles.inputWrap
}
}
- public handleBlur() {
- this.setState({ isFocused: true })
- }
-
- public handleFocus() {
- this.setState({ isFocused: false })
+ public toggleFocus = () => {
+ this.setState({ isFocused: !this.state.isFocused })
}
public render() {
@@ -53,7 +56,9 @@ export default class FormInput extends PureComponent<
type,
help,
small,
+ tag,
additionalComponent,
+ children,
...props
} = this.props
@@ -61,25 +66,27 @@ export default class FormInput extends PureComponent<
{label}
-
- {type === 'search' && }
+ onFocus={this.toggleFocus}
+ onBlur={this.toggleFocus}
+ >
+ {children}
+
+ {/* {type === 'search' && } */}
- {help &&
{help} }
+ {help &&
{help} }
{additionalComponent && additionalComponent}
diff --git a/src/pages/Home.module.scss b/src/pages/Home.module.scss
index 824db4f..5f1bb57 100644
--- a/src/pages/Home.module.scss
+++ b/src/pages/Home.module.scss
@@ -8,9 +8,25 @@
align-items: center;
justify-content: center;
flex-wrap: wrap;
+ padding-top: 4rem;
+ padding-bottom: 4rem;
> div {
text-align: center;
width: 100%;
}
}
+
+.form {
+ width: 100%;
+ background: $brand-grey-lighter;
+ margin: 0 auto;
+ max-width: 40rem;
+ padding: $spacer;
+ margin-top: 4rem;
+
+ fieldset {
+ border: 0;
+ padding: 0;
+ }
+}
diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx
index 6560f21..6bdb689 100644
--- a/src/pages/Home.tsx
+++ b/src/pages/Home.tsx
@@ -1,5 +1,6 @@
import React, { Component } from 'react'
import Button from '../components/atoms/Button'
+import Input from '../components/atoms/Form/Input'
import styles from './Home.module.scss'
class Home extends Component {
@@ -13,6 +14,47 @@ class Home extends Component {
I am a link disguised as a button
+
+
)
}