aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/CollectionNoteTakingView.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/collections/CollectionNoteTakingView.tsx')
-rw-r--r--src/client/views/collections/CollectionNoteTakingView.tsx108
1 files changed, 48 insertions, 60 deletions
diff --git a/src/client/views/collections/CollectionNoteTakingView.tsx b/src/client/views/collections/CollectionNoteTakingView.tsx
index b8133806f..5b91216cb 100644
--- a/src/client/views/collections/CollectionNoteTakingView.tsx
+++ b/src/client/views/collections/CollectionNoteTakingView.tsx
@@ -9,7 +9,7 @@ import { listSpec } from '../../../fields/Schema';
import { SchemaHeaderField } from '../../../fields/SchemaHeaderField';
import { BoolCast, Cast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
import { TraceMobx } from '../../../fields/util';
-import { emptyFunction, returnFalse, returnZero, smoothScroll, Utils } from '../../../Utils';
+import { DivHeight, emptyFunction, returnZero, smoothScroll, Utils } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { DragManager, dropActionType } from '../../util/DragManager';
import { SnappingManager } from '../../util/SnappingManager';
@@ -19,14 +19,13 @@ import { ContextMenu } from '../ContextMenu';
import { ContextMenuProps } from '../ContextMenuItem';
import { LightboxView } from '../LightboxView';
import { DocumentView } from '../nodes/DocumentView';
-import { FocusViewOptions, FieldViewProps } from '../nodes/FieldView';
+import { FieldViewProps, FocusViewOptions } from '../nodes/FieldView';
import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
import { StyleProp } from '../StyleProvider';
import './CollectionNoteTakingView.scss';
import { CollectionNoteTakingViewColumn } from './CollectionNoteTakingViewColumn';
import { CollectionNoteTakingViewDivider } from './CollectionNoteTakingViewDivider';
import { CollectionSubView } from './CollectionSubView';
-import { JsxElement } from 'typescript';
const _global = (window /* browser */ || global) /* node */ as any;
/**
@@ -45,6 +44,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
public DividerWidth = 16;
@observable docsDraggedRowCol: number[] = [];
@observable _scroll = 0;
+ @observable _refList: any[] = [];
constructor(props: any) {
super(props);
@@ -157,8 +157,16 @@ export class CollectionNoteTakingView extends CollectionSubView() {
document.addEventListener('pointerup', this.removeDocDragHighlight, true);
this._disposers.layout_autoHeight = reaction(
() => this.layoutDoc._layout_autoHeight,
- layout_autoHeight =>
- layout_autoHeight && this._props.setHeight?.(Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), this.headerMargin + Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', ''))))))
+ layout_autoHeight => layout_autoHeight && this._props.setHeight?.(this.headerMargin + Math.max(...this._refList.map(DivHeight)))
+ );
+
+ this._disposers.refList = reaction(
+ () => ({ refList: this._refList.slice(), autoHeight: this.layoutDoc._layout_autoHeight && !LightboxView.Contains(this.DocumentView?.()) }),
+ ({ refList, autoHeight }) => {
+ if (autoHeight) refList.forEach(r => this.observer.observe(r));
+ else this.observer.disconnect();
+ },
+ { fireImmediately: true }
);
}
@@ -345,7 +353,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
// get the index for where you need to insert the doc you are currently dragging
const clientY = this.ScreenToLocalBoxXf().transformPoint(ex, ey)[1];
let dropInd = -1;
- let pos0 = (this.refList.lastElement() as HTMLDivElement).children[0].getBoundingClientRect().height + this.yMargin * 2;
+ let pos0 = (this._refList.lastElement() as HTMLDivElement).children[0].getBoundingClientRect().height + this.yMargin * 2;
colDocs.forEach((doc, i) => {
let pos1 = this.getDocHeight(doc) + 2 * this.gridGap;
pos1 += pos0;
@@ -424,7 +432,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
if (super.onInternalDrop(e, de)) {
// filter out the currently dragged docs from the child docs, since we will insert them later
const rowCol = this.docsDraggedRowCol;
- const droppedDocs = this.childDocs.slice().filter((d: Doc, ind: number) => ind >= this.childDocs.length); // if the drop operation adds something to the end of the list, then use that as the new document (may be different than what was dropped e.g., in the case of a button which is dropped but which creates say, a note).
+ const droppedDocs = this.childDocs.filter((d: Doc, ind: number) => ind >= this.childDocs.length); // if the drop operation adds something to the end of the list, then use that as the new document (may be different than what was dropped e.g., in the case of a button which is dropped but which creates say, a note).
const newDocs = droppedDocs.length ? droppedDocs : de.complete.docDragData.droppedDocuments;
const docs = this.childDocList;
if (docs && newDocs.length) {
@@ -489,65 +497,45 @@ export class CollectionNoteTakingView extends CollectionSubView() {
headings = () => Array.from(this.Sections);
- refList: any[] = [];
-
editableViewProps = () => ({
GetValue: () => '',
SetValue: this.addGroup,
contents: '+ New Column',
});
+ refList = () => this._refList;
+
// sectionNoteTaking returns a CollectionNoteTakingViewColumn (which is an individual column)
- sectionNoteTaking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => {
- const type = 'number';
- return (
- <CollectionNoteTakingViewColumn
- key={heading?.heading ?? 'unset'}
- unobserveHeight={ref => this.refList.splice(this.refList.indexOf(ref), 1)}
- observeHeight={ref => {
- if (ref) {
- this.refList.push(ref);
- this.observer = new _global.ResizeObserver(
- action((entries: any) => {
- if (this.layoutDoc._layout_autoHeight && ref && this.refList.length && !SnappingManager.IsDragging) {
- const height = this.headerMargin + Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', '')))));
- if (!LightboxView.Contains(this.DocumentView?.())) {
- this._props.setHeight?.(height);
- }
- }
- })
- );
- this.observer.observe(ref);
- }
- }}
- PanelWidth={this._props.PanelWidth}
- select={this._props.select}
- addDocument={this.addDocument}
- chromeHidden={this.chromeHidden}
- colHeaderData={this.colHeaderData}
- Document={this.Document}
- TemplateDataDocument={this._props.TemplateDataDocument}
- resizeColumns={this.resizeColumns}
- renderChildren={this.children}
- numGroupColumns={this.numGroupColumns}
- gridGap={this.gridGap}
- pivotField={this.notetakingCategoryField}
- fieldKey={this.fieldKey}
- dividerWidth={this.DividerWidth}
- maxColWidth={this.maxColWidth}
- availableWidth={this.availableWidth}
- headings={this.headings}
- heading={heading?.heading ?? 'unset'}
- headingObject={heading}
- docList={docList}
- yMargin={this.yMargin}
- type={type}
- createDropTarget={this.createDashEventsTarget}
- screenToLocalTransform={this.ScreenToLocalBoxXf}
- editableViewProps={this.editableViewProps}
- />
- );
- };
+ sectionNoteTaking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => (
+ <CollectionNoteTakingViewColumn
+ key={heading?.heading ?? 'unset'}
+ PanelWidth={this._props.PanelWidth}
+ refList={this._refList}
+ select={this._props.select}
+ addDocument={this.addDocument}
+ chromeHidden={this.chromeHidden}
+ colHeaderData={this.colHeaderData}
+ Document={this.Document}
+ TemplateDataDocument={this._props.TemplateDataDocument}
+ resizeColumns={this.resizeColumns}
+ renderChildren={this.children}
+ numGroupColumns={this.numGroupColumns}
+ gridGap={this.gridGap}
+ pivotField={this.notetakingCategoryField}
+ fieldKey={this.fieldKey}
+ dividerWidth={this.DividerWidth}
+ maxColWidth={this.maxColWidth}
+ availableWidth={this.availableWidth}
+ headings={this.headings}
+ heading={heading?.heading ?? 'unset'}
+ headingObject={heading}
+ docList={docList}
+ yMargin={this.yMargin}
+ createDropTarget={this.createDashEventsTarget}
+ screenToLocalTransform={this.ScreenToLocalBoxXf}
+ editableViewProps={this.editableViewProps}
+ />
+ );
// addGroup is called when adding a new columnHeader, adding a SchemaHeaderField to our list of
// columnHeaders and resizing the existing columns to make room for our new one.
@@ -619,7 +607,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
return this.isContentActive() === false ? 'none' : undefined;
}
- observer: any;
+ observer = new _global.ResizeObserver(() => this._props.setHeight?.(this.headerMargin + Math.max(...this._refList.map(DivHeight))));
render() {
TraceMobx();