import Vue from 'vue'; import App from './App.vue'; import router from './router'; //Do not change store import. //Exact match alias set to support //dotenv customizations. import store from './store'; import eventBus from './eventBus'; import { AlertPlugin, BadgePlugin, ButtonPlugin, BVConfigPlugin, CardPlugin, CollapsePlugin, DropdownPlugin, FormPlugin, FormCheckboxPlugin, FormDatepickerPlugin, FormFilePlugin, FormGroupPlugin, FormInputPlugin, FormRadioPlugin, FormSelectPlugin, FormTagsPlugin, InputGroupPlugin, LayoutPlugin, LinkPlugin, ListGroupPlugin, ModalPlugin, NavbarPlugin, NavPlugin, PaginationPlugin, ProgressPlugin, TablePlugin, TabsPlugin, ToastPlugin, TooltipPlugin, } from 'bootstrap-vue'; import Vuelidate from 'vuelidate'; import i18n from './i18n'; import { format } from 'date-fns-tz'; // Filters Vue.filter('shortTimeZone', function (value) { const longTZ = value .toString() .match(/\((.*)\)/) .pop(); const regexNotUpper = /[*a-z ]/g; return longTZ.replace(regexNotUpper, ''); }); Vue.filter('formatDate', function (value) { const isUtcDisplay = store.getters['global/isUtcDisplay']; if (value instanceof Date) { if (isUtcDisplay) { return value.toISOString().substring(0, 10); } const pattern = `yyyy-MM-dd`; const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; return format(value, pattern, { timezone }); } }); Vue.filter('formatTime', function (value) { const isUtcDisplay = store.getters['global/isUtcDisplay']; if (value instanceof Date) { if (isUtcDisplay) { let timeOptions = { timeZone: 'UTC', hourCycle: 'h23', }; return `${value.toLocaleTimeString('default', timeOptions)} UTC`; } const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; const shortTz = Vue.filter('shortTimeZone')(value); const pattern = `HH:mm:ss ('${shortTz}' O)`; return format(value, pattern, { timezone }).replace('GMT', 'UTC'); } }); // Plugins Vue.use(AlertPlugin); Vue.use(BadgePlugin); Vue.use(ButtonPlugin); Vue.use(BVConfigPlugin, { BFormText: { textVariant: 'secondary' }, BTable: { headVariant: 'light', footVariant: 'light', }, BFormTags: { tagVariant: 'primary', addButtonVariant: 'link-primary', }, BBadge: { variant: 'primary', }, }); Vue.use(CardPlugin); Vue.use(CollapsePlugin); Vue.use(DropdownPlugin); Vue.use(FormPlugin); Vue.use(FormCheckboxPlugin); Vue.use(FormDatepickerPlugin); Vue.use(FormFilePlugin); Vue.use(FormGroupPlugin); Vue.use(FormInputPlugin); Vue.use(FormRadioPlugin); Vue.use(FormSelectPlugin); Vue.use(FormTagsPlugin); Vue.use(InputGroupPlugin); Vue.use(LayoutPlugin); Vue.use(LayoutPlugin); Vue.use(LinkPlugin); Vue.use(ListGroupPlugin); Vue.use(ModalPlugin); Vue.use(NavbarPlugin); Vue.use(NavPlugin); Vue.use(PaginationPlugin); Vue.use(ProgressPlugin); Vue.use(TablePlugin); Vue.use(TabsPlugin); Vue.use(ToastPlugin); Vue.use(TooltipPlugin); Vue.use(Vuelidate); new Vue({ router, store, i18n, render: (h) => h(App), }).$mount('#app'); Vue.prototype.$eventBus = eventBus;