import { StoreState } from 'app/common/store/store.types'; import moment from 'moment'; import { createSelector } from 'reselect'; import { CalendarEvent } from './calendar.types'; import { getLoadingStatus } from '../../../shared/modules/loading/getStatus'; const getCalendarStateSlice = (state: StoreState) => state.calendar; export const selectCalendarEvents = (state: StoreState) => getCalendarStateSlice(state).events; export const createCalendarIsLoadingSelector = (calendarFetchCollectionSelector) => (state) => getLoadingStatus(calendarFetchCollectionSelector)(state); export const selectSortedEvents = createSelector( selectCalendarEvents, calendarEvents => { const sortedEvents = calendarEvents.reduce(([past, upcoming]: CalendarEvent[][], event) => { return moment().isAfter(moment(event.date)) ? [[...past, event], upcoming] : [past, [...upcoming, event]]; }, [[], []]); const [past, upcoming] = sortedEvents; past.sort((a, b) => moment(b.date).isBefore(moment(a.date)) ? -1 : 1); upcoming.sort((a, b) => moment(b.date).isBefore(moment(a.date)) ? 1 : -1); return { upcomingEvents: upcoming, pastEvents: past, }; } );