MCPcopy Create free account
hub / github.com/PaperDebugger/paperdebugger / PaperDebugger

Function PaperDebugger

webapp/_webapp/src/views/office/app.tsx:22–90  ·  view source on GitHub ↗
({ displayMode = "fullscreen", adapterId }: PaperDebuggerProps)

Source from the content-addressed store, hash-verified

20}
21
22const PaperDebugger = ({ displayMode = "fullscreen", adapterId }: PaperDebuggerProps) => {
23 const { setDisplayMode, setIsOpen } = useConversationUiStore();
24 const { initFromStorage: initAuthFromStorage, login } = useAuthStore();
25 const { initLocalSettings } = useSettingStore();
26 const [isInitialized, setIsInitialized] = useState(false);
27 const prevDisplayModeRef = useRef<typeof displayMode | null>(null);
28
29 useThemeSync();
30
31 // Sync displayMode prop to store during render (compute during render instead of useEffect)
32 if (prevDisplayModeRef.current !== displayMode) {
33 prevDisplayModeRef.current = displayMode;
34 setDisplayMode(displayMode);
35 }
36
37 useThemeSync();
38
39 // Initialize stores from storage on mount
40 // This must happen before the main UI renders to restore login state and settings
41 useEffect(() => {
42 // Re-initialize auth store from storage (storage adapter should be set by host before component mounts)
43 initAuthFromStorage();
44 // Re-initialize local UI settings from storage
45 initLocalSettings();
46 // Attempt to login with restored tokens
47 login();
48 setIsOpen(true);
49 setIsInitialized(true);
50 }, []); // eslint-disable-line react-hooks/exhaustive-deps
51
52 // Get adapter from registry (must be registered by the host application)
53 const adapter = useMemo<DocumentAdapter | null>(() => {
54 if (adapterId) {
55 const registeredAdapter = getAdapter(adapterId);
56 if (registeredAdapter) {
57 return registeredAdapter;
58 }
59 }
60 // No adapter registered - host application must register one
61 console.error(
62 "[PaperDebugger] No adapter registered. " +
63 "The host application (e.g., Office Add-in) must register an adapter using __pdRegisterAdapter() before loading this component.",
64 );
65 return null;
66 }, [adapterId]);
67
68 if (!adapter) {
69 return (
70 <div style={{ padding: 16, color: "red" }}>
71 Error: No document adapter registered. Please ensure the host application registers an adapter.
72 </div>
73 );
74 }
75
76 // Wait for initialization to complete before rendering main UI
77 if (!isInitialized) {
78 return (
79 <div style={{ padding: 16, display: "flex", alignItems: "center", justifyContent: "center" }}>Loading...</div>

Callers

nothing calls this directly

Calls 2

useThemeSyncFunction · 0.90
getAdapterFunction · 0.90

Tested by

no test coverage detected