selectors.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import { createSelector } from '@reduxjs/toolkit';
  2. import { RootState } from 'redux/interfaces';
  3. import { createFetchingSelector } from 'redux/reducers/loader/selectors';
  4. import { KsqlState } from 'redux/interfaces/ksqlDb';
  5. import { AsyncRequestStatus } from 'lib/constants';
  6. const ksqlDbState = ({ ksqlDb }: RootState): KsqlState => ksqlDb;
  7. const getKsqlDbFetchTablesAndStreamsFetchingStatus = createFetchingSelector(
  8. 'ksqlDb/fetchKsqlDbTables'
  9. );
  10. const getKsqlExecutionStatus = createFetchingSelector('ksqlDb/executeKsql');
  11. export const getKsqlDbTables = createSelector(
  12. [ksqlDbState, getKsqlDbFetchTablesAndStreamsFetchingStatus],
  13. (state, status) => ({
  14. rows: { streams: [...state.streams], tables: [...state.tables] },
  15. fetched: status === AsyncRequestStatus.fulfilled,
  16. fetching: status === AsyncRequestStatus.pending,
  17. tablesCount: state.tables.length,
  18. streamsCount: state.streams.length,
  19. })
  20. );
  21. export const getKsqlExecution = createSelector(
  22. [ksqlDbState, getKsqlExecutionStatus],
  23. (state, status) => ({
  24. executionResult: state.executionResult,
  25. fetched: status === AsyncRequestStatus.fulfilled,
  26. fetching: status === AsyncRequestStatus.pending,
  27. })
  28. );