figure-modal-body.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import {
  2. FigureModalSource,
  3. useFigureModalContext,
  4. } from './figure-modal-context'
  5. import { FigureModalHelp } from './figure-modal-help'
  6. import { FigureModalFigureOptions } from './figure-modal-options'
  7. import { FigureModalSourcePicker } from './figure-modal-source-picker'
  8. import { FigureModalEditFigureSource } from './file-sources/figure-modal-edit-figure-source'
  9. import { FigureModalOtherProjectSource } from './file-sources/figure-modal-other-project-source'
  10. import { FigureModalCurrentProjectSource } from './file-sources/figure-modal-project-source'
  11. import { FigureModalUploadFileSource } from './file-sources/figure-modal-upload-source'
  12. import { FigureModalUrlSource } from './file-sources/figure-modal-url-source'
  13. import { useCallback } from 'react'
  14. import OLNotification from '@/shared/components/ol/ol-notification'
  15. const sourceModes = new Map([
  16. [FigureModalSource.FILE_TREE, FigureModalCurrentProjectSource],
  17. [FigureModalSource.FROM_URL, FigureModalUrlSource],
  18. [FigureModalSource.OTHER_PROJECT, FigureModalOtherProjectSource],
  19. [FigureModalSource.FILE_UPLOAD, FigureModalUploadFileSource],
  20. [FigureModalSource.EDIT_FIGURE, FigureModalEditFigureSource],
  21. ])
  22. export default function FigureModalBody() {
  23. const { source, helpShown, sourcePickerShown, error, dispatch } =
  24. useFigureModalContext()
  25. const Body = sourceModes.get(source)
  26. const onDismiss = useCallback(() => {
  27. dispatch({ error: undefined })
  28. }, [dispatch])
  29. if (helpShown) {
  30. return <FigureModalHelp />
  31. }
  32. if (sourcePickerShown) {
  33. return <FigureModalSourcePicker />
  34. }
  35. if (!Body) {
  36. return null
  37. }
  38. return (
  39. <>
  40. {error && (
  41. <OLNotification type="error" onDismiss={onDismiss} content={error} />
  42. )}
  43. <Body />
  44. <FigureModalFigureOptions />
  45. </>
  46. )
  47. }