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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. import { useRootDoc } from '@/shared/hooks/use-root-doc'
  8. import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context'
  9. type ExportProjectWithConversionProps = {
  10. featureFlag?: string
  11. conversionType: 'docx' | 'markdown'
  12. label: string
  13. menuBarId: string
  14. }
  15. export const ExportProjectWithConversionButton: FC<
  16. ExportProjectWithConversionProps
  17. > = ({ featureFlag, conversionType, label, menuBarId }) => {
  18. const splitTestEnabledIfNeeded = featureFlag
  19. ? isSplitTestEnabled(featureFlag)
  20. : true
  21. const enablePandocConversions =
  22. getMeta('ol-ExposedSettings')?.enablePandocConversions
  23. const anonymous = getMeta('ol-anonymous')
  24. const getRootDocInfo = useRootDoc()
  25. const { openDocs } = useEditorManagerContext()
  26. const downloadConversion = useConvertProject(
  27. conversionType,
  28. openDocs,
  29. getRootDocInfo
  30. )
  31. const showExportButton =
  32. splitTestEnabledIfNeeded && enablePandocConversions && !anonymous
  33. useCommandProvider(
  34. () =>
  35. showExportButton
  36. ? [
  37. {
  38. id: menuBarId,
  39. handler: downloadConversion,
  40. label,
  41. },
  42. ]
  43. : [],
  44. [showExportButton, downloadConversion, label, menuBarId]
  45. )
  46. if (!showExportButton) {
  47. return null
  48. }
  49. return (
  50. <OLDropdownMenuItem onClick={downloadConversion}>
  51. {label}
  52. </OLDropdownMenuItem>
  53. )
  54. }