import React from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import { createSubscribedElement } from '../UnstatedUtils'; import AppContainer from '../../services/AppContainer'; import UserPicture from '../User/UserPicture'; const PersonalDropdown = (props) => { const { t, appContainer } = props; const user = appContainer.currentUser || {}; const logoutHandler = () => { const { interceptorManager } = appContainer; const context = { user, currentPagePath: decodeURIComponent(window.location.pathname), }; interceptorManager.process('logout', context); window.location.href = '/logout'; }; const followOsCheckboxModifiedHandler = (bool) => { // reset user preference if (bool) { appContainer.setColorSchemePreference(null); } // set preferDarkModeByMediaQuery as users preference else { appContainer.setColorSchemePreference(appContainer.state.preferDarkModeByMediaQuery); } }; const userPreferenceSwitchModifiedHandler = (bool) => { appContainer.setColorSchemePreference(bool); }; /* * render */ const { preferDarkModeByMediaQuery, preferDarkModeByUser } = appContainer.state; const isUserPreferenceExists = preferDarkModeByUser != null; const isDarkMode = () => { if (isUserPreferenceExists) { return preferDarkModeByUser; } return preferDarkModeByMediaQuery; }; return ( <> {/* Button */} {/* remove .dropdown-toggle for hide caret */} {/* See https://stackoverflow.com/a/44577512/13183572 */}  {user.name} {/* Menu */}
{ t('User\'s Home') } { t('User Settings') }
{ t('List Drafts') } { t('Deleted Pages') }
Color Scheme
followOsCheckboxModifiedHandler(e.target.checked)} />
Light
userPreferenceSwitchModifiedHandler(e.target.checked)} />
Dark
{ t('Sign out') }
); }; /** * Wrapper component for using unstated */ const PersonalDropdownWrapper = (props) => { return createSubscribedElement(PersonalDropdown, props, [AppContainer]); }; PersonalDropdown.propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, }; export default withTranslation()(PersonalDropdownWrapper);