inventory-items-2 #44
@ -72,7 +72,7 @@ import {CharacterOverviewComponent} from "./side-overviews/character-overview/ch
|
||||
import {CharacterEditorComponent} from "./editor/character-editor/character-editor.component";
|
||||
import {
|
||||
MatAccordion,
|
||||
MatExpansionPanel,
|
||||
MatExpansionPanel, MatExpansionPanelDescription,
|
||||
MatExpansionPanelHeader,
|
||||
MatExpansionPanelTitle
|
||||
} from "@angular/material/expansion";
|
||||
@ -85,7 +85,9 @@ import {
|
||||
import {ItemOverviewComponent} from "./side-overviews/item-overview/item-overview.component";
|
||||
import {ItemGroupEditorComponent} from "./editor/items/item-group-editor/item-group-editor.component";
|
||||
import {ItemEditorComponent} from "./editor/items/item-editor/item-editor.component";
|
||||
|
||||
import {
|
||||
ItemgroupInheritorComponent
|
||||
} from "./editor/items/item-editor/itemgroup-inheritor/itemgroup-inheritor.component";
|
||||
// AoT requires an exported function for factories
|
||||
const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json');
|
||||
|
||||
@ -113,7 +115,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl
|
||||
StateInitialCellComponent,
|
||||
ItemOverviewComponent,
|
||||
ItemGroupEditorComponent,
|
||||
ItemEditorComponent
|
||||
ItemEditorComponent,
|
||||
ItemgroupInheritorComponent
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
@ -176,7 +179,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl
|
||||
MatExpansionPanel,
|
||||
MatExpansionPanelTitle,
|
||||
MatCardTitle,
|
||||
MatExpansionPanelHeader
|
||||
MatExpansionPanelHeader,
|
||||
MatExpansionPanelDescription
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
|
@ -21,6 +21,6 @@
|
||||
|
||||
</app-character-editor>
|
||||
<app-item-group-editor *ngIf="modelComponent.type === ModelComponentType.ITEMGROUP" [itemgroup]="convertModelComponentToItemGroup(modelComponent)"></app-item-group-editor>
|
||||
<app-item-editor *ngIf="modelComponent.type === ModelComponentType.ITEM" [item]="convertModelComponentToItem(modelComponent)"></app-item-editor>
|
||||
<app-item-editor *ngIf="modelComponent.type === ModelComponentType.ITEM" [item]="convertModelComponentToItem(modelComponent)" [gameModel]="gameModel!"></app-item-editor>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
|
@ -1 +1,20 @@
|
||||
<p>item-editor works!</p>
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
<mat-card-title>Inherited Itemgroups</mat-card-title>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel *ngFor="let itemgroup of item!.inheritedGroups">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>{{itemgroup.componentName}}</mat-panel-title>
|
||||
<mat-panel-description>{{itemgroup.componentDescription}}</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
<button mat-stroked-button style="width: 100%" (click)="onAddNewInheritedItemgroup()">Add Itemgroup</button>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
@ -1,5 +1,9 @@
|
||||
import {Component, Input} from '@angular/core';
|
||||
import {Item} from "../../../project/game-model/inventory/Item";
|
||||
import {ItemGroup} from "../../../project/game-model/inventory/ItemGroup";
|
||||
import {GameModel} from "../../../project/game-model/GameModel";
|
||||
import {MatDialog} from "@angular/material/dialog";
|
||||
import {ItemgroupInheritorComponent} from "./itemgroup-inheritor/itemgroup-inheritor.component";
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-editor',
|
||||
@ -9,4 +13,25 @@ import {Item} from "../../../project/game-model/inventory/Item";
|
||||
export class ItemEditorComponent {
|
||||
|
||||
@Input() item: Item | undefined
|
||||
@Input() gameModel: GameModel | undefined;
|
||||
|
||||
constructor(private dialog: MatDialog) {
|
||||
|
||||
}
|
||||
|
||||
onAddNewInheritedItemgroup() {
|
||||
const dialogRef = this.dialog.open(ItemgroupInheritorComponent, {
|
||||
data: this.gameModel!.itemgroupsAsList.filter(group => !this.item!.inheritedGroups.includes(group)),
|
||||
width: "400px"
|
||||
})
|
||||
|
||||
dialogRef.afterClosed().subscribe(res => {
|
||||
if(res != undefined) {
|
||||
this.item!.inheritedGroups.push(res);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
<h1 mat-dialog-title>Inherit Itemgroup</h1>
|
||||
<mat-dialog-content>
|
||||
<mat-form-field appearance="outline" style="width: 100%;">
|
||||
<mat-label>Select Itemgroup</mat-label>
|
||||
<mat-select [(ngModel)]="selectedItemgroup">
|
||||
<mat-option *ngFor="let itemgroup of availableItemgroups" [value]="itemgroup">{{itemgroup.componentName}}</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</mat-dialog-content>
|
||||
<mat-dialog-actions align="end">
|
||||
<button mat-stroked-button (click)="cancel()">Cancel</button>
|
||||
<button mat-raised-button color="primary" (click)="submit()">Confim</button>
|
||||
</mat-dialog-actions>
|
@ -0,0 +1,23 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ItemgroupInheritorComponent } from './itemgroup-inheritor.component';
|
||||
|
||||
describe('ItemgroupInheritorComponent', () => {
|
||||
let component: ItemgroupInheritorComponent;
|
||||
let fixture: ComponentFixture<ItemgroupInheritorComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [ItemgroupInheritorComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(ItemgroupInheritorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,25 @@
|
||||
import {Component, Inject} from '@angular/core';
|
||||
import {MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle} from "@angular/material/dialog";
|
||||
import {ItemGroup} from "../../../../project/game-model/inventory/ItemGroup";
|
||||
|
||||
@Component({
|
||||
selector: 'app-itemgroup-inheritor',
|
||||
templateUrl: './itemgroup-inheritor.component.html',
|
||||
styleUrl: './itemgroup-inheritor.component.scss'
|
||||
})
|
||||
export class ItemgroupInheritorComponent {
|
||||
|
||||
selectedItemgroup: ItemGroup | undefined
|
||||
|
||||
constructor(private dialogRef: MatDialogRef<ItemgroupInheritorComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public availableItemgroups: ItemGroup[]) {
|
||||
}
|
||||
|
||||
cancel() {
|
||||
this.dialogRef.close()
|
||||
}
|
||||
|
||||
submit() {
|
||||
this.dialogRef.close(this.selectedItemgroup);
|
||||
}
|
||||
}
|
@ -263,4 +263,19 @@ export class GameModel {
|
||||
|
||||
return requestedTemplates;
|
||||
}
|
||||
|
||||
get itemgroupsAsList() {
|
||||
let itemgroupQueue: ItemGroup[] = this.itemgroups.concat();
|
||||
const result: ItemGroup[] = []
|
||||
while(itemgroupQueue.length > 0) {
|
||||
const currentGroup = itemgroupQueue.shift()!;
|
||||
|
||||
if(currentGroup instanceof AbstractItemGroup) {
|
||||
itemgroupQueue = itemgroupQueue.concat(currentGroup.children);
|
||||
}
|
||||
result.push(currentGroup);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user