settings-modal.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import OLModal, {
  2. OLModalBody,
  3. OLModalHeader,
  4. OLModalTitle,
  5. } from '@/features/ui/components/ol/ol-modal'
  6. import { useLayoutContext } from '@/shared/context/layout-context'
  7. import { useTranslation } from 'react-i18next'
  8. import { SettingsEntry, SettingsModalBody } from './settings-modal-body'
  9. import AppearanceSettings from './appearance-settings/appearance-settings'
  10. import CompilerSettings from './compiler-settings/compiler-settings'
  11. import EditorSettings from './editor-settings/editor-settings'
  12. import { useMemo, useState } from 'react'
  13. const SettingsModal = () => {
  14. // TODO ide-redesign-cleanup: Either rename the field, or introduce a separate
  15. // one
  16. const { leftMenuShown, setLeftMenuShown } = useLayoutContext()
  17. const { t } = useTranslation()
  18. const settingsTabs: SettingsEntry[] = useMemo(
  19. () => [
  20. {
  21. key: 'editor',
  22. title: t('editor'),
  23. icon: 'code',
  24. component: <EditorSettings />,
  25. },
  26. {
  27. key: 'compiler',
  28. title: t('compiler'),
  29. icon: 'picture_as_pdf',
  30. component: <CompilerSettings />,
  31. },
  32. {
  33. key: 'appearance',
  34. title: t('appearance'),
  35. icon: 'brush',
  36. component: <AppearanceSettings />,
  37. },
  38. {
  39. key: 'account_settings',
  40. title: t('account_settings'),
  41. icon: 'settings',
  42. href: '/user/settings',
  43. },
  44. ],
  45. [t]
  46. )
  47. const [activeTab, setActiveTab] = useState<string | null | undefined>(
  48. settingsTabs[0]?.key
  49. )
  50. return (
  51. <OLModal
  52. show={leftMenuShown}
  53. onHide={() => setLeftMenuShown(false)}
  54. size="lg"
  55. backdropClassName={
  56. activeTab === 'appearance'
  57. ? 'ide-settings-modal-transparent-backdrop'
  58. : undefined
  59. }
  60. >
  61. <OLModalHeader closeButton>
  62. <OLModalTitle>{t('settings')}</OLModalTitle>
  63. </OLModalHeader>
  64. <OLModalBody className="ide-settings-modal-body">
  65. <SettingsModalBody
  66. activeTab={activeTab}
  67. setActiveTab={setActiveTab}
  68. settingsTabs={settingsTabs}
  69. />
  70. </OLModalBody>
  71. </OLModal>
  72. )
  73. }
  74. export default SettingsModal