luci-base: form.js: improve save error handling
Fixes: #3552 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
550a1b42e6
commit
2dfcca23e4
1 changed files with 21 additions and 10 deletions
|
@ -564,11 +564,18 @@ var CBIMap = CBIAbstractElement.extend(/** @lends LuCI.form.Map.prototype */ {
|
||||||
.then(this.data.save.bind(this.data))
|
.then(this.data.save.bind(this.data))
|
||||||
.then(this.load.bind(this))
|
.then(this.load.bind(this))
|
||||||
.catch(function(e) {
|
.catch(function(e) {
|
||||||
if (!silent)
|
if (!silent) {
|
||||||
alert('Cannot save due to invalid values');
|
ui.showModal(_('Save error'), [
|
||||||
|
E('p', {}, [ _('An error occurred while saving the form:') ]),
|
||||||
|
E('p', {}, [ E('em', { 'style': 'white-space:pre' }, [ e.message ]) ]),
|
||||||
|
E('div', { 'class': 'right' }, [
|
||||||
|
E('button', { 'click': ui.hideModal }, [ _('Dismiss') ])
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
return Promise.reject();
|
return Promise.reject(e);
|
||||||
}).finally(this.renderContents.bind(this));
|
}).then(this.renderContents.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1754,8 +1761,10 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
|
||||||
cval = this.cfgvalue(section_id),
|
cval = this.cfgvalue(section_id),
|
||||||
fval = active ? this.formvalue(section_id) : null;
|
fval = active ? this.formvalue(section_id) : null;
|
||||||
|
|
||||||
if (active && !this.isValid(section_id))
|
if (active && !this.isValid(section_id)) {
|
||||||
return Promise.reject();
|
var title = this.stripTags(this.title).trim();
|
||||||
|
return Promise.reject(new TypeError(_('Option "%s" contains an invalid input value.').format(title || this.option)));
|
||||||
|
}
|
||||||
|
|
||||||
if (fval != '' && fval != null) {
|
if (fval != '' && fval != null) {
|
||||||
if (this.forcewrite || !isEqual(cval, fval))
|
if (this.forcewrite || !isEqual(cval, fval))
|
||||||
|
@ -1766,8 +1775,8 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
|
||||||
return Promise.resolve(this.remove(section_id));
|
return Promise.resolve(this.remove(section_id));
|
||||||
}
|
}
|
||||||
else if (!isEqual(cval, fval)) {
|
else if (!isEqual(cval, fval)) {
|
||||||
console.log('This should have been catched by isValid()');
|
var title = this.stripTags(this.title).trim();
|
||||||
return Promise.reject();
|
return Promise.reject(new TypeError(_('Option "%s" must not be empty.').format(title || this.option)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3366,8 +3375,10 @@ var CBIFlagValue = CBIValue.extend(/** @lends LuCI.form.FlagValue.prototype */ {
|
||||||
if (this.isActive(section_id)) {
|
if (this.isActive(section_id)) {
|
||||||
var fval = this.formvalue(section_id);
|
var fval = this.formvalue(section_id);
|
||||||
|
|
||||||
if (!this.isValid(section_id))
|
if (!this.isValid(section_id)) {
|
||||||
return Promise.reject();
|
var title = this.stripTags(this.title).trim();
|
||||||
|
return Promise.reject(new TypeError(_('Option "%s" contains an invalid input value.').format(title || this.option)));
|
||||||
|
}
|
||||||
|
|
||||||
if (fval == this.default && (this.optional || this.rmempty))
|
if (fval == this.default && (this.optional || this.rmempty))
|
||||||
return Promise.resolve(this.remove(section_id));
|
return Promise.resolve(this.remove(section_id));
|
||||||
|
|
Loading…
Reference in a new issue