feat: open edit modal immediately after approving a pending device
This commit is contained in:
@@ -263,6 +263,7 @@ export default function App() {
|
|||||||
onAddNode={() => setAddNodeOpen(true)}
|
onAddNode={() => setAddNodeOpen(true)}
|
||||||
onScan={() => setScanConfigOpen(true)}
|
onScan={() => setScanConfigOpen(true)}
|
||||||
onSave={handleSave}
|
onSave={handleSave}
|
||||||
|
onNodeApproved={setEditNodeId}
|
||||||
/>
|
/>
|
||||||
<div className="flex flex-col flex-1 min-w-0">
|
<div className="flex flex-col flex-1 min-w-0">
|
||||||
<Toolbar
|
<Toolbar
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ interface SidebarProps {
|
|||||||
onAddNode: () => void
|
onAddNode: () => void
|
||||||
onScan: () => void
|
onScan: () => void
|
||||||
onSave: () => void
|
onSave: () => void
|
||||||
|
onNodeApproved: (nodeId: string) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Sidebar({ onAddNode, onScan, onSave }: SidebarProps) {
|
export function Sidebar({ onAddNode, onScan, onSave, onNodeApproved }: SidebarProps) {
|
||||||
const [collapsed, setCollapsed] = useState(false)
|
const [collapsed, setCollapsed] = useState(false)
|
||||||
const [activeView, setActiveView] = useState<SidebarView>('canvas')
|
const [activeView, setActiveView] = useState<SidebarView>('canvas')
|
||||||
const { nodes, hasUnsavedChanges } = useCanvasStore()
|
const { nodes, hasUnsavedChanges } = useCanvasStore()
|
||||||
@@ -90,7 +91,7 @@ export function Sidebar({ onAddNode, onScan, onSave }: SidebarProps) {
|
|||||||
{/* View content (only when expanded) */}
|
{/* View content (only when expanded) */}
|
||||||
{!collapsed && activeView !== 'canvas' && (
|
{!collapsed && activeView !== 'canvas' && (
|
||||||
<div className="flex-1 min-h-0 overflow-y-auto border-t border-border">
|
<div className="flex-1 min-h-0 overflow-y-auto border-t border-border">
|
||||||
{activeView === 'pending' && <PendingDevicesPanel />}
|
{activeView === 'pending' && <PendingDevicesPanel onNodeApproved={onNodeApproved} />}
|
||||||
{activeView === 'hidden' && <HiddenDevicesPanel />}
|
{activeView === 'hidden' && <HiddenDevicesPanel />}
|
||||||
{activeView === 'history' && <ScanHistoryPanel />}
|
{activeView === 'history' && <ScanHistoryPanel />}
|
||||||
</div>
|
</div>
|
||||||
@@ -136,7 +137,7 @@ export function Sidebar({ onAddNode, onScan, onSave }: SidebarProps) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function PendingDevicesPanel() {
|
function PendingDevicesPanel({ onNodeApproved }: { onNodeApproved: (nodeId: string) => void }) {
|
||||||
const [devices, setDevices] = useState<PendingDevice[]>([])
|
const [devices, setDevices] = useState<PendingDevice[]>([])
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [selected, setSelected] = useState<PendingDevice | null>(null)
|
const [selected, setSelected] = useState<PendingDevice | null>(null)
|
||||||
@@ -180,6 +181,7 @@ function PendingDevicesPanel() {
|
|||||||
})
|
})
|
||||||
toast.success(`Approved ${nodeData.label}`)
|
toast.success(`Approved ${nodeData.label}`)
|
||||||
setDevices((prev) => prev.filter((d) => d.id !== device.id))
|
setDevices((prev) => prev.filter((d) => d.id !== device.id))
|
||||||
|
onNodeApproved(nodeId)
|
||||||
} catch {
|
} catch {
|
||||||
toast.error('Failed to approve device')
|
toast.error('Failed to approve device')
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user