aboutsummaryrefslogtreecommitdiffstats
path: root/public/projects/react-small-apps/apps/meme-generator/src/components/commons
diff options
context:
space:
mode:
Diffstat (limited to 'public/projects/react-small-apps/apps/meme-generator/src/components/commons')
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Button.js11
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Fieldset.js10
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Form.js21
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Input.js41
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/InputRange.js37
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Option.js5
-rw-r--r--public/projects/react-small-apps/apps/meme-generator/src/components/commons/Select.js31
7 files changed, 156 insertions, 0 deletions
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Button.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Button.js
new file mode 100644
index 0000000..98967a8
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Button.js
@@ -0,0 +1,11 @@
+function Button({ body, modifier, onClick }) {
+ const classNames = `btn ${modifier ? `btn--${modifier}` : ""}`;
+
+ return (
+ <button className={classNames} onClick={onClick}>
+ {body}
+ </button>
+ );
+}
+
+export default Button;
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Fieldset.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Fieldset.js
new file mode 100644
index 0000000..d76e3e7
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Fieldset.js
@@ -0,0 +1,10 @@
+function Fieldset({ children, legend = "Legend" }) {
+ return (
+ <fieldset className="form__fieldset">
+ <legend className="form__legend">{legend}</legend>
+ {children}
+ </fieldset>
+ );
+}
+
+export default Fieldset;
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Form.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Form.js
new file mode 100644
index 0000000..5ab1948
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Form.js
@@ -0,0 +1,21 @@
+function Form({
+ children,
+ action = "#",
+ method = "post",
+ styles,
+ onSubmitHandler,
+}) {
+ return (
+ <form
+ action={action}
+ method={method}
+ onSubmit={onSubmitHandler}
+ className="form"
+ style={styles}
+ >
+ {children}
+ </form>
+ );
+}
+
+export default Form;
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Input.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Input.js
new file mode 100644
index 0000000..68e4e77
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Input.js
@@ -0,0 +1,41 @@
+import { forwardRef } from "react";
+
+function Input(
+ {
+ label,
+ id,
+ name,
+ type = "text",
+ value,
+ onChangeHandler,
+ onBlurHandler,
+ additionalClasses = "",
+ },
+ ref
+) {
+ const classNames = `form__input ${additionalClasses}`;
+
+ return (
+ <>
+ {label ? (
+ <label className="form__label" htmlFor={id}>
+ {label}
+ </label>
+ ) : (
+ ""
+ )}
+ <input
+ id={id}
+ name={name}
+ ref={ref}
+ type={type}
+ value={value}
+ onChange={onChangeHandler}
+ onBlur={onBlurHandler}
+ className={classNames}
+ />
+ </>
+ );
+}
+
+export default forwardRef(Input);
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/InputRange.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/InputRange.js
new file mode 100644
index 0000000..1172966
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/InputRange.js
@@ -0,0 +1,37 @@
+function InputRange({
+ label,
+ id,
+ name,
+ min = 5,
+ max = 200,
+ step = 1,
+ unit = "px",
+ value,
+ onChangeHandler,
+}) {
+ return (
+ <>
+ {label ? (
+ <label className="form__label" htmlFor={id}>
+ {label}
+ </label>
+ ) : (
+ ""
+ )}
+ <input
+ type="range"
+ id={id}
+ name={name}
+ min={min}
+ max={max}
+ step={step}
+ value={value}
+ onChange={onChangeHandler}
+ title={`${value}${unit}`}
+ className="form__input form__input--range"
+ />
+ </>
+ );
+}
+
+export default InputRange;
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Option.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Option.js
new file mode 100644
index 0000000..4064798
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Option.js
@@ -0,0 +1,5 @@
+function Option({ value, body }) {
+ return <option value={value}>{body}</option>;
+}
+
+export default Option;
diff --git a/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Select.js b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Select.js
new file mode 100644
index 0000000..9517b23
--- /dev/null
+++ b/public/projects/react-small-apps/apps/meme-generator/src/components/commons/Select.js
@@ -0,0 +1,31 @@
+import Option from "./Option";
+
+function Select({ id, name, label, options, value, onChangeHandler }) {
+ const optionsList = options.map((option) => {
+ const optionValue = option.replace(" ", "-");
+ return <Option key={optionValue} value={optionValue} body={option} />;
+ });
+
+ return (
+ <>
+ {label ? (
+ <label className="form__label" htmlFor={id}>
+ {label}
+ </label>
+ ) : (
+ ""
+ )}
+ <select
+ id={id}
+ name={name}
+ className="form__select"
+ value={value}
+ onChange={onChangeHandler}
+ >
+ {optionsList}
+ </select>
+ </>
+ );
+}
+
+export default Select;