aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/CollectionPileView.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/collections/CollectionPileView.tsx')
-rw-r--r--src/client/views/collections/CollectionPileView.tsx135
1 files changed, 75 insertions, 60 deletions
diff --git a/src/client/views/collections/CollectionPileView.tsx b/src/client/views/collections/CollectionPileView.tsx
index 4489601db..38e240ac6 100644
--- a/src/client/views/collections/CollectionPileView.tsx
+++ b/src/client/views/collections/CollectionPileView.tsx
@@ -1,33 +1,35 @@
-import { action, computed, IReactionDisposer, reaction } from "mobx";
-import { observer } from "mobx-react";
-import { Doc, HeightSym, WidthSym } from "../../../fields/Doc";
-import { NumCast, StrCast } from "../../../fields/Types";
-import { emptyFunction, returnFalse, returnTrue, setupMoveUpEvents } from "../../../Utils";
-import { DocUtils } from "../../documents/Documents";
-import { SelectionManager } from "../../util/SelectionManager";
-import { SnappingManager } from "../../util/SnappingManager";
-import { undoBatch, UndoManager } from "../../util/UndoManager";
-import { CollectionFreeFormView } from "./collectionFreeForm/CollectionFreeFormView";
-import "./CollectionPileView.scss";
-import { CollectionSubView } from "./CollectionSubView";
-import React = require("react");
-import { ScriptField } from "../../../fields/ScriptField";
+import { action, computed, IReactionDisposer, reaction } from 'mobx';
+import { observer } from 'mobx-react';
+import { Doc, HeightSym, WidthSym } from '../../../fields/Doc';
+import { NumCast, StrCast } from '../../../fields/Types';
+import { emptyFunction, returnFalse, returnTrue, setupMoveUpEvents } from '../../../Utils';
+import { DocUtils } from '../../documents/Documents';
+import { SelectionManager } from '../../util/SelectionManager';
+import { SnappingManager } from '../../util/SnappingManager';
+import { undoBatch, UndoManager } from '../../util/UndoManager';
+import { CollectionFreeFormView } from './collectionFreeForm/CollectionFreeFormView';
+import './CollectionPileView.scss';
+import { CollectionSubView } from './CollectionSubView';
+import React = require('react');
+import { ScriptField } from '../../../fields/ScriptField';
@observer
export class CollectionPileView extends CollectionSubView() {
- _originalChrome: any = "";
+ _originalChrome: any = '';
_disposers: { [name: string]: IReactionDisposer } = {};
componentDidMount() {
- if (this.layoutEngine() !== "pass" && this.layoutEngine() !== "starburst") {
- this.Document._pileLayoutEngine = "pass";
+ if (this.layoutEngine() !== 'pass' && this.layoutEngine() !== 'starburst') {
+ this.Document._pileLayoutEngine = 'pass';
}
this._originalChrome = this.layoutDoc._chromeHidden;
this.layoutDoc._chromeHidden = true;
- // pileups are designed to go away when they are empty.
- this._disposers.selected = reaction(() => this.childDocs.length,
- (num) => !num && this.props.ContainingCollectionView?.removeDocument(this.props.Document));
+ // pileups are designed to go away when they are empty.
+ this._disposers.selected = reaction(
+ () => this.childDocs.length,
+ num => !num && this.props.ContainingCollectionView?.removeDocument(this.props.Document)
+ );
}
componentWillUnmount() {
this.layoutDoc._chromeHidden = this._originalChrome;
@@ -38,32 +40,36 @@ export class CollectionPileView extends CollectionSubView() {
@undoBatch
addPileDoc = (doc: Doc | Doc[]) => {
- (doc instanceof Doc ? [doc] : doc).map((d) => DocUtils.iconify(d));
+ (doc instanceof Doc ? [doc] : doc).map(d => DocUtils.iconify(d));
return this.props.addDocument?.(doc) || false;
- }
+ };
@undoBatch
removePileDoc = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => {
- (doc instanceof Doc ? [doc] : doc).map(undoBatch((d) => Doc.deiconifyView(d)));
+ (doc instanceof Doc ? [doc] : doc).map(undoBatch(d => Doc.deiconifyView(d)));
return this.props.moveDocument?.(doc, targetCollection, addDoc) || false;
- }
+ };
toggleIcon = () => {
- return ScriptField.MakeScript("documentView.iconify()", { documentView: "any" });
- }
+ return ScriptField.MakeScript('documentView.iconify()', { documentView: 'any' });
+ };
// returns the contents of the pileup in a CollectionFreeFormView
@computed get contents() {
- const isStarburst = this.layoutEngine() === "starburst";
- return <div className="collectionPileView-innards"
- style={{ pointerEvents: isStarburst || SnappingManager.GetIsDragging() ? undefined : "none" }} >
- <CollectionFreeFormView {...this.props}
- layoutEngine={this.layoutEngine}
- childDocumentsActive={isStarburst ? returnTrue : undefined}
- addDocument={this.addPileDoc}
- childClickScript={this.toggleIcon()}
- moveDocument={this.removePileDoc} />
- </div>;
+ const isStarburst = this.layoutEngine() === 'starburst';
+ return (
+ <div className="collectionPileView-innards" style={{ pointerEvents: isStarburst || SnappingManager.GetIsDragging() ? undefined : 'none' }}>
+ <CollectionFreeFormView
+ {...this.props}
+ layoutEngine={this.layoutEngine}
+ childDocumentsActive={isStarburst ? returnTrue : undefined}
+ addDocument={this.addPileDoc}
+ childCanEmbedOnDrag={true}
+ childClickScript={this.toggleIcon()}
+ moveDocument={this.removePileDoc}
+ />
+ </div>
+ );
}
// toggles the pileup between starburst to compact
@@ -99,27 +105,35 @@ export class CollectionPileView extends CollectionSubView() {
pointerDown = (e: React.PointerEvent) => {
let dist = 0;
SnappingManager.SetIsDragging(true);
- setupMoveUpEvents(this, e, (e: PointerEvent, down: number[], delta: number[]) => {
- if (this.layoutEngine() === "pass" && this.childDocs.length && e.shiftKey) {
- dist += Math.sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
- if (dist > 100) {
- if (!this._undoBatch) {
- this._undoBatch = UndoManager.StartBatch("layout pile");
+ setupMoveUpEvents(
+ this,
+ e,
+ (e: PointerEvent, down: number[], delta: number[]) => {
+ if (this.layoutEngine() === 'pass' && this.childDocs.length && e.shiftKey) {
+ dist += Math.sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
+ if (dist > 100) {
+ if (!this._undoBatch) {
+ this._undoBatch = UndoManager.StartBatch('layout pile');
+ }
+ const doc = this.childDocs[0];
+ doc.x = e.clientX;
+ doc.y = e.clientY;
+ this.props.addDocTab(doc, 'inParent') && (this.props.removeDocument?.(doc) || false);
+ dist = 0;
}
- const doc = this.childDocs[0];
- doc.x = e.clientX;
- doc.y = e.clientY;
- this.props.addDocTab(doc, "inParent") && (this.props.removeDocument?.(doc) || false);
- dist = 0;
}
- }
- return false;
- }, () => {
- this._undoBatch?.end();
- this._undoBatch = undefined;
- SnappingManager.SetIsDragging(false);
- }, emptyFunction, e.shiftKey && this.layoutEngine() === "pass", this.layoutEngine() === "pass" && e.shiftKey); // this sets _doubleTap
- }
+ return false;
+ },
+ () => {
+ this._undoBatch?.end();
+ this._undoBatch = undefined;
+ SnappingManager.SetIsDragging(false);
+ },
+ emptyFunction,
+ e.shiftKey && this.layoutEngine() === 'pass',
+ this.layoutEngine() === 'pass' && e.shiftKey
+ ); // this sets _doubleTap
+ };
// onClick for toggling the pileup view
@undoBatch
@@ -130,12 +144,13 @@ export class CollectionPileView extends CollectionSubView() {
this.toggleStarburst();
e.stopPropagation();
}
- }
+ };
render() {
- return <div className={`collectionPileView`} onClick={this.onClick} onPointerDown={this.pointerDown}
- style={{ width: this.props.PanelWidth(), height: "100%" }}>
- {this.contents}
- </div>;
+ return (
+ <div className={`collectionPileView`} onClick={this.onClick} onPointerDown={this.pointerDown} style={{ width: this.props.PanelWidth(), height: '100%' }}>
+ {this.contents}
+ </div>
+ );
}
}