import React from "react"; import { useNavigation, useTranslate, useCan, useResource, useRouterContext, } from "@pankod/refine-core"; import { RefineButtonTestIds } from "@pankod/refine-ui-types"; import { ActionIcon, Anchor, Button } from "@mantine/core"; import { IconSquarePlus } from "@tabler/icons"; import { mapButtonVariantToActionIconVariant } from "@definitions/button"; import { CreateButtonProps } from "../types"; export const CreateButton: React.FC = ({ resourceNameOrRouteName, hideText = false, accessControl, ignoreAccessControlProvider = false, svgIconProps, children, onClick, ...rest }) => { const accessControlEnabled = accessControl?.enabled ?? !ignoreAccessControlProvider; const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false; const { resource, resourceName } = useResource({ resourceNameOrRouteName, }); const { Link } = useRouterContext(); const { createUrl: generateCreateUrl } = useNavigation(); const translate = useTranslate(); const { data } = useCan({ resource: resourceName, action: "create", queryOptions: { enabled: accessControlEnabled, }, params: { resource, }, }); const disabledTitle = () => { if (data?.can) return ""; else if (data?.reason) return data.reason; else return translate( "buttons.notAccessTitle", "You don't have permission to access", ); }; const createUrl = generateCreateUrl(resource.route!); const { variant, styles, ...commonProps } = rest; if (accessControlEnabled && hideIfUnauthorized && !data?.can) { return null; } return ( ) => { if (data?.can === false) { e.preventDefault(); return; } if (onClick) { e.preventDefault(); onClick(e); } }} > {hideText ? ( ) : ( )} ); };