aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/DocumentManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/util/DocumentManager.ts')
-rw-r--r--src/client/util/DocumentManager.ts51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts
index ac7710d34..e5ef924d6 100644
--- a/src/client/util/DocumentManager.ts
+++ b/src/client/util/DocumentManager.ts
@@ -143,45 +143,52 @@ export class DocumentManager {
finished?: () => void,
): Promise<void> => {
const getFirstDocView = LightboxView.LightboxDoc ? DocumentManager.Instance.getLightboxDocumentView : DocumentManager.Instance.getFirstDocumentView;
- const focusAndFinish = () => { finished?.(); return false; };
+ const docView = getFirstDocView(targetDoc, originatingDoc);
+ const focusAndFinish = (didFocus: boolean) => {
+ if (originatingDoc?.isPushpin) {
+ if (!didFocus || targetDoc.hidden) {
+ targetDoc.hidden = !targetDoc.hidden;
+ }
+ } else {
+ targetDoc.hidden && (targetDoc.hidden = undefined);
+ docView?.select(false);
+ }
+ finished?.();
+ return false;
+ };
const highlight = () => {
const finalDocView = getFirstDocView(targetDoc);
finalDocView && Doc.linkFollowHighlight(finalDocView.rootDoc);
};
- const docView = getFirstDocView(targetDoc, originatingDoc);
let annotatedDoc = Cast(targetDoc.annotationOn, Doc, null);
+ const contextDocs = docContext ? await DocListCastAsync(docContext.data) : undefined;
+ const contextDoc = contextDocs?.find(doc => Doc.AreProtosEqual(doc, targetDoc) || Doc.AreProtosEqual(doc, annotatedDoc)) ? docContext : undefined;
+ const targetDocContext = contextDoc || annotatedDoc;
+ const targetDocContextView = targetDocContext && getFirstDocView(targetDocContext);
if (!docView && annotatedDoc && annotatedDoc !== originatingDoc?.context && targetDoc.type === DocumentType.TEXTANCHOR) {
const first = getFirstDocView(annotatedDoc);
if (first) {
annotatedDoc = first.rootDoc;
first.focus(targetDoc, false);
}
- } else if (docView) { // we have a docView already and aren't forced to create a new one ... just focus on the document. TODO move into view if necessary otherwise just highlight?
- if (originatingDoc?.isPushpin) {
- docView.props.focus(docView.rootDoc, willZoom, undefined, (didFocus: boolean) => {
- if (!didFocus || docView.rootDoc.hidden) {
- docView.rootDoc.hidden = !docView.rootDoc.hidden;
- }
- return focusAndFinish();
- });
- }
- else {
- docView.select(false);
- docView.rootDoc.hidden && (docView.rootDoc.hidden = undefined);
- // @ts-ignore
- docView.props.focus(docView.rootDoc, willZoom, undefined, focusAndFinish);
- }
+ } else if (docView && (targetDocContextView || !targetDocContext)) { // we have a docView already and aren't forced to create a new one ... just focus on the document. TODO move into view if necessary otherwise just highlight?
+ const first = annotatedDoc && getFirstDocView(annotatedDoc);
+ const targetFocus = (outFocus?: boolean) => docView.props.focus(docView.rootDoc, willZoom, undefined, (didFocus: boolean) => focusAndFinish(outFocus || didFocus));
+ const annoFocus = (outFocus?: boolean) => first?.props.focus(first.rootDoc, false, undefined, (didFocus: boolean) => {
+ targetFocus(outFocus || didFocus);
+ return false;
+ });
+ const contextFocus = targetDocContext === annotatedDoc ? undefined : (outFocus?: boolean) => targetDocContextView?.props.focus(targetDocContext, false, undefined, (didFocus: boolean) => {
+ annoFocus(outFocus || didFocus);
+ return false;
+ });
+ (contextFocus || annoFocus || targetFocus)();
highlight();
} else {
- const contextDocs = docContext ? await DocListCastAsync(docContext.data) : undefined;
- const contextDoc = contextDocs?.find(doc => Doc.AreProtosEqual(doc, targetDoc) || Doc.AreProtosEqual(doc, annotatedDoc)) ? docContext : undefined;
- const targetDocContext = contextDoc || annotatedDoc;
-
if (!targetDocContext) { // we don't have a view and there's no context specified ... create a new view of the target using the dockFunc or default
createViewFunc(Doc.BrushDoc(targetDoc), finished); // bcz: should we use this?: Doc.MakeAlias(targetDoc)));
highlight();
} else { // otherwise try to get a view of the context of the target
- const targetDocContextView = getFirstDocView(targetDocContext);
if (targetDocContextView) { // we found a context view and aren't forced to create a new one ... focus on the context first..
targetDocContext._viewTransition = "transform 500ms";
targetDocContextView.props.focus(targetDocContextView.rootDoc, willZoom);