selectors.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { createSelector } from 'reselect';
  2. import { RootState, SchemasState } from 'redux/interfaces';
  3. import { createFetchingSelector } from 'redux/reducers/loader/selectors';
  4. import { SchemaSubject } from 'generated-sources';
  5. const schemasState = ({ schemas }: RootState): SchemasState => schemas;
  6. const getAllNames = (state: RootState) => schemasState(state).allNames;
  7. const getSchemaMap = (state: RootState) => schemasState(state).byName;
  8. const getSchemaListFetchingStatus = createFetchingSelector(
  9. 'GET_CLUSTER_SCHEMAS'
  10. );
  11. export const getIsSchemaListFetched = createSelector(
  12. getSchemaListFetchingStatus,
  13. (status) => status === 'fetched'
  14. );
  15. export const getSchemaList = createSelector(
  16. getIsSchemaListFetched,
  17. getAllNames,
  18. getSchemaMap,
  19. (isFetched, allNames, byName) => {
  20. if (!isFetched) {
  21. return [];
  22. }
  23. return allNames.map((subject) => byName[subject as string]);
  24. }
  25. );
  26. const getSchemaName = (_: RootState, subject: string) => subject;
  27. export const getSchema = createSelector(
  28. getSchemaMap,
  29. getSchemaName,
  30. (schemas, subject) => schemas[subject]
  31. );
  32. export const getSchemaVersions = createSelector(
  33. schemasState,
  34. ({ currentSchemaVersions }) =>
  35. currentSchemaVersions.sort(
  36. (a: SchemaSubject, b: SchemaSubject) => a.id - b.id
  37. )
  38. );