Files
openpanel/packages/core/src/hooks/accessControl/useCanWithoutCache.ts
Stefan Pejcic 09f9f9502d packages
2024-11-07 19:03:37 +01:00

40 lines
1.0 KiB
TypeScript

import React from "react";
import { AccessControlContext } from "@contexts/accessControl";
import { sanitizeResource } from "@definitions/helpers/sanitize-resource";
import type { IAccessControlContext } from "../../contexts/accessControl/types";
export const useCanWithoutCache = (): IAccessControlContext => {
const { can: canFromContext } = React.useContext(AccessControlContext);
const can = React.useMemo(() => {
if (!canFromContext) {
return undefined;
}
const canWithSanitizedResource: NonNullable<typeof canFromContext> =
async ({ params, ...rest }) => {
const sanitizedResource = params?.resource
? sanitizeResource(params.resource)
: undefined;
return canFromContext({
...rest,
...(params
? {
params: {
...params,
resource: sanitizedResource,
},
}
: {}),
});
};
return canWithSanitizedResource;
}, [canFromContext]);
return { can };
};