From 6ae8322144baba12aea6f2433991cfe8565f68e1 Mon Sep 17 00:00:00 2001 From: Siklos Date: Thu, 11 Aug 2022 13:20:57 +0200 Subject: [PATCH] Add toggle button to disable / enable dynamic update --- src/Components/Properties/Properties.tsx | 84 +++++++++---------- src/Components/ToggleButton/ToggleButton.scss | 8 ++ src/Components/ToggleButton/ToggleButton.tsx | 52 ++++++++++++ 3 files changed, 100 insertions(+), 44 deletions(-) create mode 100644 src/Components/ToggleButton/ToggleButton.scss create mode 100644 src/Components/ToggleButton/ToggleButton.tsx diff --git a/src/Components/Properties/Properties.tsx b/src/Components/Properties/Properties.tsx index 9c90705..cf87e5b 100644 --- a/src/Components/Properties/Properties.tsx +++ b/src/Components/Properties/Properties.tsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; import ContainerProperties from '../../Interfaces/Properties'; +import { ToggleButton } from '../ToggleButton/ToggleButton'; import { INPUT_TYPES } from './PropertiesInputTypes'; interface IPropertiesProps { @@ -9,12 +10,12 @@ interface IPropertiesProps { } export const Properties: React.FC = (props: IPropertiesProps) => { + const [isDynamicInput, setIsDynamicInput] = useState(false); + if (props.properties === undefined) { return
; } - const [isDynamicInput, setIsDynamicInput] = useState(true); - const groupInput: React.ReactNode[] = []; const refs: Array> = []; Object @@ -36,10 +37,12 @@ export const Properties: React.FC = (props: IPropertiesProps) return (
- { setIsDynamicInput(!isDynamicInput); }} + setIsDynamicInput(!isDynamicInput)} /> { form }
@@ -70,52 +73,45 @@ const handleProperties = ( refs.push(ref); const isDisabled = ['id', 'parentId'].includes(key); - if (isDynamicInput) { - groupInput.push( -
- - { - if (type === 'checkbox') { - onChange(key, event.target.checked); - return; - } - onChange(key, event.target.value); - }} - disabled={isDisabled} - /> -
- ); - return; - } + type={type} + id={key} + ref={ref} + value={value} + checked={checked} + onChange={(event) => { + if (type === 'checkbox') { + onChange(key, event.target.checked); + return; + } + onChange(key, event.target.value); + }} + disabled={isDisabled} + /> + : ; - /// groupInput.push(
- - + + {input}
); }; diff --git a/src/Components/ToggleButton/ToggleButton.scss b/src/Components/ToggleButton/ToggleButton.scss new file mode 100644 index 0000000..0948f52 --- /dev/null +++ b/src/Components/ToggleButton/ToggleButton.scss @@ -0,0 +1,8 @@ +input:checked ~ .dot { + transform: translateX(100%); +} +input:checked ~ .line { + background-color: #3B82F6; +} + + diff --git a/src/Components/ToggleButton/ToggleButton.tsx b/src/Components/ToggleButton/ToggleButton.tsx new file mode 100644 index 0000000..198bf99 --- /dev/null +++ b/src/Components/ToggleButton/ToggleButton.tsx @@ -0,0 +1,52 @@ +import React, { FC } from 'react'; +import './ToggleButton.scss'; + +interface IToggleButtonProps { + id: string + text: string + type?: TOGGLE_TYPE + title: string + checked: boolean + onChange: React.ChangeEventHandler +} + +export enum TOGGLE_TYPE { + MATERIAL, + IOS +} + +export const ToggleButton: FC = (props) => { + const id = `toggle-${props.id}`; + const type = props.type ?? TOGGLE_TYPE.MATERIAL; + let classLine = 'line w-10 h-4 bg-gray-400 rounded-full shadow-inner'; + let classDot = 'dot absolute w-6 h-6 bg-white rounded-full shadow -left-1 -top-1 transition'; + if (type === TOGGLE_TYPE.IOS) { + classLine = 'line block bg-gray-600 w-14 h-8 rounded-full'; + classDot = 'dot absolute left-1 top-1 bg-white w-6 h-6 rounded-full transition'; + } + + return ( +
+
+ +
+
+ ); +};