rail-modals.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { FC } from 'react'
  2. import {
  3. RailModalKey,
  4. useRailContext,
  5. } from '@/features/ide-react/context/rail-context'
  6. import { RailHelpContactUsModal } from './contact-us'
  7. import { RailHelpShowHotkeysModal } from './keyboard-shortcuts'
  8. import DictionarySettingsModal from '@/features/settings/components/editor-settings/dictionary-settings-modal'
  9. import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
  10. type RailModalEntry = {
  11. key: RailModalKey
  12. modalComponentFunction: FC<{ show: boolean }>
  13. }
  14. const moduleRailModals = (
  15. importOverleafModules('railModals') as {
  16. import: { default: RailModalEntry }
  17. path: string
  18. }[]
  19. ).map(({ import: { default: entry } }) => entry)
  20. const RAIL_MODALS: RailModalEntry[] = [
  21. {
  22. key: 'keyboard-shortcuts',
  23. modalComponentFunction: RailHelpShowHotkeysModal,
  24. },
  25. {
  26. key: 'contact-us',
  27. modalComponentFunction: RailHelpContactUsModal,
  28. },
  29. {
  30. key: 'dictionary',
  31. modalComponentFunction: DictionarySettingsModal,
  32. },
  33. ...moduleRailModals,
  34. ]
  35. export default function RailModals() {
  36. const { activeModal } = useRailContext()
  37. return RAIL_MODALS.map(({ key, modalComponentFunction: Component }) => (
  38. <Component key={key} show={activeModal === key} />
  39. ))
  40. }