import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; // Redux import { connect } from 'react-redux'; import { createNotification, updateConfig, sortApps, sortCategories, } from '../../../store/actions'; // Typescript import { Config, GlobalState, NewNotification, OtherSettingsForm, } from '../../../interfaces'; // UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadline'; // Utils import { otherSettingsTemplate, inputHandler } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; updateConfig: (formData: OtherSettingsForm) => void; sortApps: () => void; sortCategories: () => void; loading: boolean; config: Config; } const OtherSettings = (props: ComponentProps): JSX.Element => { const { config } = props; // Initial state const [formData, setFormData] = useState( otherSettingsTemplate ); // Get config useEffect(() => { setFormData({ ...config, }); }, [props.loading]); // Form handler const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); // Save settings await props.updateConfig(formData); // Update local page title document.title = formData.customTitle; // Sort apps and categories with new settings props.sortApps(); props.sortCategories(); }; // Input handler const inputChangeHandler = ( e: ChangeEvent, options?: { isNumber?: boolean; isBool?: boolean } ) => { inputHandler({ e, options, setStateHandler: setFormData, state: formData, }); }; return (
formSubmitHandler(e)}> {/* OTHER OPTIONS */} inputChangeHandler(e)} /> {/* BEAHVIOR OPTIONS */} {/* MODULES OPTIONS */} {/* DOCKER SETTINGS */} inputChangeHandler(e)} /> {/* KUBERNETES SETTINGS */} ); }; const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, config: state.config.config, }; }; const actions = { createNotification, updateConfig, sortApps, sortCategories, }; export default connect(mapStateToProps, actions)(OtherSettings);