gatsby-source-wordpress
Version:
Source data from WordPress in an efficient and scalable way.
62 lines (60 loc) • 1.77 kB
JavaScript
;
exports.__esModule = true;
exports.applyNodeFilter = exports.addNodeFilter = void 0;
var _store = require("../store");
/**
* Grabs an array of filter functions from the redux store,
* orders them by priority, and then runs each in order over the
* passed in data. The modified data is then returned
*
* @param {string} name The name of the filter to apply
* @param {object} context Any additional data to pass to the filter functions that are applied
* @param {object} data The initial data to be filtered
*/
const applyNodeFilter = async ({
name,
context,
data
}) => {
var _getStore$getState$wp;
if (!name) {
return data;
}
const nodeFilters = (_getStore$getState$wp = (0, _store.getStore)().getState().wpHooks.nodeFilters) === null || _getStore$getState$wp === void 0 ? void 0 : _getStore$getState$wp[name];
if (!nodeFilters || !nodeFilters.length) {
return data;
}
const sortedNodeFilters = nodeFilters.sort((a, b) => a.priority - b.priority);
for (const {
filter
} of sortedNodeFilters) {
data = filter({
data,
context,
name
});
}
return data;
};
/**
* This function adds a filter to the internal redux store of filters
* To be applied via applyNodeFilter above
*
* @param {string} name The name of the filter
* @param {function} filter The function to run when applying this filter
* @param {integer} priority The priority for this filter to run in. lower means earlier execution
*/
exports.applyNodeFilter = applyNodeFilter;
const addNodeFilter = ({
name,
filter,
priority
}) => {
(0, _store.getStore)().dispatch.wpHooks.addNodeFilter({
name,
filter,
priority
});
};
exports.addNodeFilter = addNodeFilter;
//# sourceMappingURL=node-filters.js.map