aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes')
-rw-r--r--src/client/views/nodes/DocumentView.tsx71
-rw-r--r--src/client/views/nodes/FieldView.tsx61
-rw-r--r--src/client/views/nodes/FilterBox.tsx8
-rw-r--r--src/client/views/nodes/LinkBox.tsx4
-rw-r--r--src/client/views/nodes/PresBox.tsx4
-rw-r--r--src/client/views/nodes/VideoBox.tsx1
6 files changed, 55 insertions, 94 deletions
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 5ed49185b..dc048843f 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -45,57 +45,60 @@ import React = require("react");
export type DocAfterFocusFunc = (notFocused: boolean) => boolean;
export type DocFocusFunc = (doc: Doc, willZoom?: boolean, scale?: number, afterFocus?: DocAfterFocusFunc, dontCenter?: boolean, focused?: boolean) => void;
-export interface DocumentViewProps {
+export interface DocumentViewSharedProps {
ContainingCollectionView: Opt<CollectionView>;
ContainingCollectionDoc: Opt<Doc>;
- docFilters: () => string[];
+ Document: Doc;
+ DataDoc?: Doc;
contentsActive?: (setActive: () => boolean) => void;
+ onClick?: () => ScriptField;
+ dropAction?: dropActionType;
+ backgroundHalo?: (doc: Doc) => boolean;
+ docFilters: () => string[];
docRangeFilters: () => string[];
searchFilterDocs: () => Doc[];
- FreezeDimensions?: boolean;
+ rootSelected: (outsideReaction?: boolean) => boolean; // whether the root of a template has been selected
+ renderDepth: number;
+ addDocTab: (doc: Doc, where: string) => boolean;
+ addDocument?: (doc: Doc | Doc[]) => boolean;
+ removeDocument?: (doc: Doc | Doc[]) => boolean;
+ moveDocument?: (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (document: Doc | Doc[]) => boolean) => boolean;
+ pinToPres: (document: Doc) => void;
+ layerProvider?: (doc: Doc, assign?: boolean) => boolean;
+ styleProvider?: (doc: Opt<Doc>, props: DocumentViewProps, property: string) => any;
+ ScreenToLocalTransform: () => Transform;
+ bringToFront: (doc: Doc, sendToBack?: boolean) => void;
+ parentActive: (outsideReaction: boolean) => boolean;
+ whenActiveChanged: (isActive: boolean) => void;
+ LayoutTemplateString?: string;
+ dontRegisterView?: boolean;
+ focus: DocFocusFunc;
+ ignoreAutoHeight?: boolean;
+ PanelWidth: () => number;
+ PanelHeight: () => number;
NativeWidth?: () => number;
NativeHeight?: () => number;
- Document: Doc;
- DataDoc?: Doc;
- layerProvider?: (doc: Doc, assign?: boolean) => boolean;
+ ContentScaling: () => number;
+ ChromeHeight?: () => number;
+ pointerEvents?: string;
+}
+export interface DocumentViewProps extends DocumentViewSharedProps {
+ // properties specific to DocumentViews but not to FieldView
+ FreezeDimensions?: boolean;
+ fitToBox?: boolean;
+ treeViewDoc?: Doc;
+ dragDivName?: string;
+ contentsPointerEvents?: string;
getView?: (view: DocumentView) => any;
- LayoutTemplateString?: string;
LayoutTemplate?: () => Opt<Doc>;
- fitToBox?: boolean;
- ignoreAutoHeight?: boolean;
contextMenuItems?: () => { script: ScriptField, label: string }[];
- rootSelected: (outsideReaction?: boolean) => boolean; // whether the root of a template has been selected
- onClick?: () => ScriptField;
onDoubleClick?: () => ScriptField;
onPointerDown?: () => ScriptField;
onPointerUp?: () => ScriptField;
- treeViewDoc?: Doc;
- dropAction?: dropActionType;
- dragDivName?: string;
nudge?: (x: number, y: number) => void;
- addDocument?: (doc: Doc | Doc[]) => boolean;
- removeDocument?: (doc: Doc | Doc[]) => boolean;
- moveDocument?: (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (document: Doc | Doc[]) => boolean) => boolean;
- ScreenToLocalTransform: () => Transform;
setupDragLines?: (snapToDraggedDoc: boolean) => void;
- renderDepth: number;
- ContentScaling: () => number;
- PanelWidth: () => number;
- PanelHeight: () => number;
- pointerEvents?: string;
- contentsPointerEvents?: string;
- focus: DocFocusFunc;
- parentActive: (outsideReaction: boolean) => boolean;
- whenActiveChanged: (isActive: boolean) => void;
- bringToFront: (doc: Doc, sendToBack?: boolean) => void;
- addDocTab: (doc: Doc, where: string) => boolean;
- pinToPres: (document: Doc) => void;
- backgroundHalo?: (doc: Doc) => boolean;
- styleProvider?: (doc: Opt<Doc>, props: DocumentViewProps, property: string) => any;
forceHideLinkButton?: () => boolean;
opacity?: () => number | undefined;
- ChromeHeight?: () => number;
- dontRegisterView?: boolean;
layoutKey?: string;
radialMenu?: String[];
display?: string;
diff --git a/src/client/views/nodes/FieldView.tsx b/src/client/views/nodes/FieldView.tsx
index 5cd752fdb..1d58893ae 100644
--- a/src/client/views/nodes/FieldView.tsx
+++ b/src/client/views/nodes/FieldView.tsx
@@ -2,70 +2,29 @@ import React = require("react");
import { computed } from "mobx";
import { observer } from "mobx-react";
import { DateField } from "../../../fields/DateField";
-import { Doc, FieldResult, Opt, Field } from "../../../fields/Doc";
+import { Doc, Field, FieldResult, Opt } from "../../../fields/Doc";
import { List } from "../../../fields/List";
-import { ScriptField } from "../../../fields/ScriptField";
-import { AudioField, VideoField, WebField } from "../../../fields/URLField";
-import { Transform } from "../../util/Transform";
-import { CollectionView } from "../collections/CollectionView";
-import { AudioBox } from "./AudioBox";
+import { VideoField, WebField } from "../../../fields/URLField";
+import { DocumentViewSharedProps } from "./DocumentView";
import { VideoBox } from "./VideoBox";
-import { dropActionType } from "../../util/DragManager";
-import { DocAfterFocusFunc, DocFocusFunc, DocumentViewProps } from "./DocumentView";
//
// these properties get assigned through the render() method of the DocumentView when it creates this node.
// However, that only happens because the properties are "defined" in the markup for the field view.
// See the LayoutString method on each field view : ImageBox, FormattedTextBox, etc.
//
-export interface FieldViewProps {
+export interface FieldViewProps extends DocumentViewSharedProps {
+ // FieldView specific props that are not part of DocumentView props
fieldKey: string;
fitToBox?: boolean;
- ContainingCollectionView: Opt<CollectionView>;
- ContainingCollectionDoc: Opt<Doc>;
- Document: Doc;
- DataDoc?: Doc;
- layerProvider?: (doc: Doc, assign?: boolean) => boolean;
- contentsActive?: (setActive: () => boolean) => void;
- onClick?: () => ScriptField;
- dropAction: dropActionType;
- backgroundHalo?: () => boolean;
- docFilters: () => string[];
- docRangeFilters: () => string[];
- searchFilterDocs: () => Doc[];
- isSelected: (outsideReaction?: boolean) => boolean;
- select: (isCtrlPressed: boolean) => void;
- rootSelected: (outsideReaction?: boolean) => boolean;
- renderDepth: number;
- addDocument?: (document: Doc | Doc[]) => boolean;
- addDocTab: (document: Doc, where: string) => boolean;
- pinToPres: (document: Doc) => void;
- removeDocument?: (document: Doc | Doc[]) => boolean;
- moveDocument?: (document: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (document: Doc | Doc[]) => boolean) => boolean;
- styleProvider?: (document: Opt<Doc>, props: Opt<DocumentViewProps>, property: string) => any;
- ScreenToLocalTransform: () => Transform;
- bringToFront: (doc: Doc, sendToBack?: boolean) => void;
- parentActive: (outsideReaction: boolean) => boolean;
+ overflow?: boolean; // bcz: would like to think this can be avoided -- need to look at further
active: (outsideReaction?: boolean) => boolean;
- whenActiveChanged: (isActive: boolean) => void;
- LayoutTemplateString?: string;
- dontRegisterView?: boolean;
- focus: DocFocusFunc;
- presMultiSelect?: (doc: Doc) => void; //added for selecting multiple documents in a presentation
- ignoreAutoHeight?: boolean;
- PanelWidth: () => number;
- PanelHeight: () => number;
- PanelPosition?: string;
- overflow?: boolean;
- NativeHeight?: () => number;
- NativeWidth?: () => number;
- setVideoBox?: (player: VideoBox) => void;
- ContentScaling: () => number;
- ChromeHeight?: () => number;
- childLayoutTemplate?: () => Opt<Doc>;
+ select: (isCtrlPressed: boolean) => void;
+ isSelected: (outsideReaction?: boolean) => boolean;
+
// properties intended to be used from within layout strings (otherwise use the function equivalents that work more efficiently with React)
- fontSize?: number;
pointerEvents?: string;
+ fontSize?: number;
height?: number;
width?: number;
background?: string;
diff --git a/src/client/views/nodes/FilterBox.tsx b/src/client/views/nodes/FilterBox.tsx
index 0161f51fd..b90bf9eb1 100644
--- a/src/client/views/nodes/FilterBox.tsx
+++ b/src/client/views/nodes/FilterBox.tsx
@@ -9,7 +9,7 @@ import { RichTextField } from "../../../fields/RichTextField";
import { listSpec, makeInterface } from "../../../fields/Schema";
import { ComputedField, ScriptField } from "../../../fields/ScriptField";
import { Cast } from "../../../fields/Types";
-import { emptyFunction, emptyPath, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnOne, returnZero } from "../../../Utils";
+import { emptyFunction, emptyPath, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnOne, returnZero, returnTrue } from "../../../Utils";
import { Docs } from "../../documents/Documents";
import { DocumentType } from "../../documents/DocumentTypes";
import { CollectionDockingView } from "../collections/CollectionDockingView";
@@ -153,7 +153,6 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
}
}
filterBackground = () => "rgba(105, 105, 105, 0.432)";
- get ignoreFields() { return ["_docFilters", "_docRangeFilters"]; } // this makes the tree view collection ignore these filters (otherwise, the filters would filter themselves)
@computed get scriptField() {
const scriptText = "setDocFilter(this?.target, heading, this.title, checked)";
const script = ScriptField.MakeScript(scriptText, { this: Doc.name, heading: "string", checked: "string", containingTreeView: Doc.name });
@@ -181,7 +180,6 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
</div>
<div className="filterBox-tree" key="tree">
<CollectionTreeView
- PanelPosition={""}
Document={facetCollection}
DataDoc={Doc.GetProto(facetCollection)}
fieldKey={`${this.props.fieldKey}`}
@@ -202,7 +200,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
isSelected={returnFalse}
select={returnFalse}
bringToFront={emptyFunction}
- active={this.props.active}
+ active={returnTrue}
parentActive={returnFalse}
whenActiveChanged={returnFalse}
treeViewHideTitle={true}
@@ -210,7 +208,7 @@ export class FilterBox extends ViewBoxBaseComponent<FieldViewProps, FilterBoxDoc
focus={returnFalse}
treeViewHideHeaderFields={true}
onCheckedClick={this.scriptField}
- ignoreFields={this.ignoreFields}
+ ignoreFilters={true} // otherwise, the filters would filter themselves out of the tree view
annotationsKey={""}
dontRegisterView={true}
styleProvider={this.filterBackground}
diff --git a/src/client/views/nodes/LinkBox.tsx b/src/client/views/nodes/LinkBox.tsx
index bf19457da..50ad884ca 100644
--- a/src/client/views/nodes/LinkBox.tsx
+++ b/src/client/views/nodes/LinkBox.tsx
@@ -21,8 +21,8 @@ export class LinkBox extends ViewBoxBaseComponent<FieldViewProps, LinkDocument>(
<CollectionTreeView {...this.props}
ChromeHeight={returnZero}
- overrideDocuments={[this.dataDoc]}
- ignoreFields={Cast(this.props.Document.linkBoxExcludedKeys, listSpec("string"), null)}
+ childDocuments={[this.dataDoc]}
+ treeViewSkipFields={Cast(this.props.Document.linkBoxExcludedKeys, listSpec("string"), null)}
annotationsKey={""}
dontRegisterView={true}
renderDepth={this.props.renderDepth + 1}
diff --git a/src/client/views/nodes/PresBox.tsx b/src/client/views/nodes/PresBox.tsx
index 5985225e3..c2385cab8 100644
--- a/src/client/views/nodes/PresBox.tsx
+++ b/src/client/views/nodes/PresBox.tsx
@@ -2412,6 +2412,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps, PresBoxSchema>
<div className="presBox-listCont">
{mode !== CollectionViewType.Invalid ?
<CollectionView {...this.props}
+ annotationsKey={""}
ContainingCollectionDoc={this.props.Document}
PanelWidth={this.props.PanelWidth}
PanelHeight={this.panelHeight}
@@ -2423,7 +2424,8 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps, PresBoxSchema>
removeDocument={returnFalse}
dontRegisterView={true}
focus={this.selectElement}
- ScreenToLocalTransform={this.getTransform} />
+ ScreenToLocalTransform={this.getTransform}
+ />
: (null)
}
</div>
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index 998ca839d..f64d80731 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -183,7 +183,6 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps, VideoD
}
componentDidMount() {
- if (this.props.setVideoBox) this.props.setVideoBox(this);
this._disposers.videoStart = reaction(
() => this.Document._videoStart,
(videoStart) => {