aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/collectionSchema
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-03-28 14:23:17 -0400
committerbobzel <zzzman@gmail.com>2023-03-28 14:23:17 -0400
commitdabac69d26c8e8e69bd55466ce221d9e33e36638 (patch)
treea24bd5fdc95fee17f5d654d79c0a28a6c0a696a8 /src/client/views/collections/collectionSchema
parent6ea3d7bb225b4f05ff83eba9428e865690e24f8a (diff)
numerous changes to try to simplify event handling in DocumentView - got rid of isContentActive in DocComponent since it's in DocumentView. Including adding 'enableDragWhenActive' , 'onClickScriptDisable',
Diffstat (limited to 'src/client/views/collections/collectionSchema')
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.scss3
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.tsx46
-rw-r--r--src/client/views/collections/collectionSchema/SchemaRowBox.tsx8
3 files changed, 28 insertions, 29 deletions
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
index 34e591195..1ef2fb4ef 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
@@ -8,7 +8,8 @@
.schema-table {
background-color: $white;
- cursor: default;
+ cursor: grab;
+ overflow: scroll;
.schema-column-menu,
.schema-filter-menu {
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
index 60202a19e..d47c9762c 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
@@ -9,7 +9,7 @@ import { RichTextField } from '../../../../fields/RichTextField';
import { listSpec } from '../../../../fields/Schema';
import { BoolCast, Cast, DocCast, NumCast, StrCast } from '../../../../fields/Types';
import { ImageField } from '../../../../fields/URLField';
-import { emptyFunction, returnEmptyDoclist, returnEmptyString, returnFalse, returnTrue, setupMoveUpEvents, smoothScroll } from '../../../../Utils';
+import { emptyFunction, returnDefault, returnEmptyDoclist, returnEmptyString, returnFalse, returnNever, returnTrue, setupMoveUpEvents, smoothScroll } from '../../../../Utils';
import { Docs, DocUtils } from '../../../documents/Documents';
import { DocumentManager } from '../../../util/DocumentManager';
import { DragManager } from '../../../util/DragManager';
@@ -46,7 +46,7 @@ export class CollectionSchemaView extends CollectionSubView() {
public static _rowHeight: number = 40;
public static _minColWidth: number = 25;
- public static _rowMenuWidth: number = 100;
+ public static _rowMenuWidth: number = 60;
public static _previewDividerWidth: number = 4;
@computed get _selectedDocs() {
@@ -364,7 +364,11 @@ export class CollectionSchemaView extends CollectionSubView() {
this.dataDoc[this.fieldKey ?? 'data'] = new List<Doc>([...removed, ...draggedDocs, ...pushedDocs]);
this.setSort(undefined);
SelectionManager.DeselectAll();
- setTimeout(() => draggedDocs.forEach(doc => DocumentManager.Instance.AddViewRenderedCb(doc, dv => dv.select(true))), 100);
+ draggedDocs.forEach(doc => {
+ const draggedView = DocumentManager.Instance.getFirstDocumentView(doc);
+ if (draggedView) DocumentManager.Instance.RemoveView(draggedView);
+ DocumentManager.Instance.AddViewRenderedCb(doc, dv => dv.select(true));
+ });
e.stopPropagation();
return true;
}
@@ -812,26 +816,17 @@ export class CollectionSchemaView extends CollectionSubView() {
previewWidthFunc = () => this.previewWidth;
render() {
return (
- <div
- className="collectionSchemaView"
- ref={(ele: HTMLDivElement | null) => {
- this.createDashEventsTarget(ele);
- }}
- onPointerDown={e => {
- // this is analogous to the panning code for a freeform view.
- // however, schema views don't pan so it does nothing. but it does eat the pointerDown event
- // if the content is active to prevent the schema from being dragged
- this.isContentActive() && setupMoveUpEvents(this, e, returnFalse, emptyFunction, emptyFunction, false);
- }}
- onDrop={this.onExternalDrop.bind(this)}>
- <div className="schema-table">
+ <div className="collectionSchemaView" ref={(ele: HTMLDivElement | null) => this.createDashEventsTarget(ele)} onDrop={this.onExternalDrop.bind(this)}>
+ <div
+ className="schema-table"
+ onWheel={e => this.props.isContentActive() && e.stopPropagation()}
+ ref={r => {
+ // prevent wheel events from passively propagating up through containers
+ r?.addEventListener('wheel', (e: WheelEvent) => {}, { passive: false });
+ }}>
<div className="schema-header-row" style={{ height: CollectionSchemaView._rowHeight }}>
<div className="row-menu" style={{ width: CollectionSchemaView._rowMenuWidth }}>
- <div
- className="schema-header-button"
- onPointerDown={e => {
- this._columnMenuIndex && this._columnMenuIndex === -1 ? this.closeColumnMenu() : this.openColumnMenu(-1, true);
- }}>
+ <div className="schema-header-button" onPointerDown={e => (this._columnMenuIndex === -1 ? this.closeColumnMenu() : this.openColumnMenu(-1, true))}>
<FontAwesomeIcon icon="plus" />
</div>
</div>
@@ -867,8 +862,9 @@ export class CollectionSchemaView extends CollectionSubView() {
DataDoc={undefined}
fitContentsToBox={returnTrue}
dontCenter={'y'}
+ onClickScriptDisable="always"
focus={DocUtils.DefaultFocus}
- renderDepth={this.props.renderDepth}
+ renderDepth={this.props.renderDepth + 1}
rootSelected={this.rootSelected}
PanelWidth={this.previewWidthFunc}
PanelHeight={this.props.PanelHeight}
@@ -915,16 +911,22 @@ class CollectionSchemaViewDocs extends React.Component<CollectionSchemaViewDocsP
return (
<div className="schema-row-wrapper" style={{ maxHeight: CollectionSchemaView._rowHeight }}>
<DocumentView
+ key={doc[Id]}
{...this.props.schema.props}
LayoutTemplate={this.props.schema.props.childLayoutTemplate}
LayoutTemplateString={SchemaRowBox.LayoutString(this.props.schema.props.fieldKey)}
Document={doc}
DataDoc={dataDoc}
+ renderDepth={this.props.schema.props.renderDepth + 1}
ContainingCollectionView={this.props.schema.props.CollectionView}
ContainingCollectionDoc={this.props.schema.Document}
PanelWidth={this.tableWidthFunc}
PanelHeight={this.rowHeightFunc}
styleProvider={DefaultStyleProvider}
+ waitForDoubleClickToClick={returnNever}
+ defaultDoubleClick={returnDefault}
+ enableDragWhenActive={true}
+ onClickScriptDisable="always"
focus={this.props.schema.focusDocument}
docFilters={this.props.schema.childDocFilters}
docRangeFilters={this.props.schema.childDocRangeFilters}
diff --git a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
index 10f307068..2defaae00 100644
--- a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
@@ -88,11 +88,7 @@ export class SchemaRowBox extends ViewBoxBaseComponent<FieldViewProps>() {
return (
<div
className="schema-row"
- style={
- this.props.isSelected()
- ? { height: CollectionSchemaView._rowHeight, backgroundColor: Colors.LIGHT_BLUE, pointerEvents: this.schemaView?.props.isContentActive() ? 'all' : undefined /*, opacity: this.props.dragging ? 0.5 : 1 */ }
- : { height: CollectionSchemaView._rowHeight, pointerEvents: this.schemaView?.props.isContentActive() ? 'all' : undefined }
- }
+ style={{ height: CollectionSchemaView._rowHeight, backgroundColor: this.props.isSelected() ? Colors.LIGHT_BLUE : undefined, pointerEvents: this.schemaView?.props.isContentActive() ? 'all' : undefined }}
onPointerEnter={this.onPointerEnter}
onPointerLeave={this.onPointerLeave}
ref={(row: HTMLDivElement | null) => {
@@ -103,7 +99,7 @@ export class SchemaRowBox extends ViewBoxBaseComponent<FieldViewProps>() {
className="row-menu"
style={{
width: CollectionSchemaView._rowMenuWidth,
- pointerEvents: !this.isContentActive() ? 'none' : undefined,
+ pointerEvents: !this.props.isContentActive() ? 'none' : undefined,
}}>
<div
className="schema-row-button"