beta-badge.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import type { FC, ReactNode } from 'react'
  2. import classnames from 'classnames'
  3. import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
  4. import MaterialIcon from '@/shared/components/material-icon'
  5. import BootstrapVersionSwitcher from '@/features/ui/components/bootstrap-5/bootstrap-version-switcher'
  6. type TooltipProps = {
  7. id: string
  8. text: ReactNode
  9. className?: string
  10. placement?: NonNullable<
  11. React.ComponentProps<typeof OLTooltip>['overlayProps']
  12. >['placement']
  13. }
  14. const BetaBadge: FC<{
  15. tooltip: TooltipProps
  16. url?: string
  17. phase?: string
  18. }> = ({ tooltip, url = '/beta/participate', phase = 'beta' }) => {
  19. let badgeClass: 'info-badge' | 'alpha-badge' | 'beta-badge'
  20. switch (phase) {
  21. case 'release':
  22. badgeClass = 'info-badge'
  23. break
  24. case 'alpha':
  25. badgeClass = 'alpha-badge'
  26. break
  27. case 'beta':
  28. default:
  29. badgeClass = 'beta-badge'
  30. }
  31. return (
  32. <OLTooltip
  33. id={tooltip.id}
  34. description={tooltip.text}
  35. tooltipProps={{ className: tooltip.className }}
  36. overlayProps={{
  37. placement: tooltip.placement || 'bottom',
  38. delay: 100,
  39. }}
  40. >
  41. <a href={url} target="_blank" rel="noopener noreferrer">
  42. <span className="sr-only">{tooltip.text}</span>
  43. <BootstrapVersionSwitcher
  44. bs3={<span className={classnames('badge', badgeClass)} />}
  45. bs5={
  46. <MaterialIcon
  47. type="info"
  48. className={classnames('align-middle', badgeClass)}
  49. />
  50. }
  51. />
  52. </a>
  53. </OLTooltip>
  54. )
  55. }
  56. export default BetaBadge