sidebars.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { ensureLang } from '../utils/lang'
  2. import guideLocale from '../i18n/pages/guide.json'
  3. import componentLocale from '../i18n/pages/component.json'
  4. function getGuideSidebar() {
  5. return Object.fromEntries(Object.entries(guideLocale).map(([lang, val]) => [lang, Object.values(val).map(item => mapPrefix(item, lang))]))
  6. }
  7. function getComponentsSideBar() {
  8. return Object.fromEntries(Object.entries(componentLocale).map(([lang, val]) => [lang, Object.values(val).map(item => mapPrefix(item, lang, '/component'))]))
  9. }
  10. // return sidebar with language configs.
  11. // this might create duplicated data but the overhead is ignorable
  12. const getSidebars = () => {
  13. return {
  14. '/guide/': getGuideSidebar(),
  15. '/component/': getComponentsSideBar(),
  16. }
  17. }
  18. type Item = {
  19. text: string
  20. children?: Item[]
  21. link?: string
  22. }
  23. function mapPrefix(item: Item, lang: string, prefix = '') {
  24. if (item.children && item.children.length > 0) {
  25. return {
  26. ...item,
  27. children: item.children.map(child => mapPrefix(child, lang, prefix)),
  28. }
  29. }
  30. return {
  31. ...item,
  32. link: `${ensureLang(lang)}${prefix}${item.link}`,
  33. }
  34. }
  35. export const sidebars = getSidebars()