fix(ui): optimize react state, performance, and ux logic
- Refactored useFilteredNodes to memoize logic and prevent re-rendering. - Optimized LeftPanel useMemo dependencies and HostChart O(N) traversal. - Fixed polling interval desync and added WebSocket throttling/React Strict Mode transport patch. - Fixed Graph layout dependencies and 'ghost' children chevrons on collapsed nodes. - Fixed RightPanel tab persistence UI bug and resolved React Hooks order crash. No remaining known issues from the UI analysis.
This commit is contained in:
@@ -94,39 +94,6 @@ describe('topologyStore', () => {
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* Filtering
|
||||
* ------------------------------------------------------------- */
|
||||
|
||||
describe('getFilteredNodes', () => {
|
||||
test('returns all nodes when no filters active', () => {
|
||||
useTopologyStore.getState().setNodes(mockNodes);
|
||||
const filtered = useTopologyStore.getState().getFilteredNodes();
|
||||
expect(filtered).toHaveLength(4);
|
||||
});
|
||||
|
||||
test('filters by search query', () => {
|
||||
useTopologyStore.getState().setNodes(mockNodes);
|
||||
useTopologyStore.getState().setSearchQuery('traefik');
|
||||
const filtered = useTopologyStore.getState().getFilteredNodes();
|
||||
expect(filtered.some(n => n.name === 'Traefik')).toBe(true);
|
||||
});
|
||||
|
||||
test('filters by status', () => {
|
||||
useTopologyStore.getState().setNodes(mockNodes);
|
||||
useTopologyStore.getState().setStatusFilter('stopped');
|
||||
const filtered = useTopologyStore.getState().getFilteredNodes();
|
||||
expect(filtered.every(n => n.data.status === 'stopped')).toBe(true);
|
||||
});
|
||||
|
||||
test('filters by type', () => {
|
||||
useTopologyStore.getState().setNodes(mockNodes);
|
||||
useTopologyStore.getState().toggleTypeFilter('service');
|
||||
const filtered = useTopologyStore.getState().getFilteredNodes();
|
||||
expect(filtered.every(n => n.type === 'service')).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* Type filter toggle
|
||||
* ------------------------------------------------------------- */
|
||||
|
||||
Reference in New Issue
Block a user