Skip to content

Commit

Permalink
filters work
Browse files Browse the repository at this point in the history
  • Loading branch information
imrashb committed Jan 16, 2024
1 parent 0138043 commit 4423605
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 30 deletions.
29 changes: 8 additions & 21 deletions src/features/generateur/generateur.slice.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
/* eslint-disable no-param-reassign */
import { createSlice } from '@reduxjs/toolkit';
import { FILTRES_PLANIFICATION } from '../../pages/GenerateurHoraire/generateurHoraire.constants';
import { filterGroupes, filterPlanification } from '../../pages/GenerateurHoraire/generateurHoraire.filters';
import { COMBINAISONS_SORTS } from '../../pages/GenerateurHoraire/generateurHoraire.sorting';
import { GENERATEUR_LIST_VIEW } from './generateur.constants';
import { reduceCombinaisonsInfoToGroupesOnly } from '../../utils/Groupes.utils';
Expand All @@ -19,25 +18,13 @@ const initialState = {
planification: FILTRES_PLANIFICATION,
groupes: [],
},
combinaisons: undefined,
rawCombinaisons: undefined,
combinaisonsInfo: undefined,
};

const GENERATEUR_SLICE = 'generateur';

const pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);

const pipeAndFilterCombinaisons = (state) => {
state.combinaisons = state.rawCombinaisons
? pipe(
COMBINAISONS_SORTS[state.sorting],
filterPlanification(state.filters.planification),
filterGroupes(state.filters.groupes),
)(state.rawCombinaisons) : state.rawCombinaisons;
};

const getCombinaisonsInfo = (combinaisons) => {
export const getCombinaisonsInfo = (combinaisons) => {
const combinaisonsInfo = combinaisons?.reduce((prev, comb) => {
comb?.groupes?.forEach((groupe) => {
const sigle = groupe?.cours?.sigle;
Expand Down Expand Up @@ -91,20 +78,21 @@ const generateurSlice = createSlice({
},
setSorting: (state, action) => {
state.sorting = action.payload;
pipeAndFilterCombinaisons(state);
},
setCoursObligatoires: (state, action) => {
state.coursObligatoires = action.payload;
},
setFilters: (state, action) => {
state.filters = action.payload;
pipeAndFilterCombinaisons(state);
},
setCombinaisons: (state, action) => {
setRawCombinaisons: (state, action) => {
state.rawCombinaisons = action.payload;
state.combinaisonsInfo = getCombinaisonsInfo(action.payload);
state.filters.groupes = reduceCombinaisonsInfoToGroupesOnly(state.combinaisonsInfo);
pipeAndFilterCombinaisons(state);
},
updateCombinaisonsInfo: (state, action) => {
state.combinaisonsInfo = getCombinaisonsInfo(action.payload);
state.filters.groupes = reduceCombinaisonsInfoToGroupesOnly(state.combinaisonsInfo);
},
},
});
Expand All @@ -120,8 +108,9 @@ export const {
setNombreCours,
setSorting,
setCoursObligatoires,
setCombinaisons,
setFilters,
setRawCombinaisons,
updateCombinaisonsInfo,
} = generateurSlice.actions;

export const selectProgramme = (state) => state.generateur.programme;
Expand All @@ -144,8 +133,6 @@ export const selectFilterPlanification = (state) => state.generateur.filters.pla

export const selectFilterGroupes = (state) => state.generateur.filters.groupes;

export const selectCombinaisons = (state) => state.generateur.combinaisons;

export const selectRawCombinaisons = (state) => state.generateur.rawCombinaisons;

export const selectCombinaisonsInfo = (state) => state.generateur.combinaisonsInfo;
Expand Down
37 changes: 37 additions & 0 deletions src/hooks/useFilteredCombinaisons.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { useEffect, useMemo } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { filterGroupes, filterPlanification } from '../pages/GenerateurHoraire/generateurHoraire.filters';
import { COMBINAISONS_SORTS } from '../pages/GenerateurHoraire/generateurHoraire.sorting';
import {
selectRawCombinaisons, updateCombinaisonsInfo,
} from '../features/generateur/generateur.slice';

const pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);
const pipeAndFilterCombinaisons = (combinaisons, sorting, filters) => (combinaisons
? pipe(
COMBINAISONS_SORTS[sorting],
filterPlanification(filters.planification),
filterGroupes(filters.groupes),
)(combinaisons) : combinaisons);

const useFilteredCombinaisons = (combinaisons) => {
const rawCombinaisons = useSelector(selectRawCombinaisons);
const combinaisonsToFilter = combinaisons || rawCombinaisons;
const filters = useSelector((state) => state.generateur.filters);
const sorting = useSelector((state) => state.generateur.sorting);
const dispatch = useDispatch();

useEffect(() => {
if (rawCombinaisons) {
dispatch(updateCombinaisonsInfo(rawCombinaisons));
}
}, [rawCombinaisons]);

const filteredCombinaisons = useMemo(
() => pipeAndFilterCombinaisons(combinaisonsToFilter, sorting, filters),
[combinaisonsToFilter, filters, sorting],
);
return filteredCombinaisons;
};

export default useFilteredCombinaisons;
7 changes: 5 additions & 2 deletions src/pages/Favoris/Favoris.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import useFirebaseUserDocument from '../../hooks/useFirebaseUserDocument';
import { getSessionTranslation, sortSession as sortSessions } from '../../utils/Sessions.utils';
import { useLazyGetCombinaisonsFromIdQuery } from '../../features/generateur/generateur.api';
import AucunFavorisDisponible from './AucunFavorisDisponible/AucunFavorisDisponible';
import useFilteredCombinaisons from '../../hooks/useFilteredCombinaisons';

function Favoris() {
const { t } = useTranslation('common');
Expand All @@ -35,6 +36,8 @@ function Favoris() {

const [trigger, query] = useLazyGetCombinaisonsFromIdQuery();

const filteredCombinaisons = useFilteredCombinaisons(query?.data);

useEffect(() => {
if (session) {
trigger(userData?.favorites[session]);
Expand All @@ -49,7 +52,7 @@ function Favoris() {

{(loading || query?.isFetching) ? (
<Backdrop
open={loading}
open={loading || query?.isFetching}
sx={{ zIndex: 3000 }}
>
<CircularProgress color="inherit" />
Expand Down Expand Up @@ -78,7 +81,7 @@ function Favoris() {
</Select>
</FormControl>
</div>
{!query?.isFetching ? <Combinaisons combinaisons={query?.data} />
{filteredCombinaisons ? <Combinaisons combinaisons={filteredCombinaisons} />
: <AucunFavorisDisponible />}
</>
)
Expand Down
5 changes: 2 additions & 3 deletions src/pages/GenerateurHoraire/GenerateurHoraire.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,19 @@ import {
import classNames from 'classnames';
import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import Combinaisons from './Combinaisons/Combinaisons';
import GenerateurHoraireWrapper from './GenerateurHoraire.styles';
import GenerateurHoraireProvider from './GenerateurHoraireContexts/GenerateurHoraireProvider';
import GenerationModifiers from './GenerationModifiers/GenerationModifiers';
import SelectionCours from './SelectionCours/SelectionCours';
import SelectionSessionProgramme from './SelectionSessionProgramme/SelectionSessionProgramme';
import { selectCombinaisons } from '../../features/generateur/generateur.slice';
import useFilteredCombinaisons from '../../hooks/useFilteredCombinaisons';

function GenerateurHoraire() {
const { t } = useTranslation('common');

const [expanded, setExpanded] = useState(true);
const combinaisons = useSelector(selectCombinaisons);
const combinaisons = useFilteredCombinaisons();
const theme = useTheme();
const isLargeViewport = useMediaQuery(theme.breakpoints.up('lg'));

Expand Down
4 changes: 2 additions & 2 deletions src/pages/GenerateurHoraire/SelectionCours/SelectionCours.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ import {
selectProgramme,
selectSelectedCours,
selectSession,
setCombinaisons,
setConges,
setCoursObligatoires,
setNombreCours,
setRawCombinaisons,
setSelectedCours,
} from '../../../features/generateur/generateur.slice';
import { areArraysSame } from '../../../utils/Array.utils';
Expand Down Expand Up @@ -92,7 +92,7 @@ function SelectionCours() {

useEffect(() => {
if (getCombinaisonQuery?.data) {
dispatch(setCombinaisons(getCombinaisonQuery?.data));
dispatch(setRawCombinaisons(getCombinaisonQuery?.data));
}
}, [getCombinaisonQuery?.data]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@ import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { toast } from 'react-toastify';
import useUpdatableToast, { TOAST_ERROR } from '../../../../components/Toasts/useUpdatableToast';
import { selectCombinaisons, selectNombreCours, selectRawCombinaisons } from '../../../../features/generateur/generateur.slice';
import { selectNombreCours, selectRawCombinaisons } from '../../../../features/generateur/generateur.slice';
import useGenerateurHoraire from '../../GenerateurHoraireContexts/hooks/useGenerateurHoraire';
import useFilteredCombinaisons from '../../../../hooks/useFilteredCombinaisons';

const AUCUN_HORAIRE_TOAST_ID = 'AUCUN_HORAIRE_TOAST_ID';

function GenerationInformationToasts({ readyToGenerate }) {
const { t } = useTranslation('common');
const { nombreCours, cours } = useGenerateurHoraire();
const combinaisons = useSelector(selectCombinaisons);
const combinaisons = useFilteredCombinaisons();
const rawCombinaisons = useSelector(selectRawCombinaisons);
const currentNombreCours = useSelector(selectNombreCours);

Expand Down

0 comments on commit 4423605

Please sign in to comment.