main #48
@ -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