import React, { useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import { UncontrolledTooltip } from 'reactstrap'; import { UserPicture } from '@growi/ui'; import { scheduleToPutUserUISettings } from '~/client/services/user-ui-settings'; import AppContainer from '~/client/services/AppContainer'; import { withUnstatedContainers } from '../UnstatedUtils'; import NavigationContainer from '~/client/services/NavigationContainer'; import { usePreferDrawerModeByUser, usePreferDrawerModeOnEditByUser } from '~/stores/ui'; import { isUserPreferenceExists, isDarkMode as isDarkModeByUtil, applyColorScheme, removeUserPreference, updateUserPreference, updateUserPreferenceWithOsSettings, } from '~/client/util/color-scheme'; import SidebarDrawerIcon from '../Icons/SidebarDrawerIcon'; import SidebarDockIcon from '../Icons/SidebarDockIcon'; import MoonIcon from '../Icons/MoonIcon'; import SunIcon from '../Icons/SunIcon'; const PersonalDropdown = (props) => { const { t, appContainer } = props; const user = appContainer.currentUser || {}; const [useOsSettings, setOsSettings] = useState(!isUserPreferenceExists()); const [isDarkMode, setIsDarkMode] = useState(isDarkModeByUtil()); const { data: isPreferDrawerMode, mutate: mutatePreferDrawerMode } = usePreferDrawerModeByUser(); const { data: isPreferDrawerModeOnEdit, mutate: mutatePreferDrawerModeOnEdit } = usePreferDrawerModeOnEditByUser(); const logoutHandler = () => { const { interceptorManager } = appContainer; const context = { user, currentPagePath: decodeURIComponent(window.location.pathname), }; interceptorManager.process('logout', context); window.location.href = '/logout'; }; const preferDrawerModeSwitchModifiedHandler = useCallback((bool) => { mutatePreferDrawerMode(bool); scheduleToPutUserUISettings({ preferDrawerModeByUser: bool }); }, [mutatePreferDrawerMode]); const preferDrawerModeOnEditSwitchModifiedHandler = useCallback((bool) => { mutatePreferDrawerModeOnEdit(bool); scheduleToPutUserUISettings({ preferDrawerModeOnEditByUser: bool }); }, [mutatePreferDrawerModeOnEdit]); const followOsCheckboxModifiedHandler = (bool) => { if (bool) { removeUserPreference(); } else { updateUserPreferenceWithOsSettings(); } applyColorScheme(); // update states setOsSettings(bool); setIsDarkMode(isDarkModeByUtil()); }; const userPreferenceSwitchModifiedHandler = (bool) => { updateUserPreference(bool); applyColorScheme(); // update state setIsDarkMode(isDarkModeByUtil()); }; /* eslint-disable react/prop-types */ const IconWithTooltip = ({ id, label, children, additionalClasses, }) => ( <>