aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/ScriptingBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/ScriptingBox.tsx')
-rw-r--r--src/client/views/nodes/ScriptingBox.tsx231
1 files changed, 135 insertions, 96 deletions
diff --git a/src/client/views/nodes/ScriptingBox.tsx b/src/client/views/nodes/ScriptingBox.tsx
index f088fc5d2..86baa0f6f 100644
--- a/src/client/views/nodes/ScriptingBox.tsx
+++ b/src/client/views/nodes/ScriptingBox.tsx
@@ -1,4 +1,4 @@
-import { action, observable, computed, _allowStateChangesInsideComputed } from "mobx";
+import { action, observable, computed, _allowStateChangesInsideComputed, runInAction } from "mobx";
import { observer } from "mobx-react";
import * as React from "react";
import { documentSchema } from "../../../fields/documentSchemas";
@@ -16,6 +16,7 @@ import { DocumentIconContainer, DocumentIcon } from "./DocumentIcon";
import { List } from "../../../fields/List";
import { DragManager } from "../../util/DragManager";
import { Doc } from "../../../fields/Doc";
+import { Dropdown } from "prosemirror-menu";
const ScriptingSchema = createSchema({});
type ScriptingDocument = makeInterface<[typeof ScriptingSchema, typeof documentSchema]>;
@@ -34,10 +35,9 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
@observable private _errorMessage: string = "";
@observable private _applied: boolean = false;
- @observable private _paramsNames: any;
- @observable private _paramsTypes: any;
- @observable private _paramsValues: any;
-
+ @observable private _paramsNames: string[] = [];
+ @observable private _paramsTypes: string[] = [];
+ @observable private _paramsValues: any[] = [];
@computed get rawScript() { return StrCast(this.dataDoc[this.props.fieldKey + "-rawScript"], StrCast(this.layoutDoc[this.props.fieldKey + "-rawScript"])); }
@computed get compileParams() { return Cast(this.dataDoc[this.props.fieldKey + "-params"], listSpec("string"), Cast(this.layoutDoc[this.props.fieldKey + "-params"], listSpec("string"), [])); }
@@ -107,6 +107,7 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
this.props.Document.documentText = this.rawScript;
}
+
@action
onRun = () => {
const params = this.compileParams.reduce((o: ScriptParam, p: string) => {
@@ -167,16 +168,6 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
this.onError(result.errors);
}
this.props.Document.documentText = this.rawScript;
-
- this._paramsNames = [];
- this._paramsTypes = [];
-
- this.compileParams.forEach(element => {
- const param = element.split(":");
- this._paramsNames.push(param[0].trim());
- this._paramsTypes.push(param[1].trim());
- }
- );
}
@action
@@ -196,7 +187,7 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
const droppedDocs = de.complete.docDragData?.droppedDocuments;
if (droppedDocs?.length) {
const dropped = droppedDocs[0];
- this._paramsValues[index] = dropped;
+ this.props.Document[index] = dropped;
// you can't just bind a variable to a specific Doc. The Doc would have to be added to 'capturedVariables' field of the compile options, but I think it makes more sense to just be declaring this variable to be a Doc
}
}
@@ -208,6 +199,10 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
render() {
+ // var Dropdown = require('react-simple-dropdown');
+ // var DropdownTrigger = Dropdown.DropdownTrigger;
+ // var DropdownContent = Dropdown.DropdownContent;
+
const params = <EditableView
contents={""}
display={"block"}
@@ -219,18 +214,21 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
if (value !== "" && value !== " ") {
const parameter = value.split(":");
if (parameter[1] !== undefined) {
- if (parameter[1].trim() === "Doc" || parameter[1].trim() === "string") {
- //if (!!!this._paramsNames.includes(parameter[0].trim())) {
- this._errorMessage = "";
- this._paramNum++;
- const par = this.compileParams;
- this.compileParams = new List<string>(value.split(";").filter(s => s !== " "));
- this.compileParams.push.apply(this.compileParams, par);
- return true;
- // } else {
- // this._errorMessage = "this name has already been used";
- // return false;
- // }
+ if (parameter[1].trim() === "Doc" || parameter[1].trim() === "string" || parameter[1].split("|")) {
+ if (!!!this._paramsNames.includes(parameter[0].trim())) {
+ this._errorMessage = "";
+ this._paramNum++;
+ const par = this.compileParams;
+ this.compileParams = new List<string>(value.split(";").filter(s => s !== " "));
+ this.compileParams.push.apply(this.compileParams, par);
+ this._paramsNames.push(parameter[0].trim());
+ this._paramsTypes.push(parameter[1].trim());
+ this._paramsValues.push("j");
+ return true;
+ } else {
+ this._errorMessage = "this name has already been used";
+ return false;
+ }
} else {
this._errorMessage = "this type is not supported";
return false;
@@ -277,73 +275,114 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
</div>
);
- // const settingParams = this._paramsNames.map((parameter: string, i: number) =>
- // <div className="scriptingBox-pborder"
- // background-color="white"
-
- // onKeyPress={e => {
- // if (e.key === "Enter") {
- // this._overlayDisposer?.();
- // }
- // }
- // }
- // >
-
- // {this._paramsTypes[i] === "Doc" ? <div>
- // <div className="scriptingBox-wrapper">
-
- // <div className="scriptingBox-paramNames">
- // {parameter + ":" + this._paramsValues[i] + " = "}
- // </div>
-
- // <div className="scriptingBox-paramInputs"
- // onFocus={this.onFocus}>
- // <EditableView
- // contents={this._paramsValues[i]}
- // display={"block"}
- // maxHeight={72}
- // height={35}
- // fontSize={12}
- // GetValue={() => this._paramsValues[i]}
- // onDrop={(e: Event, de: DragManager.DropEvent) => this.onDrop(e, de, i)}
- // SetValue={value => {
- // this._paramsValues[i] = value;
- // return true;
- // }}
- // />
- // </div>
- // </div>
- // </div> : null}
-
- // {this._paramsTypes[i] === "string" ? <div>
- // <div className="scriptingBox-wrapper">
-
- // <div className="scriptingBox-paramNames">
- // {parameter + ":" + this._paramsValues[i] + " = "}
- // </div>
-
- // <div className="scriptingBox-paramInputs"
- // onFocus={this.onFocus}>
- // <EditableView
- // contents={this._paramsValues[i]}
- // display={"block"}
- // maxHeight={72}
- // height={35}
- // fontSize={12}
- // GetValue={() => this._paramsValues[i]}
- // SetValue={value => {
- // this._paramsValues[i] = value;
- // return true;
- // }}
- // />
- // </div>
- // </div>
- // </div> : null}
-
-
-
- // </div>
- // );
+ const settingParams = this._paramsNames.map((parameter: string, i: number) =>
+ <div className="scriptingBox-pborder"
+ background-color="white"
+
+ onKeyPress={e => {
+ if (e.key === "Enter") {
+ this._overlayDisposer?.();
+ }
+ }
+ }
+ >
+
+ {this._paramsTypes[i] === "Doc" ? <div>
+ <div className="scriptingBox-wrapper">
+
+ <div className="scriptingBox-paramNames">
+ {parameter + ":" + this._paramsTypes[i] + " = "}
+ </div>
+
+ <div className="scriptingBox-paramInputs"
+ onFocus={this.onFocus}>
+ <EditableView
+ contents={this.props.Document[parameter] ?? "undefined"}
+ display={"block"}
+ maxHeight={72}
+ height={35}
+ fontSize={14}
+ GetValue={() => StrCast(this.props.Document[parameter]) ?? "undefined"}
+ onDrop={(e: Event, de: DragManager.DropEvent) => this.onDrop(e, de, parameter)}
+ SetValue={value => {
+ runInAction(() => {
+ const script = CompileScript(
+ value, {
+ addReturn: true, typecheck: false,
+ transformer: DocumentIconContainer.getTransformer(),
+ params: { makeInterface: "any" }
+ });
+ if (!script.compiled) {
+ return false;
+ } else {
+ const results = script.run();
+ if (results.success) {
+
+ this.props.Document[parameter] = results.result;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ });
+ return true;
+ }}
+ />
+ </div>
+ </div>
+ </div> : null}
+
+ {this._paramsTypes[i] === "string" ? <div>
+ <div className="scriptingBox-wrapper">
+
+ <div className="scriptingBox-paramNames">
+ {parameter + ":" + this._paramsValues[i] + " = "}
+ </div>
+
+ <div className="scriptingBox-paramInputs"
+ onFocus={this.onFocus}>
+ <EditableView
+ contents={this.props.Document[parameter] ?? "undefined"}
+ display={"block"}
+ maxHeight={72}
+ height={35}
+ fontSize={12}
+ GetValue={() => StrCast(this.props.Document[parameter]) ?? "undefined"}
+ SetValue={value => {
+ runInAction(() => {
+ this.props.Document[parameter] = value;
+ return true;
+ });
+ return true;
+ }}
+ />
+ </div>
+ </div>
+ </div> : null}
+
+ {/* {this._paramsTypes[i].split("|")[1] ? <div>
+ <div className="scriptingBox-wrapper">
+
+ <div className="scriptingBox-paramNames">
+ {parameter + ":" + this._paramsValues[i] + " = "}
+ </div>
+
+ <div className="scriptingBox-paramInputs"
+ onFocus={this.onFocus}>
+ <Dropdown>
+ <DropdownTrigger>Profile</DropdownTrigger>
+ <DropdownContent>
+ <div>{this._paramsTypes[0]}</div>
+ <div>{this._paramsTypes[1]}</div>
+ </DropdownContent>
+ </Dropdown>
+ </div>
+ </div>
+ </div> : null} */}
+
+ </div>
+ );
const scriptingInputs = <div className="scriptingBox-inputDiv" style={{ height: "100%" }}
onPointerDown={e => this.props.isSelected(true) && e.stopPropagation()} >
@@ -386,7 +425,7 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps, Sc
onPointerDown={e => this.props.isSelected(true) && e.stopPropagation()} >
{this.compileParams.length > 0 ? <div className="scriptingBox-plist">
- {this.compileParams}
+ {settingParams}
</div> : null}
</div>;