aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.scss2
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.tsx16
-rw-r--r--src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx103
3 files changed, 93 insertions, 28 deletions
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
index 0631cd21d..696bfd67c 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
@@ -50,6 +50,8 @@
width: inherit;
position: absolute;
top: 35px;
+ min-width: 200px;
+ padding: 10px;
}
}
}
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
index 7516b95b8..0466ce343 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
@@ -79,26 +79,25 @@ export class CollectionSchemaView extends CollectionSubView() {
@undoBatch
@action
- changeColumnKey = (index: number, newKey: string) => {
+ changeColumnKey = (index: number, newKey: string, defaultVal?: any) => {
if (!this.documentKeys.includes(newKey)) {
- this.addNewKey(newKey);
+ this.addNewKey(newKey, defaultVal);
}
let currKeys = this.columnKeys;
currKeys[index] = newKey;
this.layoutDoc.columnKeys = new List<string>(currKeys);
- return true;
};
@undoBatch
@action
- addColumn = (index: number, key: string) => {
+ addColumn = (index: number, key: string, defaultVal?: any) => {
if (!this.documentKeys.includes(key)) {
- this.addNewKey(key);
+ this.addNewKey(key, defaultVal);
}
- const newColWidth = this._minColWidth;
let currWidths = this.storedColumnWidths;
+ const newColWidth = this.props.PanelWidth() / (currWidths.length + 1);
currWidths = currWidths.map(w => {
const proportion = w / (this.props.PanelWidth() - this._rowMenuWidth);
return proportion * (this.props.PanelWidth() - this._rowMenuWidth - newColWidth);
@@ -112,8 +111,9 @@ export class CollectionSchemaView extends CollectionSubView() {
};
@action
- addNewKey = (key: string) => {
- this.childDocs.forEach(doc => (doc[key] = key + ' default val'));
+ addNewKey = (key: string, defaultVal: any) => {
+ console.log(defaultVal);
+ this.childDocs.forEach(doc => (doc[key] = defaultVal));
};
@undoBatch
diff --git a/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx b/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
index a6140bafd..cdae79d0c 100644
--- a/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
@@ -4,14 +4,15 @@ import { action, computed, observable } from 'mobx';
import { observer } from 'mobx-react';
import { emptyFunction, setupMoveUpEvents } from '../../../../Utils';
import './CollectionSchemaView.scss';
+import { ColumnType } from './CollectionSchemaView';
export interface SchemaColumnHeaderProps {
columnKeys: string[];
columnWidths: number[];
columnIndex: number;
possibleKeys: string[];
- changeColumnKey: (index: number, newKey: string) => boolean;
- addColumn: (index: number, key: string) => void;
+ changeColumnKey: (index: number, newKey: string, defaultVal?: any) => void;
+ addColumn: (index: number, key: string, defaultVal?: any) => void;
removeColumn: (index: number) => void;
resizeColumn: (e: any, index: number, left: boolean) => void;
dragColumn: (e: any, index: number) => boolean;
@@ -20,6 +21,9 @@ export interface SchemaColumnHeaderProps {
@observer
export class SchemaColumnHeader extends React.Component<SchemaColumnHeaderProps> {
@observable _menuVisible: boolean = false;
+ @observable _makeNewField: boolean = false;
+ @observable _newFieldType: ColumnType = ColumnType.Number;
+ @observable _newFieldDefault: any = 0;
@observable _menuValue: string = '';
@observable _menuOptions: string[] = [];
private _makeNewColumn = false;
@@ -28,26 +32,85 @@ export class SchemaColumnHeader extends React.Component<SchemaColumnHeaderProps>
return this.props.columnKeys[this.props.columnIndex];
}
+ @computed get fieldDefaultInput() {
+ switch (this._newFieldType) {
+ case ColumnType.Number:
+ return <input type="number" name="" id="" value={this._newFieldDefault ?? 0} onPointerDown={e => e.stopPropagation()} onChange={action(e => (this._newFieldDefault = e.target.value))} />;
+ case ColumnType.Boolean:
+ return <input type="checkbox" name="" id="" value={this._newFieldDefault ?? false} onPointerDown={e => e.stopPropagation()} onChange={action(e => (this._newFieldDefault = e.target.value))} />;
+ case ColumnType.String:
+ return <input type="text" name="" id="" value={this._newFieldDefault ?? ''} onPointerDown={e => e.stopPropagation()} onChange={action(e => (this._newFieldDefault = e.target.value))} />;
+ }
+ }
+
@computed get renderColumnMenu() {
return (
<div className="schema-column-menu">
<input type="text" value={this._menuValue} onKeyDown={this.onSearchKeyDown} onChange={this.updateKeySearch} onPointerDown={e => e.stopPropagation()} />
- {this._menuOptions.map(key => (
- <div
- onPointerDown={e => {
- e.stopPropagation();
- this.setKey(key);
- }}>
- {key}
+ {this._makeNewField ? (
+ <div className="schema-new-key-options">
+ <input
+ type="radio"
+ name="newFieldType"
+ id=""
+ checked={this._newFieldType == ColumnType.Number}
+ onChange={action(() => {
+ this._newFieldType = ColumnType.Number;
+ this._newFieldDefault = 0;
+ })}
+ />{' '}
+ math
+ <input
+ type="radio"
+ name="newFieldType"
+ id=""
+ checked={this._newFieldType == ColumnType.Boolean}
+ onChange={action(() => {
+ this._newFieldType = ColumnType.Boolean;
+ this._newFieldDefault = false;
+ })}
+ />{' '}
+ boolean
+ <input
+ type="radio"
+ name="newFieldType"
+ id=""
+ checked={this._newFieldType == ColumnType.String}
+ onChange={action(() => {
+ this._newFieldType = ColumnType.String;
+ this._newFieldDefault = '';
+ })}
+ />{' '}
+ string
+ {this.fieldDefaultInput}
+ <div
+ onPointerDown={action(e => {
+ this.setKey(this._menuValue, this._newFieldDefault);
+ this._makeNewField = false;
+ })}>
+ done
+ </div>
</div>
- ))}
- <div
- onPointerDown={e => {
- e.stopPropagation();
- this.setKey(this._menuValue);
- }}>
- + new field
- </div>
+ ) : (
+ <div className="schema-key-search">
+ <div
+ onPointerDown={action(e => {
+ e.stopPropagation();
+ this._makeNewField = true;
+ })}>
+ + new field
+ </div>
+ {this._menuOptions.map(key => (
+ <div
+ onPointerDown={e => {
+ e.stopPropagation();
+ this.setKey(key);
+ }}>
+ {key}
+ </div>
+ ))}
+ </div>
+ )}
</div>
);
}
@@ -64,11 +127,11 @@ export class SchemaColumnHeader extends React.Component<SchemaColumnHeaderProps>
};
@action
- setKey = (key: string) => {
+ setKey = (key: string, defaultVal?: any) => {
if (this._makeNewColumn) {
- this.props.addColumn(this.props.columnIndex, key);
+ this.props.addColumn(this.props.columnIndex, key, defaultVal);
} else {
- this.props.changeColumnKey(this.props.columnIndex, key);
+ this.props.changeColumnKey(this.props.columnIndex, key, defaultVal);
}
this.toggleColumnMenu();
};