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, ); 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, );