xref: /openbmc/webui-vue/src/main.js (revision 7d6b44cb263da09e575c7cb28cab88c1eb339c7b)
1import { createApp } from 'vue';
2
3import App from './App.vue';
4import i18n from './i18n';
5
6import router from './router';
7
8//import { format } from 'date-fns-tz';
9
10//Do not change store import.
11//Exact match alias set to support
12//dotenv customizations.
13import store from './store';
14import eventBus from './eventBus';
15
16import './assets/styles/bmc/helpers/_index.scss';
17import './assets/styles/bootstrap/_helpers.scss';
18
19import 'bootstrap/dist/css/bootstrap.css';
20import 'bootstrap-vue/dist/bootstrap-vue.css';
21
22import {
23  BootstrapVue,
24  AlertPlugin,
25  BadgePlugin,
26  ButtonPlugin,
27  BVConfigPlugin,
28  CardPlugin,
29  CollapsePlugin,
30  DropdownPlugin,
31  FormPlugin,
32  FormCheckboxPlugin,
33  FormDatepickerPlugin,
34  FormFilePlugin,
35  FormGroupPlugin,
36  FormInputPlugin,
37  FormRadioPlugin,
38  FormSelectPlugin,
39  FormTagsPlugin,
40  InputGroupPlugin,
41  LayoutPlugin,
42  LinkPlugin,
43  ListGroupPlugin,
44  ModalPlugin,
45  NavbarPlugin,
46  NavPlugin,
47  PaginationPlugin,
48  ProgressPlugin,
49  TablePlugin,
50  TabsPlugin,
51  ToastPlugin,
52  TooltipPlugin,
53} from 'bootstrap-vue';
54
55// Filters
56/*
57Vue.filter('shortTimeZone', function (value) {
58  const longTZ = value
59    .toString()
60    .match(/\((.*)\)/)
61    .pop();
62  const regexNotUpper = /[*a-z ]/g;
63  return longTZ.replace(regexNotUpper, '');
64});
65
66Vue.filter('formatDate', function (value) {
67  const isUtcDisplay = store.getters['global/isUtcDisplay'];
68
69  if (value instanceof Date) {
70    if (isUtcDisplay) {
71      return value.toISOString().substring(0, 10);
72    }
73    const pattern = `yyyy-MM-dd`;
74    const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
75    return format(value, pattern, { timezone });
76  }
77});
78
79Vue.filter('formatTime', function (value) {
80  const isUtcDisplay = store.getters['global/isUtcDisplay'];
81
82  if (value instanceof Date) {
83    if (isUtcDisplay) {
84      let timeOptions = {
85        timeZone: 'UTC',
86        hourCycle: 'h23',
87      };
88      return `${value.toLocaleTimeString('default', timeOptions)} UTC`;
89    }
90    const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
91    const shortTz = Vue.filter('shortTimeZone')(value);
92    const pattern = `HH:mm:ss ('${shortTz}' O)`;
93    return format(value, pattern, { timezone }).replace('GMT', 'UTC');
94  }
95});
96*/
97
98const app = createApp({
99  router,
100  store,
101  render: (h) => h(App),
102});
103app.use(i18n);
104
105app.use(router);
106app.use(store);
107
108// Plugins
109app.use(BootstrapVue);
110app.use(AlertPlugin);
111app.use(BadgePlugin);
112app.use(ButtonPlugin);
113app.use(BVConfigPlugin, {
114  BFormText: { textVariant: 'secondary' },
115  BTable: {
116    headVariant: 'light',
117    footVariant: 'light',
118  },
119  BFormTags: {
120    tagVariant: 'primary',
121    addButtonVariant: 'link-primary',
122  },
123  BBadge: {
124    variant: 'primary',
125  },
126});
127
128app.use(CardPlugin);
129app.use(CollapsePlugin);
130app.use(DropdownPlugin);
131app.use(FormPlugin);
132app.use(FormCheckboxPlugin);
133app.use(FormDatepickerPlugin);
134app.use(FormFilePlugin);
135app.use(FormGroupPlugin);
136app.use(FormInputPlugin);
137app.use(FormRadioPlugin);
138app.use(FormSelectPlugin);
139app.use(FormTagsPlugin);
140app.use(InputGroupPlugin);
141app.use(LayoutPlugin);
142app.use(LayoutPlugin);
143app.use(LinkPlugin);
144app.use(ListGroupPlugin);
145app.use(ModalPlugin);
146app.use(NavbarPlugin);
147app.use(NavPlugin);
148app.use(PaginationPlugin);
149app.use(ProgressPlugin);
150app.use(TablePlugin);
151app.use(TabsPlugin);
152app.use(ToastPlugin);
153app.use(TooltipPlugin);
154
155app.mount('#app');
156app.prototype.$eventBus = eventBus;
157