80 lines
2.3 KiB
TypeScript
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;
|
|
}
|
|
}
|