Files
overleaf-cep/services/web/frontend/js/shared/components/beta-badge.tsx
T
Alexandre Bourdin 671df33da3 Merge pull request #32244 from overleaf/ab-labs-in-feature-flags
[web] Merge Labs programme into the Feature flags system

GitOrigin-RevId: db75e07bf3272becc11ef1eeda3850098b3daa9d
2026-03-26 09:06:51 +00:00

61 lines
1.4 KiB
TypeScript

import type { FC, MouseEventHandler, ReactNode } from 'react'
import OLTooltip from '@/shared/components/ol/ol-tooltip'
import BetaBadgeIcon from '@/shared/components/beta-badge-icon'
type TooltipProps = {
id: string
text: ReactNode
className?: string
placement?: NonNullable<
React.ComponentProps<typeof OLTooltip>['overlayProps']
>['placement']
}
type LinkProps = {
href?: string
ref?: React.Ref<HTMLAnchorElement>
className?: string
onMouseDown?: MouseEventHandler<HTMLAnchorElement>
}
const BetaBadge: FC<{
tooltip?: TooltipProps
link?: LinkProps
description?: ReactNode
phase?: string
}> = ({ tooltip, link = {}, description, phase = 'beta' }) => {
const { href, ...linkProps } = link
const linkedBadge = (
<a
target="_blank"
rel="noopener noreferrer"
href={
href || (phase === 'labs' ? '/labs/participate' : '/beta/participate')
}
{...linkProps}
>
<span className="visually-hidden">{description || tooltip?.text}</span>
<BetaBadgeIcon phase={phase} />
</a>
)
return tooltip ? (
<OLTooltip
id={tooltip.id}
description={tooltip.text}
tooltipProps={{ className: tooltip.className }}
overlayProps={{
placement: tooltip.placement || 'bottom',
delay: 100,
}}
>
{linkedBadge}
</OLTooltip>
) : (
linkedBadge
)
}
export default BetaBadge