aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2020-08-27 22:35:15 -0400
committerbobzel <zzzman@gmail.com>2020-08-27 22:35:15 -0400
commitd74811f0877709ad4005651bbd6eb9213378e45a (patch)
treef3115b47431a7944448067a4411e2edb52bd65bd
parent749fbe6ae14497cb0397905657bd66cb0182707c (diff)
fixed up undo for copy/cloning documents and for opening mainMenu sidebar
-rw-r--r--src/client/views/PreviewCursor.tsx46
-rw-r--r--src/client/views/nodes/DocumentView.tsx4
-rw-r--r--src/client/views/nodes/PresBox.tsx2
3 files changed, 24 insertions, 28 deletions
diff --git a/src/client/views/PreviewCursor.tsx b/src/client/views/PreviewCursor.tsx
index 5d8f30354..37d837f59 100644
--- a/src/client/views/PreviewCursor.tsx
+++ b/src/client/views/PreviewCursor.tsx
@@ -8,7 +8,7 @@ import { Doc } from '../../fields/Doc';
import { Transform } from "../util/Transform";
import { DocServer } from '../DocServer';
import { undoBatch, UndoManager } from '../util/UndoManager';
-import { NumCast } from '../../fields/Types';
+import { NumCast, Cast } from '../../fields/Types';
import { FormattedTextBox } from './nodes/formattedText/FormattedTextBox';
import * as rp from 'request-promise';
import { Utils } from '../../Utils';
@@ -44,8 +44,7 @@ export class PreviewCursor extends React.Component<{}> {
if (plain.indexOf("www.youtube.com/watch") !== -1) {
const url = plain.replace("youtube.com/watch?v=", "youtube.com/embed/");
undoBatch(() => PreviewCursor._addDocument(Docs.Create.VideoDocument(url, {
- title: url, _width: 400, _height: 315,
- _nativeWidth: 600, _nativeHeight: 472.5,
+ title: url, _width: 400, _height: 315, _nativeWidth: 600, _nativeHeight: 472.5,
x: newPoint[0], y: newPoint[1]
})))();
}
@@ -53,39 +52,34 @@ export class PreviewCursor extends React.Component<{}> {
else if (re.test(plain)) {
const url = plain;
undoBatch(() => PreviewCursor._addDocument(Docs.Create.WebDocument(url, {
- title: url, _width: 500, _height: 300, UseCors: true,
- // nativeWidth: 300, nativeHeight: 472.5,
- x: newPoint[0], y: newPoint[1]
+ title: url, _width: 500, _height: 300, UseCors: true, x: newPoint[0], y: newPoint[1]
})))();
}
-
else if (plain.startsWith("__DashDocId(") || plain.startsWith("__DashCloneId(")) {
const clone = plain.startsWith("__DashCloneId(");
const docids = plain.split(":");
const strs = docids[0].split(",");
const ptx = Number(strs[0].substring((clone ? "__DashCloneId(" : "__DashDocId(").length));
const pty = Number(strs[1].substring(0, strs[1].length - 1));
- let count = 1;
- const list: Doc[] = [];
- let first: Doc | undefined;
- docids.map((did, i) => i && DocServer.GetRefField(did).then(async doc => {
- count++;
- if (doc instanceof Doc) {
- i === 1 && (first = doc);
- const alias = clone ? (await Doc.MakeClone(doc)).clone : doc;
- const deltaX = NumCast(doc.x) - NumCast(first!.x) - ptx;
- const deltaY = NumCast(doc.y) - NumCast(first!.y) - pty;
- alias.x = newPoint[0] + deltaX;
- alias.y = newPoint[1] + deltaY;
- list.push(alias);
- }
- if (count === docids.length) {
- undoBatch(() => PreviewCursor._addDocument(list))();
- }
- }));
+ const batch = UndoManager.StartBatch("cloning");
+ {
+ const docs = await Promise.all(docids.filter((did, i) => i).map(async (did) => {
+ const doc = Cast(await DocServer.GetRefField(did), Doc, null);
+ return clone ? (await Doc.MakeClone(doc)).clone : doc;
+ }));
+ const firstx = docs.length ? NumCast(docs[0].x) + ptx - newPoint[0] : 0;
+ const firsty = docs.length ? NumCast(docs[0].y) + pty - newPoint[1] : 0;
+ docs.map(doc => {
+ doc.x = NumCast(doc.x) - firstx;
+ doc.y = NumCast(doc.y) - firsty;
+ });
+ PreviewCursor._addDocument(docs);
+ }
+ batch.end();
e.stopPropagation();
- } else {
+ }
+ else {
// creates text document
FormattedTextBox.PasteOnLoad = e;
undoBatch(() => PreviewCursor._addLiveTextDoc(Docs.Create.TextDocument("", {
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 171b33d42..b2e474f68 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -335,7 +335,9 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
shiftKey
}, console.log);
const clickFunc = () => {
- if (!Doc.AreProtosEqual(this.props.Document, Doc.UserDoc()["dockedBtn-undo"] as Doc) && !Doc.AreProtosEqual(this.props.Document, Doc.UserDoc()["dockedBtn-redo"] as Doc)) {
+ if (!Doc.AreProtosEqual(this.props.Document, Doc.UserDoc()["dockedBtn-undo"] as Doc) &&
+ !Doc.AreProtosEqual(this.props.Document, Doc.UserDoc()["dockedBtn-redo"] as Doc) &&
+ !this.onClickHandler.script.originalScript.includes("selectMainMenu")) {
UndoManager.RunInBatch(func, "on click");
} else func();
};
diff --git a/src/client/views/nodes/PresBox.tsx b/src/client/views/nodes/PresBox.tsx
index 5094c955f..02c62be95 100644
--- a/src/client/views/nodes/PresBox.tsx
+++ b/src/client/views/nodes/PresBox.tsx
@@ -259,7 +259,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps, PresBoxSchema>
// adjust the pan and scale to that of the pinView when it was added.
// TODO: Add option to remove presPinView
if (activeItem.presPinView) {
- // if targetDoc has been closed, then we will have created and displayed
+ // if targetDoc is not displayed but one of its aliases is, then we need to modify that alias, not the original target
const bestTarget = DocumentManager.Instance.getFirstDocumentView(targetDoc)?.props.Document;
bestTarget && runInAction(() => {
bestTarget!._viewTransition = "all 1s";