aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
diff options
context:
space:
mode:
authormehekj <mehek.jethani@gmail.com>2023-04-10 16:08:58 -0400
committermehekj <mehek.jethani@gmail.com>2023-04-10 16:08:58 -0400
commitbff54ce7283f7a50a8c4184ea0543b7a2d338e25 (patch)
tree26af049cb8549aa75cc376524e123b78adf5a94f /src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
parent7934c38ed641f4a10cd008fe415a50aef1240e10 (diff)
parent3cb7f85b23eb0ae3a432bbe15b8a2cda37290ce2 (diff)
Merge branch 'master' into schema-mehek
Diffstat (limited to 'src/client/views/collections/collectionSchema/CollectionSchemaView.tsx')
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.tsx99
1 files changed, 15 insertions, 84 deletions
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
index 967e10434..632abd6cf 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
@@ -1,23 +1,20 @@
import React = require('react');
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { action, computed, observable, ObservableMap, trace, untracked } from 'mobx';
+import { action, computed, observable, ObservableMap, untracked } from 'mobx';
import { observer } from 'mobx-react';
-import { Doc, DocListCast, Field, StrListCast } from '../../../../fields/Doc';
+import { computedFn } from 'mobx-utils';
+import { Doc, Field, StrListCast } from '../../../../fields/Doc';
import { Id } from '../../../../fields/FieldSymbols';
import { List } from '../../../../fields/List';
-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, 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';
import { SelectionManager } from '../../../util/SelectionManager';
-import { Transform } from '../../../util/Transform';
import { undoBatch } from '../../../util/UndoManager';
import { ContextMenu } from '../../ContextMenu';
-import { ContextMenuProps } from '../../ContextMenuItem';
import { EditableView } from '../../EditableView';
import { DocFocusOptions, DocumentView } from '../../nodes/DocumentView';
import { FormattedTextBox } from '../../nodes/formattedText/FormattedTextBox';
@@ -214,9 +211,7 @@ export class CollectionSchemaView extends CollectionSubView() {
};
@action
- addNewKey = (key: string, defaultVal: any) => {
- this.childDocs.forEach(doc => (doc[key] = defaultVal));
- };
+ addNewKey = (key: string, defaultVal: any) => this.childDocs.forEach(doc => (doc[key] = defaultVal));
@undoBatch
@action
@@ -302,9 +297,7 @@ export class CollectionSchemaView extends CollectionSubView() {
};
@action
- addRowRef = (doc: Doc, ref: HTMLDivElement) => {
- this._rowEles.set(doc, ref);
- };
+ addRowRef = (doc: Doc, ref: HTMLDivElement) => this._rowEles.set(doc, ref);
@action
setColRef = (index: number, ref: HTMLDivElement) => {
@@ -402,68 +395,12 @@ export class CollectionSchemaView extends CollectionSubView() {
menuCallback = (x: number, y: number) => {
ContextMenu.Instance.clearItems();
- const layoutItems: ContextMenuProps[] = [];
- const docItems: ContextMenuProps[] = [];
- const dataDoc = this.props.DataDoc || this.props.Document;
-
- DocUtils.addDocumentCreatorMenuItems(
- doc => {
- FormattedTextBox.SelectOnLoad = StrCast(doc[Id]);
- return this.addRow(doc);
- },
- this.addRow,
- x,
- y,
- true
- );
- Array.from(Object.keys(Doc.GetProto(dataDoc)))
- .filter(fieldKey => dataDoc[fieldKey] instanceof RichTextField || dataDoc[fieldKey] instanceof ImageField || typeof dataDoc[fieldKey] === 'string')
- .map(fieldKey =>
- docItems.push({
- description: ':' + fieldKey,
- event: () => {
- const created = DocUtils.DocumentFromField(dataDoc, fieldKey, Doc.GetProto(this.props.Document));
- if (created) {
- if (this.props.Document.isTemplateDoc) {
- Doc.MakeMetadataFieldTemplate(created, this.props.Document);
- }
- return this.addRow(created);
- }
- },
- icon: 'compress-arrows-alt',
- })
- );
- Array.from(Object.keys(Doc.GetProto(dataDoc)))
- .filter(fieldKey => DocListCast(dataDoc[fieldKey]).length)
- .map(fieldKey =>
- docItems.push({
- description: ':' + fieldKey,
- event: () => {
- const created = Docs.Create.CarouselDocument([], { _width: 400, _height: 200, title: fieldKey });
- if (created) {
- const container = this.props.Document.resolvedDataDoc ? Doc.GetProto(this.props.Document) : this.props.Document;
- if (container.isTemplateDoc) {
- Doc.MakeMetadataFieldTemplate(created, container);
- return Doc.AddDocToList(container, Doc.LayoutFieldKey(container), created);
- }
- return this.addRow(created) || false;
- }
- },
- icon: 'compress-arrows-alt',
- })
- );
- !Doc.noviceMode && ContextMenu.Instance.addItem({ description: 'Doc Fields ...', subitems: docItems, icon: 'eye' });
- !Doc.noviceMode && ContextMenu.Instance.addItem({ description: 'Containers ...', subitems: layoutItems, icon: 'eye' });
+ DocUtils.addDocumentCreatorMenuItems(doc => this.addRow(doc), this.addRow, x, y, true);
+
ContextMenu.Instance.setDefaultItem('::', (name: string): void => {
Doc.GetProto(this.props.Document)[name] = '';
- const created = Docs.Create.TextDocument('', { title: name, _autoHeight: true });
- if (created) {
- if (this.props.Document.isTemplateDoc) {
- Doc.MakeMetadataFieldTemplate(created, this.props.Document);
- }
- this.addRow(created);
- }
+ this.addRow(Docs.Create.TextDocument('', { title: name, _autoHeight: true }));
});
ContextMenu.Instance.displayMenu(x, y, undefined, true);
};
@@ -540,9 +477,7 @@ export class CollectionSchemaView extends CollectionSubView() {
};
@action
- closeColumnMenu = () => {
- this._columnMenuIndex = undefined;
- };
+ closeColumnMenu = () => (this._columnMenuIndex = undefined);
@action
openFilterMenu = (index: number) => {
@@ -593,19 +528,14 @@ export class CollectionSchemaView extends CollectionSubView() {
getFieldFilters = (field: string) => StrListCast(this.Document._docFilters).filter(filter => filter.split(':')[0] == field);
removeFieldFilters = (field: string) => {
- this.getFieldFilters(field).forEach(filter => {
- Doc.setDocFilter(this.Document, field, filter.split(':')[1], 'remove');
- });
+ this.getFieldFilters(field).forEach(filter => Doc.setDocFilter(this.Document, field, filter.split(':')[1], 'remove'));
};
onFilterKeyDown = (e: React.KeyboardEvent) => {
+ //prettier-ignore
switch (e.key) {
- case 'Enter':
- this.closeFilterMenu(true);
- break;
- case 'Escape':
- this.closeFilterMenu(false);
- break;
+ case 'Enter' : this.closeFilterMenu(true); break;
+ case 'Escape': this.closeFilterMenu(false);break;
}
};
@@ -900,6 +830,7 @@ interface CollectionSchemaViewDocsProps {
class CollectionSchemaViewDocs extends React.Component<CollectionSchemaViewDocsProps> {
tableWidthFunc = () => this.props.schema.tableWidth;
rowHeightFunc = () => CollectionSchemaView._rowHeight;
+ childScreenToLocal = computedFn((index: number) => () => this.props.schema.props.ScreenToLocalTransform().translate(0, -CollectionSchemaView._rowHeight - index * this.rowHeightFunc()));
render() {
return (
<div className="schema-table-content">
@@ -929,7 +860,7 @@ class CollectionSchemaViewDocs extends React.Component<CollectionSchemaViewDocsP
docRangeFilters={this.props.schema.childDocRangeFilters}
searchFilterDocs={this.props.schema.searchFilterDocs}
rootSelected={this.props.schema.rootSelected}
- ScreenToLocalTransform={Transform.Identity}
+ ScreenToLocalTransform={this.childScreenToLocal(index)}
bringToFront={emptyFunction}
isDocumentActive={this.props.schema.props.childDocumentsActive?.() ? this.props.schema.props.isDocumentActive : this.props.schema.isContentActive}
isContentActive={emptyFunction}