Skip to content
Snippets Groups Projects
Commit b87c1b99 authored by Yannis Barlas's avatar Yannis Barlas
Browse files

prettier rest

parent 07b4c0d9
No related branches found
No related tags found
No related merge requests found
Showing
with 194 additions and 129 deletions
...@@ -3,15 +3,11 @@ import Icon from './Icon' ...@@ -3,15 +3,11 @@ import Icon from './Icon'
import classes from './Attachment.local.scss' import classes from './Attachment.local.scss'
const Attachment = ({ value }) => ( const Attachment = ({ value }) => (
<a <a download={value.name} href={value.url}>
download={value.name}
href={value.url}>
<span className={classes.icon}> <span className={classes.icon}>
<Icon color="var(--color-primary)">paperclip</Icon> <Icon color="var(--color-primary)">paperclip</Icon>
</span> </span>
<span className={classes.filename}> <span className={classes.filename}>{value.name}</span>
{value.name}
</span>
</a> </a>
) )
......
...@@ -4,7 +4,9 @@ import classes from './Badge.local.scss' ...@@ -4,7 +4,9 @@ import classes from './Badge.local.scss'
const Badge = ({ count, label, plural }) => ( const Badge = ({ count, label, plural }) => (
<span className={classes.root}> <span className={classes.root}>
<span className={classes.count}>{count}</span> <span className={classes.count}>{count}</span>
<span className={classes.label}>{plural && count !== 1 ? plural : label}</span> <span className={classes.label}>
{plural && count !== 1 ? plural : label}
</span>
</span> </span>
) )
......
...@@ -2,16 +2,25 @@ import React from 'react' ...@@ -2,16 +2,25 @@ import React from 'react'
import classnames from 'classnames' import classnames from 'classnames'
import classes from './Button.local.scss' import classes from './Button.local.scss'
const Button = ({ className, children, type = 'button', disabled, primary, onClick}) => ( const Button = ({
className,
children,
type = 'button',
disabled,
primary,
onClick,
}) => (
<button <button
className={classnames(className, classes.root, { className={classnames(className, classes.root, {
[classes.disabled]: disabled, [classes.disabled]: disabled,
[classes.primary]: primary [classes.primary]: primary,
})} })}
type={type} type={type}
disabled={disabled} disabled={disabled}
onClick={onClick}>{children}</button> onClick={onClick}
>
{children}
</button>
) )
export default Button export default Button
...@@ -2,10 +2,20 @@ import React from 'react' ...@@ -2,10 +2,20 @@ import React from 'react'
import classnames from 'classnames' import classnames from 'classnames'
import classes from './Checkbox.local.scss' import classes from './Checkbox.local.scss'
const Checkbox = ({ inline, name, value, label, checked, required, onChange }) => ( const Checkbox = ({
<label className={classnames(classes.root, { inline,
[classes.inline]: inline name,
})}> value,
label,
checked,
required,
onChange,
}) => (
<label
className={classnames(classes.root, {
[classes.inline]: inline,
})}
>
<input <input
className={classes.input} className={classes.input}
type="checkbox" type="checkbox"
...@@ -13,7 +23,8 @@ const Checkbox = ({ inline, name, value, label, checked, required, onChange }) = ...@@ -13,7 +23,8 @@ const Checkbox = ({ inline, name, value, label, checked, required, onChange }) =
value={value} value={value}
checked={checked || false} checked={checked || false}
required={required} required={required}
onChange={onChange}/> onChange={onChange}
/>
<span>{label}</span> <span>{label}</span>
</label> </label>
) )
......
...@@ -6,9 +6,7 @@ const extension = ({ name }) => name.replace(/^.+\./, '') ...@@ -6,9 +6,7 @@ const extension = ({ name }) => name.replace(/^.+\./, '')
const File = ({ value }) => ( const File = ({ value }) => (
<div className={classes.root}> <div className={classes.root}>
<div className={classes.icon}> <div className={classes.icon}>
<div className={classes.extension}> <div className={classes.extension}>{extension(value)}</div>
{extension(value)}
</div>
</div> </div>
<div className={classes.name}> <div className={classes.name}>
......
...@@ -10,9 +10,7 @@ const Icon = ({ children, color = 'black', size = 24 }) => { ...@@ -10,9 +10,7 @@ const Icon = ({ children, color = 'black', size = 24 }) => {
// select the icon // select the icon
const icon = icons[name] const icon = icons[name]
return ( return <span className={classes.root}>{icon({ color, size })}</span>
<span className={classes.root}>{icon({ color, size })}</span>
)
} }
export default Icon export default Icon
...@@ -6,25 +6,25 @@ import classes from './Menu.local.scss' ...@@ -6,25 +6,25 @@ import classes from './Menu.local.scss'
// TODO: use a <select> element instead of divs? // TODO: use a <select> element instead of divs?
class Menu extends React.Component { class Menu extends React.Component {
constructor (props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
open: false, open: false,
selected: props.value selected: props.value,
} }
} }
toggleMenu = () => { toggleMenu = () => {
this.setState({ this.setState({
open: !this.state.open open: !this.state.open,
}) })
} }
handleSelect = selected => { handleSelect = selected => {
this.setState({ this.setState({
selected, selected,
open: false open: false,
}) })
this.props.onChange(selected) this.props.onChange(selected)
...@@ -36,24 +36,25 @@ class Menu extends React.Component { ...@@ -36,24 +36,25 @@ class Menu extends React.Component {
return options.find(option => option.value === value).label return options.find(option => option.value === value).label
} }
render () { render() {
const { label, options, placeholder = 'Choose in the list' } = this.props const { label, options, placeholder = 'Choose in the list' } = this.props
const { open, selected } = this.state const { open, selected } = this.state
return ( return (
<div className={classnames(classes.root, { <div
[classes.open]: open className={classnames(classes.root, {
})}> [classes.open]: open,
{label && ( })}
<span className={classes.label}>{label}</span> >
)} {label && <span className={classes.label}>{label}</span>}
<div className={classes.main}> <div className={classes.main}>
<div className={classes.openerContainer}> <div className={classes.openerContainer}>
<button <button
type="button" type="button"
className={classes.opener} className={classes.opener}
onClick={this.toggleMenu}> onClick={this.toggleMenu}
>
{selected ? ( {selected ? (
<span>{this.optionLabel(selected)}</span> <span>{this.optionLabel(selected)}</span>
) : ( ) : (
...@@ -70,10 +71,12 @@ class Menu extends React.Component { ...@@ -70,10 +71,12 @@ class Menu extends React.Component {
<div <div
key={option.value} key={option.value}
className={classnames(classes.option, { className={classnames(classes.option, {
[classes.active]: option.value === selected [classes.active]: option.value === selected,
})} })}
onClick={() => this.handleSelect(option.value)} onClick={() => this.handleSelect(option.value)}
>{option.label || option.value}</div> >
{option.label || option.value}
</div>
))} ))}
</div> </div>
)} )}
......
...@@ -2,13 +2,33 @@ import React from 'react' ...@@ -2,13 +2,33 @@ import React from 'react'
import classnames from 'classnames' import classnames from 'classnames'
import classes from './Radio.local.scss' import classes from './Radio.local.scss'
const inputGradient = color => `radial-gradient(closest-corner at center, ${color} 0%, ${color} 45%, white 45%, white 100%)` const inputGradient = color =>
`radial-gradient(closest-corner at center, ${color} 0%, ${
color
} 45%, white 45%, white 100%)`
const Radio = ({ className, color = 'black', inline, name, value, label, checked, required, onChange }) => ( const Radio = ({
<label className={classnames(classes.root, { className,
[classes.inline]: inline, color = 'black',
[classes.checked]: checked inline,
}, className)} style={{color}}> name,
value,
label,
checked,
required,
onChange,
}) => (
<label
className={classnames(
classes.root,
{
[classes.inline]: inline,
[classes.checked]: checked,
},
className,
)}
style={{ color }}
>
<input <input
className={classes.input} className={classes.input}
type="radio" type="radio"
...@@ -16,10 +36,14 @@ const Radio = ({ className, color = 'black', inline, name, value, label, checked ...@@ -16,10 +36,14 @@ const Radio = ({ className, color = 'black', inline, name, value, label, checked
value={value} value={value}
checked={checked} checked={checked}
required={required} required={required}
onChange={onChange}/> onChange={onChange}
/>
<span <span
className={classes.pseudoInput} className={classes.pseudoInput}
style={{ background: checked ? inputGradient(color) : 'transparent' }}> </span> style={{ background: checked ? inputGradient(color) : 'transparent' }}
>
{' '}
</span>
<span className={classes.label}>{label}</span> <span className={classes.label}>{label}</span>
</label> </label>
) )
......
...@@ -6,11 +6,11 @@ import './Tags.scss' ...@@ -6,11 +6,11 @@ import './Tags.scss'
// TODO: allow tags to be edited // TODO: allow tags to be edited
class Tags extends React.Component { class Tags extends React.Component {
constructor (props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
tags: props.value || [] tags: props.value || [],
} }
} }
...@@ -34,7 +34,7 @@ class Tags extends React.Component { ...@@ -34,7 +34,7 @@ class Tags extends React.Component {
this.props.onChange(tags) this.props.onChange(tags)
} }
render () { render() {
const { tags } = this.state const { tags } = this.state
const { name, suggestions, placeholder } = this.props const { name, suggestions, placeholder } = this.props
...@@ -50,7 +50,8 @@ class Tags extends React.Component { ...@@ -50,7 +50,8 @@ class Tags extends React.Component {
// delimiters={[]} // delimiters={[]}
// delimiterChars={[',', ';']} // delimiterChars={[',', ';']}
handleDelete={this.handleDelete} handleDelete={this.handleDelete}
handleAddition={this.handleAddition}/> handleAddition={this.handleAddition}
/>
) )
} }
} }
......
import React from 'react' import React from 'react'
import classes from './TextField.local.scss' import classes from './TextField.local.scss'
const TextField = ({ label, name, placeholder, required, type = 'text', value = '', onBlur, onChange }) => ( const TextField = ({
label,
name,
placeholder,
required,
type = 'text',
value = '',
onBlur,
onChange,
}) => (
<label className={classes.root}> <label className={classes.root}>
{label && <span className={classes.text}>{label}</span>} {label && <span className={classes.text}>{label}</span>}
<input <input
...@@ -12,7 +21,8 @@ const TextField = ({ label, name, placeholder, required, type = 'text', value = ...@@ -12,7 +21,8 @@ const TextField = ({ label, name, placeholder, required, type = 'text', value =
placeholder={placeholder} placeholder={placeholder}
required={required} required={required}
onBlur={onBlur} onBlur={onBlur}
onChange={onChange}/> onChange={onChange}
/>
</label> </label>
) )
......
...@@ -7,22 +7,17 @@ const extension = ({ name }) => name.replace(/^.+\./, '') ...@@ -7,22 +7,17 @@ const extension = ({ name }) => name.replace(/^.+\./, '')
const UploadingFile = ({ file, error, progress }) => ( const UploadingFile = ({ file, error, progress }) => (
<div className={classes.root}> <div className={classes.root}>
{!!error && ( {!!error && <div className={classes.error}>{error}</div>}
<div className={classes.error}>
{error}
</div>
)}
<div className={classes.icon}> <div className={classes.icon}>
{!!progress && ( {!!progress && (
<div <div
className={classes.progress} className={classes.progress}
style={{ top: (progress * 100) + '%' }}/> style={{ top: progress * 100 + '%' }}
/>
)} )}
<div className={classes.extension}> <div className={classes.extension}>{extension(file)}</div>
{extension(file)}
</div>
</div> </div>
<div className={classes.name}>{file.name}</div> <div className={classes.name}>{file.name}</div>
......
...@@ -10,30 +10,31 @@ const ValidatedFieldComponent = ({ component }) => ({ meta, input }) => ( ...@@ -10,30 +10,31 @@ const ValidatedFieldComponent = ({ component }) => ({ meta, input }) => (
<div> <div>
{component(input)} {component(input)}
{meta.touched && (meta.error || meta.warning) && ( {meta.touched &&
<div className={classes.messages}> (meta.error || meta.warning) && (
{meta.error && ( <div className={classes.messages}>
<div className={classnames(classes.message, classes.error)}> {meta.error && (
{meta.error} <div className={classnames(classes.message, classes.error)}>
</div> {meta.error}
)} </div>
)}
{meta.warning && ( {meta.warning && (
<div className={classnames(classes.message, classes.warning)}> <div className={classnames(classes.message, classes.warning)}>
{meta.warning} {meta.warning}
</div> </div>
)} )}
</div> </div>
)} )}
</div> </div>
) )
const ValidatedField = ({ fieldComponent, ...rest }) => ( const ValidatedField = ({ fieldComponent, ...rest }) => (
<Field {...rest} component={fieldComponent}/> <Field {...rest} component={fieldComponent} />
) )
export default compose( export default compose(
withHandlers({ withHandlers({
fieldComponent: ValidatedFieldComponent fieldComponent: ValidatedFieldComponent,
}) }),
)(ValidatedField) )(ValidatedField)
...@@ -6,8 +6,12 @@ import Icon from '../atoms/Icon' ...@@ -6,8 +6,12 @@ import Icon from '../atoms/Icon'
const AppBar = ({ brandLink, brandName, loginLink, logoutLink, userName }) => ( const AppBar = ({ brandLink, brandName, loginLink, logoutLink, userName }) => (
<div className={classes.root}> <div className={classes.root}>
<Link to={brandLink || '/'} <Link
className={classnames(classes.link, classes.logo)}>{brandName}</Link> to={brandLink || '/'}
className={classnames(classes.link, classes.logo)}
>
{brandName}
</Link>
<div> <div>
{userName && ( {userName && (
...@@ -18,11 +22,16 @@ const AppBar = ({ brandLink, brandName, loginLink, logoutLink, userName }) => ( ...@@ -18,11 +22,16 @@ const AppBar = ({ brandLink, brandName, loginLink, logoutLink, userName }) => (
)} )}
{userName ? ( {userName ? (
<Link to={logoutLink} <Link
className={classnames(classes.item, classes.link)}>logout</Link> to={logoutLink}
className={classnames(classes.item, classes.link)}
>
logout
</Link>
) : ( ) : (
<Link to={loginLink} <Link to={loginLink} className={classnames(classes.item, classes.link)}>
className={classnames(classes.item, classes.link)}>login</Link> login
</Link>
)} )}
</div> </div>
</div> </div>
......
...@@ -15,14 +15,10 @@ const Attachments = props => ( ...@@ -15,14 +15,10 @@ const Attachments = props => (
<span className={classes.icon}> <span className={classes.icon}>
<Icon color="var(--color-primary)">paperclip</Icon> <Icon color="var(--color-primary)">paperclip</Icon>
</span> </span>
<span className={classes.filename}> <span className={classes.filename}>{error ? error : 'Uploading…'}</span>
{error ? error : 'Uploading…'}
</span>
</div> </div>
)} )}
uploadedFile={value => ( uploadedFile={value => <Attachment key={value.url} value={value} />}
<Attachment key={value.url} value={value}/>
)}
/> />
) )
......
...@@ -3,12 +3,12 @@ import classes from './Files.local.scss' ...@@ -3,12 +3,12 @@ import classes from './Files.local.scss'
import Upload from './Upload' import Upload from './Upload'
class Files extends React.Component { class Files extends React.Component {
constructor (props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
values: props.value || [], values: props.value || [],
uploads: [] uploads: [],
} }
} }
...@@ -22,7 +22,7 @@ class Files extends React.Component { ...@@ -22,7 +22,7 @@ class Files extends React.Component {
Array.from(event.target.files).forEach(file => { Array.from(event.target.files).forEach(file => {
uploads.push({ uploads.push({
file, file,
request: this.props.uploadFile(file) request: this.props.uploadFile(file),
}) })
}) })
...@@ -32,7 +32,7 @@ class Files extends React.Component { ...@@ -32,7 +32,7 @@ class Files extends React.Component {
handleUploadedFile = ({ file, url }) => { handleUploadedFile = ({ file, url }) => {
const values = this.state.values.concat({ const values = this.state.values.concat({
name: file.name, name: file.name,
url url,
}) })
const uploads = this.state.uploads.filter(item => { const uploads = this.state.uploads.filter(item => {
...@@ -44,7 +44,7 @@ class Files extends React.Component { ...@@ -44,7 +44,7 @@ class Files extends React.Component {
this.props.onChange(values) this.props.onChange(values)
} }
render () { render() {
const { name, buttonText, uploadingFile, uploadedFile } = this.props const { name, buttonText, uploadingFile, uploadedFile } = this.props
const { values, uploads } = this.state const { values, uploads } = this.state
...@@ -54,7 +54,8 @@ class Files extends React.Component { ...@@ -54,7 +54,8 @@ class Files extends React.Component {
<button <button
type="button" type="button"
className={classes.attach} className={classes.attach}
onClick={() => this.fileInput.click()}> onClick={() => this.fileInput.click()}
>
{buttonText} {buttonText}
</button> </button>
...@@ -64,19 +65,21 @@ class Files extends React.Component { ...@@ -64,19 +65,21 @@ class Files extends React.Component {
type="file" type="file"
name={name} name={name}
multiple multiple
onChange={this.handleChange}/> onChange={this.handleChange}
/>
</div> </div>
<div className={classes.files}> <div className={classes.files}>
{uploads && uploads.map(upload => ( {uploads &&
<Upload uploads.map(upload => (
key={upload.file.name} <Upload
file={upload.file} key={upload.file.name}
request={upload.request} file={upload.file}
handleUploadedFile={this.handleUploadedFile} request={upload.request}
render={uploadingFile} handleUploadedFile={this.handleUploadedFile}
/> render={uploadingFile}
))} />
))}
{values && values.map(uploadedFile)} {values && values.map(uploadedFile)}
</div> </div>
......
...@@ -3,14 +3,23 @@ import classnames from 'classnames' ...@@ -3,14 +3,23 @@ import classnames from 'classnames'
import Button from '../atoms/Button' import Button from '../atoms/Button'
import classes from './PlainButton.local.scss' import classes from './PlainButton.local.scss'
const PlainButton = ({ className, children, type, disabled, primary, onClick }) => ( const PlainButton = ({
className,
children,
type,
disabled,
primary,
onClick,
}) => (
<Button <Button
className={classnames(classes.root, className)} className={classnames(classes.root, className)}
type={type} type={type}
primary={primary} primary={primary}
disabled={disabled} disabled={disabled}
onClick={onClick}>{children}</Button> onClick={onClick}
>
{children}
</Button>
) )
export default PlainButton export default PlainButton
...@@ -2,11 +2,11 @@ import React from 'react' ...@@ -2,11 +2,11 @@ import React from 'react'
import Radio from '../atoms/Radio' import Radio from '../atoms/Radio'
class RadioGroup extends React.Component { class RadioGroup extends React.Component {
constructor (props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
value: props.value value: props.value,
} }
} }
...@@ -18,7 +18,7 @@ class RadioGroup extends React.Component { ...@@ -18,7 +18,7 @@ class RadioGroup extends React.Component {
this.props.onChange(value) this.props.onChange(value)
} }
render () { render() {
const { inline, name, options, required } = this.props const { inline, name, options, required } = this.props
const { value } = this.state const { value } = this.state
...@@ -34,7 +34,8 @@ class RadioGroup extends React.Component { ...@@ -34,7 +34,8 @@ class RadioGroup extends React.Component {
label={option.label} label={option.label}
color={option.color} color={option.color}
checked={option.value === value} checked={option.value === value}
onChange={this.handleChange}/> onChange={this.handleChange}
/>
))} ))}
</div> </div>
) )
......
...@@ -12,13 +12,11 @@ const Supplementary = props => ( ...@@ -12,13 +12,11 @@ const Supplementary = props => (
key={file.name} key={file.name}
file={file} file={file}
progress={progress} progress={progress}
error={error}/> error={error}
/>
)} )}
uploadedFile={value => ( uploadedFile={value => <File key={value.url} value={value} />}
<File />
key={value.url}
value={value}/>
)}/>
) )
export default Supplementary export default Supplementary
...@@ -9,7 +9,7 @@ class Upload extends React.Component { ...@@ -9,7 +9,7 @@ class Upload extends React.Component {
error: undefined, error: undefined,
} }
componentDidMount () { componentDidMount() {
const { request } = this.props const { request } = this.props
request.addEventListener('progress', this.handleProgress) request.addEventListener('progress', this.handleProgress)
...@@ -23,40 +23,40 @@ class Upload extends React.Component { ...@@ -23,40 +23,40 @@ class Upload extends React.Component {
if (!event.lengthComputable) return if (!event.lengthComputable) return
this.setState({ this.setState({
progress: event.loaded / event.total progress: event.loaded / event.total,
}) })
} }
handleLoad = event => { handleLoad = event => {
if (this.props.request.status === 200) { if (this.props.request.status === 200) {
this.setState({ this.setState({
progress: 1 progress: 1,
}) })
this.props.handleUploadedFile({ this.props.handleUploadedFile({
file: this.props.file, file: this.props.file,
url: this.props.request.responseText url: this.props.request.responseText,
}) })
} else { } else {
this.setState({ this.setState({
error: 'There was an error' error: 'There was an error',
}) })
} }
} }
handleError = event => { handleError = event => {
this.setState({ this.setState({
error: 'There was an error' error: 'There was an error',
}) })
} }
handleAbort = event => { handleAbort = event => {
this.setState({ this.setState({
error: 'The upload was cancelled' error: 'The upload was cancelled',
}) })
} }
render () { render() {
const { file, render } = this.props const { file, render } = this.props
const { progress, error } = this.state const { progress, error } = this.state
......
...@@ -5,12 +5,12 @@ import classes from './YesOrNo.local.scss' ...@@ -5,12 +5,12 @@ import classes from './YesOrNo.local.scss'
const options = [ const options = [
{ {
value: 'yes', value: 'yes',
label: 'Yes' label: 'Yes',
}, },
{ {
value: 'no', value: 'no',
label: 'No' label: 'No',
} },
] ]
const YesOrNo = ({ name, value, required, onChange }) => ( const YesOrNo = ({ name, value, required, onChange }) => (
...@@ -21,7 +21,8 @@ const YesOrNo = ({ name, value, required, onChange }) => ( ...@@ -21,7 +21,8 @@ const YesOrNo = ({ name, value, required, onChange }) => (
value={value} value={value}
required={required} required={required}
inline={true} inline={true}
onChange={onChange}/> onChange={onChange}
/>
) )
export default YesOrNo export default YesOrNo
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment