aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/DocComponent.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/DocComponent.tsx')
-rw-r--r--src/client/views/DocComponent.tsx43
1 files changed, 16 insertions, 27 deletions
diff --git a/src/client/views/DocComponent.tsx b/src/client/views/DocComponent.tsx
index 2ce0c085a..235b0dc68 100644
--- a/src/client/views/DocComponent.tsx
+++ b/src/client/views/DocComponent.tsx
@@ -1,17 +1,17 @@
-import { action, computed, makeObservable, observable, runInAction, untracked } from 'mobx';
+import { action, computed, makeObservable, observable } from 'mobx';
+import * as React from 'react';
+import { returnFalse } from '../../Utils';
import { DateField } from '../../fields/DateField';
import { Doc, DocListCast, Opt } from '../../fields/Doc';
import { AclAdmin, AclAugment, AclEdit, AclPrivate, AclReadonly, DocData } from '../../fields/DocSymbols';
import { List } from '../../fields/List';
-import { Cast } from '../../fields/Types';
import { GetEffectiveAcl, inheritParentAcls } from '../../fields/util';
-import { returnFalse } from '../../Utils';
-import { DocUtils } from '../documents/Documents';
import { DocumentType } from '../documents/DocumentTypes';
-import { DocumentView } from './nodes/DocumentView';
-import * as React from 'react';
+import { DocUtils } from '../documents/Documents';
import { DocumentManager } from '../util/DocumentManager';
+import { ObservableReactComponent } from './ObservableReactComponent';
import { CollectionFreeFormView } from './collections/collectionFreeForm';
+import { DocumentView } from './nodes/DocumentView';
/// DocComponent returns a generic React base class used by views that don't have 'fieldKey' props (e.g.,CollectionFreeFormDocumentView, DocumentView)
export interface DocComponentProps {
@@ -20,18 +20,14 @@ export interface DocComponentProps {
LayoutTemplateString?: string;
}
export function DocComponent<P extends DocComponentProps>() {
- class Component extends React.Component<React.PropsWithChildren<P>> {
- @observable _props!: React.PropsWithChildren<P>;
- constructor(props: React.PropsWithChildren<P>) {
+ class Component extends ObservableReactComponent<React.PropsWithChildren<P>> {
+ constructor(props: any) {
super(props);
- this._props = props;
makeObservable(this);
}
- componentDidUpdate() {
- // untracked(() => (this._props = this.props));
- }
+
//TODO This might be pretty inefficient if doc isn't observed, because computed doesn't cache then
- @computed get Document() {
+ get Document() {
return this._props.Document;
}
// This is the rendering data of a document -- it may be "The Document", or it may be some template document that holds the rendering info
@@ -57,24 +53,18 @@ interface ViewBoxBaseProps {
renderDepth: number;
}
export function ViewBoxBaseComponent<P extends ViewBoxBaseProps>() {
- class Component extends React.Component<React.PropsWithChildren<P>> {
- @observable _props: React.PropsWithChildren<P>;
- constructor(props: React.PropsWithChildren<P>) {
- super(props);
- this._props = props;
- makeObservable(this);
- }
+ class Component extends ObservableReactComponent<React.PropsWithChildren<P>> {
//TODO This might be pretty inefficient if doc isn't observed, because computed doesn't cache then
//@computed get Document(): T { return schemaCtor(this.props.Document); }
get Document() {
return this._props.Document;
}
// This is the rendering data of a document -- it may be "The Document", or it may be some template document that holds the rendering info
- get layoutDoc() {
+ @computed get layoutDoc() {
return Doc.Layout(this.Document);
}
// This is the data part of a document -- ie, the data that is constant across all views of the document
- get dataDoc() {
+ @computed get dataDoc() {
return this.Document.isTemplateForField || this.Document.isTemplateDoc ? this._props.TemplateDataDocument ?? this.Document[DocData] : this.Document[DocData];
}
// key where data is stored
@@ -99,13 +89,12 @@ export interface ViewBoxAnnotatableProps {
isAnnotationOverlay?: boolean;
}
export function ViewBoxAnnotatableComponent<P extends ViewBoxAnnotatableProps>() {
- class Component extends React.Component<React.PropsWithChildren<P>> {
- @observable _props: React.PropsWithChildren<P>;
- constructor(props: React.PropsWithChildren<P>) {
+ class Component extends ObservableReactComponent<React.PropsWithChildren<P>> {
+ constructor(props: any) {
super(props);
- this._props = props;
makeObservable(this);
}
+
@observable _annotationKeySuffix = () => 'annotations';
@observable _isAnyChildContentActive = false;
//TODO This might be pretty inefficient if doc isn't observed, because computed doesn't cache then