aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/components/fields
diff options
context:
space:
mode:
authorEmiliano Ciavatta2020-09-23 21:16:58 +0000
committerEmiliano Ciavatta2020-09-23 21:16:58 +0000
commit05678b74d98247c957faa1ca3d0bafc5f68974d1 (patch)
tree05a539466f0c91bced4d93bec2cb20e4325274b2 /frontend/src/components/fields
parent04ee54be31931111bf89e50e4e54ac92b9a19d7a (diff)
Add BooleanField
Diffstat (limited to 'frontend/src/components/fields')
-rw-r--r--frontend/src/components/fields/BooleanField.js37
-rw-r--r--frontend/src/components/fields/BooleanField.scss34
-rw-r--r--frontend/src/components/fields/StringField.js16
-rw-r--r--frontend/src/components/fields/StringField.scss2
4 files changed, 83 insertions, 6 deletions
diff --git a/frontend/src/components/fields/BooleanField.js b/frontend/src/components/fields/BooleanField.js
new file mode 100644
index 0000000..06a6da7
--- /dev/null
+++ b/frontend/src/components/fields/BooleanField.js
@@ -0,0 +1,37 @@
+import React, {Component} from 'react';
+import './BooleanField.scss';
+import {randomClassName} from "../../utils";
+
+const classNames = require('classnames');
+
+class BooleanField extends Component {
+
+ constructor(props) {
+ super(props);
+
+ this.id = `field-${this.props.name || "noname"}-${randomClassName()}`;
+ }
+
+ render() {
+
+ const checked = this.props.checked || false;
+ const small = this.props.small || false;
+ const name = this.props.name || null;
+ const handler = () => {
+ if (this.props.onChange) {
+ this.props.onChange(!checked);
+ }
+ };
+
+ return (
+ <div className={classNames( "boolean-field", {"field-checked" : checked}, {"field-small": small})}>
+ <div className="field-input">
+ <input type="checkbox" id={this.id} checked={checked} onChange={handler} />
+ <label htmlFor={this.id}>{(checked ? "✓ " : "✗ ") + name}</label>
+ </div>
+ </div>
+ );
+ }
+}
+
+export default BooleanField;
diff --git a/frontend/src/components/fields/BooleanField.scss b/frontend/src/components/fields/BooleanField.scss
new file mode 100644
index 0000000..6ec25f7
--- /dev/null
+++ b/frontend/src/components/fields/BooleanField.scss
@@ -0,0 +1,34 @@
+@import '../../colors.scss';
+
+.boolean-field {
+ font-size: 0.9em;
+
+ .field-input {
+ border-radius: 5px;
+ width: fit-content;
+ background-color: $color-primary-2;
+
+ input {
+ display: none;
+ }
+
+ label {
+ margin: 0;
+ padding: 6px 15px;
+ cursor: pointer;
+ }
+
+ &:hover {
+ background-color: $color-primary-1;
+ }
+ }
+
+ &.field-checked .field-input {
+ background-color: $color-primary-4 !important;
+ color: $color-primary-3;
+ }
+
+ &.field-small {
+ font-size: 0.8em;
+ }
+}
diff --git a/frontend/src/components/fields/StringField.js b/frontend/src/components/fields/StringField.js
index aa23fe8..7781b2d 100644
--- a/frontend/src/components/fields/StringField.js
+++ b/frontend/src/components/fields/StringField.js
@@ -6,8 +6,14 @@ const classNames = require('classnames');
class StringField extends Component {
+ constructor(props) {
+ super(props);
+
+ this.id = `field-${this.props.name || "noname"}-${randomClassName()}`;
+ }
+
render() {
- const id = `field-${this.props.name || "noname"}-${randomClassName()}`;
+
const active = this.props.active || false;
const invalid = this.props.invalid || false;
const small = this.props.small || false;
@@ -27,18 +33,18 @@ class StringField extends Component {
};
return (
- <div className={classNames("field", "string-field", {"field-active" : active},
- {"field-invalid": invalid}, {"field-small": small}, {"field-inline": inline})}>
+ <div className={classNames("string-field", {"field-active" : active}, {"field-invalid": invalid},
+ {"field-small": small}, {"field-inline": inline})}>
<div className="field-wrapper">
{ name &&
<div className="field-name">
- <label id={id}>{name}:</label>
+ <label id={this.id}>{name}:</label>
</div>
}
<div className="field-input">
<div className="field-value">
<input type={type} placeholder={this.props.defaultValue} aria-label={name}
- aria-describedby={id} onChange={handler} value={value} />
+ aria-describedby={this.id} onChange={handler} value={value} />
</div>
{ value !== "" &&
<div className="field-clear">
diff --git a/frontend/src/components/fields/StringField.scss b/frontend/src/components/fields/StringField.scss
index 674815f..2523c8d 100644
--- a/frontend/src/components/fields/StringField.scss
+++ b/frontend/src/components/fields/StringField.scss
@@ -1,6 +1,6 @@
@import '../../colors.scss';
-.field {
+.string-field {
font-size: 0.9em;
.field-name {