33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import { createSelector } from '@reduxjs/toolkit';
|
|
import { RootState } from 'redux/interfaces';
|
|
import { createFetchingSelector } from 'redux/reducers/loader/selectors';
|
|
import { KsqlState } from 'redux/interfaces/ksqlDb';
|
|
import { AsyncRequestStatus } from 'lib/constants';
|
|
|
|
const ksqlDbState = ({ ksqlDb }: RootState): KsqlState => ksqlDb;
|
|
|
|
const getKsqlDbFetchTablesAndStreamsFetchingStatus = createFetchingSelector(
|
|
'ksqlDb/fetchKsqlDbTables'
|
|
);
|
|
|
|
const getKsqlExecutionStatus = createFetchingSelector('ksqlDb/executeKsql');
|
|
|
|
export const getKsqlDbTables = createSelector(
|
|
[ksqlDbState, getKsqlDbFetchTablesAndStreamsFetchingStatus],
|
|
(state, status) => ({
|
|
rows: { streams: [...state.streams], tables: [...state.tables] },
|
|
fetched: status === AsyncRequestStatus.fulfilled,
|
|
fetching: status === AsyncRequestStatus.pending,
|
|
tablesCount: state.tables.length,
|
|
streamsCount: state.streams.length,
|
|
})
|
|
);
|
|
|
|
export const getKsqlExecution = createSelector(
|
|
[ksqlDbState, getKsqlExecutionStatus],
|
|
(state, status) => ({
|
|
executionResult: state.executionResult,
|
|
fetched: status === AsyncRequestStatus.fulfilled,
|
|
fetching: status === AsyncRequestStatus.pending,
|
|
})
|
|
);
|