settings-modal.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. key: 'subscription',
  46. title: t('subscription'),
  47. icon: 'account_balance',
  48. href: '/user/subscription',
  49. },
  50. ],
  51. [t]
  52. )
  53. const [activeTab, setActiveTab] = useState<string | null | undefined>(
  54. settingsTabs[0]?.key
  55. )
  56. return (
  57. <OLModal
  58. show={leftMenuShown}
  59. onHide={() => setLeftMenuShown(false)}
  60. size="lg"
  61. backdropClassName={
  62. activeTab === 'appearance'
  63. ? 'ide-settings-modal-transparent-backdrop'
  64. : undefined
  65. }
  66. >
  67. <OLModalHeader closeButton>
  68. <OLModalTitle>{t('settings')}</OLModalTitle>
  69. </OLModalHeader>
  70. <OLModalBody className="ide-settings-modal-body">
  71. <SettingsModalBody
  72. activeTab={activeTab}
  73. setActiveTab={setActiveTab}
  74. settingsTabs={settingsTabs}
  75. />
  76. </OLModalBody>
  77. </OLModal>
  78. )
  79. }
  80. export default SettingsModal