Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
selectors.ts 2.96 KiB
import { createSelector } from '@ngrx/store';
import { GlobalState } from '@app/core/state';
import { DegreePlannerState } from './state';
import { TermCode } from '@app/degree-planner/shared/term-codes/termcode';
import { YearCode } from '@app/degree-planner/shared/term-codes/yearcode';
import { YearMapping, Year } from '@app/core/models/year';
import { UserPreferences } from '@app/core/models/user-preferences';

export const getDegreePlannerState = ({ degreePlanner }: GlobalState) => {
  return degreePlanner;
};

export const hasLoadedDegreePlan = createSelector(
  getDegreePlannerState,
  state => state.visibleDegreePlan !== undefined,
);

export const selectVisibleDegreePlan = createSelector(
  (state: GlobalState) => state.degreePlanner,
  state => state.visibleDegreePlan,
);

export const selectAllDegreePlans = createSelector(
  (state: GlobalState) => state.degreePlanner,
  state => state.allDegreePlans,
);

export const getSavedForLaterCourses = createSelector(
  (state: GlobalState) => state.degreePlanner,
  state => state.savedForLaterCourses,
);

export const selectAllVisibleYears = createSelector(
  (state: GlobalState) => state.degreePlanner,
  state => state.visibleYears,
);

export const selectYearExpandedState = createSelector(
  (state: GlobalState, params: { yearCode: YearCode }): Year | undefined => {
    return state.degreePlanner.visibleYears[params.yearCode.toString()];
  },
  year => {
    if (year) {
      return year.isExpanded;
    } else {
      return false;
    }
  },
);

export const selectVisibleTerm = createSelector(
  (state: GlobalState) => state.degreePlanner.visibleYears,
  (years: YearMapping, params: { termCode: TermCode }) => {
    const { yearCode, termName } = params.termCode;
    const year = years[yearCode.toString()] as Year | undefined;
    if (year) {
      return year[termName];
    } else {
      return undefined;
    }
  },
);

export const selectGradeVisibility = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => state.showGrades,
);

export const isCourseSearchOpen = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => {
    return state.search.visible;
  },
);

export const getSelectedSearchTerm = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => {
    return state.search.selectedTerm;
  },
);

export const getActiveSelectedSearchTerm = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => {
    if (state.search.selectedTerm && state.search.selectedTerm.isActive()) {
      return state.search.selectedTerm;
    } else {
      return undefined;
    }
  },
);

export const getAlerts = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => {
    return state.alerts;
  },
);

export const isLoadingPlan = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => state.isLoadingPlan,
);

export const isSidenavOpen = createSelector(
  getDegreePlannerState,
  (state: DegreePlannerState) => state.isSidenavOpen,
);