@patternplate/client
Version:
Universal javascript client application for patternplate
81 lines (72 loc) • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.flat = exports.default = void 0;
var _search = require("@patternplate/search");
var _lodash = require("lodash");
var _reselect = require("reselect");
var _navigation = require("../selectors/navigation");
var _tree = require("./tree");
const sd = (0, _reselect.createSelector)(state => state.schema.docs, state => state.id, state => state.hideEnabled, state => state.routing.locationBeforeTransitions, state => state.base, () => () => [], (tree, id, hide, location, base, search) => {
const context = {
hide,
id,
prefix: "doc",
location,
base,
search
};
return (0, _tree.flatten)((0, _tree.sanitize)((0, _lodash.merge)({}, tree), context)).filter(item => item.type !== "folder");
});
const selectFlatPool = (0, _reselect.createSelector)(sd, _navigation.flat, state => ({
hide: state.hideEnabled,
id: state.id,
location: state.routing.locationBeforeTransitions,
base: state.base,
prefix: "doc",
search: () => []
}), (docs, nav, context) => {
return docs.map(d => (0, _tree.enrich)(d, context)).concat(nav).filter(item => Boolean(item.id) && Boolean(item.contentType));
});
const selectSubSearch = (0, _reselect.createSelector)(selectFlatPool, flatPool => {
const search = (0, _search.createSearch)(flatPool);
return term => {
const matches = search(term);
return matches.map(item => flatPool.find(p => p.id === item));
};
});
const selectDocsTree = (0, _reselect.createSelector)(state => state.schema.docs, state => state.id, state => state.hideEnabled, state => state.routing.locationBeforeTransitions, state => state.base, selectSubSearch, (tree, id, hide, location, base, search) => {
const context = {
hide,
id,
prefix: "doc",
location,
base,
search
};
return (0, _tree.sanitize)((0, _lodash.merge)({}, tree), context);
});
const selectFirstItem = (0, _reselect.createSelector)(selectDocsTree, tree => {
const list = (0, _tree.flatten)(tree);
return list ? list[0] : null;
});
const selectQueries = (0, _reselect.createSelector)(selectDocsTree, tree => (0, _tree.flatten)(tree).map(item => (item.manifest.options || {}).query).filter(Boolean));
const selectQueried = (0, _reselect.createSelector)(selectDocsTree, selectQueries, (tree, queries) => {
const search = (0, _search.createSearch)((0, _tree.flatten)(tree));
return queries.reduce((acc, query) => {
return acc.concat(search(query).filter(r => acc.indexOf(r) === -1));
}, []);
});
const selectDocs = (0, _reselect.createSelector)(selectDocsTree, selectFirstItem, selectQueried, state => state.id, (tree, first, queried, id) => {
tree.children = tree.children.filter(child => child.type === "folder" || queried.indexOf(child.id) === -1);
if (id === '/' && first) {
first.active = true;
}
return tree;
});
var _default = selectDocs;
exports.default = _default;
const flat = (0, _reselect.createSelector)(selectDocs, _tree.flatten);
exports.flat = flat;
//# sourceMappingURL=docs.js.map