diff --git a/ayanova/src/api/errorhandler.js b/ayanova/src/api/errorhandler.js index 04f83ecd..878f7edf 100644 --- a/ayanova/src/api/errorhandler.js +++ b/ayanova/src/api/errorhandler.js @@ -105,8 +105,33 @@ export default { //returns the translated message in case the form wants to display it as well if (err instanceof Error && err.message) { dealWithError(err.message, vm); + } else if (err.error) { + //it's an api error return object, translate and display correctly + err = err.error; + // { + // "code": "2002", + // "message": "See server log for details", + // "target": "Server internal error" + // } + let msg = ""; + if (err.code) { + msg += err.code; + msg += " - "; + msg += vm.$ay.t("ErrorAPI" + err.code); + msg += "\n"; + } + if (err.target) { + msg += err.target; + msg += "\n"; + } + + if (err.message) { + msg += err.message; + msg += "\n"; + } + dealWithError(msg, vm); } else { - //TODO: this is pretty bad + //last resort let msg = JSON.stringify(err); dealWithError(msg, vm); } diff --git a/ayanova/src/api/gzapi.js b/ayanova/src/api/gzapi.js index a6a5faa2..5da7aa76 100644 --- a/ayanova/src/api/gzapi.js +++ b/ayanova/src/api/gzapi.js @@ -457,16 +457,22 @@ export default { let that = this; //determine if this is a new or existing record let fetchOptions = undefined; - if (data.concurrency) { - //has concurrency token, so this is a PUT as it's updating an existing record - fetchOptions = that.fetchPutOptions(data); - } else { - //Does not have a concurrency token so this is a POST as it's posting a new record without a concurrency token - fetchOptions = that.fetchPostOptions(data); - //ensure the route doesn't end in /0 which will happen if it's a new record since the edit forms just send the url here with the ID regardless - if (window.$gz._.endsWith(route, "/0")) { - route = route.slice(0, -2); + if (data) { + //data can be blank in a post that triggers an action + if (data.concurrency) { + //has concurrency token, so this is a PUT as it's updating an existing record + fetchOptions = that.fetchPutOptions(data); + } else { + //Does not have a concurrency token so this is a POST as it's posting a new record without a concurrency token + fetchOptions = that.fetchPostOptions(data); + //ensure the route doesn't end in /0 which will happen if it's a new record since the edit forms just send the url here with the ID regardless + if (window.$gz._.endsWith(route, "/0")) { + route = route.slice(0, -2); + } } + } else { + //no data, so this is likely just a trigger post + fetchOptions = that.fetchPostOptions(data); } let r = await fetch(that.APIUrl(route), fetchOptions); that.statusEx(r); diff --git a/ayanova/src/views/adm-license.vue b/ayanova/src/views/adm-license.vue index 12848a3a..e1d4941d 100644 --- a/ayanova/src/views/adm-license.vue +++ b/ayanova/src/views/adm-license.vue @@ -285,7 +285,9 @@ export default { try { //call fetch key on server let r = await window.$gz.api.upsertEx("license"); - + if (r.error) { + throw r; + } window.$gz.eventBus.$emit("notify-info", r.data); } catch (error) { window.$gz.errorHandler.handleFormError(error, vm); @@ -317,8 +319,8 @@ function clickHandler(menuItem) { let m = window.$gz.menu.parseMenuItem(menuItem); if (m.owner == FORM_KEY && !m.disabled) { switch (m.key) { - case "save": - m.vm.submit(); + case "fetch": + m.vm.fetchKey(); break; default: