186 lines
5.5 KiB
JavaScript
186 lines
5.5 KiB
JavaScript
import "@babel/polyfill";
|
|
import "@fortawesome/fontawesome-free/css/all.css";
|
|
import "typeface-roboto/index.css";
|
|
import Vue from "vue";
|
|
import "./plugins/vuetify";
|
|
import App from "./App.vue";
|
|
import router from "./router";
|
|
import store from "./store";
|
|
import "./registerServiceWorker";
|
|
import errorHandler from "./api/errorhandler";
|
|
import NProgress from "nprogress";
|
|
import "nprogress/nprogress.css";
|
|
import dayjs from "dayjs";
|
|
import UTC from "dayjs/plugin/utc"; // load on demand
|
|
dayjs.extend(UTC); // use plugin
|
|
import lodash from "./libs/lodash.min.js";
|
|
import VuetifyDialog from "vuetify-dialog";
|
|
|
|
//my libs
|
|
import gzeventbus from "./api/eventbus";
|
|
import gzmenu from "./api/gzmenu";
|
|
import gzdialog from "./api/gzdialog";
|
|
import gzutil from "./api/gzutil";
|
|
import locale from "./api/locale";
|
|
import gzapi from "./api/gzapi";
|
|
import gzreport from "./api/gzreport";
|
|
import gzform from "./api/gzform";
|
|
import gzformcustomtemplate from "./api/form-custom-template";
|
|
import roles from "./api/authorizationroles";
|
|
import gztype from "./api/ayatype";
|
|
import "@/assets/css/main.css";
|
|
|
|
//controls
|
|
import dateTimeControl from "./components/date-time-control.vue";
|
|
import tagPicker from "./components/tag-picker.vue";
|
|
import customFieldsControl from "./components/custom-fields-control.vue";
|
|
import errorhandler from "./api/errorhandler";
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// LIBS AND GLOBAL ITEMS
|
|
// (https://medium.com/js-dojo/use-any-javascript-library-with-vue-js-3f7e2a4974a8)
|
|
//
|
|
todo: Now that all is in Window.$gz Look for unnecessary local imports of global libs (search for import and see what comes up)
|
|
//then modify the inventory-widget-edit form initialization shit so that the stuff needed after form loads still happens but the before is moved to route before enter and that it's all called
|
|
//with two separate methods: One standard one for init form before it is loaded and one for init form stuff for after it's loaded. BeforeLoadInit, AfterLoadInit or something
|
|
window.$gz = {
|
|
locale: locale,
|
|
formCustomTemplate: gzformcustomtemplate,
|
|
type: gztype,
|
|
role: roles,
|
|
eventbus: gzeventbus,
|
|
menu: gzmenu,
|
|
dialog: gzdialog,
|
|
util: gzutil,
|
|
dayjs: dayjs,
|
|
_: lodash,
|
|
api: gzapi,
|
|
form: gzform,
|
|
report: gzreport,
|
|
errorHandler: errorhandler
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// ERROR HANDLING
|
|
//
|
|
|
|
//**************************************************************
|
|
//**************************************************************
|
|
//**************************************************************
|
|
//DEVELOPMENT MODE HANDLER
|
|
//THIS SHOULD BE FALSE IN RELEASE
|
|
errorHandler.developmentModeShowErrorsImmediately(true);
|
|
//**************************************************************
|
|
//**************************************************************
|
|
//**************************************************************
|
|
|
|
Vue.config.errorHandler = errorHandler.handleVueError;
|
|
window.onerror = errorHandler.handleGeneralError;
|
|
//warnings, only occur by default in debug mode not production
|
|
Vue.config.warnHandler = errorHandler.handleVueWarning;
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// AJAX LOADER INDICATOR
|
|
//
|
|
// Store a copy of the fetch function
|
|
var _oldFetch = fetch;
|
|
|
|
// Create our new version of the fetch function
|
|
window.fetch = function() {
|
|
// Create hooks
|
|
var fetchStart = new Event("fetchStart", {
|
|
view: document,
|
|
bubbles: true,
|
|
cancelable: false
|
|
});
|
|
var fetchEnd = new Event("fetchEnd", {
|
|
view: document,
|
|
bubbles: true,
|
|
cancelable: false
|
|
});
|
|
|
|
// Pass the supplied arguments to the real fetch function
|
|
var fetchCall = _oldFetch.apply(this, arguments);
|
|
|
|
// Trigger the fetchStart event
|
|
document.dispatchEvent(fetchStart);
|
|
|
|
fetchCall
|
|
.then(function() {
|
|
// Trigger the fetchEnd event
|
|
document.dispatchEvent(fetchEnd);
|
|
})
|
|
.catch(function() {
|
|
// Trigger the fetchEnd event
|
|
document.dispatchEvent(fetchEnd);
|
|
});
|
|
|
|
return fetchCall;
|
|
};
|
|
|
|
document.addEventListener("fetchStart", function() {
|
|
NProgress.start();
|
|
});
|
|
|
|
document.addEventListener("fetchEnd", function() {
|
|
NProgress.done();
|
|
});
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// FILTERS
|
|
//
|
|
Vue.filter("capitalize", function vueFilterCapitalize(value) {
|
|
if (!value) return "";
|
|
value = value.toString();
|
|
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
});
|
|
|
|
Vue.filter("shortdate", function vueFilterShortDate(value) {
|
|
if (!value) return "";
|
|
var dj = dayjs(value);
|
|
return dj.format("YYYY-MM-DD hh:mm:ss A");
|
|
});
|
|
|
|
Vue.filter("currency", function vueFilterCurrency(value) {
|
|
if (!value) return "";
|
|
return "$" + value;
|
|
});
|
|
|
|
Vue.filter("boolastext", function vueFilterBoolAsText(value) {
|
|
if (!value) return "";
|
|
return value ? "Yes" : "Nope";
|
|
});
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
//GZ COMPONENTS
|
|
//
|
|
Vue.component("gz-date-time-picker", dateTimeControl);
|
|
Vue.component("gz-tag-picker", tagPicker);
|
|
Vue.component("gz-custom-fields", customFieldsControl);
|
|
|
|
////////////////////////////////////////////////////////
|
|
//3rd party ui components
|
|
//
|
|
Vue.use(VuetifyDialog);
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
//DIRECTIVES
|
|
//
|
|
//Auto focus on forms
|
|
Vue.directive("focus", {
|
|
// When the bound element is inserted into the DOM...
|
|
inserted: function(el) {
|
|
// Focus the element
|
|
el.focus();
|
|
}
|
|
});
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// INSTANTIATE
|
|
//
|
|
new Vue({
|
|
router,
|
|
store,
|
|
render: h => h(App)
|
|
}).$mount("#app");
|