mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Support setting text fields to empty strings or NULL in the data editor grid. Fixes #1790
This commit is contained in:
parent
c17e201a92
commit
54ba1fbe59
@ -15,7 +15,8 @@
|
|||||||
"ReadOnlyText": ReadOnlyTextEditor,
|
"ReadOnlyText": ReadOnlyTextEditor,
|
||||||
"ReadOnlyCheckbox": ReadOnlyCheckboxEditor,
|
"ReadOnlyCheckbox": ReadOnlyCheckboxEditor,
|
||||||
"ReadOnlypgText": ReadOnlypgTextEditor,
|
"ReadOnlypgText": ReadOnlypgTextEditor,
|
||||||
"ReadOnlyJsonText": ReadOnlyJsonTextEditor
|
"ReadOnlyJsonText": ReadOnlyJsonTextEditor,
|
||||||
|
"CustomNumber": CustomNumberEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -106,13 +107,36 @@
|
|||||||
$input.focus();
|
$input.focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// When text editor opens
|
||||||
this.loadValue = function (item) {
|
this.loadValue = function (item) {
|
||||||
|
if (item[args.column.field] === "") {
|
||||||
|
$input.val("''");
|
||||||
|
}
|
||||||
|
else {
|
||||||
$input.val(defaultValue = item[args.column.field]);
|
$input.val(defaultValue = item[args.column.field]);
|
||||||
$input.select();
|
$input.select();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.serializeValue = function () {
|
this.serializeValue = function () {
|
||||||
return $input.val();
|
var value = $input.val();
|
||||||
|
// If empty return null
|
||||||
|
if (value === "") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// single/double quotes represent an empty string
|
||||||
|
// If found return ''
|
||||||
|
else if (value === "''" || value === '""') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// If found string literals - \"\", \'\', \\'\\' and \\\\'\\\\'
|
||||||
|
// then remove slashes.
|
||||||
|
value = value.replace("\\'\\'", "''");
|
||||||
|
value = value.replace('\\"\\"', '""');
|
||||||
|
value = value = value.replace(/\\\\/g, '\\');
|
||||||
|
return value;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.applyValue = function (item, state) {
|
this.applyValue = function (item, state) {
|
||||||
@ -246,6 +270,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.serializeValue = function () {
|
this.serializeValue = function () {
|
||||||
|
if ($input.val() === "") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return $input.val();
|
return $input.val();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -637,4 +664,76 @@
|
|||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CustomNumberEditor(args) {
|
||||||
|
var $input;
|
||||||
|
var defaultValue;
|
||||||
|
var scope = this;
|
||||||
|
|
||||||
|
this.init = function () {
|
||||||
|
$input = $("<INPUT type=text class='editor-text' />");
|
||||||
|
|
||||||
|
$input.bind("keydown.nav", function (e) {
|
||||||
|
if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$input.appendTo(args.container);
|
||||||
|
$input.focus().select();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.destroy = function () {
|
||||||
|
$input.remove();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.focus = function () {
|
||||||
|
$input.focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.loadValue = function (item) {
|
||||||
|
defaultValue = item[args.column.field];
|
||||||
|
$input.val(defaultValue);
|
||||||
|
$input[0].defaultValue = defaultValue;
|
||||||
|
$input.select();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.serializeValue = function () {
|
||||||
|
if ($input.val() === "") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return parseInt($input.val(), 10) || 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.applyValue = function (item, state) {
|
||||||
|
item[args.column.field] = state;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.isValueChanged = function () {
|
||||||
|
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.validate = function () {
|
||||||
|
if (isNaN($input.val())) {
|
||||||
|
return {
|
||||||
|
valid: false,
|
||||||
|
msg: "Please enter a valid integer"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.column.validator) {
|
||||||
|
var validationResults = args.column.validator($input.val());
|
||||||
|
if (!validationResults.valid) {
|
||||||
|
return validationResults;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
valid: true,
|
||||||
|
msg: null
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
"Formatters": {
|
"Formatters": {
|
||||||
"JsonString": JsonFormatter,
|
"JsonString": JsonFormatter,
|
||||||
"Numbers": NumbersFormatter,
|
"Numbers": NumbersFormatter,
|
||||||
"Checkmark": CheckmarkFormatter
|
"Checkmark": CheckmarkFormatter,
|
||||||
|
"Text": TextFormatter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -41,9 +42,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function NumbersFormatter(row, cell, value, columnDef, dataContext) {
|
function NumbersFormatter(row, cell, value, columnDef, dataContext) {
|
||||||
if (value == null || value === "") {
|
if (_.isUndefined(value) || value === null) {
|
||||||
return "";
|
return "<span class='pull-right'>[null]</span>";
|
||||||
} else {
|
}
|
||||||
|
else if (value === "") {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else {
|
||||||
return "<span style='float:right'>" + value + "</span>";
|
return "<span style='float:right'>" + value + "</span>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,4 +60,13 @@
|
|||||||
return value ? "true" : "false";
|
return value ? "true" : "false";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function TextFormatter(row, cell, value, columnDef, dataContext) {
|
||||||
|
if (_.isUndefined(value) || value === null) {
|
||||||
|
return "<span class='pull-left'>[null]</span>";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
@ -630,7 +630,7 @@ define(
|
|||||||
: Slick.Editors.ReadOnlyJsonText;
|
: Slick.Editors.ReadOnlyJsonText;
|
||||||
options['formatter'] = Slick.Formatters.JsonString;
|
options['formatter'] = Slick.Formatters.JsonString;
|
||||||
} else if(c.cell == 'number') {
|
} else if(c.cell == 'number') {
|
||||||
options['editor'] = is_editable ? Slick.Editors.Text
|
options['editor'] = is_editable ? Slick.Editors.CustomNumber
|
||||||
: Slick.Editors.ReadOnlyText;
|
: Slick.Editors.ReadOnlyText;
|
||||||
options['formatter'] = Slick.Formatters.Numbers;
|
options['formatter'] = Slick.Formatters.Numbers;
|
||||||
} else if(c.cell == 'boolean') {
|
} else if(c.cell == 'boolean') {
|
||||||
@ -640,6 +640,7 @@ define(
|
|||||||
} else {
|
} else {
|
||||||
options['editor'] = is_editable ? Slick.Editors.pgText
|
options['editor'] = is_editable ? Slick.Editors.pgText
|
||||||
: Slick.Editors.ReadOnlypgText;
|
: Slick.Editors.ReadOnlypgText;
|
||||||
|
options['formatter'] = Slick.Formatters.Text;
|
||||||
}
|
}
|
||||||
|
|
||||||
grid_columns.push(options)
|
grid_columns.push(options)
|
||||||
|
Loading…
Reference in New Issue
Block a user