// #region [Imports] =================================================================================================== // Libraries import React, { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; import { bindActionCreators, Dispatch } from 'redux'; import { connect } from 'react-redux'; import { Row, Col } from 'antd'; // Types import { IStore } from '../../types/store'; import { ISection } from '../../types/section'; // Actions import { SectionActions } from '../../store/actions/section'; // Components import SettingsNav from '../../components/SettingsNav'; import SettingsForm from '../../components/SettingsForm'; import AdminHeader from '../../components/AdminHeader'; // #endregion [Imports] // #region [Variables] ================================================================================================= declare var acfwAdminApp: any; const { readSections, readSection } = SectionActions; // #endregion [Variables] // #region [Interfaces]================================================================================================= interface IActions { readSections: typeof readSections; readSection: typeof readSection; } interface IProps { sections: ISection[]; actions: IActions; } // #endregion [Interfaces] // #region [Component] ================================================================================================= const Settings = (props: IProps) => { const { sections, actions } = props; const urlParams = new URLSearchParams(useLocation().search); const currentSection = urlParams.get('section'); // fetch all sections on first load. useEffect(() => { if (sections.length > 0) return; actions.readSections({ id: currentSection }); }, [actions]); // fetch fields of current section. useEffect(() => { if (sections.length < 1) return; const idx = currentSection ? sections.findIndex((i) => i.id === currentSection) : 0; if (sections[idx].fields.length < 1) actions.readSection({ id: currentSection }); }, [sections, actions, currentSection]); return ( <> ); }; const mapStateToProps = (store: IStore) => ({ sections: store.sections }); const mapDispatchToProps = (dispatch: Dispatch) => ({ actions: bindActionCreators({ readSections, readSection }, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(Settings); // #endregion [Component]