mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-31 19:17:48 +00:00
https://github.com/user-attachments/assets/52ecf3f8-0329-4268-906e-d6102338f4af --------- Co-authored-by: Pranav <pranav@chatwoot.com> Co-authored-by: Pranav <pranavrajs@gmail.com>
114 lines
3.0 KiB
JavaScript
114 lines
3.0 KiB
JavaScript
import { createApp } from 'vue';
|
|
import { createI18n } from 'vue-i18n';
|
|
|
|
import axios from 'axios';
|
|
// Global Components
|
|
import hljsVuePlugin from '@highlightjs/vue-plugin';
|
|
|
|
import Multiselect from 'vue-multiselect';
|
|
import { plugin, defaultConfig } from '@formkit/vue';
|
|
import WootSwitch from 'components/ui/Switch.vue';
|
|
import WootWizard from 'components/ui/Wizard.vue';
|
|
import FloatingVue from 'floating-vue';
|
|
import WootUiKit from 'dashboard/components';
|
|
import App from 'dashboard/App.vue';
|
|
import i18nMessages from 'dashboard/i18n';
|
|
import createAxios from 'dashboard/helper/APIHelper';
|
|
|
|
import commonHelpers, { isJSONValid } from 'dashboard/helper/commons';
|
|
import { sync } from 'vuex-router-sync';
|
|
import router, { initalizeRouter } from 'dashboard/routes';
|
|
import store from 'dashboard/store';
|
|
import constants from 'dashboard/constants/globals';
|
|
import * as Sentry from '@sentry/vue';
|
|
import {
|
|
initializeAnalyticsEvents,
|
|
initializeChatwootEvents,
|
|
} from 'dashboard/helper/scriptHelpers.js';
|
|
import FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue';
|
|
import VueDOMPurifyHTML from 'vue-dompurify-html';
|
|
import { domPurifyConfig } from 'shared/helpers/HTMLSanitizer.js';
|
|
|
|
import { vResizeObserver } from '@vueuse/components';
|
|
import { directive as onClickaway } from 'vue3-click-away';
|
|
|
|
import 'floating-vue/dist/style.css';
|
|
|
|
const i18n = createI18n({
|
|
legacy: false, // https://github.com/intlify/vue-i18n/issues/1902
|
|
locale: 'en',
|
|
messages: i18nMessages,
|
|
});
|
|
|
|
sync(store, router);
|
|
|
|
const app = createApp(App);
|
|
app.use(i18n);
|
|
app.use(store);
|
|
app.use(router);
|
|
|
|
// [VITE] Disabled this, need to renable later
|
|
if (window.errorLoggingConfig) {
|
|
Sentry.init({
|
|
app,
|
|
dsn: window.errorLoggingConfig,
|
|
denyUrls: [
|
|
// Chrome extensions
|
|
/^chrome:\/\//i,
|
|
/chrome-extension:/i,
|
|
/extensions\//i,
|
|
|
|
// Locally saved copies
|
|
/file:\/\//i,
|
|
|
|
// Safari extensions.
|
|
/safari-web-extension:/i,
|
|
/safari-extension:/i,
|
|
],
|
|
integrations: [Sentry.browserTracingIntegration({ router })],
|
|
ignoreErrors: [
|
|
'ResizeObserver loop completed with undelivered notifications',
|
|
],
|
|
});
|
|
}
|
|
|
|
app.use(VueDOMPurifyHTML, domPurifyConfig);
|
|
app.use(WootUiKit);
|
|
app.use(
|
|
plugin,
|
|
defaultConfig({
|
|
rules: {
|
|
JSON: ({ value }) => isJSONValid(value),
|
|
},
|
|
})
|
|
);
|
|
app.use(FloatingVue, {
|
|
instantMove: true,
|
|
arrowOverflow: false,
|
|
disposeTimeout: 5000000,
|
|
});
|
|
app.use(hljsVuePlugin);
|
|
|
|
app.component('multiselect', Multiselect);
|
|
app.component('woot-switch', WootSwitch);
|
|
app.component('woot-wizard', WootWizard);
|
|
app.component('fluent-icon', FluentIcon);
|
|
|
|
app.directive('resize', vResizeObserver);
|
|
app.directive('on-clickaway', onClickaway);
|
|
|
|
// load common helpers into js
|
|
commonHelpers();
|
|
window.WootConstants = constants;
|
|
window.axios = createAxios(axios);
|
|
// [VITE] Disabled this we don't need it, we can use `useEmitter` directly
|
|
// app.prototype.$emitter = emitter;
|
|
|
|
initializeChatwootEvents();
|
|
initializeAnalyticsEvents();
|
|
initalizeRouter();
|
|
|
|
window.onload = () => {
|
|
app.mount('#app');
|
|
};
|