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 }}
+
onChange(df, newdoc.name)"
/>
+
+ {{ 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;
}