diff --git a/client/src/config/sidebarMenu.js b/client/src/config/sidebarMenu.js index 0d2ce6457..1f904e8cd 100644 --- a/client/src/config/sidebarMenu.js +++ b/client/src/config/sidebarMenu.js @@ -95,7 +95,19 @@ export default [ text: , children: [], }, - + { + text: , + children: [ + { + text: , + href: '/expenses-list', + }, + { + text: , + href: '/expenses/new', + }, + ], + }, { text: , children: [ @@ -136,19 +148,6 @@ export default [ } ], }, - { - text: , - children: [ - { - text: , - href: '/expenses-list', - }, - { - text: , - href: '/expenses/new', - }, - ], - }, { divider: true, }, diff --git a/client/src/containers/Accounts/AccountsChart.js b/client/src/containers/Accounts/AccountsChart.js index d42ccb631..bb99b7825 100644 --- a/client/src/containers/Accounts/AccountsChart.js +++ b/client/src/containers/Accounts/AccountsChart.js @@ -1,7 +1,7 @@ import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { Route, Switch } from 'react-router-dom'; import { Alert, Intent } from '@blueprintjs/core'; -import { useQuery } from 'react-query'; +import { useQuery, queryCache } from 'react-query'; import { FormattedMessage as T, FormattedHTMLMessage, @@ -139,16 +139,22 @@ function AccountsChart({ }, []); // Handle confirm account activation. + const handleConfirmAccountActive = useCallback(() => { - requestInactiveAccount(inactiveAccount.id).then(() => { - setInactiveAccount(false); - AppToaster.show({ - message: formatMessage({ - id: 'the_account_has_been_successfully_inactivated', - }), - intent: Intent.SUCCESS, + requestInactiveAccount(inactiveAccount.id) + .then(() => { + setInactiveAccount(false); + AppToaster.show({ + message: formatMessage({ + id: 'the_account_has_been_successfully_inactivated', + }), + intent: Intent.SUCCESS, + }); + queryCache.invalidateQueries('accounts-table'); + }) + .catch((error) => { + setInactiveAccount(false); }); - }); }, [inactiveAccount, requestInactiveAccount, formatMessage]); // Handle activate account click. @@ -163,16 +169,21 @@ function AccountsChart({ // Handle activate account confirm. const handleConfirmAccountActivate = useCallback(() => { - requestActivateAccount(activateAccount.id).then(() => { - setActivateAccount(false); - AppToaster.show({ - message: formatMessage({ - id: 'the_account_has_been_successfully_activated', - }), - intent: Intent.SUCCESS, + requestActivateAccount(activateAccount.id) + .then(() => { + setActivateAccount(false); + AppToaster.show({ + message: formatMessage({ + id: 'the_account_has_been_successfully_activated', + }), + intent: Intent.SUCCESS, + }); + queryCache.invalidateQueries('accounts-table'); + }) + .catch((error) => { + setActivateAccount(false); }); - }); - }); + }, [activateAccount, requestActivateAccount, formatMessage]); const handleRestoreAccount = (account) => {}; diff --git a/client/src/containers/Accounts/AccountsDataTable.js b/client/src/containers/Accounts/AccountsDataTable.js index b2b3e1420..dc189b593 100644 --- a/client/src/containers/Accounts/AccountsDataTable.js +++ b/client/src/containers/Accounts/AccountsDataTable.js @@ -114,7 +114,11 @@ function AccountsDataTable({ const handleNewParentAccount = useCallback( (account) => { - openDialog('account-form', { action: 'new_child', id: account.id }); + openDialog('account-form', { + action: 'new_child', + parentAccountId: account.id, + accountTypeId: account.account_type_id, + }); }, [openDialog], ); diff --git a/client/src/containers/Accounts/withAccountsActions.js b/client/src/containers/Accounts/withAccountsActions.js index d366ff664..1fc68e5f1 100644 --- a/client/src/containers/Accounts/withAccountsActions.js +++ b/client/src/containers/Accounts/withAccountsActions.js @@ -10,7 +10,7 @@ import { deleteBulkAccounts, bulkActivateAccounts, bulkInactiveAccounts, - editAccount + editAccount, } from 'store/accounts/accounts.actions'; const mapActionsToProps = (dispatch) => ({ @@ -22,9 +22,9 @@ 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})), - requestEditAccount:({id,form}) => dispatch(editAccount({id,form})) + requestBulkActivateAccounts: (ids) => dispatch(bulkActivateAccounts({ ids })), + requestBulkInactiveAccounts: (ids) => dispatch(bulkInactiveAccounts({ ids })), + requestEditAccount: (id, form) => dispatch(editAccount(id, form)), }); -export default connect(null, mapActionsToProps); \ No newline at end of file +export default connect(null, mapActionsToProps); diff --git a/client/src/containers/Dialogs/AccountFormDialog.container.js b/client/src/containers/Dialogs/AccountFormDialog.container.js index a3e25ccca..3708a4c75 100644 --- a/client/src/containers/Dialogs/AccountFormDialog.container.js +++ b/client/src/containers/Dialogs/AccountFormDialog.container.js @@ -8,12 +8,16 @@ import withAccounts from 'containers/Accounts/withAccounts'; export const mapStateToProps = (state, props) => ({ dialogName: 'account-form', + accountId: + props.payload.action === 'edit' && props.payload.id + ? props.payload.id + : null, }); const AccountFormDialogConnect = connect(mapStateToProps); export default compose( - AccountFormDialogConnect, withDialogRedux(null, 'account-form'), + AccountFormDialogConnect, withAccountsActions, withAccountDetail, withAccounts(({ accountsTypes, accounts }) => ({ diff --git a/client/src/containers/Dialogs/AccountFormDialog.js b/client/src/containers/Dialogs/AccountFormDialog.js index 79a31d5c9..f9a5d0bd0 100644 --- a/client/src/containers/Dialogs/AccountFormDialog.js +++ b/client/src/containers/Dialogs/AccountFormDialog.js @@ -13,6 +13,7 @@ import { import * as Yup from 'yup'; import { useFormik } from 'formik'; import { FormattedMessage as T, useIntl } from 'react-intl'; +import { If } from 'components'; import { omit, pick } from 'lodash'; import { useQuery, queryCache } from 'react-query'; import classNames from 'classnames'; @@ -61,14 +62,16 @@ function AccountFormDialog({ .nullable() .required() .label(formatMessage({ id: 'account_type_id' })), - description: Yup.string().trim(), + description: Yup.string().nullable().trim(), + // parent_account_id: Yup.string().nullable(), }); - const initialValues = useMemo( () => ({ account_type_id: null, name: '', description: '', + code: '', + type: '', }), [], ); @@ -94,7 +97,11 @@ function AccountFormDialog({ } = useFormik({ enableReinitialize: true, initialValues: { - ...(payload.action === 'edit' && account ? account : initialValues), + // ...initialValues, + // ...(payload.action === 'edit' && account ? account : initialValues), + + ...(payload.action === 'edit' && + pick(account, Object.keys(initialValues))), }, validationSchema: accountFormValidationSchema, onSubmit: (values, { setSubmitting, setErrors }) => { @@ -104,21 +111,10 @@ function AccountFormDialog({ : values.name; if (payload.action === 'edit') { - requestEditAccount({ - payload: payload.id, - // form: { ...omit(values, [...exclude, 'account_type_id']) }, - form: { - ...pick(values, [ - ...exclude, - 'account_type_id', - 'name', - 'description', - ]), - }, - }) + requestEditAccount(payload.id, values) .then((response) => { closeDialog(dialogName); - queryCache.refetchQueries('accounts-table', { force: true }); + queryCache.invalidateQueries('accounts-table', { force: true }); AppToaster.show({ message: formatMessage( @@ -137,10 +133,13 @@ function AccountFormDialog({ setSubmitting(false); }); } else { - requestSubmitAccount({ form: { ...omit(values, exclude) } }) + requestSubmitAccount({ + payload: payload.parent_account_id, + form: { ...omit(values, exclude) }, + }) .then((response) => { closeDialog(dialogName); - queryCache.refetchQueries('accounts-table', { force: true }); + queryCache.invalidateQueries('accounts-table', { force: true }); AppToaster.show({ message: formatMessage( @@ -155,6 +154,7 @@ function AccountFormDialog({ }); }) .catch((errors) => { + debugger; const errorsTransformed = transformApiErrors(errors); setErrors({ ...errorsTransformed }); setSubmitting(false); @@ -227,7 +227,7 @@ function AccountFormDialog({ const fetchAccountsList = useQuery( 'accounts-list', () => requestFetchAccounts(), - { enabled: true }, + { enabled: false }, ); // Fetches accounts types. @@ -236,13 +236,13 @@ function AccountFormDialog({ async () => { await requestFetchAccountTypes(); }, - { enabled: true }, + { enabled: false }, ); // Fetch the given account id on edit mode. const fetchAccount = useQuery( ['account', payload.id], - (key, id) => requestFetchAccount(id), + (key, _id) => requestFetchAccount(_id), { enabled: false }, ); @@ -258,8 +258,13 @@ function AccountFormDialog({ if (payload.action === 'edit' && payload.id) { fetchAccount.refetch(); - } - }, [payload, fetchAccount, fetchAccountsList, fetchAccountsTypes]); + } + if (payload.action === 'new_child') { + setFieldValue('subaccount', true); + setFieldValue('parent_account_id', payload.parentAccountId); + setFieldValue('account_type_id', payload.accountTypeId); + } + }, [fetchAccount, fetchAccountsList, fetchAccountsTypes]); const onChangeAccountType = useCallback( (accountType) => { @@ -367,7 +372,7 @@ function AccountFormDialog({ intent={errors.code && touched.code && Intent.DANGER} helperText={} inline={true} - labelInfo={} />} + labelInfo={} />} > - {values.subaccount && ( + } className={classNames( @@ -411,7 +417,7 @@ function AccountFormDialog({ labelProp={'name'} /> - )} + } diff --git a/client/src/containers/Dialogs/CurrencyDialog.js b/client/src/containers/Dialogs/CurrencyDialog.js index 37ceb8c28..f7959b22b 100644 --- a/client/src/containers/Dialogs/CurrencyDialog.js +++ b/client/src/containers/Dialogs/CurrencyDialog.js @@ -91,7 +91,7 @@ function CurrencyDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('currencies', { force: true }); + queryCache.invalidateQueries('currencies'); }) .catch((error) => { setSubmitting(false); @@ -107,7 +107,7 @@ function CurrencyDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('currencies', { force: true }); + queryCache.invalidateQueries('currencies'); }) .catch((error) => { setSubmitting(false); diff --git a/client/src/containers/Dialogs/ExchangeRateDialog.js b/client/src/containers/Dialogs/ExchangeRateDialog.js index 7ea2a124f..af97adbc7 100644 --- a/client/src/containers/Dialogs/ExchangeRateDialog.js +++ b/client/src/containers/Dialogs/ExchangeRateDialog.js @@ -70,8 +70,10 @@ function ExchangeRateDialog({ [], ); - const fetchExchangeRatesDialog = useQuery('exchange-rates-dialog', () => - requestFetchExchangeRates(), + const fetchExchangeRatesDialog = useQuery( + 'exchange-rates-dialog', + () => requestFetchExchangeRates(), + { manual: true }, ); const { @@ -102,7 +104,7 @@ function ExchangeRateDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.removeQueries('exchange-rates-dialog', { force: true }); + queryCache.invalidateQueries('exchange-rates-dialog'); }) .catch((error) => { setSubmitting(false); @@ -118,7 +120,7 @@ function ExchangeRateDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('exchange-rates-table', { force: true }); + queryCache.invalidateQueries('exchange-rates-table'); }) .catch((errors) => { if ( diff --git a/client/src/containers/Dialogs/InviteUserDialog.js b/client/src/containers/Dialogs/InviteUserDialog.js index dc98b9d95..f629e9776 100644 --- a/client/src/containers/Dialogs/InviteUserDialog.js +++ b/client/src/containers/Dialogs/InviteUserDialog.js @@ -92,7 +92,7 @@ function InviteUserDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('users-table', { force: true }); + queryCache.invalidateQueries('users-table'); }) .catch((error) => { setSubmitting(false); diff --git a/client/src/containers/Dialogs/ItemCategoryDialog.js b/client/src/containers/Dialogs/ItemCategoryDialog.js index 8a6f7cc71..b2087ae6d 100644 --- a/client/src/containers/Dialogs/ItemCategoryDialog.js +++ b/client/src/containers/Dialogs/ItemCategoryDialog.js @@ -106,9 +106,7 @@ function ItemCategoryDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('items-categories-table', { - force: true, - }); + queryCache.invalidateQueries('items-categories-table'); }) .catch((error) => { setSubmitting(false); @@ -124,9 +122,7 @@ function ItemCategoryDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('items-categories-table', { - force: true, - }); + queryCache.invalidateQueries('items-categories-table'); }) .catch((error) => { setSubmitting(false); diff --git a/client/src/containers/Dialogs/UserFormDialog.js b/client/src/containers/Dialogs/UserFormDialog.js index ae1954bf4..accdef28a 100644 --- a/client/src/containers/Dialogs/UserFormDialog.js +++ b/client/src/containers/Dialogs/UserFormDialog.js @@ -80,7 +80,7 @@ function UserFormDialog({ intent: Intent.SUCCESS, }); setSubmitting(false); - queryCache.refetchQueries('users-table', { force: true }); + queryCache.invalidateQueries('users-table'); }) .catch((errors) => { setSubmitting(false); diff --git a/client/src/containers/Expenses/ExpenseForm.js b/client/src/containers/Expenses/ExpenseForm.js index dd4dba147..6bcb28760 100644 --- a/client/src/containers/Expenses/ExpenseForm.js +++ b/client/src/containers/Expenses/ExpenseForm.js @@ -48,8 +48,6 @@ function ExpenseForm({ expenseId, onFormSubmit, onCancelForm, - onClickAddNewRow, - onClickRemoveRow, }) { const { formatMessage } = useIntl(); const [payload, setPayload] = useState({}); @@ -76,16 +74,13 @@ function ExpenseForm({ useEffect(() => { if (expense && expense.id) { changePageTitle(formatMessage({ id: 'edit_expense' })); - // changePageSubtitle(`No. ${expenseDetail.payment_account_id}`); } else { changePageTitle(formatMessage({ id: 'new_expense' })); } - // @todo not functions just states. - }, [changePageTitle, changePageSubtitle, expense, formatMessage]); + }, [changePageTitle, expense, formatMessage]); const validationSchema = Yup.object().shape({ - beneficiary: Yup.string() - .label(formatMessage({ id: 'beneficiary' })), + beneficiary: Yup.string().label(formatMessage({ id: 'beneficiary' })), payment_account_id: Yup.string() .required() .label(formatMessage({ id: 'payment_account_' })), @@ -272,7 +267,6 @@ function ExpenseForm({ const handleSubmitClick = useCallback( (payload) => { setPayload(payload); - formik.resetForm(); formik.handleSubmit(); }, [setPayload, formik], diff --git a/client/src/containers/Expenses/ExpenseTable.js b/client/src/containers/Expenses/ExpenseTable.js index 733ac2912..162dfb9f3 100644 --- a/client/src/containers/Expenses/ExpenseTable.js +++ b/client/src/containers/Expenses/ExpenseTable.js @@ -51,7 +51,6 @@ function ExpenseTable({ setRow(newRows); setFieldValue( 'categories', - newRows.map((row, index) => ({ ...omit(row, ['rowType']), index: index + 1, diff --git a/client/src/containers/Preferences/General/General.js b/client/src/containers/Preferences/General/General.js index d0a7fd82a..e9aea064c 100644 --- a/client/src/containers/Preferences/General/General.js +++ b/client/src/containers/Preferences/General/General.js @@ -193,8 +193,6 @@ function GeneralPreferences({ .label(formatMessage({ id: 'date_format_' })), }); - const query = queryCache.refetchQueries('settings'); - const { values, errors, @@ -224,7 +222,7 @@ function GeneralPreferences({ }); setSubmitting(false); resetForm(); - queryCache.refetchQueries('settings', { force: true }); + queryCache.invalidateQueries('settings'); }) .catch((error) => { setSubmitting(false); diff --git a/client/src/containers/Preferences/Users/UsersList.js b/client/src/containers/Preferences/Users/UsersList.js index c843d0217..0c28b6c94 100644 --- a/client/src/containers/Preferences/Users/UsersList.js +++ b/client/src/containers/Preferences/Users/UsersList.js @@ -79,7 +79,7 @@ function UsersListPreferences({ }), intent: Intent.SUCCESS, }); - queryCache.refetchQueries('users-table', { force: true }); + queryCache.invalidateQueries('users-table'); }) .catch((error) => { setInactiveUserState(false); @@ -108,7 +108,6 @@ function UsersListPreferences({ ); // Handle confirm User delete - const handleConfirmUserDelete = useCallback(() => { if (!deleteUserState) { return; @@ -122,7 +121,7 @@ function UsersListPreferences({ }), intent: Intent.SUCCESS, }); - queryCache.refetchQueries('users-table', { force: true }); + queryCache.invalidateQueries('users-table'); }) .catch((errors) => { setDeleteUserState(false); diff --git a/client/src/containers/Views/ViewForm.js b/client/src/containers/Views/ViewForm.js index 4c022e691..58fa48c93 100644 --- a/client/src/containers/Views/ViewForm.js +++ b/client/src/containers/Views/ViewForm.js @@ -78,8 +78,8 @@ function ViewForm({ const validationSchema = Yup.object().shape({ resource_name: Yup.string().required(), - name: Yup.string().required(), - logic_expression: Yup.string().required(), + name: Yup.string().required().label(intl.formatMessage({id:'name_'})), + logic_expression: Yup.string().required().label(intl.formatMessage({id:'logic_expression'})), roles: Yup.array().of( Yup.object().shape({ comparator: Yup.string().required(), diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index 8e44a0462..06e996664 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -450,6 +450,7 @@ export default { as_date: 'As Date', aging_before_days: 'Aging before days', aging_periods: 'Aging periods', + name_:'name', as: 'As', receivable_aging_summary: 'Receivable Aging Summary', customers: 'Customers', @@ -525,4 +526,5 @@ export default { journal_number_is_already_used: 'Journal number is already used.', account_code_hint: 'A unique code/number for this account (limited to 10 characters)', + logic_expression: 'logic expression', }; diff --git a/client/src/store/accounts/accounts.actions.js b/client/src/store/accounts/accounts.actions.js index 6847186d6..65ff7f07d 100644 --- a/client/src/store/accounts/accounts.actions.js +++ b/client/src/store/accounts/accounts.actions.js @@ -6,44 +6,48 @@ export const fetchAccountTypes = () => { return (dispatch, getState) => new Promise((resolve, reject) => { ApiService.get('account_types') - .then(response => { + .then((response) => { dispatch({ type: t.ACCOUNT_TYPES_LIST_SET, - account_types: response.data.account_types + account_types: response.data.account_types, }); resolve(response); }) - .catch(error => { reject(error); }); + .catch((error) => { + reject(error); + }); }); }; export const fetchAccountsList = ({ query } = {}) => { - return dispatch => new Promise((resolve, reject) => { - dispatch({ - type: t.SET_DASHBOARD_REQUEST_LOADING, + return (dispatch) => + new Promise((resolve, reject) => { + dispatch({ + type: t.SET_DASHBOARD_REQUEST_LOADING, + }); + ApiService.get('accounts', { params: query }) + .then((response) => { + dispatch({ + type: t.ACCOUNTS_PAGE_SET, + accounts: response.data.accounts, + customViewId: response.data.customViewId, + }); + dispatch({ + type: t.ACCOUNTS_ITEMS_SET, + accounts: response.data.accounts, + }); + dispatch({ + type: t.SET_DASHBOARD_REQUEST_COMPLETED, + }); + resolve(response); + }) + .catch((error) => { + dispatch({ + type: t.SET_DASHBOARD_REQUEST_COMPLETED, + }); + reject(error); + }); }); - ApiService.get('accounts', { params: query }).then(response => { - dispatch({ - type: t.ACCOUNTS_PAGE_SET, - accounts: response.data.accounts, - customViewId: response.data.customViewId - }); - dispatch({ - type: t.ACCOUNTS_ITEMS_SET, - accounts: response.data.accounts - }); - dispatch({ - type: t.SET_DASHBOARD_REQUEST_COMPLETED, - }); - resolve(response); - }) - .catch((error) => { - dispatch({ - type: t.SET_DASHBOARD_REQUEST_COMPLETED, - }); - reject(error); - }); - }); }; export const fetchAccountsTable = ({ query } = {}) => { @@ -54,7 +58,8 @@ export const fetchAccountsTable = ({ query } = {}) => { if (pageQuery.filter_roles) { pageQuery = { ...omit(pageQuery, ['filter_roles']), - stringified_filter_roles: JSON.stringify(pageQuery.filter_roles) || '', + stringified_filter_roles: + JSON.stringify(pageQuery.filter_roles) || '', }; } dispatch({ @@ -69,11 +74,11 @@ export const fetchAccountsTable = ({ query } = {}) => { dispatch({ type: t.ACCOUNTS_PAGE_SET, accounts: response.data.accounts, - customViewId: response.data.customViewId + customViewId: response.data.customViewId, }); dispatch({ type: t.ACCOUNTS_ITEMS_SET, - accounts: response.data.accounts + accounts: response.data.accounts, }); dispatch({ type: t.ACCOUNTS_TABLE_LOADING, @@ -94,29 +99,29 @@ export const fetchAccountsTable = ({ query } = {}) => { }; export const fetchAccountsDataTable = ({ query }) => { - return dispatch => + return (dispatch) => new Promise((resolve, reject) => { ApiService.get('accounts') - .then(response => { + .then((response) => { dispatch({ type: t.ACCOUNTS_DATA_TABLE, - data: response.data + data: response.data, }); }) - .catch(error => { + .catch((error) => { reject(error); }); }); }; export const submitAccount = ({ form }) => { - return dispatch => + return (dispatch) => new Promise((resolve, reject) => { dispatch({ type: t.SET_DASHBOARD_REQUEST_LOADING, }); ApiService.post('accounts', form) - .then(response => { + .then((response) => { dispatch({ type: t.ACCOUNT_ERRORS_CLEAR, }); @@ -125,140 +130,147 @@ export const submitAccount = ({ form }) => { }); resolve(response); }) - .catch(error => { + .catch((error) => { const { response } = error; const { data } = response; - const { errors } = data; dispatch({ type: t.ACCOUNT_ERRORS_CLEAR, }); - if (errors) { + if (error) { dispatch({ type: t.ACCOUNT_ERRORS_SET, - payload: { errors }, + payload: { error }, }); } dispatch({ type: t.SET_DASHBOARD_REQUEST_COMPLETED, }); - reject(errors); + reject(data?.errors); }); }); }; -export const editAccount = ({ id, form }) => { - return dispatch => new Promise((resolve, reject) => { - dispatch({ - type: t.SET_DASHBOARD_REQUEST_LOADING, - }); - ApiService.post(`accounts/${id}`, form) - .then(response => { - dispatch({ type: t.CLEAR_ACCOUNT_FORM_ERRORS }); - dispatch({ - type: t.SET_DASHBOARD_REQUEST_COMPLETED, - }); - resolve(response); - }) - .catch(error => { - const { response } = error; - const { data } = response; - const { errors } = data; - - dispatch({ type: t.CLEAR_ACCOUNT_FORM_ERRORS }); - if (errors) { - dispatch({ type: t.ACCOUNT_FORM_ERRORS, errors }); - } - dispatch({ - type: t.SET_DASHBOARD_REQUEST_COMPLETED, - }); - reject(errors); - }); - }); -}; - -export const activateAccount = ({ id }) => { - return dispatch => ApiService.post(`accounts/${id}/active`); -}; - -export const inactiveAccount = ({ id }) => { - return dispatch => ApiService.post(`accounts/${id}/inactive`); -}; - -export const bulkActivateAccounts =({ids})=>{ - - return dispatch => new Promise((resolve, reject) => { - - ApiService.post(`accounts/bulk/activate`, null, { params: { ids }}).then((response) => { - dispatch({ - type: t.BULK_ACTIVATE_ACCOUNTS, - payload: { ids } - }); - resolve(response); - }).catch((error) => { - reject(error); - }); - }); -} - -export const bulkInactiveAccounts =({ids})=>{ - - return dispatch => new Promise((resolve, reject) => { - - ApiService.post(`accounts/bulk/inactivate`, null, { params: { ids }}).then((response) => { - dispatch({ - type: t.BULK_INACTIVATE_ACCOUNTS, - payload: { ids } - }); - resolve(response); - }).catch((error) => { - reject(error); - }); - }); -} - - -export const deleteAccount = ({ id }) => { - return dispatch => new Promise((resolve, reject) => { - ApiService.delete(`accounts/${id}`).then((response) => { - dispatch({ type: t.ACCOUNT_DELETE, id }); - resolve(response); - }).catch((error) => { - reject(error.response.data.errors || []); - }); - }); -}; - -export const deleteBulkAccounts = ({ ids }) => { - return dispatch => new Promise((resolve, reject) => { - ApiService.delete(`accounts`, { params: { ids }}).then((response) => { - dispatch({ - type: t.ACCOUNTS_BULK_DELETE, - payload: { ids } - }); - resolve(response); - }).catch((error) => { - const { response } = error; - const { data } = response; - const { errors } = data; - - reject(errors); - }); - }); -}; - -export const fetchAccount = ({ id }) => { - return dispatch => +export const editAccount = (id, form) => { + return (dispatch) => new Promise((resolve, reject) => { - ApiService.get(`accounts/${id}`) - .then(response => { + dispatch({ + type: t.SET_DASHBOARD_REQUEST_LOADING, + }); + ApiService.post(`accounts/${id}`, form) + .then((response) => { + dispatch({ type: t.CLEAR_ACCOUNT_FORM_ERRORS }); dispatch({ - type: t.ACCOUNT_SET, - account: response.data.account + type: t.SET_DASHBOARD_REQUEST_COMPLETED, }); resolve(response); }) - .catch(error => { + .catch((error) => { + const { response } = error; + const { data } = response; + // const { errors } = data; + + dispatch({ type: t.CLEAR_ACCOUNT_FORM_ERRORS }); + if (error) { + dispatch({ type: t.ACCOUNT_FORM_ERRORS, error }); + } + dispatch({ + type: t.SET_DASHBOARD_REQUEST_COMPLETED, + }); + reject(data?.errors); + }); + }); +}; + +export const activateAccount = ({ id }) => { + return (dispatch) => ApiService.post(`accounts/${id}/active`); +}; + +export const inactiveAccount = ({ id }) => { + return (dispatch) => ApiService.post(`accounts/${id}/inactive`); +}; + +export const bulkActivateAccounts = ({ ids }) => { + return (dispatch) => + new Promise((resolve, reject) => { + ApiService.post(`accounts/bulk/activate`, null, { params: { ids } }) + .then((response) => { + dispatch({ + type: t.BULK_ACTIVATE_ACCOUNTS, + payload: { ids }, + }); + resolve(response); + }) + .catch((error) => { + reject(error); + }); + }); +}; + +export const bulkInactiveAccounts = ({ ids }) => { + return (dispatch) => + new Promise((resolve, reject) => { + ApiService.post(`accounts/bulk/inactivate`, null, { params: { ids } }) + .then((response) => { + dispatch({ + type: t.BULK_INACTIVATE_ACCOUNTS, + payload: { ids }, + }); + resolve(response); + }) + .catch((error) => { + reject(error); + }); + }); +}; + +export const deleteAccount = ({ id }) => { + return (dispatch) => + new Promise((resolve, reject) => { + ApiService.delete(`accounts/${id}`) + .then((response) => { + dispatch({ type: t.ACCOUNT_DELETE, id }); + resolve(response); + }) + .catch((error) => { + reject(error.response.data.errors || []); + }); + }); +}; + +export const deleteBulkAccounts = ({ ids }) => { + return (dispatch) => + new Promise((resolve, reject) => { + ApiService.delete(`accounts`, { params: { ids } }) + .then((response) => { + dispatch({ + type: t.ACCOUNTS_BULK_DELETE, + payload: { ids }, + }); + resolve(response); + }) + .catch((error) => { + const { response } = error; + const { data } = response; + // const { errors } = data; + + reject(data?.errors); + }); + }); +}; + +export const fetchAccount = ({ id }) => { + return (dispatch) => + new Promise((resolve, reject) => { + ApiService.get(`accounts/${id}`) + .then((response) => { + dispatch({ + type: t.ACCOUNT_SET, + account: response.data.account, + }); + resolve(response); + }) + .catch((error) => { reject(error); }); });