import { useMemo } from "react"
import type { PermissionResource } from "../lib/permissions"
import { usePermissions } from "../providers/permissions-provider"
/**
* Hook that provides convenient permission checks for a specific resource.
* Returns boolean flags for common CRUD operations.
*
* @param resource - The resource to check permissions for
* @returns Object with permission flags and utility methods
*
* @example
* ```tsx
* const { canRead, canCreate, canUpdate, canDelete } = useResourcePermissions("customer")
*
* return (
*
* {canRead && }
* {canCreate && }
*
* )
* ```
*/
export const useResourcePermissions = (resource: PermissionResource) => {
const { can, isLoading } = usePermissions()
return useMemo(
() => ({
/**
* Whether the user can view/list this resource.
*/
canRead: can(resource, "read"),
/**
* Whether the user can create new instances of this resource.
*/
canCreate: can(resource, "create"),
/**
* Whether the user can update existing instances of this resource.
*/
canUpdate: can(resource, "update"),
/**
* Whether the user can delete instances of this resource.
*/
canDelete: can(resource, "delete"),
/**
* Check a specific operation on this resource.
*/
can: (operation: "read" | "create" | "update" | "delete") =>
can(resource, operation),
/**
* The resource being checked.
*/
resource,
/**
* Whether permissions are still loading.
*/
isLoading,
}),
[can, resource, isLoading]
)
}
/**
* Hook for checking customer-specific permissions.
*/
export const useCustomerPermissions = () => useResourcePermissions("customer")
/**
* Hook for checking order-specific permissions.
*/
export const useOrderPermissions = () => useResourcePermissions("order")
/**
* Hook for checking product-specific permissions.
*/
export const useProductPermissions = () => useResourcePermissions("product")
/**
* Hook for checking inventory-specific permissions.
*/
export const useInventoryPermissions = () => useResourcePermissions("inventory")
/**
* Hook for checking user management permissions.
*/
export const useUserPermissions = () => useResourcePermissions("user")