1. Split monolithic `ChannelsTable` (2200+ LOC) into focused components
• `channels/index.jsx` – composition entry
• `ChannelsTable.jsx` – pure `<Table>` rendering
• `ChannelsActions.jsx` – bulk & settings toolbar
• `ChannelsFilters.jsx` – search / create / column-settings form
• `ChannelsTabs.jsx` – type tabs
• `ChannelsColumnDefs.js` – column definitions & render helpers
• `modals/` – BatchTag, ColumnSelector, ModelTest modals
2. Extract domain hook
• Moved `useChannelsData.js` → `src/hooks/channels/useChannelsData.js`
– centralises state, API calls, pagination, filters, batch ops
– now exports `setActivePage`, fixing tab / status switch errors
3. Update wiring
• All sub-components consume data via `useChannelsData` props
• Adjusted import paths after hook relocation
4. Clean legacy file
• Legacy `components/table/ChannelsTable.js` now re-exports new module
5. Bug fixes
• Tab switching, status filter & tag aggregation restored
• Column selector & batch actions operate via unified hook
This commit completes the first phase of modularising the Channels feature, laying groundwork for consistent, maintainable table architecture across the app.
22 lines
563 B
JavaScript
22 lines
563 B
JavaScript
import { useState, useCallback } from 'react';
|
|
|
|
const KEY = 'default_collapse_sidebar';
|
|
|
|
export const useSidebarCollapsed = () => {
|
|
const [collapsed, setCollapsed] = useState(() => localStorage.getItem(KEY) === 'true');
|
|
|
|
const toggle = useCallback(() => {
|
|
setCollapsed(prev => {
|
|
const next = !prev;
|
|
localStorage.setItem(KEY, next.toString());
|
|
return next;
|
|
});
|
|
}, []);
|
|
|
|
const set = useCallback((value) => {
|
|
setCollapsed(value);
|
|
localStorage.setItem(KEY, value.toString());
|
|
}, []);
|
|
|
|
return [collapsed, toggle, set];
|
|
};
|