export-project-with-conversion-button.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import getMeta from '@/utils/meta'
  2. import { isSplitTestEnabled } from '@/utils/splitTestUtils'
  3. import { FC } from 'react'
  4. import useConvertProject from '../../hooks/use-convert-project'
  5. import { useCommandProvider } from '../../hooks/use-command-provider'
  6. import OLDropdownMenuItem from '@/shared/components/ol/ol-dropdown-menu-item'
  7. type ExportProjectWithConversionProps = {
  8. featureFlag?: string
  9. conversionType: 'docx' | 'markdown'
  10. label: string
  11. menuBarId: string
  12. }
  13. export const ExportProjectWithConversionButton: FC<
  14. ExportProjectWithConversionProps
  15. > = ({ featureFlag, conversionType, label, menuBarId }) => {
  16. const splitTestEnabledIfNeeded = featureFlag
  17. ? isSplitTestEnabled(featureFlag)
  18. : true
  19. const enablePandocConversions =
  20. getMeta('ol-ExposedSettings')?.enablePandocConversions
  21. const anonymous = getMeta('ol-anonymous')
  22. const downloadConversion = useConvertProject(conversionType)
  23. const showExportButton =
  24. splitTestEnabledIfNeeded && enablePandocConversions && !anonymous
  25. useCommandProvider(
  26. () =>
  27. showExportButton
  28. ? [
  29. {
  30. id: menuBarId,
  31. handler: downloadConversion,
  32. label,
  33. },
  34. ]
  35. : [],
  36. [showExportButton, downloadConversion, label, menuBarId]
  37. )
  38. if (!showExportButton) {
  39. return null
  40. }
  41. return (
  42. <OLDropdownMenuItem onClick={downloadConversion}>
  43. {label}
  44. </OLDropdownMenuItem>
  45. )
  46. }