From 356beefe8194e6b3622b8cf849f7d08dc8ec4d9e Mon Sep 17 00:00:00 2001 From: Shaun Andrews Date: Fri, 26 Jun 2026 22:03:18 -0400 Subject: [PATCH 1/3] Port application settings to agentic UI --- .../components/settings-view/index.test.tsx | 564 ++++++++ .../ui/src/components/settings-view/index.tsx | 1167 +++++++++++++++-- .../settings-view/preferences.test.ts | 61 + .../components/settings-view/preferences.ts | 60 + .../components/settings-view/style.module.css | 817 +++++++++++- .../src/components/sidebar-layout/index.tsx | 2 +- .../sidebar-layout/style.module.css | 7 +- .../src/components/site-list/index.test.tsx | 40 + apps/ui/src/components/site-list/index.tsx | 12 +- .../src/components/site-list/style.module.css | 6 +- .../src/components/user-menu/index.test.tsx | 145 ++ apps/ui/src/components/user-menu/index.tsx | 98 +- .../src/components/user-menu/style.module.css | 55 +- .../src/data/core/connectors/hosted/index.ts | 47 + apps/ui/src/data/core/connectors/ipc/index.ts | 134 +- apps/ui/src/data/core/index.ts | 3 + apps/ui/src/data/core/types.ts | 38 + apps/ui/src/data/queries/use-app-globals.ts | 13 + apps/ui/src/data/queries/use-snapshots.ts | 49 +- .../src/data/queries/use-wordpress-skills.ts | 34 + apps/ui/src/hooks/use-offline.ts | 22 + apps/ui/src/index.css | 12 + apps/ui/src/lib/docs-links.ts | 10 + .../ui-classic/router/layout-root/index.tsx | 29 +- .../router/route-settings/index.tsx | 8 +- 25 files changed, 3142 insertions(+), 291 deletions(-) create mode 100644 apps/ui/src/components/settings-view/index.test.tsx create mode 100644 apps/ui/src/components/settings-view/preferences.test.ts create mode 100644 apps/ui/src/components/settings-view/preferences.ts create mode 100644 apps/ui/src/components/user-menu/index.test.tsx create mode 100644 apps/ui/src/data/queries/use-app-globals.ts create mode 100644 apps/ui/src/data/queries/use-wordpress-skills.ts create mode 100644 apps/ui/src/hooks/use-offline.ts diff --git a/apps/ui/src/components/settings-view/index.test.tsx b/apps/ui/src/components/settings-view/index.test.tsx new file mode 100644 index 0000000000..69c5c3c636 --- /dev/null +++ b/apps/ui/src/components/settings-view/index.test.tsx @@ -0,0 +1,564 @@ +import '@testing-library/jest-dom/vitest'; +import { useBlocker } from '@tanstack/react-router'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { useConnector } from '@/data/core'; +import { useAppGlobals } from '@/data/queries/use-app-globals'; +import { useAuthUser, useLogin, useLogout } from '@/data/queries/use-auth-user'; +import { useInstalledApps } from '@/data/queries/use-installed-apps'; +import { + useDeleteAllSnapshots, + useSnapshotUsage, + useSnapshots, +} from '@/data/queries/use-snapshots'; +import { useSaveUserPreferences, useUserPreferences } from '@/data/queries/use-user-preferences'; +import { + useInstallWordPressSkill, + useRemoveWordPressSkill, + useWordPressSkills, +} from '@/data/queries/use-wordpress-skills'; +import { useOffline } from '@/hooks/use-offline'; +import { SettingsView, normalizeSettingsTab } from './index'; +import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactNode } from 'react'; + +vi.mock( '@tanstack/react-router', () => ( { + useBlocker: vi.fn(), +} ) ); + +vi.mock( '@wordpress/components', () => ( { + FormToggle: ( props: { + id?: string; + checked: boolean; + 'aria-label'?: string; + onChange: ( event: { target: { checked: boolean } } ) => void; + } ) => ( + props.onChange( { target: { checked: event.target.checked } } ) } + /> + ), +} ) ); + +vi.mock( '@wordpress/ui', () => ( { + Button: ( { + children, + loading, + loadingAnnouncement, + tone, + variant, + size, + ...props + }: ButtonHTMLAttributes< HTMLButtonElement > & { + children?: ReactNode; + loading?: boolean; + loadingAnnouncement?: string; + tone?: string; + variant?: string; + size?: string; + } ) => { + void tone; + void variant; + void size; + return ; + }, + Icon: () =>