@@ -4,11 +4,48 @@ import { ThemeProvider } from '@mui/material/styles';
44import CssBaseline from '@mui/material/CssBaseline' ;
55import { LocalizationProvider } from '@mui/x-date-pickers' ;
66import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns' ;
7- import { MemoryRouter } from 'react-router-dom' ;
87import WebSocketContext from '../src/contexts/WebSocketContext' ;
98import { lightTheme , darkTheme } from '../src/theme' ;
109import { defaultMswHandlers } from './fixtures/mswHandlers' ;
1110
11+ /**
12+ * STORYBOOK ROUTER CONFIGURATION
13+ *
14+ * Stories for components that use React Router hooks (useNavigate, useParams, useLocation)
15+ * must explicitly wrap their components with MemoryRouter to avoid runtime errors.
16+ *
17+ * Router-dependent components with stories:
18+ * - ChannelManager (.../ChannelManager.story.tsx)
19+ * - ChannelPage (.../ChannelPage.story.tsx)
20+ * - DownloadManager (.../DownloadManager.story.tsx)
21+ * - ChannelVideos (.../ChannelPage/__tests__/ChannelVideos.story.tsx)
22+ * - DownloadProgress (.../DownloadManager/__tests__/DownloadProgress.story.tsx)
23+ *
24+ * To add routing to a story:
25+ *
26+ * 1. For components that need routing context but no specific routes:
27+ * import { MemoryRouter } from 'react-router-dom';
28+ * const meta: Meta<typeof MyComponent> = {
29+ * // ...
30+ * decorators: [
31+ * (Story) => <MemoryRouter><Story /></MemoryRouter>
32+ * ]
33+ * };
34+ *
35+ * 2. For components that need specific routes/parameters:
36+ * import { MemoryRouter, Routes, Route } from 'react-router-dom';
37+ * const meta: Meta<typeof MyComponent> = {
38+ * // ...
39+ * render: (args) => (
40+ * <MemoryRouter initialEntries={['/path/to/route']}>
41+ * <Routes>
42+ * <Route path="/path/:id" element={<MyComponent {...args} />} />
43+ * </Routes>
44+ * </MemoryRouter>
45+ * )
46+ * };
47+ */
48+
1249initialize ( {
1350 onUnhandledRequest : 'bypass' ,
1451} ) ;
@@ -81,20 +118,16 @@ const preview = {
81118 const selectedTheme = context . globals . theme === 'dark' ? darkTheme : lightTheme ;
82119
83120 return React . createElement (
84- MemoryRouter ,
85- null ,
121+ LocalizationProvider ,
122+ { dateAdapter : AdapterDateFns } ,
86123 React . createElement (
87- LocalizationProvider ,
88- { dateAdapter : AdapterDateFns } ,
124+ ThemeProvider ,
125+ { theme : selectedTheme } ,
126+ React . createElement ( CssBaseline , null ) ,
89127 React . createElement (
90- ThemeProvider ,
91- { theme : selectedTheme } ,
92- React . createElement ( CssBaseline , null ) ,
93- React . createElement (
94- WebSocketContext . Provider ,
95- { value : mockWebSocketContext } ,
96- React . createElement ( Story )
97- )
128+ WebSocketContext . Provider ,
129+ { value : mockWebSocketContext } ,
130+ React . createElement ( Story )
98131 )
99132 )
100133 ) ;
0 commit comments