1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import {
AlertPlugin,
BadgePlugin,
ButtonPlugin,
BVConfigPlugin,
CollapsePlugin,
DropdownPlugin,
FormPlugin,
FormCheckboxPlugin,
FormDatepickerPlugin,
FormFilePlugin,
FormGroupPlugin,
FormInputPlugin,
FormRadioPlugin,
FormSelectPlugin,
FormTagsPlugin,
InputGroupPlugin,
LayoutPlugin,
LinkPlugin,
ListGroupPlugin,
ModalPlugin,
NavbarPlugin,
NavPlugin,
PaginationPlugin,
ProgressPlugin,
TablePlugin,
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',
hour12: false
};
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(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(ToastPlugin);
Vue.use(TooltipPlugin);
Vue.use(Vuelidate);
new Vue({
router,
store,
i18n,
render: h => h(App)
}).$mount('#app');
|