aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
diff options
context:
space:
mode:
authormehekj <mehek.jethani@gmail.com>2023-01-28 22:38:41 -0500
committermehekj <mehek.jethani@gmail.com>2023-01-28 22:38:41 -0500
commit9d2af1180f0dd5af5ab86b922cd8b0cdfcf4ea09 (patch)
treeb5ea43352db00566b1338cd8ce4c575c4bd00a6c /src/client/views/collections/collectionSchema/SchemaRowBox.tsx
parent82de335e0643f907e44cb193c9b2c6da1b3cbaf1 (diff)
checkpoint: schemarow as documentview functioning
Diffstat (limited to 'src/client/views/collections/collectionSchema/SchemaRowBox.tsx')
-rw-r--r--src/client/views/collections/collectionSchema/SchemaRowBox.tsx80
1 files changed, 56 insertions, 24 deletions
diff --git a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
index 5c1f32565..f790e9dbf 100644
--- a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
@@ -1,8 +1,8 @@
import React = require('react');
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { action, ObservableMap, ObservableSet } from 'mobx';
+import { action, computed, ObservableMap, ObservableSet } from 'mobx';
import { observer } from 'mobx-react';
-import { Doc } from '../../../../fields/Doc';
+import { Doc, StrListCast } from '../../../../fields/Doc';
import { undoBatch } from '../../../util/UndoManager';
import { ViewBoxBaseComponent } from '../../DocComponent';
import { Colors } from '../../global/globalEnums';
@@ -11,6 +11,10 @@ import './CollectionSchemaView.scss';
import { SchemaTableCell } from './SchemaTableCell';
import { emptyFunction, setupMoveUpEvents } from '../../../../Utils';
import { DragManager } from '../../../util/DragManager';
+import { OpenWhere } from '../../nodes/DocumentView';
+import { Cast } from '../../../../fields/Types';
+import { listSpec } from '../../../../fields/Schema';
+import { CollectionSchemaView } from './CollectionSchemaView';
export interface SchemaRowBoxProps extends FieldViewProps {
rowIndex: number;
@@ -26,40 +30,61 @@ export interface SchemaRowBoxProps extends FieldViewProps {
}
@observer
-export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
+export class SchemaRowBox extends ViewBoxBaseComponent<FieldViewProps>() {
public static LayoutString(fieldKey: string) {
return FieldView.LayoutString(SchemaRowBox, fieldKey);
}
private _ref: HTMLDivElement | null = null;
- isSelected = () => this.props.selectedDocs.has(this.props.Document);
bounds = () => this._ref?.getBoundingClientRect();
+ @computed get columnKeys() {
+ return StrListCast(this.props.ContainingCollectionDoc?.columnKeys);
+ }
+
+ @computed get storedColumnWidths() {
+ let widths = Cast(
+ this.props.ContainingCollectionDoc?.columnWidths,
+ listSpec('number'),
+ this.columnKeys.map(() => (this.props.PanelWidth() - CollectionSchemaView._rowMenuWidth) / this.columnKeys.length)
+ );
+
+ const totalWidth = widths.reduce((sum, width) => sum + width, 0);
+ if (totalWidth !== this.props.PanelWidth() - CollectionSchemaView._rowMenuWidth) {
+ widths = widths.map(w => {
+ const proportion = w / totalWidth;
+ return proportion * (this.props.PanelWidth() - CollectionSchemaView._rowMenuWidth);
+ });
+ }
+
+ return widths;
+ }
+
@action
onRowPointerDown = (e: React.PointerEvent) => {
e.stopPropagation();
- setupMoveUpEvents(
- this,
- e,
- e => this.props.startDrag(e, this.props.Document, this._ref!, this.props.rowIndex),
- emptyFunction,
- e => this.props.selectRow(e, this.props.Document, this._ref!, this.props.rowIndex)
- );
+ // setupMoveUpEvents(
+ // this,
+ // e,
+ // e => this.props.startDrag(e, this.props.Document, this._ref!, this.props.rowIndex),
+ // emptyFunction,
+ // e => this.props.selectRow(e, this.props.Document, this._ref!, this.props.rowIndex)
+ // );
};
onPointerEnter = (e: any) => {
- if (!this.props.dragging) return;
+ // if (!this.props.dragging) return;
document.removeEventListener('pointermove', this.onPointerMove);
document.addEventListener('pointermove', this.onPointerMove);
};
onPointerMove = (e: any) => {
- if (!this.props.dragging) return;
+ // if (!this.props.dragging) return;
let dragIsRow: boolean = true;
DragManager.docsBeingDragged.forEach(doc => {
- dragIsRow = this.props.selectedDocs.has(doc);
+ // dragIsRow = this.props.selectedDocs.has(doc);
});
if (this._ref && dragIsRow) {
const rect = this._ref.getBoundingClientRect();
@@ -69,11 +94,11 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
if (y <= halfLine) {
this._ref.style.borderTop = `solid 2px ${Colors.MEDIUM_BLUE}`;
this._ref.style.borderBottom = '0px';
- this.props.dropIndex(this.props.rowIndex);
+ // this.props.dropIndex(this.props.rowIndex);
} else if (y > halfLine) {
this._ref.style.borderTop = '0px';
this._ref.style.borderBottom = `solid 2px ${Colors.MEDIUM_BLUE}`;
- this.props.dropIndex(this.props.rowIndex + 1);
+ // this.props.dropIndex(this.props.rowIndex + 1);
}
}
};
@@ -90,15 +115,22 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
return (
<div
className="schema-row"
- style={this.isSelected() ? { backgroundColor: Colors.LIGHT_BLUE, opacity: this.props.dragging ? 0.5 : 1 } : {}}
- onPointerDown={this.onRowPointerDown}
- onPointerEnter={this.onPointerEnter}
+ style={this.props.isSelected() ? { backgroundColor: Colors.LIGHT_BLUE } : {}}
+ // style={this.isSelected() ? { backgroundColor: Colors.LIGHT_BLUE, opacity: this.props.dragging ? 0.5 : 1 } : {}}
+ // onPointerDown={this.onRowPointerDown}
+ // onPointerEnter={this.onPointerEnter}
onPointerLeave={this.onPointerLeave}
ref={(row: HTMLDivElement | null) => {
- row && this.props.addRowRef(this.props.Document, row);
+ // row && this.props.addRowRef(this.props.Document, row);
this._ref = row;
}}>
- <div className="row-menu" style={{ width: this.props.rowMenuWidth }}>
+ <div
+ className="row-menu"
+ style={
+ {
+ /* width: this.props.rowMenuWidth */
+ }
+ }>
<div
className="schema-row-button"
onPointerDown={undoBatch(e => {
@@ -111,14 +143,14 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
className="schema-row-button"
onPointerDown={e => {
e.stopPropagation();
- this.props.addDocTab(this.props.Document, 'add:right');
+ this.props.addDocTab(this.props.Document, OpenWhere.addRight);
}}>
<FontAwesomeIcon icon="external-link-alt" />
</div>
</div>
<div className="row-cells">
- {this.props.columnKeys.map((key, index) => (
- <SchemaTableCell key={key} Document={this.props.Document} fieldKey={key} columnWidth={this.props.columnWidths[index]} />
+ {this.columnKeys.map((key, index) => (
+ <SchemaTableCell key={key} Document={this.props.Document} fieldKey={key} columnWidth={this.storedColumnWidths[index]} />
))}
</div>
</div>