Newer
Older
import { rootSelector } from '@/redux/root/root.selectors';
import { assertNever } from '@/utils/assertNever';
import { createSelector } from '@reduxjs/toolkit';
export const drawerSelector = createSelector(rootSelector, state => state.drawer);
export const isDrawerOpenSelector = createSelector(drawerSelector, state => state.isOpen);
export const searchDrawerStateSelector = createSelector(
drawerSelector,
state => state.searchDrawerState,
);
export const currentStepDrawerStateSelector = createSelector(
searchDrawerStateSelector,
state => state.currentStep,
);
export const selectedValueDrawerSelector = createSelector(
searchDrawerStateSelector,
state => state.selectedValue,
);
export const stepTypeDrawerSelector = createSelector(
searchDrawerStateSelector,
state => state.stepType,
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
export const currentSelectedSearchElement = createSelector(
searchDrawerStateSelector,
state => state.selectedSearchElement,
);
export const currentStepTypeSelector = createSelector(
searchDrawerStateSelector,
state => state.stepType,
);
export const resultListSelector = createSelector(
rootSelector,
currentStepTypeSelector,
currentSelectedSearchElement,
(state, selectedType, currentSearchElement) => {
const { drugs, chemicals, mirnas } = state;
switch (selectedType) {
case 'drugs': {
const currentDrugs = drugs.data.find(
({ searchQueryElement }) => searchQueryElement === currentSearchElement,
);
return (currentDrugs?.data || []).map(drug => ({
id: drug.id,
name: drug.name,
data: drug,
}));
}
case 'chemicals': {
const currentChemical = chemicals.data.find(
({ searchQueryElement }) => searchQueryElement === currentSearchElement,
);
return (currentChemical?.data || []).map(chemical => ({
id: chemical.id.id,
name: chemical.name,
data: chemical,
}));
}
case 'bioEntity':
return undefined;
case 'mirna': {
const currentMirna = mirnas.data.find(
({ searchQueryElement }) => searchQueryElement === currentSearchElement,
);
return (currentMirna?.data || []).map(mirna => ({
id: mirna.id,
name: mirna.name,
data: mirna,
}));
}
case 'none':
return undefined;
default:
return assertNever(selectedType);
}
},
);
export const bioEnititiesResultListSelector = createSelector(rootSelector, state => {
return state.drawer.searchDrawerState.listOfBioEnitites;
export const reactionDrawerStateSelector = createSelector(
drawerSelector,
state => state.reactionDrawerState,
);
export const currentDrawerReactionIdSelector = createSelector(
reactionDrawerStateSelector,
state => state?.reactionId,
);