import { Component } from 'react'; import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; import { defineMessages, injectIntl } from 'react-intl'; import { inject, observer } from 'mobx-react'; import { mdiCheckAll, mdiViewGrid, mdiPlusBox, mdiCog, mdiBellOff, mdiBell, mdiLock, mdiMenu, mdiChevronDown, mdiChevronRight, } from '@mdi/js'; import Tabbar from '../services/tabs/Tabbar'; import { settingsShortcutKey, lockFerdiumShortcutKey, todosToggleShortcutKey, workspaceToggleShortcutKey, addNewServiceShortcutKey, muteFerdiumShortcutKey, } from '../../environment'; import { todosStore } from '../../features/todos'; import { todoActions } from '../../features/todos/actions'; import AppStore from '../../stores/AppStore'; import SettingsStore from '../../stores/SettingsStore'; import globalMessages from '../../i18n/globalMessages'; import { Icon } from '../ui/icon'; const messages = defineMessages({ addNewService: { id: 'sidebar.addNewService', defaultMessage: 'Add new service', }, mute: { id: 'sidebar.muteApp', defaultMessage: 'Disable notifications & audio', }, unmute: { id: 'sidebar.unmuteApp', defaultMessage: 'Enable notifications & audio', }, openWorkspaceDrawer: { id: 'sidebar.openWorkspaceDrawer', defaultMessage: 'Open workspace drawer', }, closeWorkspaceDrawer: { id: 'sidebar.closeWorkspaceDrawer', defaultMessage: 'Close workspace drawer', }, openTodosDrawer: { id: 'sidebar.openTodosDrawer', defaultMessage: 'Open Ferdium Todos', }, closeTodosDrawer: { id: 'sidebar.closeTodosDrawer', defaultMessage: 'Close Ferdium Todos', }, lockFerdium: { id: 'sidebar.lockFerdium', defaultMessage: 'Lock Ferdium', }, }); class Sidebar extends Component { static propTypes = { openSettings: PropTypes.func.isRequired, closeSettings: PropTypes.func.isRequired, setActive: PropTypes.func.isRequired, reorder: PropTypes.func.isRequired, reload: PropTypes.func.isRequired, toggleNotifications: PropTypes.func.isRequired, toggleAudio: PropTypes.func.isRequired, toggleDarkMode: PropTypes.func.isRequired, showServicesUpdatedInfoBar: PropTypes.bool.isRequired, showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, showServiceNameSetting: PropTypes.bool.isRequired, showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, deleteService: PropTypes.func.isRequired, updateService: PropTypes.func.isRequired, hibernateService: PropTypes.func.isRequired, wakeUpService: PropTypes.func.isRequired, toggleMuteApp: PropTypes.func.isRequired, isAppMuted: PropTypes.bool.isRequired, isWorkspaceDrawerOpen: PropTypes.bool.isRequired, toggleWorkspaceDrawer: PropTypes.func.isRequired, isTodosServiceActive: PropTypes.bool.isRequired, stores: PropTypes.shape({ app: PropTypes.instanceOf(AppStore).isRequired, settings: PropTypes.instanceOf(SettingsStore).isRequired, }).isRequired, actions: PropTypes.shape({ settings: PropTypes.instanceOf(SettingsStore).isRequired, }).isRequired, }; state = { tooltipEnabled: true, isCollapsed: false }; componentDidUpdate() { ReactTooltip.rebuild(); } enableToolTip() { this.setState({ tooltipEnabled: true }); } disableToolTip() { this.setState({ tooltipEnabled: false }); } collapseMenu() { this.setState((prevState) => ({ isCollapsed: !prevState.isCollapsed })); } updateToolTip() { this.disableToolTip(); setTimeout(this.enableToolTip.bind(this)); } render() { const { openSettings, toggleMuteApp, isAppMuted, isWorkspaceDrawerOpen, toggleWorkspaceDrawer, stores, actions, isTodosServiceActive, } = this.props; const { hideRecipesButton, hideWorkspacesButton, hideNotificationsButton, hideSettingsButton, useVerticalStyle } = stores.settings.app; const { intl } = this.props; const todosToggleMessage = todosStore.isTodosPanelVisible ? messages.closeTodosDrawer : messages.openTodosDrawer; const workspaceToggleMessage = isWorkspaceDrawerOpen ? messages.closeWorkspaceDrawer : messages.openWorkspaceDrawer; const numberActiveButtons = [ !hideRecipesButton, !hideWorkspacesButton, !hideNotificationsButton, !hideSettingsButton, todosStore.isFeatureEnabledByUser ].filter(Boolean).length; return (
this.enableToolTip()} disableToolTip={() => this.disableToolTip()} useVerticalStyle={stores.settings.all.app.useVerticalStyle} /> <> {numberActiveButtons <= 1 ? ( null ) : } {!hideRecipesButton && !this.state.isCollapsed ? ( ) : null} {!hideWorkspacesButton && !this.state.isCollapsed ? ( ) : null} {!hideNotificationsButton && !this.state.isCollapsed ? ( ) : null} {todosStore.isFeatureEnabledByUser && !this.state.isCollapsed ? ( ) : null} {stores.settings.all.app.lockingFeatureEnabled ? ( ) : null} {this.state.tooltipEnabled && ( )} {!hideSettingsButton && !this.state.isCollapsed ? ( ) : null}
); } } export default injectIntl(inject('stores', 'actions')(observer(Sidebar)));