diff --git a/client/src/containers/Accounts/AccountsActionsBar.js b/client/src/containers/Accounts/AccountsActionsBar.js
index 681369a4f..4440c0564 100644
--- a/client/src/containers/Accounts/AccountsActionsBar.js
+++ b/client/src/containers/Accounts/AccountsActionsBar.js
@@ -44,6 +44,8 @@ function AccountsActionsBar({
onFilterChanged,
onBulkDelete,
onBulkArchive,
+ onBulkActivate,
+ onBulkInactive
}) {
const history = useHistory();
const [filterCount, setFilterCount] = useState(0);
@@ -78,6 +80,17 @@ function AccountsActionsBar({
onBulkDelete && onBulkDelete(selectedRows.map(r => r.id));
}, [onBulkDelete, selectedRows]);
+ const handelBulkActivate =useCallback(()=>{
+
+ onBulkActivate && onBulkActivate(selectedRows.map(r=>r.id))
+ },[onBulkActivate,selectedRows])
+
+const handelBulkInactive =useCallback(()=>{
+
+onBulkInactive && onBulkInactive(selectedRows.map(r=>r.id))
+
+},[onBulkInactive,selectedRows])
+
return (
@@ -116,11 +129,18 @@ function AccountsActionsBar({
+
}
+ text={}
+ onClick={handelBulkActivate}
+ />
+ }
- text={}
- onClick={handleBulkArchive}
+ text={}
+ onClick={handelBulkInactive}
/>
+
+ }
+ confirmButtonText={`${formatMessage({id:'activate'})} (${selectedRowsCount})`}
+ intent={Intent.WARNING}
+ isOpen={bulkActivate}
+ onCancel={handleCancelBulkActivate}
+ onConfirm={handleConfirmBulkActivate}>
+
+
+
+
+ }
+ confirmButtonText={`${formatMessage({id:'inactivate'})} (${selectedRowsCount})`}
+ intent={Intent.WARNING}
+ isOpen={bulkInactiveAccounts}
+ onCancel={handleCancelBulkInactive}
+ onConfirm={handleConfirmBulkInactive}>
+
+
+
+
);
diff --git a/client/src/containers/Accounts/withAccountsActions.js b/client/src/containers/Accounts/withAccountsActions.js
index fcc4f0541..baea3060e 100644
--- a/client/src/containers/Accounts/withAccountsActions.js
+++ b/client/src/containers/Accounts/withAccountsActions.js
@@ -8,6 +8,8 @@ import {
submitAccount,
fetchAccount,
deleteBulkAccounts,
+ bulkActivateAccounts,
+ bulkInactiveAccounts
} from 'store/accounts/accounts.actions';
const mapActionsToProps = (dispatch) => ({
@@ -19,6 +21,8 @@ const mapActionsToProps = (dispatch) => ({
requestActivateAccount: (id) => dispatch(activateAccount({ id })),
requestFetchAccount: (id) => dispatch(fetchAccount({ id })),
requestDeleteBulkAccounts: (ids) => dispatch(deleteBulkAccounts({ ids })),
+ requestBulkActivateAccounts:(ids)=>dispatch(bulkActivateAccounts({ids})),
+ requestBulkInactiveAccounts:(ids)=>dispatch(bulkInactiveAccounts({ids})),
});
export default connect(null, mapActionsToProps);
\ No newline at end of file
diff --git a/client/src/containers/ExchangeRates/ExchangeRate.js b/client/src/containers/ExchangeRates/ExchangeRate.js
index f2e0d5847..8782fbdff 100644
--- a/client/src/containers/ExchangeRates/ExchangeRate.js
+++ b/client/src/containers/ExchangeRates/ExchangeRate.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useState, useCallback } from 'react';
+import React, { useEffect, useState, useCallback,useMemo } from 'react';
import { useQuery } from 'react-query';
import { useParams } from 'react-router-dom';
import { Alert, Intent } from '@blueprintjs/core';
@@ -15,7 +15,7 @@ import withExchangeRatesActions from 'containers/ExchangeRates/withExchangeRates
import { compose } from 'utils';
-import { FormattedMessage as T, useIntl } from 'react-intl';
+ import { FormattedMessage as T, useIntl, FormattedHTMLMessage } from 'react-intl';
function ExchangeRate({
// #withDashboard
@@ -28,19 +28,21 @@ function ExchangeRate({
requestFetchExchangeRates,
requestDeleteExchangeRate,
addExchangeRatesTableQueries,
+ requestDeleteBulkExchangeRates,
+
}) {
const { id } = useParams();
const [deleteExchangeRate, setDeleteExchangeRate] = useState(false);
const [selectedRows, setSelectedRows] = useState([]);
const { formatMessage } = useIntl();
-
+ const [bulkDelete, setBulkDelete] = useState(false);
+
// const fetchExchangeRates = useQuery('exchange-rates-table', () => {
// return Promise.all([requestFetchExchangeRates()]);
// });
const fetchExchangeRates = useQuery('exchange-rates-table',
- () => requestFetchExchangeRates(),
- { refetchInterval: 3000 });
+ () => requestFetchExchangeRates());
useEffect(() => {
@@ -93,11 +95,48 @@ function ExchangeRate({
[setSelectedRows]
);
+ // Handle Exchange Rates bulk delete.
+ const handleBulkDelete = useCallback(
+ (exchangeRates) => {
+ setBulkDelete(exchangeRates);
+ },
+ [setBulkDelete]
+);
+
+ //Handel cancel itemCategories bulk delete.
+ const handleCancelBulkDelete =useCallback(()=>{
+ setBulkDelete(false)
+},[])
+
+// handle confirm Exchange Rates bulk delete.
+const handleConfirmBulkDelete = useCallback(() => {
+ requestDeleteBulkExchangeRates(bulkDelete)
+ .then(() => {
+ setBulkDelete(false);
+ AppToaster.show({
+ message: formatMessage({
+ id: 'the_exchange_rates_has_been_successfully_deleted',
+ }),
+ intent: Intent.SUCCESS,
+ });
+ })
+ .catch((errors) => {
+ setBulkDelete(false);
+ });
+}, [requestDeleteBulkExchangeRates, bulkDelete]);
+
+
+ // Calculates the data table selected rows count.
+ const selectedRowsCount = useMemo(() => Object.values(selectedRows).length, [selectedRows]);
+
+
return (
- 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={`${formatMessage({id:'delete'})} (${selectedRowsCount})`}
+ icon='trash'
+ intent={Intent.DANGER}
+ isOpen={bulkDelete}
+ onCancel={handleCancelBulkDelete}
+ onConfirm={handleConfirmBulkDelete}
+ >
+
+
+
+
+
);
diff --git a/client/src/containers/ExchangeRates/ExchangeRateActionsBar.js b/client/src/containers/ExchangeRates/ExchangeRateActionsBar.js
index af432a388..580a893a7 100644
--- a/client/src/containers/ExchangeRates/ExchangeRateActionsBar.js
+++ b/client/src/containers/ExchangeRates/ExchangeRateActionsBar.js
@@ -13,7 +13,7 @@ import Icon from 'components/Icon';
import { connect } from 'react-redux';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
-import DialogConnect from 'connectors/Dialog.connector';
+import withDialog from 'connectors/Dialog.connector';
import FilterDropdown from 'components/FilterDropdown';
import withResourceDetail from 'containers/Resources/withResourceDetails';
@@ -28,10 +28,12 @@ function ExchangeRateActionsBar({
// #withResourceDetail
resourceFields,
-
+
+ // #ownProps
selectedRows = [],
onDeleteExchangeRate,
onFilterChanged,
+ onBulkDelete
}) {
const [filterCount, setFilterCount] = useState(0);
@@ -48,17 +50,21 @@ function ExchangeRateActionsBar({
},
});
- const handelDeleteExchangeRate = useCallback(
- (exchangeRate) => {
- onDeleteExchangeRate(exchangeRate);
- },
- [selectedRows, onDeleteExchangeRate]
- );
+ // const handelDeleteExchangeRate = useCallback(
+ // (exchangeRate) => {
+ // onDeleteExchangeRate(exchangeRate);
+ // },
+ // [selectedRows, onDeleteExchangeRate]
+ // );
const hasSelectedRows = useMemo(() => selectedRows.length > 0, [
selectedRows,
]);
+ const handelBulkDelete =useCallback(()=>{
+ onBulkDelete && onBulkDelete(selectedRows.map(r=>r.id));
+ },[onBulkDelete,selectedRows])
+
return (
@@ -92,7 +98,7 @@ function ExchangeRateActionsBar({
icon={}
text={}
intent={Intent.DANGER}
- onClick={handelDeleteExchangeRate}
+ onClick={handelBulkDelete}
/>
)}