Skip to content

Commit 5c4a6ca

Browse files
FindHaofacebook-github-bot
authored andcommitted
PR 5: Preview mode (#113)
Summary: - Implements a robust preview mechanism to temporarily show `Kernel Overview` or `IR Code` for either side without mutating App-global data. - Resolves issues of swapped sides or lost selections when returning from preview. #### Key Changes - Extends `FileDiffSession` with `preview` state and uses it in `App.tsx` to conditionally render preview targets. - Defers tab switching in `gotoOverview/gotoIRCode` using `setTimeout(0)` to let Monaco unmount cleanly. - Adds dynamic `key` props to `KernelOverview` and `CodeView` when previewing to force remount and proper default IR selection. Pull Request resolved: #113 Reviewed By: sfzhu93 Differential Revision: D82745908 Pulled By: FindHao fbshipit-source-id: 6fbd8baa6fa881951262e53ff9be4c59c4a0b836
1 parent 715d8d7 commit 5c4a6ca

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

website/src/App.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ import DataSourceSelector from "./components/DataSourceSelector";
1616
import WelcomeScreen from "./components/WelcomeScreen";
1717
import ExternalLink from "./components/ExternalLink";
1818
import { mapLanguageToHighlighter } from "./components/CodeViewer";
19+
import { useFileDiffSession } from "./context/FileDiffSession";
1920

2021
/**
2122
* Main application component that handles data loading,
2223
* state management, and rendering different views.
2324
*/
2425
function App() {
26+
const sess = useFileDiffSession();
2527
// Store processed kernel data from log file
2628
const [kernels, setKernels] = useState<ProcessedKernel[]>([]);
2729
// Track loading state for displaying loading indicator
@@ -279,6 +281,13 @@ function App() {
279281
}
280282
};
281283

284+
// Register app controls for FileDiffSession navigation
285+
useEffect(() => {
286+
sess.registerAppControls({
287+
setActiveTab,
288+
});
289+
}, [sess, setActiveTab]);
290+
282291
// Show loading indicator while data is being fetched
283292
if (loading) {
284293
return (
@@ -324,6 +333,27 @@ function App() {
324333
onBack={handleBackFromIRView}
325334
/>
326335
);
336+
} else if (sess.preview.active) {
337+
const side = sess.preview.side === 'left' ? sess.left : sess.right;
338+
const idx = side.selectedIdx ?? 0;
339+
const kernelsSrc = side.kernels ?? [];
340+
if (!kernelsSrc || kernelsSrc.length === 0) {
341+
return <div className="text-red-600">Error: Preview kernel data not available.</div>;
342+
}
343+
if (sess.preview.view === 'overview') {
344+
return (
345+
<KernelOverview
346+
kernels={kernelsSrc}
347+
onViewIR={handleViewSingleIR}
348+
selectedKernel={idx}
349+
onSelectKernel={() => {}}
350+
/>
351+
);
352+
}
353+
if (sess.preview.view === 'ir') {
354+
return <CodeView kernels={kernelsSrc} selectedKernel={idx} />;
355+
}
356+
return null;
327357
} else if (!dataLoaded) {
328358
// Show welcome screen if no data is loaded
329359
return (

0 commit comments

Comments
 (0)