refactor: use local state for quick settings menu

This commit is contained in:
Aman Harwara
2023-08-11 00:27:56 +05:30
parent a348b24ae2
commit 124d5f4411
6 changed files with 10 additions and 86 deletions

View File

@@ -37,7 +37,6 @@ type State = {
showSyncResolution: boolean
newUpdateAvailable: boolean
showAccountMenu: boolean
showQuickSettingsMenu: boolean
offline: boolean
hasError: boolean
arbitraryStatusMessage?: string
@@ -64,7 +63,6 @@ class Footer extends AbstractComponent<Props, State> {
showSyncResolution: false,
newUpdateAvailable: false,
showAccountMenu: false,
showQuickSettingsMenu: false,
}
this.webEventListenerDestroyer = props.application.addWebEventObserver((event, data) => {
@@ -125,7 +123,6 @@ class Footer extends AbstractComponent<Props, State> {
this.autorun(() => {
this.setState({
showAccountMenu: this.application.accountMenuController.show,
showQuickSettingsMenu: this.application.quickSettingsMenuController.open,
})
})
}
@@ -293,10 +290,6 @@ class Footer extends AbstractComponent<Props, State> {
this.application.accountMenuController.toggleShow()
}
quickSettingsClickHandler = () => {
this.application.quickSettingsMenuController.toggle()
}
syncResolutionClickHandler = () => {
this.setState({
showSyncResolution: !this.state.showSyncResolution,
@@ -336,12 +329,7 @@ class Footer extends AbstractComponent<Props, State> {
this.application.accountMenuController.closeAccountMenu()
}
clickOutsideQuickSettingsMenu = () => {
this.application.quickSettingsMenuController.closeQuickSettingsMenu()
}
openPreferences = (openWhatsNew: boolean) => {
this.clickOutsideQuickSettingsMenu()
if (openWhatsNew) {
this.application.preferencesController.setCurrentPane('whats-new')
}
@@ -372,12 +360,7 @@ class Footer extends AbstractComponent<Props, State> {
</div>
<div className="relative z-footer-bar-item select-none">
<QuickSettingsButton
isOpen={this.state.showQuickSettingsMenu}
toggleMenu={this.quickSettingsClickHandler}
application={this.application}
quickSettingsMenuController={this.application.quickSettingsMenuController}
/>
<QuickSettingsButton application={this.application} />
</div>
<div className="relative z-footer-bar-item ml-1.5 select-none">

View File

@@ -1,9 +1,8 @@
import { WebApplication } from '@/Application/WebApplication'
import { QuickSettingsController } from '@/Controllers/QuickSettingsController'
import { UIFeature, GetDarkThemeFeature } from '@standardnotes/snjs'
import { TOGGLE_DARK_MODE_COMMAND } from '@standardnotes/ui-services'
import { classNames } from '@standardnotes/utils'
import { useEffect, useRef } from 'react'
import { useEffect, useRef, useState } from 'react'
import { useCommandService } from '../CommandProvider'
import Icon from '../Icon/Icon'
import Popover from '../Popover/Popover'
@@ -11,16 +10,16 @@ import QuickSettingsMenu from '../QuickSettingsMenu/QuickSettingsMenu'
import StyledTooltip from '../StyledTooltip/StyledTooltip'
type Props = {
isOpen: boolean
toggleMenu: () => void
application: WebApplication
quickSettingsMenuController: QuickSettingsController
}
const QuickSettingsButton = ({ application, isOpen, toggleMenu, quickSettingsMenuController }: Props) => {
const QuickSettingsButton = ({ application }: Props) => {
const buttonRef = useRef<HTMLButtonElement>(null)
const commandService = useCommandService()
const [isOpen, setIsOpen] = useState(false)
const toggleMenu = () => setIsOpen(!isOpen)
useEffect(() => {
return commandService.addCommandHandler({
command: TOGGLE_DARK_MODE_COMMAND,
@@ -52,7 +51,7 @@ const QuickSettingsButton = ({ application, isOpen, toggleMenu, quickSettingsMen
align="start"
className="py-2"
>
<QuickSettingsMenu quickSettingsMenuController={quickSettingsMenuController} />
<QuickSettingsMenu closeMenu={toggleMenu} />
</Popover>
</>
)