feat: battle of ts - unlimited edition

This commit is contained in:
=
2025-10-10 00:09:46 +05:30
parent fd98465dec
commit 44c9575a3d
38 changed files with 492 additions and 498 deletions
@@ -10,6 +10,7 @@ import {
} from "@app/hooks/api/roles/queries";
import { OrgPermissionSet } from "./types";
import { useCallback } from "react";
export const useOrgPermission = () => {
const organizationId = useRouteContext({
@@ -17,16 +18,24 @@ export const useOrgPermission = () => {
select: (el) => el.organizationId
});
const { data } = useSuspenseQuery({
const {
data: { permission, memberships = [] }
} = useSuspenseQuery({
queryKey: roleQueryKeys.getUserOrgPermissions({ orgId: organizationId }),
queryFn: () => fetchUserOrgPermissions({ orgId: organizationId }),
select: (res) => {
const rule = unpackRules<RawRuleOf<MongoAbility<OrgPermissionSet>>>(res.permissions);
const ability = createMongoAbility<OrgPermissionSet>(rule, { conditionsMatcher });
return { permission: ability, membership: res.membership };
return { permission: ability, memberships: res.memberships };
},
staleTime: Infinity
});
return data;
const hasOrgRole = useCallback(
(role: string) =>
memberships?.some((membership) => membership.roles.some((el) => role === el.role)),
[]
);
return { permission, memberships, hasOrgRole };
};
@@ -20,7 +20,7 @@ export const useProjectPermission = () => {
}
const {
data: { permission, membership, assumedPrivilegeDetails }
data: { permission, memberships, assumedPrivilegeDetails }
} = useSuspenseQuery({
queryKey: roleQueryKeys.getUserProjectPermissions({ projectId }),
queryFn: () => fetchUserProjectPermissions({ projectId }),
@@ -31,18 +31,16 @@ export const useProjectPermission = () => {
return {
permission: ability,
assumedPrivilegeDetails: data.assumedPrivilegeDetails,
membership: {
...data.membership,
roles: data.membership.roles.map(({ role }) => role)
}
memberships: data.memberships
};
}
});
const hasProjectRole = useCallback(
(role: string) => membership?.roles?.includes(role) || false,
(role: string) =>
memberships?.some((membership) => membership.roles.some((el) => role === el.role)),
[]
);
return { permission, membership, hasProjectRole, assumedPrivilegeDetails };
return { permission, memberships, hasProjectRole, assumedPrivilegeDetails };
};