import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; // Redux import { connect } from 'react-redux'; import { createNotification, updateConfig, sortApps, sortCategories } from '../../../store/actions'; // Typescript import { GlobalState, NewNotification, SettingsForm } from '../../../interfaces'; // UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; // CSS import classes from './OtherSettings.module.css'; // Utils import { searchConfig } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; updateConfig: (formData: SettingsForm) => void; sortApps: () => void; sortCategories: () => void; loading: boolean; } const OtherSettings = (props: ComponentProps): JSX.Element => { // Initial state const [formData, setFormData] = useState({ customTitle: document.title, pinAppsByDefault: 1, pinCategoriesByDefault: 1, hideHeader: 0, hideApps: 0, hideCategories: 0, hideSearch: 0, defaultSearchProvider: 'd', useOrdering: 'createdAt', appsSameTab: 0, bookmarksSameTab: 0, searchSameTab: 0 }) // Get config useEffect(() => { setFormData({ customTitle: searchConfig('customTitle', 'Flame'), pinAppsByDefault: searchConfig('pinAppsByDefault', 1), pinCategoriesByDefault: searchConfig('pinCategoriesByDefault', 1), hideHeader: searchConfig('hideHeader', 0), hideApps: searchConfig('hideApps', 0), hideCategories: searchConfig('hideCategories', 0), hideSearch: searchConfig('hideSearch', 0), defaultSearchProvider: searchConfig('defaultSearchProvider', 'd'), useOrdering: searchConfig('useOrdering', 'createdAt'), appsSameTab: searchConfig('appsSameTab', 0), bookmarksSameTab: searchConfig('bookmarksSameTab', 0), searchSameTab: searchConfig('searchSameTab', 0) }) }, [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, isNumber?: boolean) => { let value: string | number = e.target.value; if (isNumber) { value = parseFloat(value); } setFormData({ ...formData, [e.target.name]: value }) } return (
formSubmitHandler(e)}> {/* OTHER OPTIONS */}

Miscellaneous

inputChangeHandler(e)} /> {/* BEAHVIOR OPTIONS */}

App Behavior

{/* MODULES OPTIONS */}

Modules

) } const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading } } const actions = { createNotification, updateConfig, sortApps, sortCategories } export default connect(mapStateToProps, actions)(OtherSettings);