Skip to content

Commit dc41408

Browse files
page override wip
1 parent ee3ca4c commit dc41408

File tree

3 files changed

+53
-5
lines changed

3 files changed

+53
-5
lines changed

examples/vite_basic/src/App.tsx

Lines changed: 8 additions & 5 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 || [];
@@ -112,6 +111,10 @@ const App = () => {
112111
return <PageDelimiter {...props} />;
113112
},
114113
}}
114+
pageOverride={{
115+
pageNum: 1,
116+
component: <p>hehe</p>,
117+
}}
115118
/>
116119
)}
117120
</div>

typescript/src/renderer/JsonDocRenderer.tsx

Lines changed: 6 additions & 0 deletions
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,6 +38,7 @@ export const JsonDocRenderer = ({
3438
viewJson = false,
3539
backrefs = [],
3640
onError,
41+
pageOverride,
3742
}: JsonDocRendererProps) => {
3843
console.log("theme: ", theme);
3944
return (
@@ -50,6 +55,7 @@ export const JsonDocRenderer = ({
5055
resolveImageUrl={resolveImageUrl}
5156
viewJson={viewJson}
5257
backrefs={backrefs}
58+
pageOverride={pageOverride}
5359
/>
5460
</GlobalErrorBoundary>
5561
</div>

typescript/src/renderer/components/RendererContainer.tsx

Lines changed: 39 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,13 +38,16 @@ 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 } =
4045
useHighlights({
4146
backrefs,
4247
});
4348

49+
console.log("pageOverride ", pageOverride);
50+
4451
useEffect(() => {
4552
try {
4653
//TODO: this is not throwing for invalid page object (one that doesn't follow schema)
@@ -78,6 +85,38 @@ export const RendererContainer: React.FC<RendererContainerProps> = ({
7885
? (page.children[index + 1]?.metadata as any)?.origin?.page_num
7986
: null;
8087

88+
console.log("pageOverride ", pageOverride);
89+
console.log("currentPageNum ", currentPageNum);
90+
console.log(
91+
"pageOverride && currentPageNum === pageOverride.pageNum ",
92+
pageOverride && currentPageNum === pageOverride.pageNum
93+
);
94+
console.log("\n".repeat(5));
95+
96+
// Check if this page should be replaced with override component
97+
if (pageOverride && currentPageNum === pageOverride.pageNum) {
98+
// Skip rendering blocks for this page and show override instead
99+
const isLastBlockOfPage =
100+
nextPageNum !== currentPageNum ||
101+
index === page.children.length - 1;
102+
if (isLastBlockOfPage) {
103+
return (
104+
<React.Fragment key={`page-override-${currentPageNum}`}>
105+
{pageOverride.component}
106+
{/* Still show page delimiter after override */}
107+
{!components?.page_delimiter && (
108+
<PageDelimiter pageNumber={currentPageNum} />
109+
)}
110+
{components?.page_delimiter && (
111+
<components.page_delimiter pageNumber={currentPageNum} />
112+
)}
113+
</React.Fragment>
114+
);
115+
}
116+
// Skip other blocks of the same page
117+
return null;
118+
}
119+
81120
// Show delimiter after the last block of each page
82121
const showPageDelimiter =
83122
currentPageNum &&

0 commit comments

Comments
 (0)