saleor-dashboard/src/permissionGroups/utils.ts
Dominik Żegleń 935a6f4542
Reduce bundle size (#1103)
* Add analysis tools

* Use deep imports to reduce bundle size

* Remove tslint config

* Remove unused packages

* Remove lodash-es references

* Use root level mui imports

* Remove mui from restricted imports
2021-05-14 10:15:15 +02:00

81 lines
2.5 KiB
TypeScript

import { ShopInfo_shop_permissions } from "@saleor/components/Shop/types/ShopInfo";
import { User } from "@saleor/fragments/types/User";
import difference from "lodash/difference";
import { PermissionGroupDetailsPageFormData } from "./components/PermissionGroupDetailsPage";
import { PermissionGroupDetails_permissionGroup } from "./types/PermissionGroupDetails";
/**
* Will return true if group has all permissions available in shop assigned.
*/
export const isGroupFullAccess = (
permissionGroup: PermissionGroupDetails_permissionGroup,
shopPermissions: ShopInfo_shop_permissions[]
) => {
const assignedCodes = extractPermissionCodes(permissionGroup);
if (assignedCodes.length !== shopPermissions?.length) {
return false;
}
for (const permission of shopPermissions) {
if (assignedCodes.indexOf(permission.code) === undefined) {
return false;
}
}
return true;
};
/**
* Return list of codes which are assigned to the permission group.
*/
export const extractPermissionCodes = (
permissionGroup: PermissionGroupDetails_permissionGroup
) =>
permissionGroup?.permissions
? permissionGroup.permissions.map(perm => perm.code)
: [];
/**
* Return lists of permissions which have to be added and removed from group.
*/
export const permissionsDiff = (
permissionGroup: PermissionGroupDetails_permissionGroup,
formData: PermissionGroupDetailsPageFormData
) => {
const newPermissions = formData.permissions;
const oldPermissions = extractPermissionCodes(permissionGroup);
return {
addPermissions: difference(newPermissions, oldPermissions),
removePermissions: difference(oldPermissions, newPermissions)
};
};
/**
* Return lists of users which have to be added and removed from group.
*/
export const usersDiff = (
permissionGroup: PermissionGroupDetails_permissionGroup,
formData: PermissionGroupDetailsPageFormData
) => {
const newUsers = formData.users.map(u => u.id);
const oldUsers = permissionGroup?.users.map(u => u.id);
return {
addUsers: difference(newUsers, oldUsers),
removeUsers: difference(oldUsers, newUsers)
};
};
/**
* Permissions are exceeded when group has permission which is not handled by user
*/
export const arePermissionsExceeded = (
permissionGroup: PermissionGroupDetails_permissionGroup,
user: User
) => {
const groupPermissions = extractPermissionCodes(permissionGroup);
const userPermissions = user.userPermissions.map(p => p.code);
return difference(groupPermissions, userPermissions).length > 0;
};