// #region [Imports] =================================================================================================== // Libraries import { useEffect, useState } from 'react'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { Spin } from 'antd'; // Types import { ICouponTemplateCategory } from '../../types/couponTemplates'; import { IStore } from '../../types/store'; // Actions import { CouponTemplatesActions } from '../../store/actions/couponTemplates'; // #endregion [Imports] // #region [Variables] ================================================================================================= declare var acfwAdminApp: any; const { readCouponTemplateCategories, readCouponTemplateCategory, setCouponTemplatesLoading, readCouponTemplates } = CouponTemplatesActions; // #endregion [Variables] // #region [Interfaces]================================================================================================= interface IActions { readCouponTemplateCategories: typeof readCouponTemplateCategories; readCouponTemplateCategory: typeof readCouponTemplateCategory; setCouponTemplatesLoading: typeof setCouponTemplatesLoading; readCouponTemplates: typeof readCouponTemplates; } interface IProps { categories: ICouponTemplateCategory[]; actions: IActions; } // #endregion [Interfaces] // #region [Component] ================================================================================================= const Sidebar = (props: IProps) => { const { categories, actions } = props; const { labels } = acfwAdminApp.coupon_templates_page; const [loading, setLoading] = useState(false); const [selectedCategory, setSelectedCategory] = useState('all'); const handleCategoryClick = (slug: string) => { // Skip if the current category is selected. if (slug === selectedCategory) { return; } setSelectedCategory(slug); if (slug === 'all') { actions.readCouponTemplates({ processingCB: () => setCouponTemplatesLoading({ loading: true }), successCB: () => setCouponTemplatesLoading({ loading: false }), }); return; } actions.readCouponTemplateCategory({ slug, processingCB: () => setCouponTemplatesLoading({ loading: true }), successCB: () => setCouponTemplatesLoading({ loading: false }), }); }; useEffect(() => { setLoading(true); actions.readCouponTemplateCategories({ successCB: () => setLoading(false), }); }, []); return (