SettingPanel.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import React, { useMemo } from 'react';
  2. import { MenuItem } from './Menu';
  3. import AppearanceSetting from '$app/components/layout/UserSetting/AppearanceSetting';
  4. import LanguageSetting from '$app/components/layout/UserSetting/LanguageSetting';
  5. import { UserSetting } from '$app/interfaces';
  6. function UserSettingPanel({
  7. selected,
  8. userSettingState = {},
  9. onChange,
  10. }: {
  11. selected: MenuItem;
  12. userSettingState?: UserSetting;
  13. onChange: (setting: Partial<UserSetting>) => void;
  14. }) {
  15. const { theme, themeMode, language } = userSettingState;
  16. const options = useMemo(() => {
  17. return [
  18. {
  19. value: MenuItem.Appearance,
  20. content: <AppearanceSetting onChange={onChange} theme={theme} themeMode={themeMode} />,
  21. },
  22. {
  23. value: MenuItem.Language,
  24. content: <LanguageSetting onChange={onChange} language={language} />,
  25. },
  26. ];
  27. }, [language, onChange, theme, themeMode]);
  28. const option = options.find((option) => option.value === selected);
  29. return <div className={'flex-1 pl-4'}>{option?.content}</div>;
  30. }
  31. export default UserSettingPanel;