refactor(settings): replace modal with nested full-page route

Settings sections are now URL-addressable at /settings/:sectionId, rendered
nested inside EditorLayout alongside the stack sidebar. Browser back/forward
navigates between sections. Deep links (e.g. /settings/cloud-backup) load
the section directly on hard reload.

- Add react-router-dom v7; BrowserRouter wraps the full app tree
- New SettingsPage (scroll memory, Cmd+K palette), SettingsSidebar (NavLink
  active styling, back-arrow), SectionGate (visibility + tier lock card)
- Rename SectionId 'appstore' to 'app-store' so slug === SectionId
- Decouple SystemSection, DeveloperSection, AppStoreSection from modal-
  passed props; each fetches its own data on mount
- Replace onLabelsChanged prop chain with SENCHO_LABELS_CHANGED window event
- Drop onOpenSettings prop from UserProfileDropdown, HomeDashboard,
  ConfigurationStatus; each calls useNavigate directly
- Delete SettingsModal.tsx
This commit is contained in:
SaelixCode
2026-04-30 10:13:19 -04:00
parent 3c30c2befe
commit 4475afd793
19 changed files with 828 additions and 621 deletions
+10 -7
View File
@@ -1,3 +1,4 @@
import { BrowserRouter } from 'react-router-dom';
import { AuthProvider, useAuth } from './context/AuthContext';
import { NodeProvider } from './context/NodeContext';
import { LicenseProvider } from './context/LicenseContext';
@@ -44,13 +45,15 @@ import { ToastContainer } from './components/ui/toast';
function App() {
return (
<AuthProvider>
<DeployFeedbackProvider>
<AppContent />
<DeployFeedbackPortal />
</DeployFeedbackProvider>
<ToastContainer />
</AuthProvider>
<BrowserRouter>
<AuthProvider>
<DeployFeedbackProvider>
<AppContent />
<DeployFeedbackPortal />
</DeployFeedbackProvider>
<ToastContainer />
</AuthProvider>
</BrowserRouter>
);
}