Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
drawer.selectors.ts 1.57 KiB
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 resultListSelector = createSelector(rootSelector, state => {
  const selectedType = state.drawer.searchDrawerState.stepType;

  switch (selectedType) {
    case 'drugs':
      return (state.drugs.data || []).map(drug => ({
        id: drug.id,
        name: drug.name,
        data: drug,
      }));
    case 'chemicals':
      return (state.chemicals.data || []).map(chemical => ({
        id: chemical.id.id,
        name: chemical.name,
        data: chemical,
      }));
    case 'bioEntity':
      return undefined;
    case 'mirna':
      return (state.mirnas.data || []).map(mirna => ({
        id: mirna.id,
        name: mirna.name,
        data: mirna,
      }));
    case 'none':
      return undefined;
    default:
      return assertNever(selectedType);
  }
});