37 lines
796 B
TypeScript
37 lines
796 B
TypeScript
import type { DocumentsApi } from './documents.api';
|
|
import { Menu } from './menu.models';
|
|
import {
|
|
createMenuItems,
|
|
getApiSection,
|
|
getBasicSection,
|
|
getDeepDiveSection,
|
|
} from './menu.utils';
|
|
|
|
export class MenuApi {
|
|
private menuCache: Menu | null = null;
|
|
|
|
constructor(private readonly documentsApi: DocumentsApi) {}
|
|
|
|
getMenu(): Menu {
|
|
let menu = this.menuCache;
|
|
|
|
if (!menu) {
|
|
const items = createMenuItems(this.documentsApi.getDocuments());
|
|
if (items) {
|
|
menu = {
|
|
sections: [
|
|
getBasicSection(items),
|
|
getDeepDiveSection(items),
|
|
getApiSection(items),
|
|
],
|
|
};
|
|
} else {
|
|
throw new Error(`Cannot find any documents`);
|
|
}
|
|
this.menuCache = menu;
|
|
}
|
|
|
|
return menu;
|
|
}
|
|
}
|