aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/documents/Documents.ts1
-rw-r--r--src/client/views/EditableView.tsx2
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.tsx11
-rw-r--r--src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx1
-rw-r--r--src/client/views/collections/collectionSchema/SchemaRowBox.tsx15
-rw-r--r--src/client/views/collections/collectionSchema/SchemaTableCell.tsx33
6 files changed, 37 insertions, 26 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 4908d2952..dabbf9591 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -228,6 +228,7 @@ export class DocumentOptions {
_lockedPosition?: BOOLt = new BoolInfo("lock the x,y coordinates of the document so that it can't be dragged");
_lockedTransform?: BOOLt = new BoolInfo('lock the freeform_panx,freeform_pany and scale parameters of the document so that it be panned/zoomed');
_childrenSharedWithSchema?: BOOLt = new BoolInfo("whether this document's children are displayed in its parent schema view", false);
+ _lockedSchemaEditing?: BOOLt = new BoolInfo("", false);
dataViz_title?: string;
dataViz_line?: string;
diff --git a/src/client/views/EditableView.tsx b/src/client/views/EditableView.tsx
index 1652e6cd7..c05812e1a 100644
--- a/src/client/views/EditableView.tsx
+++ b/src/client/views/EditableView.tsx
@@ -57,6 +57,7 @@ export interface EditableProps {
wrap?: string; // nowrap, pre-wrap, etc
schemaHeader?: boolean;
+ onClick?: () => void;
updateAlt?: (newAlt: string) => void;
updateSearch?: (value: string) => void;
}
@@ -187,6 +188,7 @@ export class EditableView extends ObservableReactComponent<EditableProps> {
@action
onClick = (e?: React.MouseEvent) => {
+ this._props.onClick && this._props.onClick();
if (this._props.editing !== false) {
e?.nativeEvent.stopPropagation();
if (this._ref.current && this._props.showMenuOnLoad) {
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
index 7302a7c22..48287c3ec 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
@@ -208,7 +208,7 @@ export class CollectionSchemaView extends CollectionSubView() {
removeDoc = (doc: Doc) => {
this.removeDocument(doc);
- this._docs = this._docs.filter(d => d !== doc);
+ this._docs = this._docs.filter(d => d !== doc)
}
rowIndex = (doc: Doc) => this.displayedDocs.docs.indexOf(doc);
@@ -739,13 +739,8 @@ export class CollectionSchemaView extends CollectionSubView() {
};
setCellValues = (key: string, value: string) => {
- const selectedDocs: Doc[] = [];
- this.childDocs.forEach(doc => {
- const isSelected = this._selectedCells && !(this._selectedCells?.filter(d => d === doc).length === 0);
- isSelected && selectedDocs.push(doc);
- });
- if (selectedDocs.length === 1) this.childDocs.forEach(doc => Doc.SetField(doc, key, value)); // if only one cell selected, fill all
- else selectedDocs.forEach(doc => Doc.SetField(doc, key, value)); // else only fill selected cells
+ if (this._selectedCells.length === 1) this.childDocs.forEach(doc => !doc._lockedSchemaEditing && Doc.SetField(doc, key, value)); // if only one cell selected, fill all
+ else this._selectedCells.forEach(doc => !doc._lockedSchemaEditing && Doc.SetField(doc, key, value)); // else only fill selected cells
return true;
};
diff --git a/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx b/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
index dbbf76ea7..3719840ff 100644
--- a/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaColumnHeader.tsx
@@ -126,6 +126,7 @@ export class SchemaColumnHeader extends ObservableReactComponent<SchemaColumnHea
oneLine={true}
allowCRs={false}
contents={undefined}
+ onClick={this.openKeyDropdown}
fieldContents={fieldProps}
editing={undefined}
placeholder={'Add key'}
diff --git a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
index cdd47f644..58964d9fb 100644
--- a/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaRowBox.tsx
@@ -64,9 +64,9 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
icon: 'minus',
});
ContextMenu.Instance.addItem({
- description: this.Document._lockedPosition ? 'Unlock doc interactions' : 'Lock doc interactions',
- event: () => Doc.toggleLockedPosition(this.Document),
- icon: this.Document._lockedPosition ? 'lock-open' : 'lock',
+ description: this.Document._lockedSchemaEditing ? 'Unlock field editing' : 'Lock field editing',
+ event: () => this.Document._lockedSchemaEditing = !this.Document._lockedSchemaEditing,
+ icon: this.Document._lockedSchemaEditing ? 'lock-open' : 'lock',
});
ContextMenu.Instance.addItem({
description: 'Open preview',
@@ -87,6 +87,14 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
ContextMenu.Instance.displayMenu(x, y, undefined, false);
}
+ get menuBackgroundColor(){
+ if (this.Document._lockedSchemaEditing){
+ if (this._props.isSelected()) return '#B0D1E7'
+ else return '#F5F5F5'
+ }
+ return ''
+ }
+
cleanupField = (field: string) => this.schemaView.cleanupComputedField(field)
setCursorIndex = (mouseY: number) => this.schemaView?.setRelCursorIndex(mouseY);
selectedCol = () => this.schemaView._selectedCol;
@@ -111,6 +119,7 @@ export class SchemaRowBox extends ViewBoxBaseComponent<SchemaRowBoxProps>() {
style={{
width: CollectionSchemaView._rowMenuWidth,
pointerEvents: !this._props.isContentActive() ? 'none' : undefined,
+ backgroundColor: this.menuBackgroundColor
}}>
<IconButton
tooltip="Open actions menu"
diff --git a/src/client/views/collections/collectionSchema/SchemaTableCell.tsx b/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
index dc060218c..49ec70b74 100644
--- a/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
@@ -76,8 +76,20 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
makeObservable(this);
}
- get defaultKey(){
- return SchemaColumnHeader.isDefaultField(this._props.fieldKey)
+ get isDefault(){
+ return SchemaColumnHeader.isDefaultField(this._props.fieldKey);
+ }
+
+ get lockedInteraction(){
+ return (this.isDefault || this._props.Document._lockedSchemaEditing);
+ }
+
+ get backgroundColor(){
+ if (this.lockedInteraction){
+ if (this._props.rowSelected()) return '#B0D1E7'
+ else return '#F5F5F5'
+ }
+ return ''
}
static addFieldDoc = (docs: Doc | Doc[] /* , where: OpenWhere */) => {
@@ -89,9 +101,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
let protoCount = 0;
let doc: Doc | undefined = Document;
while (doc) {
- if (Object.keys(doc).includes(fieldKey.replace(/^_/, ''))) {
- break;
- }
+ if (Object.keys(doc).includes(fieldKey.replace(/^_/, ''))) break;
protoCount++;
doc = DocCast(doc.proto);
}
@@ -130,6 +140,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
@computed get defaultCellContent() {
const { color, textDecoration, fieldProps, pointerEvents } = SchemaTableCell.renderProps(this._props);
+
return (
<div
className="schemacell-edit-wrapper"
@@ -137,7 +148,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
color,
textDecoration,
width: '100%',
- pointerEvents,
+ pointerEvents: this.lockedInteraction ? 'none' : pointerEvents,
}}>
<EditableView
ref={r => selectedCell(this._props) && this._props.autoFocus && r?.setIsFocused(true)}
@@ -190,14 +201,6 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
}
}
- get backgroundColor(){
- if (this.defaultKey){
- if (this._props.rowSelected()) return '#B0D1E7'
- else return '#F5F5F5'
- }
- return ''
- }
-
render() {
return (
<div
@@ -218,7 +221,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
width: this._props.columnWidth() || undefined,
border: selectedCell(this._props) ? `solid 2px ${Colors.MEDIUM_BLUE}` : undefined,
backgroundColor: this.backgroundColor}}>
- {this.defaultKey ? '' : this.content}
+ {this.isDefault ? '' : this.content}
</div>
);
}