Newer
Older
import { createSelector } from '@ngrx/store';
import { PlannedTerm } from '@app/core/models/planned-term';
import { DegreePlannerState } from './state';
import { parseTermCode } from '../shared/utils';
import { YearMapping, Year } from '@app/core/models/year';
export const getDegreePlannerState = ({ degreePlanner }: GlobalState) => {
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,
export const getSavedForLaterCourses = createSelector(
(state: GlobalState) => state.degreePlanner,
state => state.savedForLaterCourses,
export const getSubjects = createSelector(
(state: GlobalState) => state.degreePlanner,
state => state.subjects,
export const getActiveTerms = createSelector(
(state: GlobalState) => state.degreePlanner,
state => state.activeTermCodes,

Scott Berg
committed
export const selectAllVisibleYears = createSelector(
(state: GlobalState) => state.degreePlanner,
state => state.visibleYears,
export const selectYearExpandedState = createSelector(
(state: GlobalState, params: { yearCode: string }): Year | undefined => {
return state.degreePlanner.visibleYears[params.yearCode];
},
year => {
if (year) {
return year.isExpanded;
} else {
return false;
}
export const selectVisibleTerm = createSelector(
(state: GlobalState) => state.degreePlanner.visibleYears,
(years: YearMapping, params: { termCode: string }) => {
const { yearCode, termName } = parseTermCode(params.termCode);
const year = years[yearCode] as Year | undefined;
if (year) {
return year[termName];
} else {
return undefined;
}
export const getSubjectDescriptions = createSelector(
getDegreePlannerState,
(state: DegreePlannerState) => {
return state.subjectDescriptions;
},
);
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) => {
const { selectedTerm } = state.search;
return state.activeTermCodes.includes(selectedTerm) ? selectedTerm : '0000';
export const isCurrentTerm = (termCode: string) =>
createSelector(
getDegreePlannerState,
(state: DegreePlannerState) => {
const currentTermCode = state.activeTermCodes[0];
return termCode === currentTermCode;
},
);

Scott Berg
committed
export const isPastTerm = (termCode: string) =>
createSelector(
getDegreePlannerState,
(state: DegreePlannerState) => {

Scott Berg
committed
const currentTermCode = state.activeTermCodes[0];
return termCode < currentTermCode;
export const isLoadingPlan = createSelector(
getDegreePlannerState,
(state: DegreePlannerState) => state.isLoadingPlan,
);

Scott Berg
committed
const getTermForCode = (termCode: string, terms: PlannedTerm[]) => {
const foundTerm = terms.find(term => term.termCode === termCode);
if (foundTerm !== undefined) {
return foundTerm;
}
return { termCode, courses: [] };