import { ChangeEvent, FormEvent, useState, useEffect } from 'react'; // Redux import { useDispatch, useSelector } from 'react-redux'; import { bindActionCreators } from 'redux'; import { actionCreators } from '../../../../store'; import { State } from '../../../../store/reducers'; // UI import { Button, InputGroup, ModalForm } from '../../../UI'; import classes from './ThemeCreator.module.css'; // Other import { Theme } from '../../../../interfaces'; interface Props { modalHandler: () => void; } export const ThemeCreator = ({ modalHandler }: Props): JSX.Element => { const { theme: { activeTheme, themeInEdit }, } = useSelector((state: State) => state); const { addTheme, updateTheme, editTheme } = bindActionCreators( actionCreators, useDispatch() ); const [formData, setFormData] = useState({ name: '', isCustom: true, colors: { primary: '#ffffff', accent: '#ffffff', background: '#ffffff', }, }); useEffect(() => { setFormData({ ...formData, colors: activeTheme.colors }); }, [activeTheme]); useEffect(() => { if (themeInEdit) { setFormData(themeInEdit); } }, [themeInEdit]); const inputChangeHandler = (e: ChangeEvent) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value, }); }; const setColor = ({ target: { value, name }, }: ChangeEvent) => { setFormData({ ...formData, colors: { ...formData.colors, [name]: value, }, }); }; const closeModal = () => { editTheme(null); modalHandler(); }; const formHandler = (e: FormEvent) => { e.preventDefault(); if (!themeInEdit) { addTheme(formData); } else { updateTheme(formData, themeInEdit.name); } // close modal closeModal(); // clear theme name setFormData({ ...formData, name: '' }); }; return ( inputChangeHandler(e)} />
setColor(e)} /> setColor(e)} /> setColor(e)} />
{!themeInEdit ? ( ) : ( )}
); };