All files / src/guards environmentsGuard.js

100% Statements 28/28
100% Branches 12/12
100% Functions 2/2
100% Lines 28/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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        2x   2x     20x       12x 1x 1x     11x 1x 1x 1x     10x 10x 3x 3x 2x   3x 3x     7x 7x 5x       5x     2x     2x 1x 1x       1x     1x 1x    
import { STORAGE_KEYS } from '../composables/useLocalStorage';
import { ENV_FQ } from '../store/types';
import createLogger from '../utils/logger';
 
const log = createLogger('environmentsGuard');
 
let storeInstance = null;
 
export function setStoreForEnvironmentsGuard(store) {
  storeInstance = store;
}
 
export function environmentsGuard(to, from, next) {
  if (typeof window === 'undefined') {
    next();
    return;
  }
 
  if (!storeInstance) {
    log.warn('Store not yet initialized, allowing navigation');
    next();
    return;
  }
 
  const envFromQuery = to.query.env;
  if (envFromQuery) {
    const currentEnv = storeInstance.getters[ENV_FQ.getters.selected];
    if (currentEnv !== envFromQuery) {
      storeInstance.dispatch(ENV_FQ.actions.select, envFromQuery);
    }
    next();
    return;
  }
 
  const envFromStore = storeInstance.getters[ENV_FQ.getters.selected];
  if (envFromStore) {
    next({
      path: to.path,
      query: { ...to.query, env: envFromStore },
    });
    return;
  }
 
  const envFromStorage = window.localStorage.getItem(
    STORAGE_KEYS.SELECTED_ENVIRONMENT,
  );
  if (envFromStorage) {
    storeInstance.dispatch(ENV_FQ.actions.select, envFromStorage);
    next({
      path: to.path,
      query: { ...to.query, env: envFromStorage },
    });
    return;
  }
 
  log.info('No environment selected, redirecting to /environments');
  next('/environments');
}