Browse Source

update character screen

master
peter 4 years ago
parent
commit
bbe080ab7f

+ 23
- 1
src/backend/Components/Character/CharacterManager.ts View File

30
             this.getHeadCount
30
             this.getHeadCount
31
     ]
31
     ]
32
 
32
 
33
-    RPCFeatures = () => []
33
+    RPCFeatures = () => [{
34
+        name: 'manageCharacter' as 'manageCharacter',
35
+        RPCs: [
36
+            this.updateCharacter
37
+        ]
38
+    }]
39
+
34
     
40
     
35
     getTableDefinitions = (): TableDefiniton[] => [
41
     getTableDefinitions = (): TableDefiniton[] => [
36
         {
42
         {
66
         })
72
         })
67
     }
73
     }
68
 
74
 
75
+    updateCharacter = async (character: Character) : Promise<Character> => {
76
+        await this.admin
77
+        .knex('characters')
78
+        .update(<Character>{
79
+            race: character.race,
80
+            specid: character.specid,
81
+            charactername: character.charactername.toLowerCase(),
82
+            userid: character.userid
83
+        })
84
+        .where({
85
+            id: character.id
86
+        })
87
+
88
+        return await this.getCharacterByName(character.charactername) as Character
89
+    }
90
+
69
     createCharacter = async (userToken: string, character : Character) : Promise<Character> => {
91
     createCharacter = async (userToken: string, character : Character) : Promise<Character> => {
70
         try{
92
         try{
71
             character.charactername = character.charactername.toLowerCase()
93
             character.charactername = character.charactername.toLowerCase()

+ 2
- 0
src/backend/Components/Character/Interface.ts View File

10
     getCharactersOfUser: (username: string) => Promise<(Character & Spec)[]>
10
     getCharactersOfUser: (username: string) => Promise<(Character & Spec)[]>
11
     getUserOfCharacter: (character:Character) => Promise<User>
11
     getUserOfCharacter: (character:Character) => Promise<User>
12
     getHeadCount: (clazz: Class) => Promise<number>
12
     getHeadCount: (clazz: Class) => Promise<number>
13
+    updateCharacter: (character: Character) => Promise<Character>
14
+
13
 }
15
 }

+ 3
- 1
src/backend/Components/Character/RPCInterface.ts View File

14
 }
14
 }
15
 
15
 
16
 export type CharacterManagerFeatureIfc = {
16
 export type CharacterManagerFeatureIfc = {
17
-    
17
+    manageCharacter: {
18
+        updateCharacter: ICharacterManager['updateCharacter']
19
+    }
18
 }
20
 }

+ 2
- 0
src/backend/Components/User/UserManager.ts View File

136
         //set up permissions
136
         //set up permissions
137
         getLogger('UserManager#initialize').debug('setting up permissions')
137
         getLogger('UserManager#initialize').debug('setting up permissions')
138
 
138
 
139
+        console.log(this.character.RPCFeatures())
140
+        
139
         await Promise.all(
141
         await Promise.all(
140
             [this, ...this.exporters].flatMap(exp => exp.RPCFeatures().map(async (feature) => {
142
             [this, ...this.exporters].flatMap(exp => exp.RPCFeatures().map(async (feature) => {
141
                 try {
143
                 try {

+ 2
- 2
src/frontend/src/app/frontcraft/auth/register/register.component.ts View File

21
     race: "Night Elf"
21
     race: "Night Elf"
22
   }
22
   }
23
 
23
 
24
-  ranks = _Rank.splice(5) //remove admin, gm, officer
24
+  ranks = ["Trial"] //remove admin, gm, officer
25
   classes = _Class
25
   classes = _Class
26
   races  = _Race
26
   races  = _Race
27
   selectedClass : Class = "Warrior"
27
   selectedClass : Class = "Warrior"
28
-  selectedSpec = specs[this.selectedClass][0]
29
   specs = specs[this.selectedClass]
28
   specs = specs[this.selectedClass]
29
+  selectedSpec = specs[this.selectedClass][0]
30
   showApplication = false
30
   showApplication = false
31
   submitted = false
31
   submitted = false
32
 
32
 

+ 29
- 8
src/frontend/src/app/frontcraft/pages/character/character.component.html View File

1
-<nb-card 
2
-class = "col-12 col-xl-9">
1
+<nb-card class="col-12 col-xl-9">
3
     <nb-card-header style="text-transform: capitalize;">
2
     <nb-card-header style="text-transform: capitalize;">
4
         <h4>
3
         <h4>
5
-            <a *ngIf="link === 'character'" [ngStyle]="{'color': color}" [routerLink]="'/frontcraft/character/'+char.charactername">
4
+            <a *ngIf="link === 'character'" [ngStyle]="{'color': color}"
5
+                [routerLink]="'/frontcraft/character/'+char.charactername">
6
                 {{char.charactername}}
6
                 {{char.charactername}}
7
             </a>
7
             </a>
8
         </h4>
8
         </h4>
14
     </nb-card-header>
14
     </nb-card-header>
15
 
15
 
16
     <nb-card-body>
16
     <nb-card-body>
17
-        <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.race.toLowerCase()+'_xs.gif'" />
18
-        {{char.race}}<br />
19
-        <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.class.toLowerCase()+'.png'" />
20
-        {{char.specname}} {{char.class}}<br />
17
+        <span *ngIf="!canManage">
18
+            <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.race.toLowerCase()+'_xs.gif'" />
19
+            {{char.race}}<br />
20
+            <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.class.toLowerCase()+'.png'" />
21
+    
22
+            {{char.specname}} {{char.class}}<br />
23
+        </span>
24
+        <span *ngIf="canManage">
25
+            <input nbInput [required]="true" name="preMember" [(ngModel)]="char.charactername"><br />
26
+            <nb-select [(selected)]="char.race" placeholder="Race">
27
+                <nb-option *ngFor="let race of races" [value]="race">{{race}}</nb-option>
28
+            </nb-select>
29
+            <nb-select [(selected)]="char.specname" placeholder="Spec">
30
+                <nb-option *ngFor="let spec of specs" [value]="spec">{{spec}}</nb-option>
31
+            </nb-select>
32
+            <nb-select [(selected)]="char.class" placeholder="Class" (selectedChange)="onSelectClass()">
33
+                <nb-option *ngFor="let class of classes" [value]="class">{{class}}</nb-option>
34
+            </nb-select>
35
+            <button nbButton
36
+                status="primary"
37
+                [class.btn-pulse]="submitted"
38
+                (click)="updateCharacter()">
39
+                Update
40
+            </button>
41
+        </span>
21
         <span *ngIf="link === 'owner'">
42
         <span *ngIf="link === 'owner'">
22
             Owned by <a [routerLink]="'/frontcraft/user/'+char.username"> {{char.username}} ({{char.rank}})</a>
43
             Owned by <a [routerLink]="'/frontcraft/user/'+char.username"> {{char.username}} ({{char.rank}})</a>
23
         </span>
44
         </span>
24
     </nb-card-body>
45
     </nb-card-body>
25
-</nb-card>
46
+</nb-card>

+ 38
- 4
src/frontend/src/app/frontcraft/pages/character/character.component.ts View File

1
 import { Component, OnInit, Input } from '@angular/core';
1
 import { Component, OnInit, Input } from '@angular/core';
2
 import { ActivatedRoute } from '@angular/router';
2
 import { ActivatedRoute } from '@angular/router';
3
-import { Spec, User, Character, Item } from '../../../../../../backend/Types/Types';
4
-import { getClassColor } from '../../../../../../backend/Types/PlayerSpecs';
3
+import { Spec, User, Character, Item, _Class, _Race, Class } from '../../../../../../backend/Types/Types';
4
+import { getClassColor, specs } from '../../../../../../backend/Types/PlayerSpecs';
5
 import { _Tiers } from '../../../../../../backend/Types/Items';
5
 import { _Tiers } from '../../../../../../backend/Types/Items';
6
 import { IApiService } from '../../services/ApiService/ApiService';
6
 import { IApiService } from '../../services/ApiService/ApiService';
7
+import { NbToastrService } from '@nebular/theme';
7
 
8
 
8
 @Component({
9
 @Component({
9
   selector: 'character',
10
   selector: 'character',
13
 
14
 
14
   @Input() name?: string
15
   @Input() name?: string
15
   @Input() link?: "owner" | "character" = 'owner'
16
   @Input() link?: "owner" | "character" = 'owner'
16
-
17
   char: (Character & User & Spec) = {
17
   char: (Character & User & Spec) = {
18
+    charactername: "Loading",
18
     race: 'Human',
19
     race: 'Human',
19
-    class: 'Warrior'
20
+    class: 'Warrior',
21
+    spec: 'Arms'
20
   } as any
22
   } as any
23
+
24
+  classes = _Class
25
+  races = _Race
26
+  specs = specs[this.char.class]
27
+
21
   color: string
28
   color: string
22
   tokens
29
   tokens
23
   dataLink = ""
30
   dataLink = ""
27
   boss2 = { name: undefined, date: undefined }
34
   boss2 = { name: undefined, date: undefined }
28
   gear2: Item[] = []
35
   gear2: Item[] = []
29
 
36
 
37
+  canManage: boolean = false
38
+
30
   constructor(
39
   constructor(
31
     private api: IApiService,
40
     private api: IApiService,
32
     private route: ActivatedRoute,
41
     private route: ActivatedRoute,
42
+    private toast: NbToastrService,
33
   ) { }
43
   ) { }
34
 
44
 
35
   async ngOnInit() {
45
   async ngOnInit() {
36
     const param = this.name || this.route.snapshot.paramMap.get('name');
46
     const param = this.name || this.route.snapshot.paramMap.get('name');
37
     if (!param) return
47
     if (!param) return
38
 
48
 
49
+    const manageChar = this.api.get('manageCharacter')
50
+
51
+    if (manageChar) this.canManage = true
52
+
39
     const char = await this.api.get('CharacterManager').getCharacterByName(param)
53
     const char = await this.api.get('CharacterManager').getCharacterByName(param)
40
     if (char) {
54
     if (char) {
41
       this.color = getClassColor(char.class)
55
       this.color = getClassColor(char.class)
42
       this.char = char
56
       this.char = char
57
+      this.specs = specs[this.char.class]
43
       this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => {
58
       this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => {
44
         this.tokens = tokens
59
         this.tokens = tokens
45
       })
60
       })
46
 
61
 
62
+      /*
47
       this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/" + this.char.charactername.replace(/^\w/, c => c.toUpperCase()) + "/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps"
63
       this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/" + this.char.charactername.replace(/^\w/, c => c.toUpperCase()) + "/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps"
48
 
64
 
49
       const json: any[] = await fetch(this.dataLink).then(raw => raw.json())
65
       const json: any[] = await fetch(this.dataLink).then(raw => raw.json())
68
       const maybeItems: (Item | undefined)[] = await Promise.all(data.gear.filter(item => item.name != "Unknown Item").map(async item => await this.api.get('ItemManager').getItem(item.name)))
84
       const maybeItems: (Item | undefined)[] = await Promise.all(data.gear.filter(item => item.name != "Unknown Item").map(async item => await this.api.get('ItemManager').getItem(item.name)))
69
       const geardata = maybeItems.filter(maybeItem => maybeItem != null)
85
       const geardata = maybeItems.filter(maybeItem => maybeItem != null)
70
       this.gear2 = geardata
86
       this.gear2 = geardata
87
+      */
71
     }
88
     }
72
   }
89
   }
90
+
91
+  updateCharacter = async () => {
92
+    const manager = this.api.get('manageCharacter')
93
+    if (manager) {
94
+      const specid = await this.api.get('CharacterManager').getSpecId(this.char['class'], this.char['specname'] as any)
95
+      this.char.specid = specid
96
+      manager.updateCharacter(this.char).then(() => {
97
+        this.toast.show('Update', 'Success', { status: 'success' })
98
+      })
99
+    }
100
+  }
101
+  onSelectClass() {
102
+    this.specs = specs[this.char.class]
103
+    setTimeout(() => {
104
+      this.char.specname = this.specs[0]
105
+    }, 25)
106
+  }
73
 }
107
 }

Loading…
Cancel
Save