aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/scrapbook/ScrapbookBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/scrapbook/ScrapbookBox.tsx')
-rw-r--r--src/client/views/nodes/scrapbook/ScrapbookBox.tsx87
1 files changed, 46 insertions, 41 deletions
diff --git a/src/client/views/nodes/scrapbook/ScrapbookBox.tsx b/src/client/views/nodes/scrapbook/ScrapbookBox.tsx
index 56cfcda70..b02976067 100644
--- a/src/client/views/nodes/scrapbook/ScrapbookBox.tsx
+++ b/src/client/views/nodes/scrapbook/ScrapbookBox.tsx
@@ -1,24 +1,25 @@
-import { makeObservable } from 'mobx';
+import { action, makeObservable, observable } from 'mobx';
import * as React from 'react';
-import { ViewBoxAnnotatableComponent } from '../../DocComponent';
-import { FieldView, FieldViewProps } from '../FieldView';
+import { Doc } from '../../../../fields/Doc';
+import { List } from '../../../../fields/List';
+import { emptyFunction } from '../../../../Utils';
import { Docs } from '../../../documents/Documents';
import { DocumentType } from '../../../documents/DocumentTypes';
-import { action, observable } from 'mobx';
-import { DocListCast } from '../../../../fields/Doc';
-import { Doc } from '../../../../fields/Doc';
+import { CollectionView } from '../../collections/CollectionView';
+import { ViewBoxAnnotatableComponent } from '../../DocComponent';
import { DocumentView } from '../DocumentView';
-import { FormattedTextBox } from '../formattedText/FormattedTextBox';
-import { List } from '../../../../fields/List';
+import { FieldView, FieldViewProps } from '../FieldView';
+import { DragManager } from '../../../util/DragManager';
// Scrapbook view: a container that lays out its child items in a grid/template
export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@observable createdDate: string;
+ private _dropDisposer?: DragManager.DragDropDisposer;
constructor(props: FieldViewProps) {
super(props);
makeObservable(this);
this.createdDate = this.getFormattedDate();
-
+
// ensure we always have a List<Doc> in dataDoc['items']
if (!this.dataDoc[this.fieldKey]) {
this.dataDoc[this.fieldKey] = new List<Doc>();
@@ -31,12 +32,6 @@ export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
return FieldView.LayoutString(ScrapbookBox, fieldStr);
}
-
-
-
-
-
-
getFormattedDate(): string {
return new Date().toLocaleDateString(undefined, {
year: 'numeric',
@@ -55,40 +50,50 @@ export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
componentDidMount() {
this.setTitle();
- if (!this.dataDoc[this.fieldKey]) {
- this.dataDoc[this.fieldKey] = new List<Doc>();
- }
}
+ childRejectDrop = (draggedDoc: Doc[] | undefined, subView?: DocumentView) => {
+ if (draggedDoc?.length === 1 && subView) {
+ if (subView.Document.type === DocumentType.IMG && draggedDoc[0].$type !== DocumentType.IMG) {
+ return true;
+ }
+ }
+ return false;
+ };
+ rejectDrop = (draggedDoc: Doc[] | undefined, subView?: DocumentView) => {
+ if (draggedDoc?.length === 1 && draggedDoc[0].$type !== DocumentType.IMG) {
+ return true;
+ }
+ return false;
+ };
+ onInternalDrop = (e: Event, de: DragManager.DropEvent) => {
+ if (de.complete.docDragData?.draggedDocuments[0]?.$type === DocumentType.IMG) {
+ return true;
+ }
+ return false;
+ };
+
+ protected createDashEventsTarget = (ele: HTMLDivElement | null) => {
+ this._dropDisposer?.();
+ if (ele) {
+ this._dropDisposer = DragManager.MakeDropTarget(ele, this.onInternalDrop.bind(this), this.layoutDoc);
+ }
+ };
+
render() {
- // cast into an array even if empty
- const items: Doc[] = DocListCast(this.dataDoc[this.fieldKey]);
-
return (
- <div style={{ background: 'beige', width: '100%', height: '100%' }}>
-
+ <div style={{ background: 'beige', width: '100%', height: '100%' }} ref={r => r && this.createDashEventsTarget(r)}>
+ <CollectionView
+ {...this._props} //
+ setContentViewBox={emptyFunction}
+ rejectDrop={this.rejectDrop}
+ childRejectDrop={this.childRejectDrop}
+ />
</div>
-
- // <div
- // style={{
- // }}
- // >
- // {items.length === 0
- // ? <div style={{color:'#888',fontStyle:'italic'}}>Drop docs here</div>
- // : items.map((childDoc, idx) => (
- // <DocumentView
- // key={String(childDoc.id ?? idx)}
- // {...this._props}
- // Document={childDoc}
- // />
- // ))
- // }
- // </div>
);
- }
+ }
}
-
// Register scrapbook
Docs.Prototypes.TemplateMap.set(DocumentType.SCRAPBOOK, {
layout: { view: ScrapbookBox, dataField: 'items' },