Skip to content

Commit 66d6ba1

Browse files
page override wip (#39)
* page override wip * cleanup --------- Co-authored-by: Onur <[email protected]>
1 parent ee3ca4c commit 66d6ba1

File tree

3 files changed

+43
-8
lines changed

3 files changed

+43
-8
lines changed

examples/vite_basic/src/App.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ const App = () => {
1818
handleFileChange,
1919
} = useFileLoader(AVAILABLE_FILES[0]);
2020

21-
console.log("test page ", testPage);
22-
23-
if (testPage) {
24-
testPage.children = [undefined];
25-
}
21+
// uncomment to trigger error in renderer
22+
// if (testPage) {
23+
// testPage.children = [undefined];
24+
// }
2625

2726
// Get backrefs for the currently selected file
2827
const currentBackrefs = selectedFile?.backrefs || [];
@@ -64,8 +63,6 @@ const App = () => {
6463
);
6564
}
6665

67-
console.log("showBackrefs ", currentBackrefs);
68-
6966
return (
7067
<div
7168
style={{
@@ -112,6 +109,10 @@ const App = () => {
112109
return <PageDelimiter {...props} />;
113110
},
114111
}}
112+
pageOverride={{
113+
pageNum: 1,
114+
component: <p>hehe</p>,
115+
}}
115116
/>
116117
)}
117118
</div>

typescript/src/renderer/JsonDocRenderer.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ interface JsonDocRendererProps {
2222
viewJson?: boolean;
2323
backrefs?: Backref[];
2424
onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
25+
pageOverride?: {
26+
pageNum: number;
27+
component: React.ReactNode;
28+
};
2529
}
2630

2731
export const JsonDocRenderer = ({
@@ -34,8 +38,8 @@ export const JsonDocRenderer = ({
3438
viewJson = false,
3539
backrefs = [],
3640
onError,
41+
pageOverride,
3742
}: JsonDocRendererProps) => {
38-
console.log("theme: ", theme);
3943
return (
4044
<div
4145
className={`jsondoc-theme-${theme}`}
@@ -50,6 +54,7 @@ export const JsonDocRenderer = ({
5054
resolveImageUrl={resolveImageUrl}
5155
viewJson={viewJson}
5256
backrefs={backrefs}
57+
pageOverride={pageOverride}
5358
/>
5459
</GlobalErrorBoundary>
5560
</div>

typescript/src/renderer/components/RendererContainer.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ interface RendererContainerProps {
2424
resolveImageUrl?: (url: string) => Promise<string>;
2525
viewJson?: boolean;
2626
backrefs?: Backref[];
27+
pageOverride?: {
28+
pageNum: number;
29+
component: React.ReactNode;
30+
};
2731
}
2832

2933
export const RendererContainer: React.FC<RendererContainerProps> = ({
@@ -34,6 +38,7 @@ export const RendererContainer: React.FC<RendererContainerProps> = ({
3438
resolveImageUrl,
3539
viewJson = false,
3640
backrefs = [],
41+
pageOverride,
3742
}) => {
3843
// Use the modular hooks for highlight management
3944
const { highlightCount, currentActiveIndex, navigateToHighlight } =
@@ -78,6 +83,30 @@ export const RendererContainer: React.FC<RendererContainerProps> = ({
7883
? (page.children[index + 1]?.metadata as any)?.origin?.page_num
7984
: null;
8085

86+
// Check if this page should be replaced with override component
87+
if (pageOverride && currentPageNum === pageOverride.pageNum) {
88+
// Skip rendering blocks for this page and show override instead
89+
const isLastBlockOfPage =
90+
nextPageNum !== currentPageNum ||
91+
index === page.children.length - 1;
92+
if (isLastBlockOfPage) {
93+
return (
94+
<React.Fragment key={`page-override-${currentPageNum}`}>
95+
{pageOverride.component}
96+
{/* Still show page delimiter after override */}
97+
{!components?.page_delimiter && (
98+
<PageDelimiter pageNumber={currentPageNum} />
99+
)}
100+
{components?.page_delimiter && (
101+
<components.page_delimiter pageNumber={currentPageNum} />
102+
)}
103+
</React.Fragment>
104+
);
105+
}
106+
// Skip other blocks of the same page
107+
return null;
108+
}
109+
81110
// Show delimiter after the last block of each page
82111
const showPageDelimiter =
83112
currentPageNum &&

0 commit comments

Comments
 (0)