ConceptCreator/src/app/side-overviews/item-overview/item-overview.component.ts
Sebastian Böckelmann 5a3c0e9d75
All checks were successful
E2E Testing / test (push) Successful in 1m38s
Basic Visualization of Itemgroups and their Items
2024-05-05 18:14:42 +02:00

80 lines
2.3 KiB
TypeScript

import {Component, Input, OnInit} from '@angular/core';
import {GameModel} from "../../project/game-model/GameModel";
import {FlatTreeControl} from "@angular/cdk/tree";
import {MatTreeFlatDataSource, MatTreeFlattener} from "@angular/material/tree";
import {ItemGroup} from "../../project/game-model/inventory/ItemGroup";
import {AbstractItemGroup} from "../../project/game-model/inventory/AbstractItemGroup";
import {ConcreteItemGroup} from "../../project/game-model/inventory/ConcreteItemGroup";
import {ModelComponent} from "../../project/game-model/ModelComponent";
import {Item} from "../../project/game-model/inventory/Item";
import {ModelComponentType} from "../../project/game-model/ModelComponentType";
interface FlatNode {
expandable: boolean,
name: string,
level: number
}
@Component({
selector: 'app-item-overview',
templateUrl: './item-overview.component.html',
styleUrl: './item-overview.component.scss'
})
export class ItemOverviewComponent implements OnInit{
@Input() gameModel: GameModel | undefined
private _transformer = (node: ModelComponent, level: number) => {
if(node instanceof AbstractItemGroup) {
return {
expandable: !!node.children && node.children.length > 0,
name: node.componentName,
level: level,
};
} else if(node instanceof ConcreteItemGroup) {
return {
expandable: !!node.items && node.items.length > 0,
name: node.componentName,
level: level
}
} else {
return {
expandable: false,
name: node.componentName,
level: level
}
}
};
treeControl = new FlatTreeControl<FlatNode>(
node => node.level,
node => node.expandable,
);
treeFlattener = new MatTreeFlattener(
this._transformer,
node => node.level,
node => node.expandable,
node => this.getNodeChildren(node)
);
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
hasChild = (_: number, node: FlatNode) => node.expandable;
getNodeChildren(node: ModelComponent): ModelComponent[] {
if(node instanceof ConcreteItemGroup) {
return node.items;
} else if(node instanceof AbstractItemGroup) {
return node.children;
} else {
return [];
}
}
ngOnInit() {
this.dataSource.data = this.gameModel!.itemgroups;
}
}