kafka-ui/kafka-ui-react-app/src/redux/reducers/schemas/selectors.ts
2021-02-24 15:05:05 +03:00

48 lines
1.3 KiB
TypeScript

import { createSelector } from 'reselect';
import { RootState, SchemasState } from 'redux/interfaces';
import { createFetchingSelector } from 'redux/reducers/loader/selectors';
const schemasState = ({ schemas }: RootState): SchemasState => schemas;
const getAllNames = (state: RootState) => schemasState(state).allNames;
const getSchemaMap = (state: RootState) => schemasState(state).byName;
const getSchemaListFetchingStatus = createFetchingSelector(
'GET_CLUSTER_SCHEMAS'
);
const getSchemaVersionsFetchingStatus = createFetchingSelector(
'GET_SCHEMA_VERSIONS'
);
export const getIsSchemaListFetched = createSelector(
getSchemaListFetchingStatus,
(status) => status === 'fetched'
);
export const getIsSchemaVersionFetched = createSelector(
getSchemaVersionsFetchingStatus,
(status) => status === 'fetched'
);
export const getSchemaList = createSelector(
getIsSchemaListFetched,
getAllNames,
getSchemaMap,
(isFetched, allNames, byName) =>
isFetched ? allNames.map((subject) => byName[subject]) : []
);
const getSchemaName = (_: RootState, subject: string) => subject;
export const getSchema = createSelector(
getSchemaMap,
getSchemaName,
(schemas, subject) => schemas[subject]
);
export const getSortedSchemaVersions = createSelector(
schemasState,
({ currentSchemaVersions }) =>
currentSchemaVersions.sort((a, b) => a.id - b.id)
);