Skip to content

Commit

Permalink
outline navigator isn't working..
Browse files Browse the repository at this point in the history
  • Loading branch information
burtonator committed Oct 19, 2020
1 parent 9b1987a commit dc035dc
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 7 deletions.
14 changes: 13 additions & 1 deletion apps/doc/src/DocViewerStore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import ScaleDelta = PDFScales.ScaleDelta;
import {useAnnotationMutationCallbacksFactory} from "../../../web/js/annotation_sidebar/AnnotationMutationCallbacks";
import {UUIDs} from "../../../web/js/metadata/UUIDs";
import { IOutline } from './outline/IOutline';
import {OutlineNavigator} from "./outline/IOutlineItem";

/**
* Lightweight metadata describing the currently loaded document.
Expand Down Expand Up @@ -131,6 +132,8 @@ export interface IDocViewerStore {

readonly outline?: IOutline;

readonly outlineNavigator?: OutlineNavigator;

}

export interface IPagemarkCoverage {
Expand Down Expand Up @@ -291,6 +294,8 @@ export interface IDocViewerCallbacks {

readonly setOutline: (outline: IOutline | undefined) => void;

readonly setOutlineNavigator: (outlineNavigator: OutlineNavigator) => void;

onPagemark(opts: IPagemarkMutation): ReadonlyArray<IPagemarkRef>;
setPageNavigator(pageNavigator: PageNavigator): void;

Expand Down Expand Up @@ -962,6 +967,12 @@ function callbacksFactory(storeProvider: Provider<IDocViewerStore>,
setStore({...store, outline});
}

function setOutlineNavigator(outlineNavigator: OutlineNavigator) {
console.log("FIXME: setting outline nav: ", outlineNavigator)
const store = storeProvider();
setStore({...store, outlineNavigator});
}

return {
updateDocMeta,
setDocMeta,
Expand All @@ -986,7 +997,8 @@ function callbacksFactory(storeProvider: Provider<IDocViewerStore>,
onDocTagged,
toggleDocFlagged,
toggleDocArchived,
setOutline
setOutline,
setOutlineNavigator
};
}, [log, docMetaContext, persistenceLayerContext, annotationSidebarCallbacks,
dialogs, annotationMutationCallbacksFactory, setStore, storeProvider]);
Expand Down
2 changes: 1 addition & 1 deletion apps/doc/src/outline/IOutlineItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ export interface IOutlineItem {

}

export type IOutlineLocationHandler = () => void;
export type OutlineNavigator = (location: OutlineLocation) => void;
23 changes: 20 additions & 3 deletions apps/doc/src/outline/Outliner.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as React from 'react';
import { useDocViewerStore } from '../DocViewerStore';
import { useDocViewerStore, useDocViewerCallbacks } from '../DocViewerStore';
import { useOutlinerStore, useOutlinerCallbacks, OutlinerStoreProviderDelegate } from './OutlinerStore';
import TreeView from '@material-ui/lab/TreeView';
import { IOutlineItem } from './IOutlineItem';
import {IOutlineItem, OutlineLocation} from './IOutlineItem';
import TreeItem from '@material-ui/lab/TreeItem';

const NoOutlineAvailable = React.memo(() => {
Expand All @@ -15,16 +15,33 @@ const NoOutlineAvailable = React.memo(() => {

const OutlineTreeView = React.memo(() => {

const {outline} = useDocViewerStore(['outline']);
const {outline, outlineNavigator} = useDocViewerStore(['outline', 'outlineNavigator']);
const {selected, expanded} = useOutlinerStore(['selected', 'expanded']);
const {toggleExpanded, selectRow, collapseNode, expandNode} = useOutlinerCallbacks();

const handleNavigation = React.useCallback((location: OutlineLocation | undefined) => {

if (! outlineNavigator) {
console.warn("No outlineNavigator: ", outlineNavigator);
return;
}

if (! location) {
console.warn("No location");
return;
}

outlineNavigator(location);

}, [outlineNavigator]);

const toTreeItem = React.useCallback((item: IOutlineItem) => {

return (
<TreeItem key={item.id}
nodeId={item.id}
label={item.title}
onClick={() => handleNavigation(item.location)}
TransitionProps={{timeout: 75}}>

{item.children.map(toTreeItem)}
Expand Down
7 changes: 5 additions & 2 deletions apps/doc/src/renderers/pdf/PDFDocument.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,11 @@ import {useAnnotationBar} from "../../AnnotationBarHooks";
import {DocumentInit} from "../DocumentInitHook";
import {useDocViewerPageJumpListener} from '../../DocViewerAnnotationHook';
import {deepMemo} from "../../../../../web/js/react/ReactUtils";
import {IOutlineItem} from "../../outline/IOutlineItem";
import {IOutlineItem, OutlineLocation} from "../../outline/IOutlineItem";
import Outline = _pdfjs.Outline;
import {IOutline} from "../../outline/IOutline";
import {Numbers} from "polar-shared/src/util/Numbers";
import Destination = _pdfjs.Destination;

interface DocViewer {
readonly eventBus: EventBus;
Expand Down Expand Up @@ -146,7 +147,7 @@ export const PDFDocument = deepMemo((props: IProps) => {

const log = useLogger();

const {setDocDescriptor, setPageNavigator, setResizer, setScaleLeveler, setDocScale, setPage, setOutline}
const {setDocDescriptor, setPageNavigator, setResizer, setScaleLeveler, setDocScale, setPage, setOutline, setOutlineNavigator}
= useDocViewerCallbacks();

const {setFinder} = useDocFindCallbacks();
Expand Down Expand Up @@ -261,6 +262,8 @@ export const PDFDocument = deepMemo((props: IProps) => {
const outline = await createOutline();
setOutline(outline);

setOutlineNavigator((location: OutlineLocation) => docViewer.linkService.navigateTo((location as any) as Destination));

function createPageNavigator(pdfDocumentProxy: _pdfjs.PDFDocumentProxy): PageNavigator {

const count = pdfDocumentProxy.numPages;
Expand Down

0 comments on commit dc035dc

Please sign in to comment.