// React import { useState, useEffect, FormEvent, ChangeEvent } from 'react'; import { connect } from 'react-redux'; // State import { createNotification, updateConfig } from '../../../store/actions'; // Typescript import { GlobalState, NewNotification, Query, SearchForm, } from '../../../interfaces'; // Utils import { searchConfig } from '../../../utility'; import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; // Data import { queries } from '../../../utility/searchQueries.json'; // UI import Button from '../../UI/Buttons/Button/Button'; interface Props { createNotification: (notification: NewNotification) => void; updateConfig: (formData: SearchForm) => void; loading: boolean; customQueries: Query[]; } const SearchSettings = (props: Props): JSX.Element => { // Initial state const [formData, setFormData] = useState({ hideSearch: 0, defaultSearchProvider: 'l', searchSameTab: 0, }); // Get config useEffect(() => { setFormData({ hideSearch: searchConfig('hideSearch', 0), defaultSearchProvider: searchConfig('defaultSearchProvider', 'd'), searchSameTab: searchConfig('searchSameTab', 0), }); }, [props.loading]); // Form handler const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); // Save settings await props.updateConfig(formData); }; // Input handler const inputChangeHandler = ( e: ChangeEvent, isNumber?: boolean ) => { let value: string | number = e.target.value; if (isNumber) { value = parseFloat(value); } setFormData({ ...formData, [e.target.name]: value, }); }; return (
formSubmitHandler(e)}>
); }; const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, customQueries: state.config.customQueries, }; }; const actions = { createNotification, updateConfig, }; export default connect(mapStateToProps, actions)(SearchSettings);