@redux-devtools/rtk-query-monitor
Version:
rtk-query monitor for Redux DevTools
152 lines (151 loc) • 6.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.computeSelectorSource = computeSelectorSource;
exports.createInspectorSelectors = createInspectorSelectors;
var _toolkit = require("@reduxjs/toolkit");
var _types = require("./types");
var _comparators = require("./utils/comparators");
var _filters = require("./utils/filters");
var _object = require("./utils/object");
var _regexp = require("./utils/regexp");
var _rtkQuery = require("./utils/rtk-query");
function computeSelectorSource(props) {
let previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const {
computedStates,
currentStateIndex,
monitorState,
actionsById
} = props;
const userState = computedStates.length > 0 ? computedStates[currentStateIndex].state : null;
if (!previous || previous.userState !== userState || previous.monitorState !== monitorState || previous.actionsById !== actionsById) {
return {
userState,
monitorState,
currentStateIndex,
actionsById
};
}
return previous;
}
function createInspectorSelectors() {
const selectQueryComparator = _ref => {
let {
monitorState
} = _ref;
return _comparators.queryComparators[monitorState.queryForm.values.queryComparator];
};
const selectQueryListFilter = _ref2 => {
let {
monitorState
} = _ref2;
return _filters.queryListFilters[monitorState.queryForm.values.queryFilter];
};
const selectActionsById = _ref3 => {
let {
actionsById
} = _ref3;
return actionsById;
};
const selectApiStates = (0, _toolkit.createSelector)(_ref4 => {
let {
userState
} = _ref4;
return userState;
}, _rtkQuery.getApiStatesOf);
const selectAllQueries = (0, _toolkit.createSelector)(selectApiStates, _rtkQuery.extractAllApiQueries);
const selectAllMutations = (0, _toolkit.createSelector)(selectApiStates, _rtkQuery.extractAllApiMutations);
const selectSearchQueryRegex = (0, _toolkit.createSelector)(_ref5 => {
let {
monitorState
} = _ref5;
return monitorState.queryForm.values.searchValue;
}, _ref6 => {
let {
monitorState
} = _ref6;
return monitorState.queryForm.values.isRegexSearch;
}, (searchValue, isRegexSearch) => {
if (searchValue) {
try {
const regexPattern = isRegexSearch ? searchValue : (0, _regexp.escapeRegExpSpecialCharacter)(searchValue);
return new RegExp(regexPattern, 'i');
} catch (err) {
// We notify that the search regex provided is not valid
}
}
return null;
});
const selectComparatorOrder = _ref7 => {
let {
monitorState
} = _ref7;
return monitorState.queryForm.values.isAscendingQueryComparatorOrder;
};
const selectAllVisbileQueries = (0, _toolkit.createSelector)([selectQueryComparator, selectQueryListFilter, selectAllQueries, selectAllMutations, selectComparatorOrder, selectSearchQueryRegex], (comparator, queryListFilter, queryList, mutationsList, isAscending, searchRegex) => {
const filteredList = queryListFilter(searchRegex, queryList.concat(mutationsList));
const computedComparator = isAscending ? comparator : (0, _rtkQuery.flipComparator)(comparator);
return filteredList.slice().sort(computedComparator);
});
const selectCurrentQueryInfo = (0, _toolkit.createSelector)(selectAllQueries, selectAllMutations, _ref8 => {
let {
monitorState
} = _ref8;
return monitorState.selectedQueryKey;
}, (allQueries, allMutations, selectedQueryKey) => {
if (!selectedQueryKey) {
return null;
}
let currentQueryInfo = allQueries.find(query => query.queryKey === selectedQueryKey.queryKey && selectedQueryKey.reducerPath === query.reducerPath) || null;
if (!currentQueryInfo) {
currentQueryInfo = allMutations.find(mutation => mutation.queryKey === selectedQueryKey.queryKey && selectedQueryKey.reducerPath === mutation.reducerPath) || null;
}
return currentQueryInfo;
});
const selectApiOfCurrentQuery = selectorsSource => {
const apiStates = selectApiStates(selectorsSource);
const currentQueryInfo = selectCurrentQueryInfo(selectorsSource);
if (!apiStates || !currentQueryInfo) {
return null;
}
return apiStates[currentQueryInfo.reducerPath] ?? null;
};
const selectProvidedOfCurrentQuery = selectorsSource => {
return selectApiOfCurrentQuery(selectorsSource)?.provided ?? null;
};
const selectSubscriptionsOfCurrentQuery = (0, _toolkit.createSelector)([selectApiOfCurrentQuery, selectCurrentQueryInfo], (apiState, queryInfo) => {
if (!queryInfo || !apiState) {
return _object.emptyRecord;
}
return apiState.subscriptions[queryInfo.queryKey];
});
const selectCurrentQueryTags = (0, _toolkit.createSelector)([selectCurrentQueryInfo, selectProvidedOfCurrentQuery], _rtkQuery.getQueryTagsOf);
const selectApiStatsOfCurrentQuery = (0, _toolkit.createSelector)(selectApiOfCurrentQuery, selectorsSource => selectorsSource.actionsById, selectorsSource => selectorsSource.currentStateIndex, _rtkQuery.generateApiStatsOfCurrentQuery);
const selectActionsOfCurrentQuery = (0, _toolkit.createSelector)(selectCurrentQueryInfo, selectActionsById, _rtkQuery.getActionsOfCurrentQuery);
const selectTabCounters = (0, _toolkit.createSelector)([selectSubscriptionsOfCurrentQuery, selectActionsOfCurrentQuery, selectCurrentQueryTags], (subscriptions, actions, tags) => {
return {
[_types.QueryPreviewTabs.data]: 0,
[_types.QueryPreviewTabs.queryTags]: tags.length,
[_types.QueryPreviewTabs.querySubscriptions]: Object.keys(subscriptions ?? {}).length,
[_types.QueryPreviewTabs.apiConfig]: 0,
[_types.QueryPreviewTabs.queryinfo]: 0,
[_types.QueryPreviewTabs.actions]: actions.length
};
});
return {
selectQueryComparator,
selectApiStates,
selectAllQueries,
selectAllVisbileQueries,
selectSearchQueryRegex,
selectCurrentQueryInfo,
selectCurrentQueryTags,
selectApiStatsOfCurrentQuery,
selectSubscriptionsOfCurrentQuery,
selectApiOfCurrentQuery,
selectTabCounters,
selectActionsOfCurrentQuery
};
}