Skip to content

Commit 4362552

Browse files
committed
fix: share single camera order key across all live views
All live views (WebRTC, HLS, MSE) now read from and write to a single localStorage key 'lightnvr-camera-order' instead of per-view keys ('lightnvr-camera-order-webrtc' / 'lightnvr-camera-order-hls'). This fixes issue #326 where reordering streams in WebRTC view had no effect on HLS/MSE view and vice versa. The _viewType parameter is kept in the hook signature for API compatibility but is no longer used.
1 parent 691182e commit 4362552

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

web/js/components/preact/useCameraOrder.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@
77
* - reorderMode: boolean toggle – when true, drag handles are shown
88
* - drag handlers: onDragStart / onDragOver / onDrop / onDragEnd
99
*
10-
* Order is keyed by view type ("webrtc" | "hls") and stored in
11-
* localStorage as an array of stream names.
10+
* All live views (WebRTC / HLS / MSE) share a single storage key so that
11+
* reordering on one page is reflected on all others.
1212
*/
1313

1414
import { useState, useCallback, useRef } from 'preact/hooks';
1515

16-
const STORAGE_KEY_PREFIX = 'lightnvr-camera-order-';
16+
const STORAGE_KEY = 'lightnvr-camera-order';
1717

1818
/**
1919
* Load persisted order from localStorage.
2020
* Returns an object mapping stream name → position index.
2121
*/
22-
function loadOrder(viewType) {
22+
function loadOrder() {
2323
try {
24-
const raw = localStorage.getItem(STORAGE_KEY_PREFIX + viewType);
24+
const raw = localStorage.getItem(STORAGE_KEY);
2525
if (!raw) return {};
2626
const arr = JSON.parse(raw);
2727
if (!Array.isArray(arr)) return {};
@@ -36,9 +36,9 @@ function loadOrder(viewType) {
3636
/**
3737
* Persist an ordered array of stream names to localStorage.
3838
*/
39-
function saveOrder(viewType, names) {
39+
function saveOrder(names) {
4040
try {
41-
localStorage.setItem(STORAGE_KEY_PREFIX + viewType, JSON.stringify(names));
41+
localStorage.setItem(STORAGE_KEY, JSON.stringify(names));
4242
} catch { /* quota errors are non-fatal */ }
4343
}
4444

@@ -60,11 +60,11 @@ function applyOrder(streams, orderMap) {
6060

6161
/**
6262
* @param {Array} streams - the filtered streams array from LiveView / WebRTCView
63-
* @param {string} viewType - "webrtc" | "hls"
63+
* @param {string} _viewType - ignored (kept for API compatibility); all views share one key
6464
*/
65-
export function useCameraOrder(streams, viewType) {
65+
export function useCameraOrder(streams, _viewType) {
6666
// The persisted user-defined order (stream name → position index)
67-
const [orderMap, setOrderMap] = useState(() => loadOrder(viewType));
67+
const [orderMap, setOrderMap] = useState(() => loadOrder());
6868

6969
// Whether the drag-reorder UI is active
7070
const [reorderMode, setReorderMode] = useState(false);
@@ -120,20 +120,20 @@ export function useCameraOrder(streams, viewType) {
120120
e.preventDefault();
121121
// Persist the current order
122122
const current = applyOrder(streams, orderRef.current);
123-
saveOrder(viewType, current.map(s => s.name));
123+
saveOrder(current.map(s => s.name));
124124
dragIndexRef.current = null;
125-
}, [streams, viewType]);
125+
}, [streams]);
126126

127127
const handleDragEnd = useCallback(() => {
128128
dragIndexRef.current = null;
129129
}, []);
130130

131131
/** Clear persisted order and reset to server default */
132132
const resetOrder = useCallback(() => {
133-
localStorage.removeItem(STORAGE_KEY_PREFIX + viewType);
133+
localStorage.removeItem(STORAGE_KEY);
134134
setOrderMap({});
135135
setReorderMode(false);
136-
}, [viewType]);
136+
}, []);
137137

138138
return {
139139
orderedStreams,

0 commit comments

Comments
 (0)