From a6233863da4203bec781e817963ac3733279cab5 Mon Sep 17 00:00:00 2001
From: Armand Philippot <git@armandphilippot.com>
Date: Mon, 17 Jan 2022 22:26:16 +0100
Subject: refactor(settings): make toggle reusable

Toggle will be used for others settings so I extract the functionnality
from ThemeToggle.
---
 src/components/Form/Toggle/Toggle.tsx | 46 +++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 src/components/Form/Toggle/Toggle.tsx

(limited to 'src/components/Form/Toggle/Toggle.tsx')

diff --git a/src/components/Form/Toggle/Toggle.tsx b/src/components/Form/Toggle/Toggle.tsx
new file mode 100644
index 0000000..36636e4
--- /dev/null
+++ b/src/components/Form/Toggle/Toggle.tsx
@@ -0,0 +1,46 @@
+import { FormEvent, ReactElement } from 'react';
+import { Form } from '..';
+import styles from './Toggle.module.scss';
+
+const Toggle = ({
+  id,
+  label,
+  value,
+  changeHandler,
+  leftChoice,
+  rightChoice,
+  name,
+}: {
+  id: string;
+  label: string;
+  value: boolean;
+  changeHandler: (value: boolean) => void;
+  leftChoice: ReactElement | string;
+  rightChoice: ReactElement | string;
+  name?: string;
+}) => {
+  const onSubmit = (e: FormEvent) => {
+    e.preventDefault();
+  };
+
+  return (
+    <Form modifier="toggle" submitHandler={onSubmit}>
+      <input
+        className={styles.checkbox}
+        type="checkbox"
+        id={id}
+        name={name ? name : id}
+        checked={value}
+        onChange={() => changeHandler(!value)}
+      />
+      <label htmlFor={id} className={styles.label}>
+        <span className={styles.title}>{label}</span>
+        {leftChoice}
+        <span className={styles.toggle}></span>
+        {rightChoice}
+      </label>
+    </Form>
+  );
+};
+
+export default Toggle;
-- 
cgit v1.2.3

