109 lines
2.8 KiB
JavaScript
109 lines
2.8 KiB
JavaScript
import App from './App.vue';
|
|
import { createApp } from 'vue';
|
|
import registerPlugins from './plugins';
|
|
import registerRouter from './router/register';
|
|
import registerControllers from './controllers/register';
|
|
import registerGlobalComponents from './components/global/register';
|
|
import * as Sentry from '@sentry/vue';
|
|
import posthog from 'posthog-js';
|
|
import { BrowserTracing } from '@sentry/tracing';
|
|
import router from './router/index';
|
|
import dayjs from 'dayjs';
|
|
import { notify } from '@/utils/toast';
|
|
import {
|
|
setConfig,
|
|
jingrowRequest,
|
|
pageMetaPlugin,
|
|
resourcesPlugin
|
|
} from 'jingrow-ui';
|
|
|
|
const app = createApp(App);
|
|
let request = options => {
|
|
let _options = options || {};
|
|
_options.headers = options.headers || {};
|
|
let currentTeam = localStorage.getItem('current_team');
|
|
if (currentTeam) {
|
|
_options.headers['X-Jcloud-Team'] = currentTeam;
|
|
}
|
|
return jingrowRequest(_options);
|
|
};
|
|
setConfig('resourceFetcher', request);
|
|
app.use(resourcesPlugin);
|
|
app.use(pageMetaPlugin);
|
|
|
|
registerPlugins(app);
|
|
registerGlobalComponents(app);
|
|
const { auth, account } = registerControllers(app);
|
|
registerRouter(app, auth, account);
|
|
|
|
// sentry
|
|
if (window.jcloud_frontend_sentry_dsn?.includes('https://')) {
|
|
Sentry.init({
|
|
app,
|
|
dsn: window.jcloud_frontend_sentry_dsn,
|
|
integrations: [
|
|
new BrowserTracing({
|
|
routingInstrumentation: Sentry.vueRouterInstrumentation(router),
|
|
tracingOrigins: ['localhost', /^\//]
|
|
})
|
|
],
|
|
beforeSend(event, hint) {
|
|
const ignoreErrors = [
|
|
/dynamically imported module/,
|
|
/NetworkError when attempting to fetch resource/
|
|
];
|
|
const error = hint.originalException;
|
|
|
|
if (error?.message && ignoreErrors.some(re => re.test(error.message)))
|
|
return null;
|
|
|
|
return event;
|
|
},
|
|
logErrors: true
|
|
});
|
|
}
|
|
|
|
// posthog
|
|
if (window.jcloud_frontend_posthog_host?.includes('https://')) {
|
|
try {
|
|
posthog.init(window.jcloud_frontend_posthog_project_id, {
|
|
api_host: window.jcloud_frontend_posthog_host,
|
|
autocapture: false,
|
|
capture_pageview: false,
|
|
capture_pageleave: false,
|
|
advanced_disable_decide: true
|
|
});
|
|
window.posthog = posthog;
|
|
} catch (e) {
|
|
console.trace('Failed to initialize telemetry', e);
|
|
}
|
|
}
|
|
|
|
if (import.meta.env.DEV) {
|
|
request({
|
|
url: '/api/method/jcloud.www.dashboard.get_context_for_dev'
|
|
}).then(values => {
|
|
for (let key in values) {
|
|
window[key] = values[key];
|
|
}
|
|
app.mount('#app');
|
|
});
|
|
} else {
|
|
app.mount('#app');
|
|
}
|
|
|
|
app.config.globalProperties.$dayjs = dayjs;
|
|
app.config.errorHandler = (error, instance) => {
|
|
if (instance) {
|
|
let errorMessage = error.message;
|
|
if (error.messages) errorMessage = error.messages.join('\n');
|
|
notify({
|
|
icon: 'x',
|
|
title: 'An error occurred',
|
|
message: errorMessage,
|
|
color: 'red'
|
|
});
|
|
}
|
|
console.error(error);
|
|
};
|