diff --git a/src/components/TwoColumnForm.vue b/src/components/TwoColumnForm.vue index 3f2b8f12..83f6e375 100644 --- a/src/components/TwoColumnForm.vue +++ b/src/components/TwoColumnForm.vue @@ -46,8 +46,10 @@ :class="{ 'border-b': !noBorder }" :style="style" > -
- {{ df.label }} +
+
+ {{ df.label }} +
+
+ {{ errors[df.fieldname] }} +
@@ -76,7 +84,7 @@ import frappe from 'frappejs'; import FormControl from '@/components/Controls/FormControl'; import Button from '@/components/Button'; -import { handleErrorWithDialog } from '@/utils'; +import { getErrorMessage, handleErrorWithDialog } from '@/utils'; let TwoColumnForm = { name: 'TwoColumnForm', @@ -96,7 +104,8 @@ let TwoColumnForm = { inlineEditField: null, inlineEditDoc: null, inlineEditFields: null, - inlineEditDisplayField: null + inlineEditDisplayField: null, + errors: {} }; }, provide() { @@ -132,7 +141,13 @@ let TwoColumnForm = { return this.doc.rename(value); } - this.doc.set(df.fieldname, value).catch(this.handleError); + // reset error messages + this.$set(this.errors, df.fieldname, null); + + this.doc.set(df.fieldname, value).catch(e => { + // set error message for this field + this.$set(this.errors, df.fieldname, getErrorMessage(e, this.doc)); + }); if (this.autosave && this.doc._dirty && !this.doc.isNew()) { if (df.fieldtype === 'Table') { diff --git a/src/utils.js b/src/utils.js index d924429c..33180a30 100644 --- a/src/utils.js +++ b/src/utils.js @@ -184,7 +184,7 @@ export function openQuickEdit({ doctype, name, hideFields, defaults = {} }) { }); } -export function handleErrorWithDialog(e, doc) { +export function getErrorMessage(e, doc) { let errorMessage = e.message || _('An error occurred'); if (e.type === frappe.errors.LinkValidationError) { errorMessage = _('{0} {1} is linked with existing records.', [ @@ -194,11 +194,12 @@ export function handleErrorWithDialog(e, doc) { } else if (e.type === frappe.errors.DuplicateEntryError) { errorMessage = _('{0} {1} already exists.', [doc.doctype, doc.name]); } + return errorMessage; +} - showMessageDialog({ - message: errorMessage - }); - +export function handleErrorWithDialog(e, doc) { + let errorMessage = getErrorMessage(e, doc); + showMessageDialog({ message: errorMessage }); throw e; }