Files
frontend-app-discussions/src/data/selectors.js

48 lines
1.6 KiB
JavaScript

/* eslint-disable import/prefer-default-export */
import { createSelector } from '@reduxjs/toolkit';
import { selectDiscussionProvider, selectGroupAtSubsection } from '../discussions/data/selectors';
import { DiscussionProvider } from './constants';
export const selectTopicContext = (topicId) => (state) => state.blocks.topics[topicId];
export const selectBlocks = (state) => state.blocks.blocks;
export const selectorForUnitSubsection = createSelector(
selectBlocks,
blocks => key => blocks[blocks[key]?.parent],
);
// If subsection grouping is enabled, and the current selection is a unit, then get the current subsection.
export const selectCurrentCategoryGrouping = createSelector(
selectDiscussionProvider,
selectGroupAtSubsection,
selectBlocks,
(provider, groupAtSubsection, blocks) => blockId => (
(provider !== 'openedx' || !groupAtSubsection || blocks[blockId]?.type !== 'vertical')
? blockId
: blocks[blockId].parent
),
);
export const selectChapters = (state) => state.blocks.chapters;
export const selectTopicsUnderCategory = createSelector(
selectDiscussionProvider,
selectBlocks,
state => state.topics.topicsInCategory,
(provider, blocks, topicsInCategory) => (
provider === DiscussionProvider.LEGACY
? category => topicsInCategory?.[category]
: category => blocks[category]?.topics
),
);
export const selectArchivedTopics = createSelector(
state => state.topics.topics,
state => state.topics.archivedIds || [],
(topics, ids) => ids.map(id => topics[id]),
);
export const selectTopicIds = () => (state) => state.blocks.chapters;