LCOV - code coverage report
Current view: top level - www/src - App.vue.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 19 21 90.5 %
Date: 2024-07-30 12:54:47 Functions: 5 5 100.0 %

          Line data    Source code
       1             : // @ts-check
       2             : 
       3             : import { TITLE, VERSION } from './Consts';
       4             : import Vue from 'vue';
       5             : import { forEach, get, isArray, isEmpty, isNil, pullAllBy } from 'lodash';
       6             : import { mapState } from 'vuex';
       7             : 
       8             : import { install } from "./utilities";
       9             : 
      10           1 : install(Vue);
      11             : /**
      12             :  * @typedef {V.Instance<typeof component>} Instance
      13             :  */
      14           1 : const component = Vue.extend({
      15             :   name: 'App',
      16           5 :   data() { return { TITLE, VERSION, showRoutes: false }; },
      17             :   computed: {
      18             :     .../** @type { page(): string|null } */mapState([ "page" ]),
      19             :     .../** @type {{ camConfig(): object }} */mapState(
      20             :       "cameras", { camConfig: "cameras" })
      21             :   },
      22             :   /** @this {Instance} */
      23             :   mounted() {
      24             :     // sets dark theme
      25             :     /** @type {string} */
      26           5 :     const theme = get(this.$route.query, 'theme');
      27           5 :     if (!isNil(theme)) {
      28           0 :       this.$store.commit('ui/update', { darkMode: theme === 'dark' });
      29           0 :       this.$store.dispatch('ui/applyTheme');
      30             :     }
      31             : 
      32             :     // retrieve camera configuration
      33           5 :     this.$store.commit('update', { loading: true });
      34           5 :     this.$store.sources.cam.connect()
      35             :     .then(() => {
      36             :       // update routes
      37           5 :       if (this.$router && !isEmpty(this.camConfig)) {
      38             :         /** @type {{ name: string, path: string }[]} */
      39           5 :         const pages = [];
      40           5 :         forEach(this.camConfig, (cams, page) => {
      41          10 :           if (!isEmpty(cams)) {
      42          10 :             pages.push({ name: page, path: `/${page}` });
      43             :           }
      44             :         });
      45             : 
      46           5 :         if (!isEmpty(pages) &&
      47             :           isArray(get(this.$router, [ 'options', 'routes' ]))) {
      48             :           // remove any duplicate
      49           5 :           pullAllBy(this.$router.options.routes, pages, 'name');
      50             : 
      51           5 :           this.$router.options.routes.push(...pages);
      52             : 
      53             :           // navigate to the first page
      54           5 :           if (this.$router.currentRoute?.path === '/') {
      55           1 :             this.$router.push(pages[0]?.path || '/');
      56             :           }
      57             : 
      58           5 :           this.showRoutes = true;
      59             :         }
      60             :       }
      61             :     })
      62             :     .finally(() => {
      63           5 :       this.$store.commit('update', { loading: false });
      64             :     });
      65             :   }
      66             : });
      67             : 
      68             : export default component;

Generated by: LCOV version 1.16