feat: add account ability.

This commit is contained in:
elforjani13
2021-11-23 21:42:16 +02:00
parent 6ec86d3cf7
commit 7393d68b7a
3 changed files with 85 additions and 62 deletions

View File

@@ -15,6 +15,7 @@ import { FormattedMessage as T } from 'components';
import { import {
AdvancedFilterPopover, AdvancedFilterPopover,
If, If,
Can,
DashboardActionViewsList, DashboardActionViewsList,
DashboardFilterButton, DashboardFilterButton,
DashboardRowsHeightButton, DashboardRowsHeightButton,
@@ -30,6 +31,8 @@ import withAlertActions from 'containers/Alert/withAlertActions';
import withAccountsTableActions from './withAccountsTableActions'; import withAccountsTableActions from './withAccountsTableActions';
import withSettings from '../Settings/withSettings'; import withSettings from '../Settings/withSettings';
import withSettingsActions from '../Settings/withSettingsActions'; import withSettingsActions from '../Settings/withSettingsActions';
import { Account_Abilities, AbilitySubject } from '../../common/abilityOption';
import { compose } from 'utils'; import { compose } from 'utils';
/** /**
@@ -116,13 +119,14 @@ function AccountsActionsBar({
onChange={handleTabChange} onChange={handleTabChange}
/> />
<NavbarDivider /> <NavbarDivider />
<Can I={Account_Abilities.Create} a={AbilitySubject.Account}>
<Button <Button
className={Classes.MINIMAL} className={Classes.MINIMAL}
icon={<Icon icon="plus" />} icon={<Icon icon="plus" />}
text={<T id={'new_account'} />} text={<T id={'new_account'} />}
onClick={onClickNewAccount} onClick={onClickNewAccount}
/> />
</Can>
<AdvancedFilterPopover <AdvancedFilterPopover
advancedFilterProps={{ advancedFilterProps={{
conditions: accountsFilterConditions, conditions: accountsFilterConditions,
@@ -183,11 +187,13 @@ function AccountsActionsBar({
onChange={handleTableRowSizeChange} onChange={handleTableRowSizeChange}
/> />
<NavbarDivider /> <NavbarDivider />
<Switch <Can I={Account_Abilities.Edit} a={AbilitySubject.Account}>
labelElement={<T id={'inactive'} />} <Switch
defaultChecked={accountsInactiveMode} labelElement={<T id={'inactive'} />}
onChange={handleInactiveSwitchChange} defaultChecked={accountsInactiveMode}
/> onChange={handleInactiveSwitchChange}
/>
</Can>
</NavbarGroup> </NavbarGroup>
<NavbarGroup align={Alignment.RIGHT}> <NavbarGroup align={Alignment.RIGHT}>
<Button <Button

View File

@@ -8,9 +8,10 @@ import {
MenuDivider, MenuDivider,
Intent, Intent,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { Icon, Money, If } from 'components'; import { Can, Icon, Money, If } from 'components';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import { AbilitySubject, Account_Abilities } from '../../common/abilityOption';
/** /**
* Accounts table actions menu. * Accounts table actions menu.
@@ -34,38 +35,45 @@ export function ActionsMenu({
text={intl.get('view_details')} text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)} onClick={safeCallback(onViewDetails, original)}
/> />
<MenuDivider /> <Can I={Account_Abilities.Edit} a={AbilitySubject.Account}>
<MenuItem <MenuDivider />
icon={<Icon icon="pen-18" />}
text={intl.get('edit_account')}
onClick={safeCallback(onEdit, original)}
/>
<MenuItem
icon={<Icon icon="plus" />}
text={intl.get('new_child_account')}
onClick={safeCallback(onNewChild, original)}
/>
<MenuDivider />
<If condition={original.active}>
<MenuItem <MenuItem
text={intl.get('inactivate_account')} icon={<Icon icon="pen-18" />}
icon={<Icon icon="pause-16" iconSize={16} />} text={intl.get('edit_account')}
onClick={safeCallback(onInactivate, original)} onClick={safeCallback(onEdit, original)}
/> />
</If>
<If condition={!original.active}>
<MenuItem <MenuItem
text={intl.get('activate_account')} icon={<Icon icon="plus" />}
icon={<Icon icon="play-16" iconSize={16} />} text={intl.get('new_child_account')}
onClick={safeCallback(onActivate, original)} onClick={safeCallback(onNewChild, original)}
/> />
</If> <MenuDivider />
<MenuItem </Can>
text={intl.get('delete_account')} <Can I={Account_Abilities.Edit} a={AbilitySubject.Account}>
icon={<Icon icon="trash-16" iconSize={16} />} <If condition={original.active}>
intent={Intent.DANGER} <MenuItem
onClick={safeCallback(onDelete, original)} text={intl.get('inactivate_account')}
/> icon={<Icon icon="pause-16" iconSize={16} />}
onClick={safeCallback(onInactivate, original)}
/>
</If>
<If condition={!original.active}>
<MenuItem
text={intl.get('activate_account')}
icon={<Icon icon="play-16" iconSize={16} />}
onClick={safeCallback(onActivate, original)}
/>
</If>
</Can>
<Can I={Account_Abilities.Edit} a={AbilitySubject.Account}>
<MenuItem
text={intl.get('delete_account')}
icon={<Icon icon="trash-16" iconSize={16} />}
intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -7,13 +7,17 @@ import {
Intent, Intent,
NavbarDivider, NavbarDivider,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { FormattedMessage as T } from 'components'; import { Can, FormattedMessage as T } from 'components';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import withDialogActions from 'containers/Dialog/withDialogActions'; import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions'; import withAlertsActions from 'containers/Alert/withAlertActions';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
Account_Abilities,
AbilitySubject,
} from '../../../common/abilityOption';
import { compose } from 'utils'; import { compose } from 'utils';
import { useAccountDrawerContext } from './AccountDrawerProvider'; import { useAccountDrawerContext } from './AccountDrawerProvider';
@@ -53,26 +57,31 @@ function AccountDrawerActionBar({
return ( return (
<DashboardActionsBar> <DashboardActionsBar>
<NavbarGroup> <NavbarGroup>
<Button <Can I={Account_Abilities.Edit} a={AbilitySubject.Account}>
className={Classes.MINIMAL} <Button
icon={<Icon icon="pen-18" />} className={Classes.MINIMAL}
text={<T id={'edit_account'} />} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEditAccount)} text={<T id={'edit_account'} />}
/> onClick={safeCallback(onEditAccount)}
<Button />
className={Classes.MINIMAL}
icon={<Icon icon="plus" />} <Button
text={<T id={'new_child_account'} />} className={Classes.MINIMAL}
onClick={safeCallback(onNewChildAccount)} icon={<Icon icon="plus" />}
/> text={<T id={'new_child_account'} />}
<NavbarDivider /> onClick={safeCallback(onNewChildAccount)}
<Button />
className={Classes.MINIMAL} <NavbarDivider />
icon={<Icon icon={'trash-16'} iconSize={16} />} </Can>
text={<T id={'delete'} />} <Can I={Account_Abilities.Delete} a={AbilitySubject.Account}>
intent={Intent.DANGER} <Button
onClick={safeCallback(onDeleteAccount)} className={Classes.MINIMAL}
/> icon={<Icon icon={'trash-16'} iconSize={16} />}
text={<T id={'delete'} />}
intent={Intent.DANGER}
onClick={safeCallback(onDeleteAccount)}
/>
</Can>
</NavbarGroup> </NavbarGroup>
</DashboardActionsBar> </DashboardActionsBar>
); );