import { ReactComponent as ProPlanIcon } from 'assets/icons/pro-enterprise-feature-badge.svg';
import { Box, Button, Link, styled, Typography } from '@mui/material';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
import { ConditionallyRender } from '../ConditionallyRender/ConditionallyRender';
const PremiumFeatureWrapper = styled(Box, {
shouldForwardProp: prop => prop !== 'tooltip',
})<{ tooltip?: boolean }>(({ theme, tooltip }) => ({
display: 'flex',
flexDirection: 'column',
alignItems: tooltip ? 'start' : 'center',
textAlign: tooltip ? 'left' : 'center',
backgroundColor: tooltip ? 'transparent' : theme.palette.secondaryContainer,
borderRadius: tooltip ? 0 : theme.shape.borderRadiusLarge,
padding: tooltip ? theme.spacing(1, 0.5) : theme.spacing(7.5, 1),
}));
const StyledTitle = styled(Typography)(({ theme }) => ({
display: 'inline-flex',
alignItems: 'center',
fontWeight: theme.fontWeight.bold,
gap: theme.spacing(1),
}));
const StyledBody = styled('div', {
shouldForwardProp: prop => prop !== 'tooltip',
})<{ tooltip?: boolean }>(({ theme, tooltip }) => ({
margin: tooltip ? theme.spacing(1, 0) : theme.spacing(3, 0, 5, 0),
}));
const StyledTypography = styled(Typography)(({ theme }) => ({
fontSize: theme.fontSizes.smallBody,
}));
const StyledButtonContainer = styled('div')(() => ({
display: 'flex',
}));
const StyledLink = styled(Link)(({ theme }) => ({
fontSize: theme.fontSizes.smallBody,
}));
enum FeaturePlan {
PRO = 'Pro & Enterprise',
ENTERPRISE = 'Enterprise',
}
const PremiumFeatures = {
'adding-new-projects': {
plan: FeaturePlan.PRO,
url: '',
label: 'Adding new projects',
},
access: {
plan: FeaturePlan.PRO,
url: 'https://docs.getunleash.io/reference/rbac',
label: 'Access',
},
'change-requests': {
plan: FeaturePlan.ENTERPRISE,
url: 'https://docs.getunleash.io/reference/change-requests',
label: 'Change Requests',
},
};
type PremiumFeature = keyof typeof PremiumFeatures;
const UPGRADE_URL = 'https://www.getunleash.io/plans';
export interface PremiumFeatureProps {
feature: PremiumFeature;
tooltip?: boolean;
}
export const PremiumFeature = ({ feature, tooltip }: PremiumFeatureProps) => {
const { url, plan, label } = PremiumFeatures[feature];
const tracker = usePlausibleTracker();
const handleClick = () => {
tracker.trackEvent('upgrade_plan_clicked', {
props: { feature: label },
});
};
const featureLabel = Boolean(url) ? (
{label}
) : (
label
);
const featureMessage = (
<>
{featureLabel} is a feature available for the{' '}
{plan}{' '}
{plan === FeaturePlan.PRO ? 'plans' : 'plan'}
>
);
const upgradeUrl = `${UPGRADE_URL}?feature=${feature}`;
return (
{`${plan} feature`}
{featureMessage}. You need to upgrade your plan
if you want to use it
Upgrade now
>
}
elseShow={
<>
{featureMessage}
You need to upgrade your plan if you want to use
it
>
}
/>
);
};