department-of-veterans-affairs/vets-website

View on GitHub
src/platform/site-wide/mega-menu/actions/index.js

Summary

Maintainability
A
0 mins
Test Coverage
export const UPDATE_CURRENT_SECTION = 'UPDATE_CURRENT_SECTION';
export const TOGGLE_PANEL_OPEN = 'TOGGLE_PANEL_OPEN';
export const TOGGLE_DISPLAY_HIDDEN = 'TOGGLE_DISPLAY_HIDDEN';

const tabletMediaQuery = window.matchMedia('(min-width: 768px)');

export const togglePanel = megaMenu => ({
  type: TOGGLE_PANEL_OPEN,
  megaMenu,
});

export const toggleDisplayHidden = display => ({
  type: TOGGLE_DISPLAY_HIDDEN,
  display,
});

export function updateCurrentSection(currentSection) {
  return {
    type: UPDATE_CURRENT_SECTION,
    currentSection,
  };
}

export const toggleMobileDisplayHidden = hidden => (dispatch, getState) => {
  const state = getState();

  if (tabletMediaQuery.matches) {
    dispatch(toggleDisplayHidden({}));
  } else if (hidden) {
    dispatch(toggleDisplayHidden({ hidden: true }));
  } else if (
    !Object.prototype.hasOwnProperty.call(state.megaMenu.display, 'hidden')
  ) {
    dispatch(toggleDisplayHidden({ hidden: true }));
  } else {
    dispatch(toggleDisplayHidden({}));
  }
};

export function togglePanelOpen(currentDropdown) {
  return (dispatch, getState) => {
    const state = getState();

    const shouldUpdateDropdown =
      !state.megaMenu.currentDropdown ||
      state.megaMenu.currentDropdown !== currentDropdown;

    if (shouldUpdateDropdown) {
      dispatch(
        togglePanel({
          currentDropdown,
        }),
      );
    } else {
      dispatch(
        togglePanel({
          currentDropdown: '',
        }),
      );
    }
  };
}