mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-21 18:47:13 +02:00
Add navigation persistence for embedded camera viewers
Embedded camera viewers now stay open when navigating away from the Printers page and back. Previously, users had to reopen each camera view manually after navigation.
This commit is contained in:
@@ -3803,7 +3803,30 @@ export function PrintersPage() {
|
||||
const viewMode: ViewMode = cardSize === 1 ? 'compact' : 'expanded';
|
||||
const queryClient = useQueryClient();
|
||||
// Embedded camera viewer state - supports multiple simultaneous viewers
|
||||
const [embeddedCameraPrinters, setEmbeddedCameraPrinters] = useState<Map<number, { id: number; name: string }>>(new Map());
|
||||
// Persisted to localStorage so cameras reopen after navigation
|
||||
const [embeddedCameraPrinters, setEmbeddedCameraPrinters] = useState<Map<number, { id: number; name: string }>>(() => {
|
||||
// Initialize from localStorage if camera_view_mode is embedded
|
||||
const saved = localStorage.getItem('openEmbeddedCameras');
|
||||
if (saved) {
|
||||
try {
|
||||
const cameras = JSON.parse(saved) as Array<{ id: number; name: string }>;
|
||||
return new Map(cameras.map(c => [c.id, c]));
|
||||
} catch {
|
||||
return new Map();
|
||||
}
|
||||
}
|
||||
return new Map();
|
||||
});
|
||||
|
||||
// Persist open cameras to localStorage when they change
|
||||
useEffect(() => {
|
||||
const cameras = Array.from(embeddedCameraPrinters.values());
|
||||
if (cameras.length > 0) {
|
||||
localStorage.setItem('openEmbeddedCameras', JSON.stringify(cameras));
|
||||
} else {
|
||||
localStorage.removeItem('openEmbeddedCameras');
|
||||
}
|
||||
}, [embeddedCameraPrinters]);
|
||||
|
||||
const { data: printers, isLoading } = useQuery({
|
||||
queryKey: ['printers'],
|
||||
@@ -3816,6 +3839,13 @@ export function PrintersPage() {
|
||||
queryFn: api.getSettings,
|
||||
});
|
||||
|
||||
// Close embedded cameras if mode changes to 'window'
|
||||
useEffect(() => {
|
||||
if (settings?.camera_view_mode === 'window' && embeddedCameraPrinters.size > 0) {
|
||||
setEmbeddedCameraPrinters(new Map());
|
||||
}
|
||||
}, [settings?.camera_view_mode, embeddedCameraPrinters.size]);
|
||||
|
||||
// Fetch all smart plugs to know which printers have them
|
||||
const { data: smartPlugs } = useQuery({
|
||||
queryKey: ['smart-plugs'],
|
||||
|
||||
Reference in New Issue
Block a user