Improve handling of nulls and default values in the data editor. Fixes #2257

This commit is contained in:
Surinder Kumar
2017-05-12 10:53:57 +01:00
committed by Dave Page
parent 05787fdba9
commit 4f9628ed43
9 changed files with 163 additions and 25 deletions
@@ -110,7 +110,12 @@
// When text editor opens
this.loadValue = function (item) {
if (item[args.column.pos] === "") {
var col = args.column;
if (_.isUndefined(item[args.column.pos]) && col.has_default_val) {
$input.val("");
}
else if (item[args.column.pos] === "") {
$input.val("''");
}
else {
@@ -145,7 +150,14 @@
};
this.isValueChanged = function () {
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
// Use _.isNull(value) for comparison for null instead of
// defaultValue == null, because it returns true for undefined value.
if ($input.val() == "" && _.isUndefined(defaultValue)) {
return false;
} else {
return (!($input.val() == "" && _.isNull(defaultValue))) &&
($input.val() != defaultValue);
}
};
this.validate = function () {
@@ -253,7 +265,7 @@
this.loadValue = function (item) {
var data = defaultValue = item[args.column.pos];
if (typeof data === "object" && !Array.isArray(data)) {
if (data && typeof data === "object" && !Array.isArray(data)) {
data = JSON.stringify(data);
} else if (Array.isArray(data)) {
var temp = [];
@@ -282,7 +294,11 @@
};
this.isValueChanged = function () {
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
if ($input.val() == "" && _.isUndefined(defaultValue)) {
return false;
} else {
return (!($input.val() == "" && _.isNull(defaultValue))) && ($input.val() != defaultValue);
}
};
this.validate = function () {
@@ -498,6 +514,12 @@
};
this.validate = function () {
if (args.column.validator) {
var validationResults = args.column.validator(this.serializeValue());
if (!validationResults.valid) {
return validationResults;
}
}
return {
valid: true,
msg: null
@@ -837,7 +859,14 @@
};
this.isValueChanged = function () {
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
if ($input.val() == "" && _.isUndefined(defaultValue)) {
return false;
} else if ($input.val() == "" && defaultValue == "") {
return true;
} else {
return (!($input.val() == "" && _.isNull(defaultValue ))) &&
($input.val() != defaultValue);
}
};
this.validate = function () {
@@ -19,8 +19,15 @@
});
function JsonFormatter(row, cell, value, columnDef, dataContext) {
if (value == null || value === "") {
return "";
// If column has default value, set placeholder
if (_.isUndefined(value) && columnDef.has_default_val) {
return "<span class='pull-left disabled_cell'>[default]</span>";
}
else if (
(_.isUndefined(value) && columnDef.not_null) ||
(_.isUndefined(value) || value === null)
) {
return "<span class='pull-left disabled_cell'>[null]</span>";
} else {
// Stringify only if it's json object
if (typeof value === "object" && !Array.isArray(value)) {
@@ -42,11 +49,15 @@
}
function NumbersFormatter(row, cell, value, columnDef, dataContext) {
if (_.isUndefined(value) || value === null) {
return "<span class='pull-right'>[null]</span>";
// If column has default value, set placeholder
if (_.isUndefined(value) && columnDef.has_default_val) {
return "<span class='pull-right disabled_cell'>[default]</span>";
}
else if (value === "") {
return '';
else if (
(_.isUndefined(value) || value === null || value === "") ||
(_.isUndefined(value) && columnDef.not_null)
) {
return "<span class='pull-right disabled_cell'>[null]</span>";
}
else {
return "<span style='float:right'>" + _.escape(value) + "</span>";
@@ -57,17 +68,30 @@
/* Checkbox has 3 states
* 1) checked=true
* 2) unchecked=false
* 3) indeterminate=null/''
* 3) indeterminate=null
*/
if (value == null || value === "") {
return "<span class='pull-left'>[null]</span>";
if (_.isUndefined(value) && columnDef.has_default_val) {
return "<span class='pull-left disabled_cell'>[default]</span>";
}
else if (
(_.isUndefined(value) && columnDef.not_null) ||
(value == null || value === "")
) {
return "<span class='pull-left disabled_cell'>[null]</span>";
}
return value ? "true" : "false";
}
function TextFormatter(row, cell, value, columnDef, dataContext) {
if (_.isUndefined(value) || value === null) {
return "<span class='pull-left'>[null]</span>";
// If column has default value, set placeholder
if (_.isUndefined(value) && columnDef.has_default_val) {
return "<span class='pull-left disabled_cell'>[default]</span>";
}
else if (
(_.isUndefined(value) && columnDef.not_null) ||
(_.isUndefined(value) || _.isNull(value))
) {
return "<span class='pull-left disabled_cell'>[null]</span>";
}
else {
return _.escape(value);