mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
40 lines
1.0 KiB
TypeScript
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 };
|
|
};
|