xref: /openbmc/webui-vue/src/main.js (revision de23ea23d88451a2fa2774ec72053772603c23ae)
17d6b44cbSEd Tanousimport { createApp } from 'vue';
27d6b44cbSEd Tanous
3fded0d11SDerick Montagueimport App from './App.vue';
47d6b44cbSEd Tanousimport i18n from './i18n';
57d6b44cbSEd Tanous
6fded0d11SDerick Montagueimport router from './router';
78263d85cSYoshie Muranaka
8*de23ea23SSurya Vimport { format } from 'date-fns-tz';
97d6b44cbSEd Tanous
108263d85cSYoshie Muranaka//Do not change store import.
118263d85cSYoshie Muranaka//Exact match alias set to support
128263d85cSYoshie Muranaka//dotenv customizations.
13fded0d11SDerick Montagueimport store from './store';
14fb6c6de9SKonstantinimport eventBus from './eventBus';
158263d85cSYoshie Muranaka
167d6b44cbSEd Tanousimport './assets/styles/bmc/helpers/_index.scss';
177d6b44cbSEd Tanousimport './assets/styles/bootstrap/_helpers.scss';
187d6b44cbSEd Tanous
197d6b44cbSEd Tanousimport 'bootstrap/dist/css/bootstrap.css';
207d6b44cbSEd Tanousimport 'bootstrap-vue/dist/bootstrap-vue.css';
217d6b44cbSEd Tanous
22a2988f40SDerick Montagueimport {
237d6b44cbSEd Tanous  BootstrapVue,
24676f2fcaSDerick Montague  AlertPlugin,
2597d86b33SDixsie Wolmers  BadgePlugin,
26a2988f40SDerick Montague  ButtonPlugin,
274b0fc1dbSYoshie Muranaka  BVConfigPlugin,
2892a0a4acSYoshie Muranaka  CardPlugin,
29a2988f40SDerick Montague  CollapsePlugin,
3082cca545SYoshie Muranaka  DropdownPlugin,
31e080a1a7SDerick Montague  FormPlugin,
3297d86b33SDixsie Wolmers  FormCheckboxPlugin,
3368bbba29SYoshie Muranaka  FormDatepickerPlugin,
3437393810SYoshie Muranaka  FormFilePlugin,
35e080a1a7SDerick Montague  FormGroupPlugin,
36e080a1a7SDerick Montague  FormInputPlugin,
37463a5706SYoshie Muranaka  FormRadioPlugin,
38463a5706SYoshie Muranaka  FormSelectPlugin,
39532a4b03SYoshie Muranaka  FormTagsPlugin,
40c4e38abfSYoshie Muranaka  InputGroupPlugin,
4135080acbSYoshie Muranaka  LayoutPlugin,
4242c19893SDerick Montague  LinkPlugin,
4397d86b33SDixsie Wolmers  ListGroupPlugin,
4442c19893SDerick Montague  ModalPlugin,
4542c19893SDerick Montague  NavbarPlugin,
4642c19893SDerick Montague  NavPlugin,
47f9832b0eSYoshie Muranaka  PaginationPlugin,
483be801aaSYoshie Muranaka  ProgressPlugin,
490fc91e79SYoshie Muranaka  TablePlugin,
50c4b8757eSDixsie Wolmers  TabsPlugin,
511be6b41eSYoshie Muranaka  ToastPlugin,
52602e98aaSDerick Montague  TooltipPlugin,
53fded0d11SDerick Montague} from 'bootstrap-vue';
54a2988f40SDerick Montague
557d6b44cbSEd Tanousconst app = createApp({
567d6b44cbSEd Tanous  router,
577d6b44cbSEd Tanous  store,
587d6b44cbSEd Tanous  render: (h) => h(App),
597d6b44cbSEd Tanous});
607d6b44cbSEd Tanousapp.use(i18n);
617d6b44cbSEd Tanous
627d6b44cbSEd Tanousapp.use(router);
637d6b44cbSEd Tanousapp.use(store);
6497f4187eSDixsie Wolmers
6597f4187eSDixsie Wolmers// Plugins
667d6b44cbSEd Tanousapp.use(BootstrapVue);
677d6b44cbSEd Tanousapp.use(AlertPlugin);
687d6b44cbSEd Tanousapp.use(BadgePlugin);
697d6b44cbSEd Tanousapp.use(ButtonPlugin);
707d6b44cbSEd Tanousapp.use(BVConfigPlugin, {
717f970a1fSDerick Montague  BFormText: { textVariant: 'secondary' },
724b0fc1dbSYoshie Muranaka  BTable: {
734b0fc1dbSYoshie Muranaka    headVariant: 'light',
74602e98aaSDerick Montague    footVariant: 'light',
75532a4b03SYoshie Muranaka  },
76532a4b03SYoshie Muranaka  BFormTags: {
77532a4b03SYoshie Muranaka    tagVariant: 'primary',
78602e98aaSDerick Montague    addButtonVariant: 'link-primary',
7982cca545SYoshie Muranaka  },
8082cca545SYoshie Muranaka  BBadge: {
81602e98aaSDerick Montague    variant: 'primary',
82602e98aaSDerick Montague  },
834b0fc1dbSYoshie Muranaka});
84a2988f40SDerick Montague
857d6b44cbSEd Tanousapp.use(CardPlugin);
867d6b44cbSEd Tanousapp.use(CollapsePlugin);
877d6b44cbSEd Tanousapp.use(DropdownPlugin);
887d6b44cbSEd Tanousapp.use(FormPlugin);
897d6b44cbSEd Tanousapp.use(FormCheckboxPlugin);
907d6b44cbSEd Tanousapp.use(FormDatepickerPlugin);
917d6b44cbSEd Tanousapp.use(FormFilePlugin);
927d6b44cbSEd Tanousapp.use(FormGroupPlugin);
937d6b44cbSEd Tanousapp.use(FormInputPlugin);
947d6b44cbSEd Tanousapp.use(FormRadioPlugin);
957d6b44cbSEd Tanousapp.use(FormSelectPlugin);
967d6b44cbSEd Tanousapp.use(FormTagsPlugin);
977d6b44cbSEd Tanousapp.use(InputGroupPlugin);
987d6b44cbSEd Tanousapp.use(LayoutPlugin);
997d6b44cbSEd Tanousapp.use(LayoutPlugin);
1007d6b44cbSEd Tanousapp.use(LinkPlugin);
1017d6b44cbSEd Tanousapp.use(ListGroupPlugin);
1027d6b44cbSEd Tanousapp.use(ModalPlugin);
1037d6b44cbSEd Tanousapp.use(NavbarPlugin);
1047d6b44cbSEd Tanousapp.use(NavPlugin);
1057d6b44cbSEd Tanousapp.use(PaginationPlugin);
1067d6b44cbSEd Tanousapp.use(ProgressPlugin);
1077d6b44cbSEd Tanousapp.use(TablePlugin);
1087d6b44cbSEd Tanousapp.use(TabsPlugin);
1097d6b44cbSEd Tanousapp.use(ToastPlugin);
1107d6b44cbSEd Tanousapp.use(TooltipPlugin);
1117d6b44cbSEd Tanous
1127d6b44cbSEd Tanousapp.mount('#app');
1137d6b44cbSEd Tanousapp.prototype.$eventBus = eventBus;
114*de23ea23SSurya V//Filters
115*de23ea23SSurya Vconst filter = {
116*de23ea23SSurya V  formatDate(value) {
117*de23ea23SSurya V    const isUtcDisplay = store.getters['global/isUtcDisplay'];
118*de23ea23SSurya V
119*de23ea23SSurya V    if (value instanceof Date) {
120*de23ea23SSurya V      if (isUtcDisplay) {
121*de23ea23SSurya V        return value.toISOString().substring(0, 10);
122*de23ea23SSurya V      }
123*de23ea23SSurya V      const pattern = `yyyy-MM-dd`;
124*de23ea23SSurya V      const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
125*de23ea23SSurya V      return format(value, pattern, { timezone });
126*de23ea23SSurya V    }
127*de23ea23SSurya V  },
128*de23ea23SSurya V  formatTime(value) {
129*de23ea23SSurya V    const isUtcDisplay = store.getters['global/isUtcDisplay'];
130*de23ea23SSurya V
131*de23ea23SSurya V    if (value instanceof Date) {
132*de23ea23SSurya V      if (isUtcDisplay) {
133*de23ea23SSurya V        let timeOptions = {
134*de23ea23SSurya V          timeZone: 'UTC',
135*de23ea23SSurya V          hourCycle: 'h23',
136*de23ea23SSurya V        };
137*de23ea23SSurya V        return `${value.toLocaleTimeString('default', timeOptions)} UTC`;
138*de23ea23SSurya V      }
139*de23ea23SSurya V      const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
140*de23ea23SSurya V      const shortTz = this.shortTimeZone(value);
141*de23ea23SSurya V      const pattern = `HH:mm:ss ('${shortTz}' O)`;
142*de23ea23SSurya V      return format(value, pattern, { timezone }).replace('GMT', 'UTC');
143*de23ea23SSurya V    }
144*de23ea23SSurya V  },
145*de23ea23SSurya V  shortTimeZone(value) {
146*de23ea23SSurya V    const longTZ = value
147*de23ea23SSurya V      .toString()
148*de23ea23SSurya V      .match(/\((.*)\)/)
149*de23ea23SSurya V      .pop();
150*de23ea23SSurya V    const regexNotUpper = /[*a-z ]/g;
151*de23ea23SSurya V    return longTZ.replace(regexNotUpper, '');
152*de23ea23SSurya V  },
153*de23ea23SSurya V};
154*de23ea23SSurya Vapp.config.globalProperties.$filters = filter;
155