Skip to content

Commit

Permalink
makes editor view for json[] prettier
Browse files Browse the repository at this point in the history
  • Loading branch information
jzwood authored and Paxa committed Jun 3, 2021
1 parent 9f6e224 commit 2164c8f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 24 deletions.
15 changes: 13 additions & 2 deletions app/views/panes/content.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ var filterMatchers = (() => {
sql: (type, f, v) => {
return `${ef(f)} = ${numOrStr(type, v)}`;
},

},
not_eq: {
label: '≠',
Expand Down Expand Up @@ -508,14 +508,25 @@ class Content extends PaneBase {

//global.editValue = value;

const sanitizeUpdateValue = (dataType, stringValue) => {
if (['json[]', 'jsonb[]'].includes(dataType)) {
const bracket = (v) => "{" + v + "}"
const quote = (v) => "\"" + v + "\""
const jsonArray = JSON.parse(stringValue)
return bracket(jsonArray.map(json => quote(JSON.stringify(json).replace(/"/g, '\\"'))).toString())
}
return stringValue
}

var dialog = new Dialog.EditValue(this.handler, {
value: value,
fieldName: fieldName,
fieldType: fieldType,
onSave: async (value, isNull) => {
App.startLoading(`Updating value for ${fieldName}...`);
try {
var result = await this.handler.table.updateValue(ctid, fieldName, value, isNull);
const sanitizedValue = sanitizeUpdateValue(fieldType.data_type, value)
var result = await this.handler.table.updateValue(ctid, fieldName, sanitizedValue, isNull);
dialog.close();
if (result.rowCount == 0) {
$u.alertError("No records updated, probably table content was changed since you started editing.",
Expand Down
33 changes: 14 additions & 19 deletions views/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ pug_html = pug_html + "Cancel\u003C\u002Fbutton\u003E\n \u003C\u002Fp\u003E\n\u
typeof selected !== 'undefined' ? selected : undefined));
;} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};
exports["dialogs/column_form"].content = "- data = data || {}\n\nform\n p\n label Name\n input(name=\"name\", value = data.column_name type=\"text\")\n\n p\n label Type\n select(name=\"type\")\n option\n each types, group in groupedTypes\n optgroup(label = group)\n each type in types\n if type\n - selected = data.udt_name && data.udt_name == type.udt_name\n option(value = type.udt_name || type.name, title = type.description, selected = selected)= type.name\n p\n a(href=\"https://www.postgresql.org/docs/current/datatype.html\", class=\"external docs-link\") Postgres Data Types\n\n p\n label Default value\n input(name=\"default_value\", value = data.column_default type=\"text\")\n\n p\n label Max length\n input(name=\"max_length\", value = data.character_maximum_length type=\"text\")\n\n p\n label\n input(type=\"hidden\", name=\"allow_null\" value=\"0\")\n input(type=\"checkbox\" name=\"allow_null\" value=\"1\", checked = (data.is_nullable == 'YES'))\n = \"Allow null\"\n\n input.pseudo-hidden(type=\"submit\")\n p.buttons\n if action == \"edit\"\n button.ok Update Column\n else\n button.ok Add Column\n button.cancel Cancel\n";
exports["dialogs/edit_value"] = function template(pug, locals) {var pug_html = "", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {"views\u002Fdialogs\u002Fedit_value.jade":"form\n - valueIsNull = fieldType.is_nullable && value === null\n\n p\n - numericTypes = ['bigint', 'integer', 'real', 'smallint', 'double precision', 'numeric', 'decimal']\n if fieldType.data_type == \"integer\" || numericTypes.includes(fieldType.udt_name) || numericTypes.includes(fieldType.data_type)\n input.number-value(name=\"value\" type=\"number\" value=value disabled=valueIsNull)\n else if fieldType.udt_name == \"timestamp\" || fieldType.udt_name == \"timestamptz\" || fieldType.udt_name == \"date\" || fieldType.udt_name == \"timetz\"\n input.date-value(name=\"value\" type=\"text\" value=editDateFormat(value, fieldType.udt_name) disabled=valueIsNull)\n else if fieldType.udt_name == \"bool\"\n select(name=\"value\" disabled=valueIsNull)\n option(value=\"true\" selected=value) true\n option(value=\"false\" selected=(value === false) ) false\n else\n if fieldType.udt_name == \"json\" || fieldType.udt_name == \"jsonb\"\n - value = JSON.stringify(value, null, 2)\n else if [\"json[]\", \"jsonb[]\"].includes(fieldType.data_type) && Array.isArray(value)\n - value = \"{\" + value.map(val =\u003E \"\\\"\" + JSON.stringify(val).replace(\u002F\"\u002Fg, '\\\\\"') + \"\\\"\").toString() + \"}\"\n textarea(name=\"value\" placeholder=fieldType.column_default disabled=valueIsNull)= value\n\n if fieldType.is_nullable\n label\n = \"Null\"\n input.value-is-null(type=\"checkbox\" name=\"value_is_null\" value=\"true\" checked=valueIsNull )\n\n p.buttons\n button.ok Update\n button.cancel Cancel\n"};
exports["dialogs/edit_value"] = function template(pug, locals) {var pug_html = "", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {"views\u002Fdialogs\u002Fedit_value.jade":"form\n - valueIsNull = fieldType.is_nullable && value === null\n\n p\n - numericTypes = ['bigint', 'integer', 'real', 'smallint', 'double precision', 'numeric', 'decimal']\n if fieldType.data_type == \"integer\" || numericTypes.includes(fieldType.udt_name) || numericTypes.includes(fieldType.data_type)\n input.number-value(name=\"value\" type=\"number\" value=value disabled=valueIsNull)\n else if fieldType.udt_name == \"timestamp\" || fieldType.udt_name == \"timestamptz\" || fieldType.udt_name == \"date\" || fieldType.udt_name == \"timetz\"\n input.date-value(name=\"value\" type=\"text\" value=editDateFormat(value, fieldType.udt_name) disabled=valueIsNull)\n else if fieldType.udt_name == \"bool\"\n select(name=\"value\" disabled=valueIsNull)\n option(value=\"true\" selected=value) true\n option(value=\"false\" selected=(value === false) ) false\n else\n if [\"json\", \"jsonb\"].includes(fieldType.udt_name) || ([\"json[]\", \"jsonb[]\"].includes(fieldType.data_type) && Array.isArray(value))\n - value = JSON.stringify(value, null, 2)\n textarea(name=\"value\" placeholder=fieldType.column_default disabled=valueIsNull)= value\n\n if fieldType.is_nullable\n label\n = \"Null\"\n input.value-is-null(type=\"checkbox\" name=\"value_is_null\" value=\"true\" checked=valueIsNull )\n\n p.buttons\n button.ok Update\n button.cancel Cancel\n"};
;
var locals_for_with = (locals || {});

Expand Down Expand Up @@ -710,39 +710,34 @@ pug_html = pug_html + "false\u003C\u002Foption\u003E\n \u003C\u002Fselect\u00
}
else {
;pug_debug_line = 15;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
if (fieldType.udt_name == "json" || fieldType.udt_name == "jsonb") {
if (["json", "jsonb"].includes(fieldType.udt_name) || (["json[]", "jsonb[]"].includes(fieldType.data_type) && Array.isArray(value))) {
;pug_debug_line = 16;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
value = JSON.stringify(value, null, 2)
}
else
if (["json[]", "jsonb[]"].includes(fieldType.data_type) && Array.isArray(value)) {
;pug_debug_line = 18;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
value = "{" + value.map(val => "\"" + JSON.stringify(val).replace(/"/g, '\\"') + "\"").toString() + "}"
}
;pug_debug_line = 19;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 17;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Ctextarea" + (" name=\"value\""+pug.attr("placeholder", fieldType.column_default, true, false)+pug.attr("disabled", valueIsNull, true, false)) + "\u003E";
;pug_debug_line = 19;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 17;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + (pug.escape(null == (pug_interp = value) ? "" : pug_interp)) + "\u003C\u002Ftextarea\u003E";
}
pug_html = pug_html + "\n \u003C\u002Fp\u003E";
;pug_debug_line = 21;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 19;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
if (fieldType.is_nullable) {
;pug_debug_line = 22;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 20;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Clabel\u003E";
;pug_debug_line = 23;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 21;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + (pug.escape(null == (pug_interp = "Null") ? "" : pug_interp));
;pug_debug_line = 24;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 22;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Cinput" + (" class=\"value-is-null\""+" type=\"checkbox\" name=\"value_is_null\" value=\"true\""+pug.attr("checked", valueIsNull, true, false)) + "\u002F\u003E\n \u003C\u002Flabel\u003E";
}
;pug_debug_line = 26;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 24;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Cp class=\"buttons\"\u003E";
;pug_debug_line = 27;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 25;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Cbutton class=\"ok\"\u003E";
;pug_debug_line = 27;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 25;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "Update\u003C\u002Fbutton\u003E";
;pug_debug_line = 28;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 26;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "\n \u003Cbutton class=\"cancel\"\u003E";
;pug_debug_line = 28;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
;pug_debug_line = 26;pug_debug_filename = "views\u002Fdialogs\u002Fedit_value.jade";
pug_html = pug_html + "Cancel\u003C\u002Fbutton\u003E\n \u003C\u002Fp\u003E\n\u003C\u002Fform\u003E";
}.call(this, "Array" in locals_for_with ?
locals_for_with.Array :
Expand All @@ -760,7 +755,7 @@ pug_html = pug_html + "Cancel\u003C\u002Fbutton\u003E\n \u003C\u002Fp\u003E\n\u
locals_for_with.valueIsNull :
typeof valueIsNull !== 'undefined' ? valueIsNull : undefined));
;} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};
exports["dialogs/edit_value"].content = "form\n - valueIsNull = fieldType.is_nullable && value === null\n\n p\n - numericTypes = ['bigint', 'integer', 'real', 'smallint', 'double precision', 'numeric', 'decimal']\n if fieldType.data_type == \"integer\" || numericTypes.includes(fieldType.udt_name) || numericTypes.includes(fieldType.data_type)\n input.number-value(name=\"value\" type=\"number\" value=value disabled=valueIsNull)\n else if fieldType.udt_name == \"timestamp\" || fieldType.udt_name == \"timestamptz\" || fieldType.udt_name == \"date\" || fieldType.udt_name == \"timetz\"\n input.date-value(name=\"value\" type=\"text\" value=editDateFormat(value, fieldType.udt_name) disabled=valueIsNull)\n else if fieldType.udt_name == \"bool\"\n select(name=\"value\" disabled=valueIsNull)\n option(value=\"true\" selected=value) true\n option(value=\"false\" selected=(value === false) ) false\n else\n if fieldType.udt_name == \"json\" || fieldType.udt_name == \"jsonb\"\n - value = JSON.stringify(value, null, 2)\n else if [\"json[]\", \"jsonb[]\"].includes(fieldType.data_type) && Array.isArray(value)\n - value = \"{\" + value.map(val => \"\\\"\" + JSON.stringify(val).replace(/\"/g, '\\\\\"') + \"\\\"\").toString() + \"}\"\n textarea(name=\"value\" placeholder=fieldType.column_default disabled=valueIsNull)= value\n\n if fieldType.is_nullable\n label\n = \"Null\"\n input.value-is-null(type=\"checkbox\" name=\"value_is_null\" value=\"true\" checked=valueIsNull )\n\n p.buttons\n button.ok Update\n button.cancel Cancel\n";
exports["dialogs/edit_value"].content = "form\n - valueIsNull = fieldType.is_nullable && value === null\n\n p\n - numericTypes = ['bigint', 'integer', 'real', 'smallint', 'double precision', 'numeric', 'decimal']\n if fieldType.data_type == \"integer\" || numericTypes.includes(fieldType.udt_name) || numericTypes.includes(fieldType.data_type)\n input.number-value(name=\"value\" type=\"number\" value=value disabled=valueIsNull)\n else if fieldType.udt_name == \"timestamp\" || fieldType.udt_name == \"timestamptz\" || fieldType.udt_name == \"date\" || fieldType.udt_name == \"timetz\"\n input.date-value(name=\"value\" type=\"text\" value=editDateFormat(value, fieldType.udt_name) disabled=valueIsNull)\n else if fieldType.udt_name == \"bool\"\n select(name=\"value\" disabled=valueIsNull)\n option(value=\"true\" selected=value) true\n option(value=\"false\" selected=(value === false) ) false\n else\n if [\"json\", \"jsonb\"].includes(fieldType.udt_name) || ([\"json[]\", \"jsonb[]\"].includes(fieldType.data_type) && Array.isArray(value))\n - value = JSON.stringify(value, null, 2)\n textarea(name=\"value\" placeholder=fieldType.column_default disabled=valueIsNull)= value\n\n if fieldType.is_nullable\n label\n = \"Null\"\n input.value-is-null(type=\"checkbox\" name=\"value_is_null\" value=\"true\" checked=valueIsNull )\n\n p.buttons\n button.ok Update\n button.cancel Cancel\n";
exports["dialogs/export_file"] = function template(pug, locals) {var pug_html = "", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {"views\u002Fdialogs\u002Fexport_file.jade":"header\n = \"Exporting database '\"\n b= database\n = \"'\"\n\nform\n p.save-to-file\n = \"Save to file:\"\n input(type=\"text\" name=\"export_to_file\" readonly placeholder=\"click to select file...\")\n p\n label\n = \"Export structure\"\n input(type=\"checkbox\" name=\"export_structure\" checked)\n p\n label\n = \"Export data\"\n input(type=\"checkbox\" name=\"export_data\" checked)\n\n p\n label\n = \"Objects ownership\"\n input(type=\"checkbox\" name=\"objects_ownership\")\n\n code.result\n\n p.buttons\n button.ok Start\n button.cancel Cancel\n p.buttons.close-btn.is-hidden\n button.cancel Close"};
;
var locals_for_with = (locals || {});
Expand Down
4 changes: 1 addition & 3 deletions views/dialogs/edit_value.jade
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@ form
option(value="true" selected=value) true
option(value="false" selected=(value === false) ) false
else
if fieldType.udt_name == "json" || fieldType.udt_name == "jsonb"
if ["json", "jsonb"].includes(fieldType.udt_name) || (["json[]", "jsonb[]"].includes(fieldType.data_type) && Array.isArray(value))
- value = JSON.stringify(value, null, 2)
else if ["json[]", "jsonb[]"].includes(fieldType.data_type) && Array.isArray(value)
- value = "{" + value.map(val => "\"" + JSON.stringify(val).replace(/"/g, '\\"') + "\"").toString() + "}"
textarea(name="value" placeholder=fieldType.column_default disabled=valueIsNull)= value

if fieldType.is_nullable
Expand Down

0 comments on commit 2164c8f

Please sign in to comment.