// #region [Imports] =================================================================================================== // Libraries import { useEffect, useState } from 'react'; import { Card, Table, Pagination, Popover } from 'antd'; import { FileTextOutlined } from '@ant-design/icons'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; // Types import { IStoreCreditEntry } from '../../types/storeCredits'; // Actions import { StoreCreditsDashboardActions } from '../../store/actions/storeCreditsDashboard'; // Utils import { getStoreCreditEntryPrefix } from '../../helpers/utils'; // #endregion [Imports] // #region [Variables] ================================================================================================= declare var acfwAdminApp: any; const { readStoreCreditsHistoryData } = StoreCreditsDashboardActions; // #endregion [Variables] // #region [Interfaces] ================================================================================================ interface IActions { readStoreCreditHistory: typeof readStoreCreditsHistoryData; } interface IProps { entries: IStoreCreditEntry[]; actions: IActions; filter: any; } // #endregion [Interfaces] // #region [Component] ================================================================================================= const StoreCreditsHistory = (props: IProps) => { const { entries, actions, filter } = props; const { store_credits_page: { labels }, } = acfwAdminApp; const [page, setPage]: [number, any] = useState(1); const [loading, setLoading]: [boolean, any] = useState(true); const [total, setTotal] = useState(0); // Use filter props instead of maintaining own state const { beforeDate, afterDate } = filter; useEffect(() => { setLoading(true); actions.readStoreCreditHistory({ page, startPeriod: beforeDate.format('YYYY-MM-DD'), endPeriod: afterDate.format('YYYY-MM-DD'), successCB: (response) => { setTotal(response.headers['x-total']); setLoading(false); }, }); }, [page, beforeDate, afterDate]); /** * Set loading state when sources list is empty. */ useEffect(() => { if (entries && entries.length) setLoading(false); }, [entries, setLoading]); const columns = [ { title: labels.customer_name, dataIndex: 'customer_name', key: 'customer_name', }, { title: labels.email, dataIndex: 'customer_email', key: 'customer_email', }, { title: labels.amount, dataIndex: 'amount', key: 'amount', render: (text: string, record: IStoreCreditEntry) => { return `${getStoreCreditEntryPrefix(record)}${text}`; }, }, { title: labels.activity, dataIndex: 'activity', key: 'activity', render: (text: string, record: IStoreCreditEntry) => { return [ text, record.note ? ( ) : null, ]; }, }, { title: labels.related, dataIndex: 'rel_label', key: 'rel_label', render: (label: string, record: IStoreCreditEntry) => { if (!record.rel_link) return label; return {label}; }, }, { title: labels.date, dataIndex: 'date', key: 'date', }, ]; return ( {total > 10 && ( )} ); }; const mapStateToProps = (store: any) => ({ entries: store.storeCreditsDashboard?.history }); const mapDispatchToProps = (dispatch: any) => ({ actions: bindActionCreators({ readStoreCreditHistory: readStoreCreditsHistoryData }, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(StoreCreditsHistory); // #endregion [Component]