@vuepress-reco/style-default
Version:
It is default type of vuepress-theme-reco.
76 lines (75 loc) • 2.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveMultiSidebarItems = exports.resolveArraySidebarItems = exports.resolveSidebarItems = exports.useSidebarItems = exports.sidebarItemsSymbol = void 0;
const vue_1 = require("vue");
const vue_router_1 = require("vue-router");
const shared_1 = require("@vuepress/shared");
const useNavLink_1 = require("./useNavLink");
exports.sidebarItemsSymbol = Symbol('sidebarItems');
const useSidebarItems = () => {
const sidebarItems = vue_1.inject(exports.sidebarItemsSymbol);
if (!sidebarItems) {
throw new Error('useSidebarItems() is called without provider.');
}
return sidebarItems;
};
exports.useSidebarItems = useSidebarItems;
const resolveSidebarItems = (frontmatter, themeLocale) => {
var _a, _b;
// get sidebar config from frontmatter > themeConfig
const sidebarConfig = (_b = (_a = frontmatter.series) !== null && _a !== void 0 ? _a : themeLocale.series) !== null && _b !== void 0 ? _b : 'auto';
// resolve sidebar items according to the config
if (frontmatter.home || sidebarConfig === false) {
return [];
}
if (shared_1.isArray(sidebarConfig)) {
return exports.resolveArraySidebarItems(sidebarConfig);
}
if (shared_1.isPlainObject(sidebarConfig)) {
return exports.resolveMultiSidebarItems(sidebarConfig);
}
return [];
};
exports.resolveSidebarItems = resolveSidebarItems;
/**
* Resolve sidebar items if the config is an array
*/
const resolveArraySidebarItems = (sidebarConfig) => {
const handleChildItem = (item) => {
let childItem;
if (shared_1.isString(item)) {
childItem = useNavLink_1.useNavLink(item);
}
else {
childItem = item;
}
if (childItem.isGroup && childItem.children) {
return {
...childItem,
children: childItem.children.map(handleChildItem),
};
}
return childItem;
};
return sidebarConfig.map((item) => {
if (shared_1.isString(item)) {
return useNavLink_1.useNavLink(item);
}
return {
...item,
children: item.children.map(handleChildItem),
};
});
};
exports.resolveArraySidebarItems = resolveArraySidebarItems;
/**
* Resolve sidebar items if the config is a key -> value (path-prefix -> array) object
*/
const resolveMultiSidebarItems = (sidebarConfig) => {
var _a;
const route = vue_router_1.useRoute();
const sidebarPath = shared_1.resolveLocalePath(sidebarConfig, route.path);
const matchedSidebarConfig = (_a = sidebarConfig[sidebarPath]) !== null && _a !== void 0 ? _a : [];
return exports.resolveArraySidebarItems(matchedSidebarConfig);
};
exports.resolveMultiSidebarItems = resolveMultiSidebarItems;