// React import { useState, useEffect, FormEvent, ChangeEvent, Fragment } from 'react'; import { connect } from 'react-redux'; // State import { createNotification, updateConfig } from '../../../store/actions'; // Typescript import { Config, GlobalState, NewNotification, Query, SearchForm, } from '../../../interfaces'; // Components import CustomQueries from './CustomQueries/CustomQueries'; // UI import Button from '../../UI/Buttons/Button/Button'; import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadline'; import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; // Utils import { inputHandler, searchSettingsTemplate } from '../../../utility'; // Data import { queries } from '../../../utility/searchQueries.json'; interface Props { createNotification: (notification: NewNotification) => void; updateConfig: (formData: SearchForm) => void; loading: boolean; customQueries: Query[]; config: Config; } const SearchSettings = (props: Props): JSX.Element => { // Initial state const [formData, setFormData] = useState(searchSettingsTemplate); // Get config useEffect(() => { setFormData({ ...props.config, }); }, [props.loading]); // Form handler const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); // Save settings await props.updateConfig(formData); }; // Input handler const inputChangeHandler = ( e: ChangeEvent, options?: { isNumber?: boolean; isBool?: boolean } ) => { inputHandler({ e, options, setStateHandler: setFormData, state: formData, }); }; return ( {/* GENERAL SETTINGS */}
formSubmitHandler(e)} style={{ marginBottom: '30px' }} > {/* CUSTOM QUERIES */}
); }; const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, customQueries: state.config.customQueries, config: state.config.config, }; }; const actions = { createNotification, updateConfig, }; export default connect(mapStateToProps, actions)(SearchSettings);