From e5d02043ad7e2e2a8fe22f81d27055360e8dc57a Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 16:51:40 +0200
Subject: [PATCH] feat: item & inventory.
---
src/common/abilityOption.js | 17 ++++
src/components/Abilities.js | 10 ---
src/components/Can.js | 31 ++++++-
src/components/Config/ability.js | 10 ---
src/components/Dashboard/DashboardProvider.js | 3 +-
src/components/index.js | 2 +
.../InventoryAdjustmentDetailActionsBar.js | 30 ++++---
.../ItemDetailDrawer/ItemDetailActionsBar.js | 36 ++++----
.../InventoryAdjustments/components.js | 40 ++++++---
src/containers/Items/ItemsActionsBar.js | 22 ++---
src/containers/Items/components.js | 82 ++++++++++++-------
11 files changed, 177 insertions(+), 106 deletions(-)
create mode 100644 src/common/abilityOption.js
delete mode 100644 src/components/Abilities.js
delete mode 100644 src/components/Config/ability.js
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
new file mode 100644
index 000000000..d829d52a9
--- /dev/null
+++ b/src/common/abilityOption.js
@@ -0,0 +1,17 @@
+export const AbilitySubject = {
+ Item: 'Item',
+ InventoryAdjustment: 'InventoryAdjustment',
+};
+
+export const ItemAbility = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const InventoryAdjustment = {
+ View: 'view',
+ Create: 'create',
+ Delete: 'delete',
+};
diff --git a/src/components/Abilities.js b/src/components/Abilities.js
deleted file mode 100644
index 152ea01b0..000000000
--- a/src/components/Abilities.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AbilityBuilder, defineAbility } from '@casl/ability';
-import { createContextualCan } from '@casl/react';
-import { createContext } from 'react';
-
-export const AbilityContext = createContext();
-export const Can = createContextualCan(AbilityContext.Consumer);
-
-export const ability = defineAbility((can, cannot) => {
- cannot('Item', 'create');
-});
diff --git a/src/components/Can.js b/src/components/Can.js
index 9ba7fe434..63b614036 100644
--- a/src/components/Can.js
+++ b/src/components/Can.js
@@ -1,4 +1,29 @@
-import { createCanBoundTo } from '@casl/react';
-import ability from '../components/Config/ability';
+import React from 'react';
+import { Ability } from '@casl/ability';
+import { createContextualCan } from '@casl/react';
-export default createCanBoundTo(ability);
\ No newline at end of file
+import {
+ ItemAbility,
+ AbilitySubject,
+ InventoryAdjustment,
+} from '../common/abilityOption';
+
+export const AbilityContext = React.createContext();
+export const Can = createContextualCan(AbilityContext.Consumer);
+
+const AbilityContextProvider = (props) => {
+ const ability = new Ability([
+ {
+ subject: [AbilitySubject.Item],
+ action: [ItemAbility.Create, ItemAbility.Edit],
+ },
+ ]);
+
+ return (
+
+ {props.children}
+
+ );
+};
+
+export default AbilityContextProvider;
diff --git a/src/components/Config/ability.js b/src/components/Config/ability.js
deleted file mode 100644
index 72342959f..000000000
--- a/src/components/Config/ability.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AbilityBuilder } from '@casl/ability';
-// import { AbilitySubject, ItemAbility } from '../../common/abilityOption';
-
-export function defineAbilitiesFor(role) {
- const { rules, can } = new AbilityBuilder();
-
- can('create', 'Item');
-
- return new Ability(rules);
-}
diff --git a/src/components/Dashboard/DashboardProvider.js b/src/components/Dashboard/DashboardProvider.js
index 5a5fce966..77195b3c1 100644
--- a/src/components/Dashboard/DashboardProvider.js
+++ b/src/components/Dashboard/DashboardProvider.js
@@ -1,8 +1,9 @@
import React from 'react';
+import AbilityContextProvider from '../../components/Can';
/**
* Dashboard provider.
*/
export default function DashboardProvider({ children }) {
- return children;
+ return {children};
}
diff --git a/src/components/index.js b/src/components/index.js
index f30398145..5dc3efeb7 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -59,6 +59,7 @@ import AvaterCell from './AvaterCell';
import { ItemsMultiSelect } from './Items';
import MoreMenuItems from './MoreMenutItems';
+import { Can } from './Can';
export * from './Dialog';
export * from './Menu';
@@ -156,4 +157,5 @@ export {
Card,
AvaterCell,
MoreMenuItems,
+ Can,
};
diff --git a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
index e0231a3e9..712ca6edd 100644
--- a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
+++ b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
@@ -7,7 +7,11 @@ import { useInventoryAdjustmentDrawerContext } from './InventoryAdjustmentDrawer
import withAlertsActions from 'containers/Alert/withAlertActions';
-import { Icon, FormattedMessage as T } from 'components';
+import { Icon, FormattedMessage as T, Can } from 'components';
+import {
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
@@ -26,17 +30,19 @@ function InventoryAdjustmentDetailActionsBar({
};
return (
-
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteInventoryAdjustment}
- />
-
-
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteInventoryAdjustment}
+ />
+
+
+
);
}
diff --git a/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js b/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
index 8db499898..269e23b87 100644
--- a/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
+++ b/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
@@ -10,11 +10,12 @@ import {
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
+import { ItemAbility, AbilitySubject } from '../../../common/abilityOption';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T } from 'components';
+import { Icon, FormattedMessage as T, Can } from 'components';
import { compose } from 'utils';
@@ -47,20 +48,25 @@ function ItemDetailActionsBar({
return (
- }
- text={}
- onClick={handleEditItem}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteItem}
- />
+
+ }
+ text={}
+ onClick={handleEditItem}
+ />
+
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteItem}
+ />
+
);
diff --git a/src/containers/InventoryAdjustments/components.js b/src/containers/InventoryAdjustments/components.js
index eaa923e08..d1f862b66 100644
--- a/src/containers/InventoryAdjustments/components.js
+++ b/src/containers/InventoryAdjustments/components.js
@@ -12,10 +12,14 @@ import {
import intl from 'react-intl-universal';
import moment from 'moment';
-import { FormattedMessage as T } from 'components';
+import { FormattedMessage as T, Can } from 'components';
import { isNumber } from 'lodash';
import { Icon, Money, If } from 'components';
import { isBlank, safeCallback } from 'utils';
+import {
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../common/abilityOption';
/**
* Publish accessor
@@ -102,20 +106,30 @@ export const ActionsMenu = ({
text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)}
/>
-
- }
- text={intl.get('publish_adjustment')}
- onClick={safeCallback(onPublish, original)}
- />
+
+
+ }
+ text={intl.get('publish_adjustment')}
+ onClick={safeCallback(onPublish, original)}
+ />
+
- }
- />
+
+ }
+ />
+
);
};
diff --git a/src/containers/Items/ItemsActionsBar.js b/src/containers/Items/ItemsActionsBar.js
index e882ac19d..387a83ee5 100644
--- a/src/containers/Items/ItemsActionsBar.js
+++ b/src/containers/Items/ItemsActionsBar.js
@@ -14,6 +14,7 @@ import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import Icon from 'components/Icon';
import {
If,
+ Can,
DashboardActionViewsList,
AdvancedFilterPopover,
DashboardFilterButton,
@@ -30,8 +31,7 @@ import withSettings from '../Settings/withSettings';
import { compose } from 'utils';
import withSettingsActions from '../Settings/withSettingsActions';
-
-import { Can, AbilityContext } from '../../components/Abilities';
+import { ItemAbility, AbilitySubject } from '../../common/abilityOption';
/**
* Items actions bar.
@@ -60,8 +60,6 @@ function ItemsActionsBar({
// Items refresh action.
const { refresh } = useRefreshItems();
- const { ability } = React.useContext(AbilityContext);
-
// History context.
const history = useHistory();
@@ -106,14 +104,14 @@ function ItemsActionsBar({
/>
- {/* */}
+
}
text={}
onClick={onClickNewItem}
/>
- {/* */}
+
- }
- defaultChecked={itemsInactiveMode}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={itemsInactiveMode}
+ onChange={handleInactiveSwitchChange}
+ />
+
diff --git a/src/containers/Items/components.js b/src/containers/Items/components.js
index d573f4aaf..add7e1252 100644
--- a/src/containers/Items/components.js
+++ b/src/containers/Items/components.js
@@ -12,8 +12,13 @@ import {
import intl from 'react-intl-universal';
import { isNumber } from 'lodash';
-import { FormattedMessage as T, Icon, Money, If } from 'components';
+import { FormattedMessage as T, Icon, Money, If, Can } from 'components';
import { isBlank, safeCallback } from 'utils';
+import {
+ ItemAbility,
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../common/abilityOption';
/**
* Publish accessor
@@ -91,43 +96,58 @@ export function ItemsActionMenuList({
onClick={safeCallback(onViewDetails, original)}
/>
- }
- text={intl.get('edit_item')}
- onClick={safeCallback(onEditItem, original)}
- />
- }
- text={intl.get('duplicate')}
- onClick={safeCallback(onDuplicate, original)}
- />
-
+
}
- onClick={safeCallback(onInactivateItem, original)}
+ icon={}
+ text={intl.get('edit_item')}
+ onClick={safeCallback(onEditItem, original)}
/>
+
+
+ }
+ text={intl.get('duplicate')}
+ onClick={safeCallback(onDuplicate, original)}
+ />
+
+
+
+ }
+ onClick={safeCallback(onInactivateItem, original)}
+ />
+
- }
- onClick={safeCallback(onActivateItem, original)}
- />
+
+ }
+ onClick={safeCallback(onActivateItem, original)}
+ />
+
- }
- onClick={safeCallback(onMakeAdjustment, original)}
- />
+
+ }
+ onClick={safeCallback(onMakeAdjustment, original)}
+ />
+
- }
- onClick={safeCallback(onDeleteItem, original)}
- intent={Intent.DANGER}
- />
+
+ }
+ onClick={safeCallback(onDeleteItem, original)}
+ intent={Intent.DANGER}
+ />
+
);
}