From fb5f2987f300bffb06f2061ae79045798f89df83 Mon Sep 17 00:00:00 2001 From: Jack Wotherspoon Date: Tue, 19 Aug 2025 17:06:01 -0400 Subject: [PATCH] feat(ui): add `hideFooter` setting to hide footer from UI (#6505) --- packages/cli/src/config/settingsSchema.ts | 9 ++++ packages/cli/src/ui/App.test.tsx | 52 +++++++++++++++++++++++ packages/cli/src/ui/App.tsx | 38 +++++++++-------- 3 files changed, 82 insertions(+), 17 deletions(-) diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 4a7a986b..ebea3ad5 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -86,6 +86,15 @@ export const SETTINGS_SCHEMA = { description: 'Hide the application banner', showInDialog: true, }, + hideFooter: { + type: 'boolean', + label: 'Hide Footer', + category: 'UI', + requiresRestart: false, + default: false, + description: 'Hide the footer from the UI', + showInDialog: true, + }, showMemoryUsage: { type: 'boolean', label: 'Show Memory Usage', diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index 9a712336..6a019ab6 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -864,6 +864,58 @@ describe('App UI', () => { expect(vi.mocked(Header)).not.toHaveBeenCalled(); }); + it('should display Footer component by default', async () => { + const { lastFrame, unmount } = renderWithProviders( + , + ); + currentUnmount = unmount; + await Promise.resolve(); + // Footer should render - look for target directory which is always shown + expect(lastFrame()).toContain('/test/dir'); + }); + + it('should not display Footer component when hideFooter is true', async () => { + mockSettings = createMockSettings({ + user: { hideFooter: true }, + }); + + const { lastFrame, unmount } = renderWithProviders( + , + ); + currentUnmount = unmount; + await Promise.resolve(); + // Footer should not render - target directory should not appear + expect(lastFrame()).not.toContain('/test/dir'); + }); + + it('should show footer if system says show, but workspace and user settings say hide', async () => { + mockSettings = createMockSettings({ + system: { hideFooter: false }, + user: { hideFooter: true }, + workspace: { hideFooter: true }, + }); + + const { lastFrame, unmount } = renderWithProviders( + , + ); + currentUnmount = unmount; + await Promise.resolve(); + // Footer should render because system overrides - look for target directory + expect(lastFrame()).toContain('/test/dir'); + }); + it('should show tips if system says show, but workspace and user settings say hide', async () => { mockSettings = createMockSettings({ system: { hideTips: false }, diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 1aeb3bd0..d71d8371 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -1249,23 +1249,27 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => { )} )} -