MCPcopy Create free account
hub / github.com/winfunc/opcode / TabProvider

Function TabProvider

src/contexts/TabContext.tsx:42–249  ·  view source on GitHub ↗
({ children })

Source from the content-addressed store, hash-verified

40const MAX_TABS = 20;
41
42export const TabProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
43 const [tabs, setTabs] = useState<Tab[]>([]);
44 const [activeTabId, setActiveTabId] = useState<string | null>(null);
45 const isInitialized = useRef(false);
46 const saveTimeoutRef = useRef<NodeJS.Timeout>();
47
48 // Load tabs from storage on mount
49 useEffect(() => {
50 const loadTabs = async () => {
51 if (isInitialized.current) return;
52 isInitialized.current = true;
53
54 // Migrate from old format if needed
55 TabPersistenceService.migrateFromOldFormat();
56
57 // Try to load saved tabs
58 const { tabs: savedTabs, activeTabId: savedActiveTabId } = TabPersistenceService.loadTabs();
59
60 if (savedTabs.length > 0) {
61 // For chat tabs, restore session data
62 const restoredTabs = await Promise.all(savedTabs.map(async (tab) => {
63 if (tab.type === 'chat' && tab.sessionId) {
64 // Check if session can be restored
65 const sessionData = SessionPersistenceService.loadSession(tab.sessionId);
66 if (sessionData) {
67 // Create a Session object for the tab
68 const session = SessionPersistenceService.createSessionFromRestoreData(sessionData);
69 return {
70 ...tab,
71 sessionData: session,
72 initialProjectPath: sessionData.projectPath
73 };
74 }
75 }
76 return tab;
77 }));
78
79 setTabs(restoredTabs);
80 setActiveTabId(savedActiveTabId);
81 } else {
82 // Create default projects tab if no saved tabs
83 const defaultTab: Tab = {
84 id: generateTabId(),
85 type: 'projects',
86 title: 'Projects',
87 status: 'idle',
88 hasUnsavedChanges: false,
89 order: 0,
90 createdAt: new Date(),
91 updatedAt: new Date()
92 };
93 setTabs([defaultTab]);
94 setActiveTabId(defaultTab.id);
95 }
96 };
97
98 loadTabs();
99 }, []);

Callers

nothing calls this directly

Calls 4

loadTabsFunction · 0.85
generateTabIdFunction · 0.85
saveTabsMethod · 0.80
clearTabsMethod · 0.80

Tested by

no test coverage detected