All files / src/features/Permissions/Modal/api getPermissionData.ts

82.75% Statements 24/29
54.54% Branches 12/22
100% Functions 5/5
84% Lines 21/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                  18x   9x       17x   17x   17x   17x         17x             17x             9x       12x         12x               12x   12x             9x       96x 96x   96x 96x     96x 96x                                 114x                      
import { customInstance } from "@services/api";
import {
  AccessPoliciesResponse,
  IUpdatedData,
  PermissionResponse,
} from "./types";
import { hashData } from "../utils";
import sha1 from "sha1";
 
const hashingFunction = (item: IUpdatedData) => item.id;
 
export const getAssignedPermissions = async (
  baseURL: string,
  searchQuery: string,
) => {
  let url = baseURL;
 
  Eif (!url.includes("?")) url += "?";
 
  url += `&filter=isAttached:true%3BisGlobal:false`;
 
  const data: AccessPoliciesResponse = await customInstance({
    url: encodeURIComponent(url),
    method: "GET",
  });
 
  Iif (!data?.data) {
    return {
      searchQuery,
      total: data?.total || 0,
      data: {},
    };
  }
  return {
    searchQuery,
    total: data.total,
    data: hashData(data.data.map(permissionParser), hashingFunction),
  };
};
 
export const getGlobalPermissions = async (
  baseURL: string,
  searchQuery: string,
) => {
  const data: AccessPoliciesResponse = await customInstance({
    url: encodeURIComponent(baseURL),
    method: "GET",
  });
 
  Iif (!data?.data || !data?.data?.length) {
    return {
      searchQuery,
      total: data.total,
      data: {},
    };
  }
 
  const mergedData = data.data.reduce(mergeDuplicates, {});
 
  return {
    searchQuery,
    total: Object.keys(mergedData).length,
    data: mergedData,
  };
};
 
const mergeDuplicates = (
  acc: Record<string, IUpdatedData>,
  permission: PermissionResponse,
) => {
  const hashedKey = sha1(permission.id);
  const parsedValue = permissionParser(permission);
 
  Iif (acc[hashedKey] && permission.isGlobal) return acc;
  Iif (acc[hashedKey] && !permission.isGlobal)
    return { ...acc, [hashedKey]: parsedValue };
 
  Eif (permission.isGlobal) {
    return {
      ...acc,
      [hashedKey]: {
        ...parsedValue,
        isAttached: false,
      },
    };
  }
 
  return {
    ...acc,
    [hashedKey]: {
      ...parsedValue,
    },
  };
};
 
const permissionParser = (permission: PermissionResponse): IUpdatedData => ({
  id: permission.id,
  group: permission.categoryName.toLowerCase(),
  permissionName: permission.name,
  description: permission?.description || "",
  actionName: permission.actionName,
  resourceName: permission.resourceName,
  isGlobal: permission.isGlobal,
  isAttached: permission.isAttached,
  isDeny: permission.isDeny,
});