selectors.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { createSelector } from 'reselect';
  2. import { RootState } from 'redux/interfaces';
  3. import { createFetchingSelector } from 'redux/reducers/loader/selectors';
  4. import {
  5. ConsumerGroupID,
  6. ConsumerGroupsState,
  7. } from '../../interfaces/consumerGroup';
  8. const consumerGroupsState = ({
  9. consumerGroups,
  10. }: RootState): ConsumerGroupsState => consumerGroups;
  11. const getConsumerGroupsMap = (state: RootState) =>
  12. consumerGroupsState(state).byID;
  13. const getConsumerGroupsIDsList = (state: RootState) =>
  14. consumerGroupsState(state).allIDs;
  15. const getConsumerGroupsListFetchingStatus = createFetchingSelector(
  16. 'GET_CONSUMER_GROUPS'
  17. );
  18. const getConsumerGroupDetailsFetchingStatus = createFetchingSelector(
  19. 'GET_CONSUMER_GROUP_DETAILS'
  20. );
  21. export const getIsConsumerGroupsListFetched = createSelector(
  22. getConsumerGroupsListFetchingStatus,
  23. (status) => status === 'fetched'
  24. );
  25. export const getIsConsumerGroupDetailsFetched = createSelector(
  26. getConsumerGroupDetailsFetchingStatus,
  27. (status) => status === 'fetched'
  28. );
  29. export const getConsumerGroupsList = createSelector(
  30. getIsConsumerGroupsListFetched,
  31. getConsumerGroupsMap,
  32. getConsumerGroupsIDsList,
  33. (isFetched, byID, ids) => {
  34. if (!isFetched) {
  35. return [];
  36. }
  37. return ids.map((key) => byID[key]);
  38. }
  39. );
  40. const getConsumerGroupID = (_: RootState, consumerGroupID: ConsumerGroupID) =>
  41. consumerGroupID;
  42. export const getConsumerGroupByID = createSelector(
  43. getConsumerGroupsMap,
  44. getConsumerGroupID,
  45. (consumerGroups, consumerGroupID) => consumerGroups[consumerGroupID]
  46. );