27
import {SettingsContextController} from './Settings/SettingsContext';
28
import {TreeContextController} from './Components/TreeContext';
29
import ViewElementSourceContext from './Components/ViewElementSourceContext';
30
-import HookNamesContext from './Components/HookNamesContext';
30
+import FetchFileWithCachingContext from './Components/FetchFileWithCachingContext';
31
+import HookNamesModuleLoaderContext from 'react-devtools-shared/src/devtools/views/Components/HookNamesModuleLoaderContext';
32
import {ProfilerContextController} from './Profiler/ProfilerContext';
33
import {SchedulingProfilerContextController} from 'react-devtools-scheduling-profiler/src/SchedulingProfilerContext';
34
import {ModalDialogContextController} from './ModalDialog';
43
44
import './root.css';
45
45
-import type {HooksTree} from 'react-debug-tools/src/ReactDebugHooks';
46
import type {InspectedElement} from 'react-devtools-shared/src/devtools/views/Components/types';
47
+import type {FetchFileWithCaching} from './Components/FetchFileWithCachingContext';
48
+import type {HookNamesModuleLoaderFunction} from 'react-devtools-shared/src/devtools/views/Components/HookNamesModuleLoaderContext';
49
import type {FrontendBridge} from 'react-devtools-shared/src/bridge';
48
-import type {HookNames} from 'react-devtools-shared/src/types';
49
-import type {Thenable} from '../cache';
50
51
export type BrowserTheme = 'dark' | 'light';
52
export type TabID = 'components' | 'profiler';
53
54
-export type FetchFileWithCaching = (url: string) => Promise<string>;
55
-export type PrefetchSourceFiles = (
56
- hooksTree: HooksTree,
57
- fetchFileWithCaching: FetchFileWithCaching | null,
58
-) => void;
54
export type ViewElementSource = (
55
id: number,
56
inspectedElement: InspectedElement,
57
) => void;
63
-export type LoadHookNamesFunction = (
64
- hooksTree: HooksTree,
65
-) => Thenable<HookNames>;
66
-export type PurgeCachedHookNamesMetadata = () => void;
58
export type ViewAttributeSource = (
59
id: number,
60
path: Array<string | number>,
98
// and extracts hook "names" based on the variables the hook return values get assigned to.
99
// Not every DevTools build can load source maps, so this property is optional.
100
fetchFileWithCaching?: ?FetchFileWithCaching,
110
- loadHookNames?: ?LoadHookNamesFunction,
111
- prefetchSourceFiles?: ?PrefetchSourceFiles,
112
- purgeCachedHookNamesMetadata?: ?PurgeCachedHookNamesMetadata,
101
+ // TODO (Webpack 5) Hopefully we can remove this prop after the Webpack 5 migration.
102
+ hookNamesModuleLoaderFunction?: ?HookNamesModuleLoaderFunction,
103
|};
104
105
const componentsTab = {
125
defaultTab = 'components',
126
enabledInspectedElementContextMenu = false,
127
fetchFileWithCaching,
138
- loadHookNames,
128
+ hookNamesModuleLoaderFunction,
129
overrideTab,
130
profilerPortalContainer,
141
- prefetchSourceFiles,
142
- purgeCachedHookNamesMetadata,
131
showTabBar = false,
132
store,
133
warnIfLegacyBackendDetected = false,
187
[enabledInspectedElementContextMenu, viewAttributeSourceFunction],
188
);
189
202
- const hookNamesContext = useMemo(
203
- () => ({
204
- fetchFileWithCaching: fetchFileWithCaching || null,
205
- loadHookNames: loadHookNames || null,
206
- prefetchSourceFiles: prefetchSourceFiles || null,
207
- purgeCachedMetadata: purgeCachedHookNamesMetadata || null,
208
- }),
209
- [
210
- fetchFileWithCaching,
211
- loadHookNames,
212
- prefetchSourceFiles,
213
- purgeCachedHookNamesMetadata,
214
- ],
215
- );
216
-
190
const devToolsRef = useRef<HTMLElement | null>(null);
191
192
useEffect(() => {
243
componentsPortalContainer={componentsPortalContainer}
244
profilerPortalContainer={profilerPortalContainer}>
245
<ViewElementSourceContext.Provider value={viewElementSource}>
273
- <HookNamesContext.Provider value={hookNamesContext}>
274
- <TreeContextController>
275
- <ProfilerContextController>
276
- <SchedulingProfilerContextController>
277
- <ThemeProvider>
278
- <div
279
- className={styles.DevTools}
280
- ref={devToolsRef}
281
- data-react-devtools-portal-root={true}>
282
- {showTabBar && (
283
- <div className={styles.TabBar}>
284
- <ReactLogo />
285
- <span className={styles.DevToolsVersion}>
286
- {process.env.DEVTOOLS_VERSION}
287
- </span>
288
- <div className={styles.Spacer} />
289
- <TabBar
290
- currentTab={tab}
291
- id="DevTools"
292
- selectTab={setTab}
293
- tabs={tabs}
294
- type="navigation"
246
+ <HookNamesModuleLoaderContext.Provider
247
+ value={hookNamesModuleLoaderFunction || null}>
248
+ <FetchFileWithCachingContext.Provider
249
+ value={fetchFileWithCaching || null}>
250
+ <TreeContextController>
251
+ <ProfilerContextController>
252
+ <SchedulingProfilerContextController>
253
+ <ThemeProvider>
254
+ <div
255
+ className={styles.DevTools}
256
+ ref={devToolsRef}
257
+ data-react-devtools-portal-root={true}>
258
+ {showTabBar && (
259
+ <div className={styles.TabBar}>
260
+ <ReactLogo />
261
+ <span className={styles.DevToolsVersion}>
262
+ {process.env.DEVTOOLS_VERSION}
263
+ </span>
264
+ <div className={styles.Spacer} />
265
+ <TabBar
266
+ currentTab={tab}
267
+ id="DevTools"
268
+ selectTab={setTab}
269
+ tabs={tabs}
270
+ type="navigation"
271
+ />
272
+ </div>
273
+ )}
274
+ <div
275
+ className={styles.TabContent}
276
+ hidden={tab !== 'components'}>
277
+ <Components
278
+ portalContainer={componentsPortalContainer}
279
+ />
280
+ </div>
281
+ <div
282
+ className={styles.TabContent}
283
+ hidden={tab !== 'profiler'}>
284
+ <Profiler
285
+ portalContainer={profilerPortalContainer}
286
/>
287
</div>
297
- )}
298
- <div
299
- className={styles.TabContent}
300
- hidden={tab !== 'components'}>
301
- <Components
302
- portalContainer={componentsPortalContainer}
303
- />
304
- </div>
305
- <div
306
- className={styles.TabContent}
307
- hidden={tab !== 'profiler'}>
308
- <Profiler
309
- portalContainer={profilerPortalContainer}
310
- />
288
</div>
312
- </div>
313
- </ThemeProvider>
314
- </SchedulingProfilerContextController>
315
- </ProfilerContextController>
316
- </TreeContextController>
317
- </HookNamesContext.Provider>
289
+ </ThemeProvider>
290
+ </SchedulingProfilerContextController>
291
+ </ProfilerContextController>
292
+ </TreeContextController>
293
+ </FetchFileWithCachingContext.Provider>
294
+ </HookNamesModuleLoaderContext.Provider>
295
</ViewElementSourceContext.Provider>
296
</SettingsContextController>
297
<UnsupportedBridgeProtocolDialog />