diff --git a/client/src/containers/Accounting/MakeJournalEntriesForm.js b/client/src/containers/Accounting/MakeJournalEntriesForm.js index 94af85555..23bd1da21 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesForm.js +++ b/client/src/containers/Accounting/MakeJournalEntriesForm.js @@ -21,14 +21,19 @@ import MediaConnect from 'connectors/Media.connect'; import useMedia from 'hooks/useMedia'; import {compose} from 'utils'; +import { FormattedMessage as T, useIntl } from 'react-intl'; + function MakeJournalEntriesForm({ + // #withMedia requestSubmitMedia, requestDeleteMedia, + // #withJournalsActions requestMakeJournalEntries, requestEditManualJournal, + // #withDashboard changePageTitle, changePageSubtitle, @@ -47,13 +52,14 @@ function MakeJournalEntriesForm({ const savedMediaIds = useRef([]); const clearSavedMediaIds = () => { savedMediaIds.current = []; } +const {formatMessage} =useIntl() useEffect(() => { if (manualJournal && manualJournal.id) { - changePageTitle('Edit Journal'); + changePageTitle(formatMessage({id:'edit_journal'})); changePageSubtitle(`No. ${manualJournal.journal_number}`); } else { - changePageTitle('New Journal'); + changePageTitle(formatMessage({id:'new_journal'})); } }, [changePageTitle, changePageSubtitle, manualJournal]); @@ -252,8 +258,6 @@ function MakeJournalEntriesForm({ } export default compose( - // ManualJournalsConnect, - // MakeJournalEntriesConnect, withJournalsActions, withManualJournalDetail, withAccountsActions, diff --git a/client/src/containers/Accounting/ManualJournalsList.js b/client/src/containers/Accounting/ManualJournalsList.js index a7b04a99b..9df435947 100644 --- a/client/src/containers/Accounting/ManualJournalsList.js +++ b/client/src/containers/Accounting/ManualJournalsList.js @@ -22,22 +22,24 @@ import { compose } from 'utils'; * Manual journals table. */ function ManualJournalsTable({ + // #withDashboardActions changePageTitle, + // #withViewsActions requestFetchResourceViews, + // #withManualJournalsActions requestFetchManualJournalsTable, requestDeleteManualJournal, requestPublishManualJournal, requestDeleteBulkManualJournals, - addManualJournalsTableQueries, }) { const history = useHistory(); const [deleteManualJournal, setDeleteManualJournal] = useState(false); const [selectedRows, setSelectedRows] = useState([]); const [bulkDelete, setBulkDelete] = useState(false); - + const { formatMessage } = useIntl(); const fetchViews = useQuery('journals-resource-views', () => { return requestFetchResourceViews('manual_journals'); }); @@ -47,7 +49,7 @@ function ManualJournalsTable({ ); useEffect(() => { - changePageTitle('Manual Journals'); + changePageTitle(formatMessage({id:'manual_journals'})); }, [changePageTitle]); // Handle delete manual journal click. @@ -163,9 +165,7 @@ function ManualJournalsTable({ '/dashboard/accounting/manual-journals/:custom_view_id/custom_view', '/dashboard/accounting/manual-journals', ]} - > - - + > { return Promise.all([ @@ -64,38 +60,49 @@ function AccountsChart({ }); // Fetch accounts list according to the given custom view id. - const fetchAccountsHook = useQuery(['accounts-table', accountsTableQuery], - () => requestFetchAccountsTable()); + const fetchAccountsHook = useQuery( + ['accounts-table', accountsTableQuery], + () => requestFetchAccountsTable(), + { refetchInterval: 3000 } + ); useEffect(() => { - changePageTitle('Chart of Accounts'); + changePageTitle(formatMessage({ id: 'chart_of_accounts' })); }, [changePageTitle]); - + // Handle click and cancel/confirm account delete - const handleDeleteAccount = (account) => { setDeleteAccount(account); }; - + const handleDeleteAccount = (account) => { + setDeleteAccount(account); + }; + // handle cancel delete account alert. - const handleCancelAccountDelete = useCallback(() => { setDeleteAccount(false); }, []); - + const handleCancelAccountDelete = useCallback(() => { + setDeleteAccount(false); + }, []); + // Handle confirm account delete const handleConfirmAccountDelete = useCallback(() => { - requestDeleteAccount(deleteAccount.id).then(() => { - setDeleteAccount(false); - AppToaster.show({ message: 'the_account_has_been_deleted' }); - }).catch(errors => { - setDeleteAccount(false); - if (errors.find((e) => e.type === 'ACCOUNT.PREDEFINED')) { - AppToaster.show({ - message: 'cannot_delete_predefined_account', - intent: Intent.DANGER, - }); - } - if (errors.find((e) => e.type === 'ACCOUNT.HAS.ASSOCIATED.TRANSACTIONS')) { - AppToaster.show({ - message: 'cannot_delete_account_has_associated_transactions' - }); - } - }); + requestDeleteAccount(deleteAccount.id) + .then(() => { + setDeleteAccount(false); + AppToaster.show({ message: 'the_account_has_been_deleted' }); + }) + .catch((errors) => { + setDeleteAccount(false); + if (errors.find((e) => e.type === 'ACCOUNT.PREDEFINED')) { + AppToaster.show({ + message: 'cannot_delete_predefined_account', + intent: Intent.DANGER, + }); + } + if ( + errors.find((e) => e.type === 'ACCOUNT.HAS.ASSOCIATED.TRANSACTIONS') + ) { + AppToaster.show({ + message: 'cannot_delete_account_has_associated_transactions', + }); + } + }); }, [deleteAccount, requestDeleteAccount]); // Handle cancel/confirm account inactive. @@ -117,43 +124,44 @@ function AccountsChart({ }); }, [inactiveAccount, requestFetchAccountsTable, requestInactiveAccount]); + const handleEditAccount = (account) => {}; - const handleEditAccount = (account) => { + const handleRestoreAccount = (account) => {}; - }; - - const handleRestoreAccount = (account) => { - - }; - - const handleBulkDelete = useCallback((accountsIds) => { - setBulkDelete(accountsIds); - }, [setBulkDelete]); + const handleBulkDelete = useCallback( + (accountsIds) => { + setBulkDelete(accountsIds); + }, + [setBulkDelete] + ); const handleConfirmBulkDelete = useCallback(() => { - requestDeleteBulkAccounts(bulkDelete).then(() => { - setBulkDelete(false); - AppToaster.show({ message: 'the_accounts_have_been_deleted' }); - }).catch((error) => { - setBulkDelete(false); - }); + requestDeleteBulkAccounts(bulkDelete) + .then(() => { + setBulkDelete(false); + AppToaster.show({ message: 'the_accounts_have_been_deleted' }); + }) + .catch((error) => { + setBulkDelete(false); + }); }, [requestDeleteBulkAccounts, bulkDelete]); const handleCancelBulkDelete = useCallback(() => { setBulkDelete(false); }, []); - const handleBulkArchive = useCallback((accounts) => { - - }, []); + const handleBulkArchive = useCallback((accounts) => {}, []); // Handle selected rows change. - const handleSelectedRowsChange = useCallback((accounts) => { - setSelectedRows(accounts); - }, [setSelectedRows]); + const handleSelectedRowsChange = useCallback( + (accounts) => { + setSelectedRows(accounts); + }, + [setSelectedRows] + ); // Refetches accounts data table when current custom view changed. - const handleFilterChanged = useCallback(() => { + const handleFilterChanged = useCallback(() => { fetchAccountsHook.refetch(); }, [fetchAccountsHook]); @@ -169,25 +177,29 @@ function AccountsChart({ }, [tableLoading, fetchAccountsHook.isFetching]); // Handle fetch data of accounts datatable. - const handleFetchData = useCallback(({ pageIndex, pageSize, sortBy }) => { - addAccountsTableQueries({ - ...(sortBy.length > 0) ? { - column_sort_by: sortBy[0].id, - sort_order: sortBy[0].desc ? 'desc' : 'asc', - } : {}, - }); - fetchAccountsHook.refetch(); - }, [fetchAccountsHook, addAccountsTableQueries]); + const handleFetchData = useCallback( + ({ pageIndex, pageSize, sortBy }) => { + addAccountsTableQueries({ + ...(sortBy.length > 0 + ? { + column_sort_by: sortBy[0].id, + sort_order: sortBy[0].desc ? 'desc' : 'asc', + } + : {}), + }); + fetchAccountsHook.refetch(); + }, + [fetchAccountsHook, addAccountsTableQueries] + ); return ( - + + onBulkArchive={handleBulkArchive} + /> @@ -196,9 +208,9 @@ function AccountsChart({ path={[ '/dashboard/accounts/:custom_view_id/custom_view', '/dashboard/accounts', - ]}> - + ]} + > + + loading={tableLoading} + /> + onConfirm={handleConfirmAccountDelete} + >

- Are you sure you want to move filename to Trash? You will be able to restore it later, - but it will become private to you. + Are you sure you want to move filename to Trash? You will be + able to restore it later, but it will become private to you.

} - confirmButtonText={} - icon="trash" + cancelButtonText={} + confirmButtonText={} + icon='trash' intent={Intent.WARNING} isOpen={inactiveAccount} onCancel={handleCancelInactiveAccount} - onConfirm={handleConfirmAccountActive}> + onConfirm={handleConfirmAccountActive} + >

- Are you sure you want to move filename to Trash? You will be able to restore it later, - but it will become private to you. + Are you sure you want to move filename to Trash? You will be + able to restore it later, but it will become private to you.

} - confirmButtonText={} - icon="trash" + cancelButtonText={} + confirmButtonText={} + icon='trash' intent={Intent.DANGER} isOpen={bulkDelete} onCancel={handleCancelBulkDelete} - onConfirm={handleConfirmBulkDelete}> + onConfirm={handleConfirmBulkDelete} + >

- Are you sure you want to move filename to Trash? You will be able to restore it later, - but it will become private to you. + Are you sure you want to move filename to Trash? You will be + able to restore it later, but it will become private to you.

@@ -263,6 +279,7 @@ export default compose( withViewsActions, withResourceActions, withDashboardActions, - - withAccounts, -)(AccountsChart); \ No newline at end of file + withAccounts(({ accountsTableQuery }) => ({ + accountsTableQuery, + })) +)(AccountsChart); diff --git a/client/src/containers/Accounts/AccountsDataTable.js b/client/src/containers/Accounts/AccountsDataTable.js index f6b5f8c18..17398379b 100644 --- a/client/src/containers/Accounts/AccountsDataTable.js +++ b/client/src/containers/Accounts/AccountsDataTable.js @@ -21,16 +21,15 @@ import withDashboardActions from 'containers/Dashboard/withDashboard'; import withAccountsActions from 'containers/Accounts/withAccountsActions'; import withAccounts from 'containers/Accounts/withAccounts'; -import {If} from 'components'; import { FormattedMessage as T, useIntl } from 'react-intl'; function AccountsDataTable({ - // # withAccounts + // #withAccounts accounts, accountsLoading, - // # withDialog. + // #withDialog. openDialog, // own properties @@ -58,7 +57,7 @@ function AccountsDataTable({ const actionMenuList = useCallback((account) => ( - + } /> } @@ -166,9 +165,6 @@ function AccountsDataTable({ return ( - - asdasdsadsa - ({ + accountsLoading, + accounts, + })), )(AccountsDataTable); diff --git a/client/src/containers/Dialogs/ExchangeRateDialog.js b/client/src/containers/Dialogs/ExchangeRateDialog.js index 5b34b01e6..2e3674c19 100644 --- a/client/src/containers/Dialogs/ExchangeRateDialog.js +++ b/client/src/containers/Dialogs/ExchangeRateDialog.js @@ -13,32 +13,36 @@ import * as Yup from 'yup'; import { FormattedMessage as T, useIntl } from 'react-intl'; import { useFormik } from 'formik'; import Dialog from 'components/Dialog'; +import AppToaster from 'components/AppToaster'; import { useQuery, queryCache } from 'react-query'; -import AppToaster from 'components/AppToaster'; import ErrorMessage from 'components/ErrorMessage'; import classNames from 'classnames'; import { Select } from '@blueprintjs/select'; import moment from 'moment'; import { DateInput } from '@blueprintjs/datetime'; import { momentFormatter } from 'utils'; -import ExchangeRatesDialogConnect from 'connectors/ExchangeRatesFromDialog.connect'; + +import CurrencyFromDialogConnect from 'connectors/CurrencyFromDialog.connect' +import withExchangeRatesDialog from 'containers/FinancialStatements/ExchangeRates/withExchangeRateDialog'; +import withExchangeRate from 'containers/FinancialStatements/ExchangeRates/withExchangeRates' function ExchangeRateDialog({ name, payload, isOpen, - openDialog, + // #withDialog + closeDialog, currencies, - +// #withExchangeRatesActions requestSubmitExchangeRate, requestFetchExchangeRates, requestEditExchangeRate, requestFetchCurrencies, editExchangeRate, - addExchangeRatesTableQueries, + }) { const {formatMessage} = useIntl(); @@ -107,9 +111,14 @@ function ExchangeRateDialog({ closeDialog(name); }, [name, closeDialog]); - const fetchHook = useQuery('exchange-rates-dialog', () => { - return Promise.all([requestFetchExchangeRates(), requestFetchCurrencies()]); - }); + // const fetchHook = useQuery('exchange-rates-dialog', () => { + // return Promise.all([requestFetchExchangeRates(), requestFetchCurrencies()]); + // }); + + const fetchExchangeRatesDialog = useQuery('exchange-rates-dialog', + () => requestFetchExchangeRates(), + { refetchInterval: 3000 }); + const onDialogClosed = useCallback(() => { formik.resetForm(); @@ -117,8 +126,8 @@ function ExchangeRateDialog({ }, [formik, closeDialog, name]); const onDialogOpening = useCallback(() => { - fetchHook.refetch(); - }, [fetchHook]); + fetchExchangeRatesDialog.refetch(); + }, [fetchExchangeRatesDialog]); const handleDateChange = useCallback( (date) => { @@ -185,14 +194,14 @@ function ExchangeRateDialog({ } className={classNames( { - 'dialog--loading': fetchHook.pending, + 'dialog--loading': fetchExchangeRatesDialog.pending, }, 'dialog--exchangeRate-form' )} isOpen={isOpen} onClosed={onDialogClosed} onOpening={onDialogOpening} - isLoading={fetchHook.pending} + isLoading={fetchExchangeRatesDialog.pending} onClose={handleClose} >
@@ -279,4 +288,4 @@ function ExchangeRateDialog({ ); } -export default ExchangeRatesDialogConnect(ExchangeRateDialog); +export default withExchangeRatesDialog(ExchangeRateDialog); diff --git a/client/src/containers/Expenses/ExpenseForm.js b/client/src/containers/Expenses/ExpenseForm.js index 5c8ecfdf6..5f5d82ecc 100644 --- a/client/src/containers/Expenses/ExpenseForm.js +++ b/client/src/containers/Expenses/ExpenseForm.js @@ -4,6 +4,7 @@ import {useParams} from 'react-router-dom'; import Connector from 'connectors/ExpenseForm.connector'; import DashboardInsider from 'components/Dashboard/DashboardInsider'; import ExpenseForm from 'components/Expenses/ExpenseForm'; +import { FormattedMessage as T, useIntl } from 'react-intl'; function ExpenseFormContainer({ fetchAccounts, @@ -15,12 +16,12 @@ function ExpenseFormContainer({ currencies, }) { const { id } = useParams(); - + const { formatMessage } = useIntl(); useEffect(() => { if (id) { - changePageTitle('Edit Expense Details'); + changePageTitle(formatMessage({id:'edit_expense_details'})); } else { - changePageTitle('New Expense'); + changePageTitle(formatMessage({id:'new_expense'})); } }, []); diff --git a/client/src/containers/Expenses/ExpensesList.js b/client/src/containers/Expenses/ExpensesList.js index 860e8f614..06a88cef5 100644 --- a/client/src/containers/Expenses/ExpensesList.js +++ b/client/src/containers/Expenses/ExpensesList.js @@ -18,8 +18,9 @@ function ExpensesList({ getResourceViews, changePageTitle }) { + const {formatMessage} =useIntl() useEffect(() => { - changePageTitle('Expenses List'); + changePageTitle(formatMessage({id:'expenses_list'})); }, []); const [deleteExpenseState, setDeleteExpense] = useState(); diff --git a/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRate.js b/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRate.js index 77cec1e55..2d6d057a9 100644 --- a/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRate.js +++ b/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRate.js @@ -18,9 +18,12 @@ import { compose } from 'utils'; import { FormattedMessage as T, useIntl } from 'react-intl'; function ExchangeRate({ - views, + // #withDashboard changePageTitle, + + //#withExchangeRatesActions requestFetchResourceFields, + requestFetchExchangeRates, requestDeleteExchangeRate, addExchangeRatesTableQueries, @@ -28,15 +31,21 @@ function ExchangeRate({ const { id } = useParams(); const [deleteExchangeRate, setDeleteExchangeRate] = useState(false); const [selectedRows, setSelectedRows] = useState([]); + const { formatMessage } = useIntl(); + + // const fetchExchangeRates = useQuery('exchange-rates-table', () => { + // return Promise.all([requestFetchExchangeRates()]); + // }); + + const fetchExchangeRates = useQuery('exchange-rates-table', + () => requestFetchExchangeRates(), + { refetchInterval: 3000 }); - const fetchHook = useQuery('exchange-rates', () => { - return Promise.all([requestFetchExchangeRates()]); - }); useEffect(() => { id - ? changePageTitle('Exchange Rate Details') - : changePageTitle('Exchange Rate List'); + ? changePageTitle(formatMessage({id:'exchange_rate_details'})) + : changePageTitle(formatMessage({id:'exchange_rate_list'})); }, [id, changePageTitle]); const handelDeleteExchangeRate = useCallback( @@ -84,9 +93,8 @@ function ExchangeRate({ ); return ( - + @@ -98,8 +106,8 @@ function ExchangeRate({ onSelectedRowsChange={handleSelectedRowsChange} /> } - confirmButtonText={} + cancelButtonText={} + confirmButtonText={} icon='trash' intent={Intent.DANGER} isOpen={deleteExchangeRate} @@ -118,5 +126,6 @@ function ExchangeRate({ export default compose( withExchangeRatesActions, + withResourceActions, withDashboardActions )(ExchangeRate); diff --git a/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRateActionsBar.js b/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRateActionsBar.js index acc5c55d0..dd1e74d5d 100644 --- a/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRateActionsBar.js +++ b/client/src/containers/FinancialStatements/ExchangeRates/ExchangeRateActionsBar.js @@ -1,6 +1,4 @@ import React, { useCallback, useState, useMemo } from 'react'; -import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; -import { compose } from 'utils'; import { NavbarGroup, Button, @@ -10,37 +8,39 @@ import { Position, PopoverInteractionKind, } from '@blueprintjs/core'; -import { connect } from 'react-redux'; import classNames from 'classnames'; import Icon from 'components/Icon'; -import DashboardConnect from 'connectors/Dashboard.connector'; +import { connect } from 'react-redux'; + +import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; +import DialogConnect from 'connectors/Dialog.connector'; + import FilterDropdown from 'components/FilterDropdown'; -import ExchangeRatesDialogConnect from 'connectors/ExchangeRatesFromDialog.connect'; + import withResourceDetail from 'containers/Resources/withResourceDetails'; +import withExchangeRates from 'containers/FinancialStatements/ExchangeRates/withExchangeRates'; +import withExchangeRatesActions from 'containers/FinancialStatements/ExchangeRates/withExchangeRatesActions'; +import withExchangeRateDialog from 'containers/FinancialStatements/ExchangeRates/withExchangeRateDialog'; + +import { compose } from 'utils'; import { FormattedMessage as T, useIntl } from 'react-intl'; - function ExchangeRateActionsBar({ + // #withDialog. openDialog, + + // #withResourceDetail + resourceFields, + + selectedRows = [], onDeleteExchangeRate, onFilterChanged, - resourceFields, - selectedRows = [], }) { - const onClickNewExchangeRate = useCallback(() => { - openDialog('exchangeRate-form', {}); - }, [openDialog]); - - const handelDeleteExchangeRate = useCallback( - (exchangeRate) => { - onDeleteExchangeRate(exchangeRate); - }, - [selectedRows, onDeleteExchangeRate] - ); const [filterCount, setFilterCount] = useState(0); - const hasSelectedRows = useMemo(() => selectedRows.length > 0, [ - selectedRows, - ]); + + const onClickNewExchangeRate = () => { + openDialog('exchangeRate-form', {}); + }; const filterDropdown = FilterDropdown({ fields: resourceFields, @@ -51,13 +51,24 @@ function ExchangeRateActionsBar({ }, }); + const handelDeleteExchangeRate = useCallback( + (exchangeRate) => { + onDeleteExchangeRate(exchangeRate); + }, + [selectedRows, onDeleteExchangeRate] + ); + + const hasSelectedRows = useMemo(() => selectedRows.length > 0, [ + selectedRows, + ]); + return ( - +
+ +
-
- - - } - inline={true} - fill={true}> +
+ + + + } + inline={true} + fill={true} + > + + + + +
+ +
Columns Preferences
+ +
+ + +
Available Columns
- - -
-
+ placeholder={intl.formatMessage({ id: 'search' })} + leftIcon='search' + /> -
Columns Preferences
- -
- - -
Available Columns
+
+ + + {availableColumns.map((field) => ( + + ))} + + +
+ - + +
+
+ +
+
+ +
+
+ -
- - - {availableColumns.map((field) => ( - - ))} - - -
- + +
Selected Columns
+ - -
-
-
-
- +
+ + + {draggedColumns.map((field) => ( + + ))} + + +
+ +
+
- -
Selected Columns
- - -
- - - {draggedColumns.map((field) => ( - - ))} - - -
- -
-
- - - - + + + + + + + + + ); } -export default ViewFormContainer(ViewForm); \ No newline at end of file +export default ViewFormContainer(ViewForm); diff --git a/client/src/containers/Views/ViewFormPage.js b/client/src/containers/Views/ViewFormPage.js index 033d5d629..88db1dabc 100644 --- a/client/src/containers/Views/ViewFormPage.js +++ b/client/src/containers/Views/ViewFormPage.js @@ -5,14 +5,17 @@ import { Intent, Alert } from '@blueprintjs/core'; import DashboardInsider from 'components/Dashboard/DashboardInsider'; import DashboardPageContent from 'components/Dashboard/DashboardPageContent'; import ViewForm from 'containers/Views/ViewForm'; -import withResourcesActions from 'containers/Resources/withResourcesActions'; -import withViewsActions from 'containers/Views/withViewsActions'; -import withDashboard from 'containers/Dashboard/withDashboard'; + import AppToaster from 'components/AppToaster'; import {compose} from 'utils'; import { If } from 'components'; import { FormattedMessage as T, useIntl } from 'react-intl'; +import withResourcesActions from 'containers/Resources/withResourcesActions'; +import withViewsActions from 'containers/Views/withViewsActions'; +import withDashboard from 'containers/Dashboard/withDashboard'; + + // @flow function ViewFormPage({ changePageTitle, @@ -27,6 +30,7 @@ function ViewFormPage({ }) { const { resource_slug: resourceSlug, view_id: viewId } = useParams(); const [stateDeleteView, setStateDeleteView] = useState(null); + const {formatMessage} =useIntl() const fetchHook = useAsync(async () => { return Promise.all([ @@ -44,9 +48,9 @@ function ViewFormPage({ useEffect(() => { if (viewId) { - changePageTitle('Edit Custom View'); + changePageTitle(formatMessage({id:'edit_custom_view'})); } else { - changePageTitle('New Custom View'); + changePageTitle(formatMessage({id:'new_custom_view'})); } return () => { changePageTitle(''); diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index 6a6f84302..79c54866a 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -149,7 +149,22 @@ bulk_update:'Bulk Update', all_accounts:'All accounts', go_to_bigcapital_com:'← Go to bigcapital.com', currency:'Currency', -new_conditional:'+ New Conditional' +new_conditional:'+ New Conditional', +chart_of_accounts:'Chart of Accounts', +exchange_rate_details:'Exchange Rate Details', +exchange_rate_list:'Exchange Rate List', +manual_journals:'Manual Journals', +edit_expense_details:'Edit Expense Details', +expenses_list:'Expenses List', +edit_category_details:'Edit Category Details', +category_list:'Category List', +edit_item_details:'Edit Item Details', +items_list:'Items List', +edit_custom_view:'Edit Custom View', +new_custom_view:'New Custom View', +view_name:'View Name', +new_conditional:'New Conditional' + diff --git a/client/src/store/ExchangeRate/exchange.actions.js b/client/src/store/ExchangeRate/exchange.actions.js index 2e25556ec..8bf497b39 100644 --- a/client/src/store/ExchangeRate/exchange.actions.js +++ b/client/src/store/ExchangeRate/exchange.actions.js @@ -7,6 +7,10 @@ export const fetchExchangeRates = () => { dispatch({ type: t.SET_DASHBOARD_REQUEST_LOADING, }); + dispatch({ + type: t.EXCHANGE_RATE_TABLE_LOADING, + loading: true, + }); ApiService.get('exchange_rates') .then((response) => { dispatch({ @@ -16,6 +20,10 @@ export const fetchExchangeRates = () => { dispatch({ type: t.SET_DASHBOARD_REQUEST_COMPLETED, }); + dispatch({ + type: t.EXCHANGE_RATE_TABLE_LOADING, + loading: false, + }); resolve(response); }) .catch((error) => { diff --git a/client/src/store/ExchangeRate/exchange.reducer.js b/client/src/store/ExchangeRate/exchange.reducer.js index ae7db5cbf..efcc2c4ae 100644 --- a/client/src/store/ExchangeRate/exchange.reducer.js +++ b/client/src/store/ExchangeRate/exchange.reducer.js @@ -17,4 +17,7 @@ export default createReducer(initialState, { ..._exchangeRates, }; }, + [t.EXCHANGE_RATE_TABLE_LOADING]: (state, action) => { + state.loading = action.loading; + }, }); diff --git a/client/src/store/ExchangeRate/exchange.type.js b/client/src/store/ExchangeRate/exchange.type.js index c0354afc6..7e07ab04b 100644 --- a/client/src/store/ExchangeRate/exchange.type.js +++ b/client/src/store/ExchangeRate/exchange.type.js @@ -4,4 +4,5 @@ export default { EXCHANGE_RATE_LIST_SET: 'EXCHANGE_RATE_LIST_SET', CLEAR_EXCHANGE_RATE_FORM_ERRORS: 'CLEAR_EXCHANGE_RATE_FORM_ERRORS', ExchangeRates_TABLE_QUERIES_ADD: 'ExchangeRates_TABLE_QUERIES_ADD', + EXCHANGE_RATE_TABLE_LOADING:'EXCHANGE_RATE_TABLE_LOADING' };