This commit is contained in:
@@ -2,9 +2,8 @@
|
||||
@@@@@@@@@@@@@@@ ROADMAP STAGE 4 - REPORTING / DASHBOARD / KPI
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
todo: exception handling around reports sucks
|
||||
|
||||
|
||||
todo: can it just scan for locale keys and prefetch them rather than user having to add up front?
|
||||
todo: a script error when just running a report from the report selector acts weird
|
||||
Test with dev mode off to confirm it won't show it in the UI
|
||||
Should show the error in the UI
|
||||
@@ -64,6 +63,8 @@ todo: consider feature to set server to always use a pre-set browser locale sett
|
||||
YAGNI / TTM?
|
||||
|
||||
|
||||
todo: make our logo smaller or move it when a biz logo is displaying on the login form
|
||||
|
||||
todo: hide swagger logo and branding in api explorer
|
||||
|
||||
todo: chunk-vendors has fa-brands in it which is fucking huge, what else is in there I don't need?
|
||||
|
||||
@@ -56,6 +56,60 @@ function dealWithError(msg, vm) {
|
||||
//why two error properties?
|
||||
window.$gz.form.setErrorBoxErrors(vm);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// DECODE ERROR TO TEXT
|
||||
// accept an unknown type of error variable
|
||||
// and return human readable text
|
||||
//
|
||||
function decodeError(e, vm) {
|
||||
//empty?
|
||||
if (e == null || e == "") {
|
||||
return "errorHandler::decodeError - Error is unknown / empty";
|
||||
}
|
||||
|
||||
//an Error object?
|
||||
if (e instanceof Error) {
|
||||
return `Error - Name:${e.name}, Message:${e.message}`;
|
||||
}
|
||||
|
||||
//API error object?
|
||||
if (e.error) {
|
||||
let err = e.error;
|
||||
// {
|
||||
// "code": "2002",
|
||||
// "message": "See server log for details",
|
||||
// "target": "Server internal error"
|
||||
// }
|
||||
let msg = "";
|
||||
if (err.code) {
|
||||
msg += err.code;
|
||||
msg += " - ";
|
||||
if (vm) {
|
||||
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";
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
//Javascript Fetch API Response object?
|
||||
if (e instanceof Response) {
|
||||
return `http error: ${err.statusText} - ${err.status} Url: ${err.url}`;
|
||||
}
|
||||
|
||||
//last resort
|
||||
return JSON.stringify(e);
|
||||
}
|
||||
export default {
|
||||
handleGeneralError(message, source, lineno, colno, error) {
|
||||
let msg = "General error: \n" + message;
|
||||
@@ -77,7 +131,7 @@ export default {
|
||||
dealWithError(msg);
|
||||
},
|
||||
handleVueError(err, vm, info) {
|
||||
let msg = "Vue error: \n" + err;
|
||||
let msg = "Vue error: \n" + decodeError(err, vm);
|
||||
if (err.fileName) {
|
||||
msg += "\nfilename: " + err.fileName;
|
||||
}
|
||||
@@ -90,65 +144,21 @@ export default {
|
||||
if (err.stack) {
|
||||
msg += "\nSTACK:\n " + err.stack;
|
||||
}
|
||||
dealWithError(msg);
|
||||
dealWithError(msg, vm);
|
||||
},
|
||||
handleVueWarning(wmsg, vm, trace) {
|
||||
let msg = "Vue warning: \n" + wmsg;
|
||||
// if (vm) {
|
||||
// msg += "\nvm present ";
|
||||
// }
|
||||
let msg = "Vue warning: \n" + decodeError(wmsg, vm);
|
||||
if (trace) {
|
||||
msg += "\ntrace: " + trace;
|
||||
}
|
||||
dealWithError(msg);
|
||||
dealWithError(msg, vm);
|
||||
},
|
||||
/////////////////////////////////////////////////
|
||||
// translate, log and return error
|
||||
//
|
||||
handleFormError(err, vm) {
|
||||
//called inside forms when things go unexpectedly wrong
|
||||
//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 if (err instanceof Response) {
|
||||
let msg =
|
||||
"http error: " +
|
||||
err.statusText +
|
||||
" - " +
|
||||
err.status +
|
||||
" Url: " +
|
||||
err.url;
|
||||
dealWithError(msg, vm);
|
||||
} else {
|
||||
//last resort
|
||||
let msg = JSON.stringify(err);
|
||||
dealWithError(msg, vm);
|
||||
}
|
||||
dealWithError(decodeError(err, vm), vm);
|
||||
}
|
||||
};
|
||||
/*
|
||||
|
||||
@@ -62,7 +62,7 @@ import chartBarHorizontalControl from "./components/chart-bar-horizontal-control
|
||||
//DEVELOPMENT MODE
|
||||
//THIS SHOULD BE FALSE IN RELEASE
|
||||
//************************************************************
|
||||
const DEV_MODE = true;
|
||||
const DEV_MODE = false;
|
||||
//************************************************************
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
@@ -105,6 +105,14 @@ window.$gz = {
|
||||
|
||||
Vue.config.errorHandler = errorHandler.handleVueError;
|
||||
window.onerror = errorHandler.handleGeneralError;
|
||||
|
||||
//unhandled rejection handler here
|
||||
window.addEventListener("unhandledrejection", function(event) {
|
||||
// the event object has two special properties:
|
||||
alert(event.promise); // [object Promise] - the promise that generated the error
|
||||
alert(event.reason); // Error: Whoops! - the unhandled error object
|
||||
});
|
||||
|
||||
//warnings, only occur by default in debug mode not production
|
||||
Vue.config.warnHandler = errorHandler.handleVueWarning;
|
||||
|
||||
|
||||
@@ -629,6 +629,8 @@ async function clickHandler(menuItem) {
|
||||
m.vm.duplicate();
|
||||
break;
|
||||
case "report":
|
||||
// throw "blah blah blah";
|
||||
// throw Error("test exception");
|
||||
if (m.id != null) {
|
||||
//last report selected is in m.id
|
||||
m.vm.$router.push({
|
||||
|
||||
Reference in New Issue
Block a user