From 5ffb54992e3d0d63ed5a96d7986d47fbb545ffbc Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Tue, 12 May 2020 04:40:42 +0200 Subject: [PATCH] Fix bugs. --- client/src/components/Sidebar/SidebarMenu.js | 2 +- client/src/components/index.js | 2 + .../Accounting/MakeJournalEntriesForm.js | 8 +- .../Accounting/ManualJournalActionsBar.js | 1 + .../Accounting/ManualJournalsDataTable.js | 5 +- .../Accounting/ManualJournalsList.js | 93 +++++++++++-------- .../Accounting/ManualJournalsViewTabs.js | 25 ++++- .../src/containers/Accounts/AccountsChart.js | 5 +- .../containers/Dialogs/ItemCategoryDialog.js | 1 - .../containers/Items/ItemCategoriesList.js | 80 ++++++++++++++-- .../containers/Items/ItemCategoriesTable.js | 23 ++--- client/src/containers/Items/ItemForm.js | 18 ++-- .../Items/withItemCategoriesActions.js | 2 +- client/src/lang/en/index.js | 11 +++ client/src/store/Invite/invite.action.js | 14 --- .../itemCategories/itemsCategory.actions.js | 6 +- .../itemCategories/itemsCategory.reducer.js | 6 +- .../itemCategories/itemsCateory.reducer.js | 8 +- client/src/store/items/items.actions.js | 11 ++- client/src/store/items/items.reducer.js | 12 +-- client/src/style/pages/manual-journals.scss | 1 - server/src/http/controllers/ItemCategories.js | 2 +- 22 files changed, 221 insertions(+), 115 deletions(-) delete mode 100644 client/src/store/Invite/invite.action.js diff --git a/client/src/components/Sidebar/SidebarMenu.js b/client/src/components/Sidebar/SidebarMenu.js index 5467ead90..4b2b3e35f 100644 --- a/client/src/components/Sidebar/SidebarMenu.js +++ b/client/src/components/Sidebar/SidebarMenu.js @@ -35,7 +35,7 @@ export default function SidebarMenu() { dropdownType={item.dropdownType || 'collapse'} caretIconSize={15} onClick={handleItemClick} - // callapseActive={!!isActive} + callapseActive={!!isActive} className={classNames({ 'is-active': isActive })} /> ); }); diff --git a/client/src/components/index.js b/client/src/components/index.js index 08fdca144..ea1a00a6d 100644 --- a/client/src/components/index.js +++ b/client/src/components/index.js @@ -1,11 +1,13 @@ import If from './Utils/If'; import Money from './Money'; +import Icon from './Icon'; // import Choose from './Utils/Choose'; // import For from './Utils/For'; export { If, Money, + Icon, // Choose, // For, }; \ No newline at end of file diff --git a/client/src/containers/Accounting/MakeJournalEntriesForm.js b/client/src/containers/Accounting/MakeJournalEntriesForm.js index 3115e8418..2538e460b 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesForm.js +++ b/client/src/containers/Accounting/MakeJournalEntriesForm.js @@ -132,7 +132,7 @@ function MakeJournalEntriesForm({ initialValues: { ...initialValues, }, - onSubmit: async (values, { setErrors, setSubmitting }) => { + onSubmit: async (values, { setErrors, setSubmitting, resetForm }) => { const entries = values.entries.filter((entry) => ( (entry.credit || entry.debit) )); @@ -171,11 +171,12 @@ function MakeJournalEntriesForm({ setSubmitting(false); saveInvokeSubmit({ action: 'update', ...payload }); clearSavedMediaIds([]); + resetForm(); resolve(response); }).catch((errors) => { if (errors.find(e => e.type === 'JOURNAL.NUMBER.ALREADY.EXISTS')) { setErrors({ - journal_number: 'Journal number is already used.', + journal_number: formatMessage({ id: 'journal_number_is_already_used' }), }); } setSubmitting(false); @@ -194,11 +195,12 @@ function MakeJournalEntriesForm({ setSubmitting(false); saveInvokeSubmit({ action: 'new', ...payload }); clearSavedMediaIds(); + resetForm(); resolve(response); }).catch((errors) => { if (errors.find(e => e.type === 'JOURNAL.NUMBER.ALREADY.EXISTS')) { setErrors({ - journal_number: 'Journal number is already used.', + journal_number: formatMessage({ id: 'journal_number_is_already_used' }), }); } setSubmitting(false); diff --git a/client/src/containers/Accounting/ManualJournalActionsBar.js b/client/src/containers/Accounting/ManualJournalActionsBar.js index 28423351b..fc12e0650 100644 --- a/client/src/containers/Accounting/ManualJournalActionsBar.js +++ b/client/src/containers/Accounting/ManualJournalActionsBar.js @@ -27,6 +27,7 @@ import withManualJournalsActions from 'containers/Accounting/withManualJournalsA import { FormattedMessage as T, useIntl } from 'react-intl'; + function ManualJournalActionsBar({ // #withResourceDetail resourceName = 'manual_journal', diff --git a/client/src/containers/Accounting/ManualJournalsDataTable.js b/client/src/containers/Accounting/ManualJournalsDataTable.js index 65bbd84a8..15b37d880 100644 --- a/client/src/containers/Accounting/ManualJournalsDataTable.js +++ b/client/src/containers/Accounting/ManualJournalsDataTable.js @@ -9,6 +9,7 @@ import { MenuItem, MenuDivider, Position, + Tag, } from '@blueprintjs/core'; import { useParams } from 'react-router-dom'; import { FormattedMessage as T, useIntl } from 'react-intl'; @@ -145,7 +146,9 @@ function ManualJournalsDataTable({ id: 'status', Header: formatMessage({ id: 'status' }), accessor: (r) => { - return r.status ? 'Published' : 'Draft'; + return r.status + ? : + ; }, disableResizing: true, width: 100, diff --git a/client/src/containers/Accounting/ManualJournalsList.js b/client/src/containers/Accounting/ManualJournalsList.js index c285ef5f8..5d5de9eae 100644 --- a/client/src/containers/Accounting/ManualJournalsList.js +++ b/client/src/containers/Accounting/ManualJournalsList.js @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useCallback } from 'react'; +import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { Route, Switch, useHistory } from 'react-router-dom'; import { useQuery } from 'react-query'; import { Alert, Intent } from '@blueprintjs/core'; @@ -36,17 +36,20 @@ function ManualJournalsTable({ addManualJournalsTableQueries, }) { const history = useHistory(); + const [deleteManualJournal, setDeleteManualJournal] = useState(false); + const [deleteBulk, setDeleteBulk] = useState(false); const [selectedRows, setSelectedRows] = useState([]); const [bulkDelete, setBulkDelete] = useState(false); + const { formatMessage } = useIntl(); + const fetchViews = useQuery('journals-resource-views', () => { return requestFetchResourceViews('manual_journals'); }); - const fetchManualJournals = useQuery('manual-journals-table', () => - requestFetchManualJournalsTable() - ); + const fetchManualJournals = useQuery('manual-journals-table', + () => requestFetchManualJournalsTable()); useEffect(() => { changePageTitle(formatMessage({id:'manual_journals'})); @@ -68,11 +71,24 @@ function ManualJournalsTable({ // Handle confirm delete manual journal. const handleConfirmManualJournalDelete = useCallback(() => { requestDeleteManualJournal(deleteManualJournal.id).then(() => { + AppToaster.show({ + message: formatMessage({ + id: 'the_journal_has_been_successfully_deleted', + }, { + number: deleteManualJournal.journal_number, + }), + intent: Intent.SUCCESS, + }); setDeleteManualJournal(false); - AppToaster.show({ message: 'the_manual_Journal_has_been_deleted' }); }); }, [deleteManualJournal, requestDeleteManualJournal]); + + // Calculates the selected rows count. + const selectedRowsCount = useMemo( + () => Object.values(selectedRows).length, + [selectedRows]); + const handleBulkDelete = useCallback( (accountsIds) => { setBulkDelete(accountsIds); @@ -80,17 +96,26 @@ function ManualJournalsTable({ [setBulkDelete] ); + // Handle confirm journals bulk delete. const handleConfirmBulkDelete = useCallback(() => { requestDeleteBulkManualJournals(bulkDelete) .then(() => { + AppToaster.show({ + message: formatMessage({ + id: 'the_journals_has_been_successfully_deleted', + }, { + count: selectedRowsCount, + }), + intent: Intent.SUCCESS, + }); setBulkDelete(false); - AppToaster.show({ message: 'the_accounts_have_been_deleted' }); }) .catch((error) => { setBulkDelete(false); }); }, [requestDeleteBulkManualJournals, bulkDelete]); + // Handle cancel bulk delete alert. const handleCancelBulkDelete = useCallback(() => { setBulkDelete(false); }, []); @@ -104,28 +129,23 @@ function ManualJournalsTable({ // Handle filter change to re-fetch data-table. const handleFilterChanged = useCallback(() => { - fetchManualJournals.refetch(); + }, [fetchManualJournals]); // Handle view change to re-fetch data table. const handleViewChanged = useCallback(() => { - fetchManualJournals.refetch(); + }, [fetchManualJournals]); // Handle fetch data of manual jouranls datatable. - const handleFetchData = useCallback( - ({ pageIndex, pageSize, sortBy }) => { - addManualJournalsTableQueries({ - ...(sortBy.length > 0 - ? { - column_sort_by: sortBy[0].id, - sort_order: sortBy[0].desc ? 'desc' : 'asc', - } - : {}), - }); - }, - [addManualJournalsTableQueries] - ); + const handleFetchData = useCallback(({ pageIndex, pageSize, sortBy }) => { + addManualJournalsTableQueries({ + ...(sortBy.length > 0) ? { + column_sort_by: sortBy[0].id, + sort_order: sortBy[0].desc ? 'desc' : 'asc', + } : {}, + }); + }, [addManualJournalsTableQueries]); const handlePublishJournal = useCallback( (journal) => { @@ -165,45 +185,40 @@ function ManualJournalsTable({ '/dashboard/accounting/manual-journals/:custom_view_id/custom_view', '/dashboard/accounting/manual-journals', ]}> + + + - - } - confirmButtonText={} + confirmButtonText={} icon='trash' intent={Intent.DANGER} isOpen={deleteManualJournal} onCancel={handleCancelManualJournalDelete} onConfirm={handleConfirmManualJournalDelete} > -

- 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={} + confirmButtonText={} icon='trash' intent={Intent.DANGER} isOpen={bulkDelete} onCancel={handleCancelBulkDelete} 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. -

+

diff --git a/client/src/containers/Accounting/ManualJournalsViewTabs.js b/client/src/containers/Accounting/ManualJournalsViewTabs.js index 8ab8d5fa1..a3bd8c3bc 100644 --- a/client/src/containers/Accounting/ManualJournalsViewTabs.js +++ b/client/src/containers/Accounting/ManualJournalsViewTabs.js @@ -8,12 +8,14 @@ import { Tab, Button, } from '@blueprintjs/core'; -import { useParams } from 'react-router-dom'; -import Icon from 'components/Icon'; +import { useParams, withRouter } from 'react-router-dom'; import { Link } from 'react-router-dom'; -import { compose } from 'utils'; +import { connect } from 'react-redux'; +import { FormattedMessage as T } from 'react-intl'; import { useUpdateEffect } from 'hooks'; +import { compose } from 'utils'; +import Icon from 'components/Icon'; import withManualJournals from './withManualJournals'; import withManualJournalsActions from './withManualJournalsActions'; @@ -85,10 +87,14 @@ function ManualJournalsViewTabs({ All + + + } /> - {tabs} + + { tabs } +