@@ -80,11 +80,21 @@ class="primary-button"
80
80
},
81
81
82
82
methods: {
83
- create (params , { resetForm }) {
83
+ create (params , { resetForm, setErrors }) {
84
84
this .isStoring = true ;
85
85
86
86
const formData = new FormData (this .$refs .webForm );
87
87
88
+ let inputNames = Array .from (formData .keys ());
89
+
90
+ inputNames = inputNames .reduce ((acc , name ) => {
91
+ const dotName = name .replace (/ \[ ([^ \] ] + )\] / g , ' .$1' );
92
+
93
+ acc[dotName] = name;
94
+
95
+ return acc;
96
+ }, {});
97
+
88
98
this .$axios
89
99
.post (' {{ route (' admin.settings.web_forms.form_store' , $webForm -> id ) } }' , formData, {
90
100
headers: {
@@ -105,7 +115,30 @@ class="primary-button"
105
115
return ;
106
116
}
107
117
108
- this .$emitter .emit (' add-flash' , { type: ' error' , message: error .response .data .message });
118
+ if (! error .response .data .errors ) {
119
+ this .$emitter .emit (' add-flash' , { type: ' error' , message: error .response .data .message });
120
+
121
+ return ;
122
+ }
123
+
124
+ const laravelErrors = error .response .data .errors || {};
125
+ const mappedErrors = {};
126
+
127
+ for (
128
+ const [dotKey , messages ]
129
+ of Object .entries (laravelErrors)
130
+ ) {
131
+ const inputName = inputNames[dotKey];
132
+
133
+ if (
134
+ inputName
135
+ && messages .length
136
+ ) {
137
+ mappedErrors[inputName] = messages[0 ];
138
+ }
139
+ }
140
+
141
+ setErrors (mappedErrors);
109
142
})
110
143
.finally (() => {
111
144
this .isStoring = false ;
0 commit comments