Introduce large textarea field type

This commit is contained in:
Shweelan Samson authored and Zaid Abdulla committed 2019-06-05 00:17:36 -07:00
1 parent 344ed3fdee
commit 1128e1ce11
4 files changed
+40 -8

No files matched your search

+8 -5
View File
@@ -4,13 +4,13 @@ import * as notifications from "./notifications";
import putFormComponent from "./put-form-component"; import putFormComponent from "./put-form-component";
import uiConfigComponent from "./ui-config-component"; import uiConfigComponent from "./ui-config-component";
import * as overlay from "./overlay"; import * as overlay from "./overlay";
import * as expressionParser from "../lib/common/expression-parser"; import { parse, stringify } from "../lib/common/expression-parser";
import { loadCodeMirror, loadYaml } from "./dynamic-loader"; import { loadCodeMirror, loadYaml } from "./dynamic-loader";
import { ClosureComponent, Component, Children } from "mithril"; import { ClosureComponent, Component, Children } from "mithril";
const attributes = [ const attributes = [
{ id: "_id", label: "Key" }, { id: "_id", label: "Key" },
{ id: "value", label: "Value" } { id: "value", label: "Value", type: "textarea" }
]; ];
interface ValidationErrors { interface ValidationErrors {
@@ -21,12 +21,15 @@ function putActionHandler(action, _object, isNew?): Promise<ValidationErrors> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const object = Object.assign({}, _object); const object = Object.assign({}, _object);
if (action === "save") { if (action === "save") {
const id = object["_id"]; let id = object["_id"] || "";
delete object["_id"]; delete object["_id"];
if (!id) return void resolve({ _id: "ID can not be empty" }); const regex = /^[0-9a-zA-Z_.-]+$/;
id = id.trim();
if (!id.match(regex)) return void resolve({ _id: "Invalid ID" });
try { try {
expressionParser.parse(object.value); object.value = stringify(parse(object.value || ""));
} catch (err) { } catch (err) {
return void resolve({ return void resolve({
value: "Config value must be valid expression" value: "Config value must be valid expression"
+2 -2
View File
@@ -36,14 +36,14 @@ const attributes = [
"virtualParameters" "virtualParameters"
] ]
}, },
{ id: "filter", label: "Filter" }, { id: "filter", label: "Filter", type: "textarea" },
{ {
id: "access", id: "access",
label: "Access", label: "Access",
type: "combo", type: "combo",
options: ["1: count", "2: read", "3: write"] options: ["1: count", "2: read", "3: write"]
}, },
{ id: "validate", label: "Validate" } { id: "validate", label: "Validate", type: "textarea" }
]; ];
const unpackSmartQuery = memoize(query => { const unpackSmartQuery = memoize(query => {
+1 -1
View File
@@ -22,7 +22,7 @@ const attributes = [
{ id: "weight", label: "Weight" }, { id: "weight", label: "Weight" },
{ id: "schedule", label: "Schedule" }, { id: "schedule", label: "Schedule" },
{ id: "events", label: "Events" }, { id: "events", label: "Events" },
{ id: "precondition", label: "Precondition" }, { id: "precondition", label: "Precondition", type: "textarea" },
{ id: "provision", label: "Provision", type: "combo" }, { id: "provision", label: "Provision", type: "combo" },
{ id: "provisionArgs", label: "Arguments" } { id: "provisionArgs", label: "Arguments" }
]; ];
+29
View File
@@ -87,6 +87,35 @@ function createField(current, attr, focus): Children {
e.redraw = false; e.redraw = false;
} }
}); });
} else if (attr.type === "textarea") {
return m("textarea", {
name: attr.id,
value: current.object[attr.id],
readonly: attr.id === "_id" && !current.isNew,
cols: attr.cols || 80,
rows: attr.rows || 4,
style: "resize: none;",
oncreate: focus
? _vnode => {
const dom = _vnode.dom as HTMLInputElement;
dom.focus();
dom.setSelectionRange(dom.value.length, dom.value.length);
}
: null,
oninput: e => {
current.object[attr.id] = e.target.value;
e.redraw = false;
},
onkeypress: e => {
e.redraw = false;
if (e.which === 13 && !e.shiftKey) {
const dom = e.target;
dom.form.querySelector("button[type=submit]").click();
return false;
}
return true;
}
});
} }
return m("input", { return m("input", {