Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 1x 2x 2x 2x 8x 2x 2x 2x 2x 2x 2x 2x 2x 2x 4x 3x | import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { MatTreeNestedDataSource } from '@angular/material/tree';
import { logMethod } from '@app/client-util-decorators';
import { Store } from '@ngrx/store';
import { DOCUMENTATION_ENVIRONMENT } from '../../interfaces/environment.interface';
import { mdFilesAction } from '../../modules/md-files/md-files.actions';
import { IMdFilesState } from '../../modules/md-files/md-files.interface';
/**
* Nodes data with nested structure.
* Each node has a name and an optional list of children.
*/
interface IMarkdownReferenceNode {
name: string;
filePath?: string;
children?: IMarkdownReferenceNode[];
}
@Component({
selector: 'app-documentation-md-reference-tree',
templateUrl: './md-reference-tree.component.html',
styleUrls: ['./md-reference-tree.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class AppDocMarkdownReferenceTreeComponent {
private readonly store = inject(Store<IMdFilesState>);
private readonly env = inject(DOCUMENTATION_ENVIRONMENT);
public readonly dataSource = new MatTreeNestedDataSource<IMarkdownReferenceNode>();
public readonly childrenAccessor = (dataNode: IMarkdownReferenceNode) => dataNode.children ?? [];
@logMethod()
private treeData() {
const mdFilePaths = [
'/README.md', // the root readme in not present in the autogenerated array and should be added here
...this.env.mdFilePaths,
];
const basePath = 'md/';
const treeNodes = mdFilePaths.map(item => {
const name = item.replace(/\/[A-Za-z]+\.md/, '/');
const filePath = `${basePath}${item}`;
const children: IMarkdownReferenceNode[] = [{ name: item.replace(/^.*\/(?=[A-Za-z]+\.md$)/, ''), filePath }];
return { name, children } as IMarkdownReferenceNode;
});
this.showReadme(`md${mdFilePaths[0]}`);
return treeNodes;
}
constructor() {
this.dataSource.data = this.treeData();
}
@logMethod()
public hasChild(index: number, node: IMarkdownReferenceNode) {
return typeof node.children !== 'undefined' && node.children.length > 0;
}
public showReadme(filePath: string): void {
this.store.dispatch(mdFilesAction.showReadme({ filePath }));
}
}
|