About
ResolutionFlow - Decision Tree Platform
diff --git a/frontend/src/pages/TreeEditorPage.tsx b/frontend/src/pages/TreeEditorPage.tsx
index 203d9718..374da3fb 100644
--- a/frontend/src/pages/TreeEditorPage.tsx
+++ b/frontend/src/pages/TreeEditorPage.tsx
@@ -1,7 +1,7 @@
import { useEffect, useState, useCallback } from 'react'
import { useParams, useNavigate, useBlocker } from 'react-router-dom'
import { useStore } from 'zustand'
-import { Undo2, Redo2, Save, CheckCircle2 } from 'lucide-react'
+import { Undo2, Redo2, Save, CheckCircle2, Monitor } from 'lucide-react'
import { treesApi } from '@/api'
import type { TreeCreate, TreeUpdate } from '@/types'
import { useTreeEditorStore, useTreeEditorTemporal } from '@/store/treeEditorStore'
@@ -42,6 +42,15 @@ export function TreeEditorPage() {
const [showDraftPrompt, setShowDraftPrompt] = useState(false)
const [saveError, setSaveError] = useState(null)
+ // Mobile detection
+ const [isMobile, setIsMobile] = useState(false)
+ useEffect(() => {
+ const check = () => setIsMobile(window.innerWidth < 768)
+ check()
+ window.addEventListener('resize', check)
+ return () => window.removeEventListener('resize', check)
+ }, [])
+
// Calculate if there are blocking errors
const hasBlockingErrors = validationErrors.some(e => e.severity === 'error')
@@ -203,17 +212,30 @@ export function TreeEditorPage() {
)
}
- // Mobile warning
- const isMobile = typeof window !== 'undefined' && window.innerWidth < 768
+ // Mobile gate: show read-only message
+ if (isMobile) {
+ return (
+
+
+
Desktop Required
+
+ The tree editor requires a larger screen for the best experience. Please open this page on a desktop or tablet in landscape mode.
+
+
+
+ )
+ }
return (
- {/* Mobile Warning */}
- {isMobile && (
-
- Desktop recommended for tree editing. Viewing mode only on mobile.
-
- )}
{/* Draft Restore Prompt */}
{showDraftPrompt && (
diff --git a/frontend/src/pages/TreeLibraryPage.tsx b/frontend/src/pages/TreeLibraryPage.tsx
index 65dbbb75..8ea63799 100644
--- a/frontend/src/pages/TreeLibraryPage.tsx
+++ b/frontend/src/pages/TreeLibraryPage.tsx
@@ -1,6 +1,6 @@
import { useEffect, useState, useCallback } from 'react'
import { useNavigate, Link } from 'react-router-dom'
-import { Plus, Pencil, Globe, Lock, X, Trash2 } from 'lucide-react'
+import { Plus, Pencil, Globe, Lock, X, Trash2, FolderOpen } from 'lucide-react'
import { treesApi, categoriesApi, foldersApi } from '@/api'
import type { TreeListItem, CategoryListItem, FolderListItem } from '@/types'
import { TagBadges } from '@/components/common/TagBadges'
@@ -29,6 +29,9 @@ export function TreeLibraryPage() {
const [editingFolder, setEditingFolder] = useState
(null)
const [newFolderParentId, setNewFolderParentId] = useState(null)
+ // Mobile folder sidebar state
+ const [mobileFolderOpen, setMobileFolderOpen] = useState(false)
+
// Delete confirmation state
const [treeToDelete, setTreeToDelete] = useState(null)
const [showDeleteConfirm, setShowDeleteConfirm] = useState(false)
@@ -152,17 +155,22 @@ export function TreeLibraryPage() {
{/* Folder Sidebar */}
{
+ setSelectedFolderId(id)
+ setMobileFolderOpen(false)
+ }}
onCreateFolder={handleCreateFolder}
onEditFolder={handleEditFolder}
+ mobileOpen={mobileFolderOpen}
+ onMobileClose={() => setMobileFolderOpen(false)}
/>
{/* Main Content */}
-
-
+
+
-
Decision Trees
+
Decision Trees
Select a troubleshooting tree to start a new session
@@ -183,6 +191,18 @@ export function TreeLibraryPage() {
{/* Search and Filter */}
+ {/* Mobile folder button */}
+
(
{tree.name}
@@ -336,7 +356,7 @@ export function TreeLibraryPage() {
handleStartSession(tree.id)}
className={cn(
- 'rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground',
+ 'rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground',
'hover:bg-primary/90'
)}
>
diff --git a/frontend/src/pages/TreeNavigationPage.tsx b/frontend/src/pages/TreeNavigationPage.tsx
index 9ed28883..4773fdac 100644
--- a/frontend/src/pages/TreeNavigationPage.tsx
+++ b/frontend/src/pages/TreeNavigationPage.tsx
@@ -643,7 +643,7 @@ export function TreeNavigationPage() {
return (
{/* Main Content */}
-
+
{/* Header */}
@@ -659,7 +659,7 @@ export function TreeNavigationPage() {
@@ -753,9 +753,10 @@ export function TreeNavigationPage() {
{/* Add Custom Step Button */}
>
)}