PersonalSettings.jsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React, { useMemo } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import CustomNavAndContents from '../CustomNavigation/CustomNavAndContents';
  4. import ApiSettings from './ApiSettings';
  5. import { EditorSettings } from './EditorSettings';
  6. import ExternalAccountLinkedMe from './ExternalAccountLinkedMe';
  7. import InAppNotificationSettings from './InAppNotificationSettings';
  8. import OtherSettings from './OtherSettings';
  9. import PasswordSettings from './PasswordSettings';
  10. import UserSettings from './UserSettings';
  11. const PersonalSettings = () => {
  12. const { t } = useTranslation();
  13. const navTabMapping = useMemo(() => {
  14. return {
  15. user_infomation: {
  16. Icon: () => <i className="icon-fw icon-user"></i>,
  17. Content: UserSettings,
  18. i18n: t('User Information'),
  19. index: 0,
  20. },
  21. external_accounts: {
  22. Icon: () => <i className="icon-fw icon-share-alt"></i>,
  23. Content: ExternalAccountLinkedMe,
  24. i18n: t('admin:user_management.external_accounts'),
  25. index: 1,
  26. },
  27. password_settings: {
  28. Icon: () => <i className="icon-fw icon-lock"></i>,
  29. Content: PasswordSettings,
  30. i18n: t('Password Settings'),
  31. index: 2,
  32. },
  33. api_settings: {
  34. Icon: () => <i className="icon-fw icon-paper-plane"></i>,
  35. Content: ApiSettings,
  36. i18n: t('API Settings'),
  37. index: 3,
  38. },
  39. editor_settings: {
  40. Icon: () => <i className="icon-fw icon-pencil"></i>,
  41. Content: EditorSettings,
  42. i18n: t('editor_settings.editor_settings'),
  43. index: 4,
  44. },
  45. in_app_notification_settings: {
  46. Icon: () => <i className="icon-fw icon-bell"></i>,
  47. Content: InAppNotificationSettings,
  48. i18n: t('in_app_notification_settings.in_app_notification_settings'),
  49. index: 5,
  50. },
  51. other_settings: {
  52. Icon: () => <i className="icon-fw icon-settings"></i>,
  53. Content: OtherSettings,
  54. i18n: t('Other Settings'),
  55. index: 6,
  56. },
  57. };
  58. }, [t]);
  59. const getDefaultTabIndex = () => {
  60. // e.g) '/me#password_settings' sets password settings tab as default
  61. const tab = window.location.hash?.substring(1);
  62. return navTabMapping[tab]?.index;
  63. };
  64. return (
  65. <div data-testid="grw-personal-settings">
  66. <CustomNavAndContents defaultTabIndex={getDefaultTabIndex()} navTabMapping={navTabMapping} navigationMode="both" tabContentClasses={['px-0']} />
  67. </div>
  68. );
  69. };
  70. export default PersonalSettings;