fix(desktop): show the file browser default in Appearance settings
Settings > Appearance > Window & layout gets a File Browser toggle bound to the same persisted state as the titlebar toggle and Cmd+J, so the open/closed default is a visible, searchable preference.
This commit is contained in:
committed by
brooklyn!
parent
9adc38974c
commit
70b5725989
@@ -26,6 +26,7 @@ import {
|
||||
setInterfaceMode
|
||||
} from '@/store/interface-mode'
|
||||
import { $introSplash, setIntroSplash } from '@/store/intro-splash'
|
||||
import { $fileBrowserOpen, setFileBrowserOpen } from '@/store/layout'
|
||||
import { notifyError } from '@/store/notifications'
|
||||
import { $activeGatewayProfile, $profiles, normalizeProfileKey } from '@/store/profile'
|
||||
import { $reactionsEnabled, setReactionsEnabled } from '@/store/reactions-enabled'
|
||||
@@ -430,6 +431,7 @@ export function AppearanceSettings({ subpage }: AppearanceSettingsProps = {}) {
|
||||
const embedMode = useStore($embedMode)
|
||||
const embedAllowed = useStore($embedAllowed)
|
||||
const composerPopoutGesturesEnabled = useStore($composerPopoutGesturesEnabled)
|
||||
const fileBrowserOpen = useStore($fileBrowserOpen)
|
||||
const translucency = useStore($translucency)
|
||||
const glassMode = translucency.mode === 'glass' && GLASS_SUPPORTED
|
||||
const userBubbleTransparency = useStore($userBubbleTransparency)
|
||||
@@ -924,6 +926,18 @@ export function AppearanceSettings({ subpage }: AppearanceSettingsProps = {}) {
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* The same state as the titlebar toggle / ⌘J, which persists across
|
||||
launches — so this is the file browser's standing default. */}
|
||||
{show('window-layout') && (
|
||||
<ToggleRow
|
||||
checked={fileBrowserOpen}
|
||||
description={a.fileBrowserDesc}
|
||||
id={settingElementId(ids.fileBrowser)}
|
||||
label={a.fileBrowserTitle}
|
||||
onChange={setFileBrowserOpen}
|
||||
/>
|
||||
)}
|
||||
|
||||
{show('window-layout') && (
|
||||
<ToggleRow
|
||||
checked={composerPopoutGesturesEnabled}
|
||||
|
||||
54
apps/desktop/src/app/settings/file-browser-setting.test.tsx
Normal file
54
apps/desktop/src/app/settings/file-browser-setting.test.tsx
Normal file
@@ -0,0 +1,54 @@
|
||||
// @vitest-environment jsdom
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { act, cleanup, fireEvent, render, screen } from '@testing-library/react'
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
|
||||
import { $fileBrowserOpen, FILE_BROWSER_PANE_ID, setFileBrowserOpen, toggleFileBrowserOpen } from '@/store/layout'
|
||||
import { $paneStates } from '@/store/panes'
|
||||
|
||||
import { AppearanceSettings } from './appearance-settings'
|
||||
|
||||
// #65173: the file browser's open/closed default was only reachable through
|
||||
// ⌘J and a persistence chain nobody could see. Settings now states it, and it
|
||||
// is the same state the titlebar toggle writes — two views, one answer.
|
||||
|
||||
afterEach(() => {
|
||||
cleanup()
|
||||
act(() => setFileBrowserOpen(false))
|
||||
})
|
||||
|
||||
function fileBrowserSwitch() {
|
||||
render(
|
||||
<QueryClientProvider client={new QueryClient()}>
|
||||
<AppearanceSettings subpage="window-layout" />
|
||||
</QueryClientProvider>
|
||||
)
|
||||
|
||||
return screen.getByRole('switch', { name: 'File Browser' })
|
||||
}
|
||||
|
||||
describe('File Browser setting', () => {
|
||||
it('turns the file browser on and off, and persists the choice', () => {
|
||||
const toggle = fileBrowserSwitch()
|
||||
|
||||
expect(toggle.getAttribute('aria-checked')).toBe('false')
|
||||
|
||||
fireEvent.click(toggle)
|
||||
|
||||
expect($fileBrowserOpen.get()).toBe(true)
|
||||
expect($paneStates.get()[FILE_BROWSER_PANE_ID]?.open).toBe(true)
|
||||
|
||||
fireEvent.click(toggle)
|
||||
|
||||
expect($fileBrowserOpen.get()).toBe(false)
|
||||
expect($paneStates.get()[FILE_BROWSER_PANE_ID]?.open).toBe(false)
|
||||
})
|
||||
|
||||
it('follows the titlebar toggle', () => {
|
||||
const toggle = fileBrowserSwitch()
|
||||
|
||||
act(() => toggleFileBrowserOpen())
|
||||
|
||||
expect(toggle.getAttribute('aria-checked')).toBe('true')
|
||||
})
|
||||
})
|
||||
@@ -101,6 +101,11 @@ export const SETTINGS_MANIFEST = {
|
||||
available: () => TRANSLUCENCY_SUPPORTED
|
||||
},
|
||||
backdrop: appearanceSetting('window-layout', ['background', 'blur'], 'backdrop'),
|
||||
fileBrowser: appearanceSetting(
|
||||
'window-layout',
|
||||
['file browser', 'files', 'file tree', 'explorer', 'right sidebar', 'panel', 'startup'],
|
||||
'fileBrowser'
|
||||
),
|
||||
composerPopout: appearanceSetting(
|
||||
'window-layout',
|
||||
['composer', 'floating', 'drag', 'popout', 'dock', 'input'],
|
||||
|
||||
Reference in New Issue
Block a user