aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoranika-ahluwalia <anika.ahluwalia@gmail.com>2020-07-23 13:25:42 -0500
committeranika-ahluwalia <anika.ahluwalia@gmail.com>2020-07-23 13:25:42 -0500
commit05c46464ba69e889145d8a32320cd7f130665ee1 (patch)
tree4b0e0b070753abb3d37dea2c3ae3ba760ef36a61
parentf19dfd26aa3232f2fe52ef5e631be208706fca11 (diff)
selection changes
-rw-r--r--src/client/util/CurrentUserUtils.ts47
-rw-r--r--src/client/util/SelectionManager.ts23
-rw-r--r--src/client/views/MainView.tsx45
-rw-r--r--src/client/views/collections/collectionFreeForm/PropertiesView.tsx12
4 files changed, 59 insertions, 68 deletions
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 1dd25ae30..54d81a9fa 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -493,6 +493,52 @@ export class CurrentUserUtils {
return doc.myItemCreators as Doc;
}
+ static menuBtnDescriptions(): {
+ title: string, icon: string, click: string, backgroundColor?: string,
+ }[] {
+ return [
+ { title: "Workspace", icon: "desktop", click: 'this.selectPanel("workspace")' },
+ { title: "Catalog", icon: "file", click: 'this.selectPanel("catalog")' },
+ { title: "Recently Deleted", icon: "trash-alt", click: 'this.selectPanel("deleted")' },
+ { title: "Import", icon: "upload", click: 'this.selectPanel("upload")' },
+ { title: "Sharing", icon: "users", click: 'GroupManager.Instance.open()' },
+ { title: "Tools", icon: "wrench", click: 'this.selectPanel("tools")' },
+ { title: "Search", icon: "search", click: 'this.selectPanel("search")' },
+ { title: "Help", icon: "question-circle", click: 'this.selectPanel("help")' },
+ { title: "Settings", icon: "cog", click: 'SettingsManager.Instance.open()' },
+ ];
+ }
+
+ static setupMenuButtons(doc: Doc) {
+ if (doc.menuStackBtns === undefined) {
+ const buttons = CurrentUserUtils.menuBtnDescriptions();
+ const menuBtns = buttons.map(({ title, icon, click, backgroundColor }) => Docs.Create.FontIconDocument({
+ _width: 100, _height: 100,
+ icon,
+ title,
+ onClick: click ? ScriptField.MakeScript(click) : undefined,
+ backgroundColor,
+ }));
+
+ doc.menuStackBtns = new PrefetchProxy(Docs.Create.MasonryDocument(menuBtns, {
+ _xMargin: 0, _autoHeight: true, _width: 100, _columnWidth: 60, ignoreClick: true, lockedPosition: true, _chromeStatus: "disabled",
+ }));
+ }
+ return doc.menuStackBtns as Doc;
+ }
+
+ static setupMenuPanel(doc: Doc) {
+ if (doc.menuStack === undefined) {
+ const menuBtns = CurrentUserUtils.setupMenuButtons(doc);
+ doc.menuStack = new PrefetchProxy(Docs.Create.StackingDocument([menuBtns], {
+ title: "all Creators", _yMargin: 0, _autoHeight: true, _xMargin: 0,
+ _width: 100, ignoreClick: true, lockedPosition: true, _chromeStatus: "disabled",
+ })) as any as Doc;
+ }
+ return doc.menuStack;
+ }
+
+
// Sets up mobile menu if it is undefined creates a new one, otherwise returns existing menu
static setupActiveMobileMenu(doc: Doc) {
if (doc.activeMobileMenu === undefined) {
@@ -894,6 +940,7 @@ export class CurrentUserUtils {
this.setupDocTemplates(doc); // sets up the template menu of templates
this.setupRightSidebar(doc); // sets up the right sidebar collection for mobile upload documents and sharing
this.setupActiveMobileMenu(doc); // sets up the current mobile menu for Dash Mobile
+ this.setupMenuPanel(doc);
this.setupOverlays(doc); // documents in overlay layer
this.setupDockedButtons(doc); // the bottom bar of font icons
this.setupDefaultPresentation(doc); // presentation that's initially triggered
diff --git a/src/client/util/SelectionManager.ts b/src/client/util/SelectionManager.ts
index 6fb758eac..ec875fe4b 100644
--- a/src/client/util/SelectionManager.ts
+++ b/src/client/util/SelectionManager.ts
@@ -13,13 +13,9 @@ export namespace SelectionManager {
@observable IsDragging: boolean = false;
SelectedDocuments: ObservableMap<DocumentView, boolean> = new ObservableMap();
- @observable public lastSelection: DocumentView | undefined;
-
@action
SelectDoc(docView: DocumentView, ctrlPressed: boolean): void {
- this.lastSelection = docView;
-
// if doc is not in SelectedDocuments, add it
if (!manager.SelectedDocuments.get(docView)) {
if (!ctrlPressed) {
@@ -39,14 +35,6 @@ export namespace SelectionManager {
@action
DeselectDoc(docView: DocumentView): void {
- if (this.lastSelection === docView) {
- const list = Array.from(manager.SelectedDocuments.keys());
- if (list.length > 0) {
- this.lastSelection = list[list.length - 1];
- } else {
- this.lastSelection = undefined;
- }
- }
if (manager.SelectedDocuments.get(docView)) {
manager.SelectedDocuments.delete(docView);
docView.props.whenActiveChanged(false);
@@ -55,16 +43,11 @@ export namespace SelectionManager {
}
@action
DeselectAll(): void {
- this.lastSelection = undefined;
+
Array.from(manager.SelectedDocuments.keys()).map(dv => dv.props.whenActiveChanged(false));
manager.SelectedDocuments.clear();
Doc.UserDoc().activeSelection = new List<Doc>([]);
}
-
- @action
- getLast(): DocumentView | undefined {
- return this.lastSelection;
- }
}
const manager = new Manager();
@@ -76,10 +59,6 @@ export namespace SelectionManager {
manager.SelectDoc(docView, ctrlPressed);
}
- export function LastSelection(): DocumentView | undefined {
- return manager.getLast();
- }
-
// computed functions, such as used in IsSelected generate errors if they're called outside of a
// reaction context. Specifying the context with 'outsideReaction' allows an efficiency feature
// to avoid unnecessary mobx invalidations when running inside a reaction.
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 9e8fa545f..8113ad698 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -456,48 +456,11 @@ export class MainView extends React.Component {
{this.docButtons}</div>;
}
- menuBtnDescriptions(): {
- title: string, icon: string, click: string, backgroundColor?: string,
- }[] {
- return [
- { title: "Workspace", icon: "desktop", click: 'this.selectPanel("workspace")' },
- { title: "Catalog", icon: "file", click: 'this.selectPanel("catalog")' },
- { title: "Recently Deleted", icon: "trash-alt", click: 'this.selectPanel("deleted")' },
- { title: "Import", icon: "upload", click: 'this.selectPanel("upload")' },
- { title: "Sharing", icon: "users", click: 'GroupManager.Instance.open()' },
- { title: "Tools", icon: "wrench", click: 'this.selectPanel("tools")' },
- { title: "Search", icon: "search", click: 'this.selectPanel("search")' },
- { title: "Help", icon: "question-circle", click: 'this.selectPanel("help")' },
- { title: "Settings", icon: "cog", click: 'SettingsManager.Instance.open()' },
- ];
- }
-
- setupMenuButtons() {
- const buttons = this.menuBtnDescriptions();
- const menuBtns = buttons.map(({ title, icon, click, backgroundColor }) => Docs.Create.FontIconDocument({
- _width: 100, _height: 100,
- icon,
- title,
- onClick: click ? ScriptField.MakeScript(click) : undefined,
- backgroundColor,
- }));
-
- const btnStack = new PrefetchProxy(Docs.Create.MasonryDocument(menuBtns, {
- _xMargin: 0, _autoHeight: true, _width: 100, _columnWidth: 60, ignoreClick: true, lockedPosition: true, _chromeStatus: "disabled",
- }));
- return btnStack as unknown as Doc;
- }
-
- @computed get setupMenuPanel() {
- const menuBtns = this.setupMenuButtons();
- const menuStack = new PrefetchProxy(Docs.Create.StackingDocument([menuBtns], {
- title: "all Creators", _yMargin: 0, _autoHeight: true, _xMargin: 0,
- _width: 100, ignoreClick: true, lockedPosition: true, _chromeStatus: "disabled",
- })) as any as Doc;
+ @computed get menuPanel() {
return <div className="mainView-menuPanel">
<DocumentView
- Document={menuStack}
+ Document={Doc.UserDoc().menuStack as Doc}
DataDoc={undefined}
LibraryPath={emptyPath}
addDocument={undefined}
@@ -524,8 +487,6 @@ export class MainView extends React.Component {
</div>;
}
- @observable menuPanel: any;
-
// @computed get menuPanel() {
// return <div className="mainView-menuPanel">
// <button className="mainView-menuPanel-button"
@@ -690,7 +651,7 @@ export class MainView extends React.Component {
height,
width: (FormatShapePane.Instance?.Pinned) ? `calc(100% - 200px)` : "100%"
}} >
- {this.setupMenuPanel}
+ {this.menuPanel}
<div style={{ display: "contents", flexDirection: "row", position: "relative" }}>
<div className="mainView-flyoutContainer" onPointerLeave={this.pointerLeaveDragger} style={{ width: this.flyoutWidth }}>
{this.flyoutWidth !== 0 ? <div className="mainView-libraryHandle"
diff --git a/src/client/views/collections/collectionFreeForm/PropertiesView.tsx b/src/client/views/collections/collectionFreeForm/PropertiesView.tsx
index 5aa0066d2..11609b1c0 100644
--- a/src/client/views/collections/collectionFreeForm/PropertiesView.tsx
+++ b/src/client/views/collections/collectionFreeForm/PropertiesView.tsx
@@ -28,10 +28,14 @@ interface PropertiesViewProps {
export class PropertiesView extends React.Component<PropertiesViewProps> {
@computed get MAX_EMBED_HEIGHT() { return 200; }
- @observable numSelected: number = SelectionManager.SelectedDocuments().length;
- @computed get selectedDocumentView() { return SelectionManager.LastSelection(); }
- @observable selectedDoc: Doc | undefined = this.selectedDocumentView?.props.Document;
- @observable dataDoc: Doc | undefined = this.selectedDocumentView?.props.DataDoc ? this.selectedDocumentView.props.DataDoc : this.selectedDoc;
+
+ @computed get selectedDocumentView() {
+ if (SelectionManger.SelectedDocuments().length) {
+ return SelectionManager.SelectedDocuments()[0];
+ } else { return undefined; }
+ }
+ @computed get selectedDoc() { return this.selectedDocumentView?.props.Document; }
+ @computed get dataDoc() { return this.selectedDocumentView?.props.DataDoc; }
@action
rtfWidth = () => {