Browse Source

Fixed the asynchronous retrieval of data of new characters

Christopher Giese 8 months ago
parent
commit
82e0368191

+ 121 - 115
src/app/character/character-creator/character-creator.component.ts

@@ -14,135 +14,141 @@ export class CharacterCreatorComponent {
 
   public characterName: string = '';
 
-  public createCharacter(): void {
+  public async createCharacter(): Promise<void> {
     this.dataService.addData('characters', { name: this.characterName });
     // TODO: Animation, dass der Character erstellt wurde
-    this.createNewCharacterInDatabase();
+    await this.createNewCharacterInDatabase();
+    // Die Funktion muss ertstmal durchlaufen, bevor der Character ausgewählt werden kann
     this.dataService.selectCharacter(this.characterName);
   }
 
-  public createNewCharacterInDatabase(): void {
+  public async createNewCharacterInDatabase(): Promise<void> {
     // TODO: Für alle Daten einen eigenen Key/Value Eintrag anlegen addData(collection: string, data: any, key?: string): void
+    return Promise.all([
+      // Character Data
+      this.dataService.addData(
+        this.characterName,
+        {
+          name: this.characterName,
+          class: '',
+          race: '',
+          level: '',
+          subclass: '',
+          proficiency: '',
+          background: '',
+          experience: '',
+          inspiration: '',
+          proficiencyBonus: '',
+        },
+        'characterData'
+      ),
 
-    // Character Daten
-    this.dataService.addData(
-      this.characterName,
-      {
-        name: this.characterName,
-        class: '',
-        race: '',
-        level: '',
-        subclass: '',
-        proficiency: '',
-        background: '',
-        experience: '',
-        inspiration: '',
-        proficiencyBonus: '',
-      },
-      'characterData'
-    );
+      // Character Attributes
+      this.dataService.addData(
+        this.characterName,
+        {
+          strength: ['', false],
+          dexterity: ['', false],
+          constitution: ['', false],
+          intelligence: ['', false],
+          wisdom: ['', false],
+          charisma: ['', false],
+        },
+        'attribute'
+      ),
 
-    // Character Attributes
-    this.dataService.addData(
-      this.characterName,
-      {
-        strength: ['', false],
-        dexterity: ['', false],
-        constitution: ['', false],
-        intelligence: ['', false],
-        wisdom: ['', false],
-        charisma: ['', false],
-      },
-      'attribute'
-    );
+      // Character Skills
+      this.dataService.addData(
+        this.characterName,
+        {
+          acrobatics: ['', false],
+          animalHandling: ['', false],
+          arcana: ['', false],
+          athletics: ['', false],
+          deception: ['', false],
+          history: ['', false],
+          insight: ['', false],
+          intimidation: ['', false],
+          investigation: ['', false],
+          medicine: ['', false],
+          nature: ['', false],
+          perception: ['', false],
+          performance: ['', false],
+          persuasion: ['', false],
+          religion: ['', false],
+          sleightOfHand: ['', false],
+          stealth: ['', false],
+          survival: ['', false],
+        },
+        'skill'
+      ),
+      // Character Combat Stats
+      this.dataService.addData(
+        this.characterName,
+        {
+          armorClass: '',
+          initiative: '',
+          speed: '',
+          hitPointMaximum: '',
+          currentHitPoints: '',
+          temporaryHitPoints: '',
+          hitDice: '',
+          deathSaveSuccesses: '',
+          deathSaveFailures: '',
+        },
+        'combatStats'
+      ),
+      // Character Appearance
+      this.dataService.addData(
+        this.characterName,
+        {
+          age: '',
+          height: '',
+          weight: '',
+          eyes: '',
+          skin: '',
+          hair: '',
+        },
+        'appearance'
+      ),
+      // Character Personality
+      this.dataService.addData(
+        this.characterName,
+        {
+          personalityTraits: '',
+          ideals: '',
+          bonds: '',
+          flaws: '',
+        },
+        'personality'
+      ),
+      // Character Weapons
+      this.dataService.addData(
+        this.characterName,
+        {
+          name: '',
+          attackBonus: '',
+          damage: '',
+          type: '',
+          range: '',
+          description: '',
+        },
+        'weapons'
+      ),
 
-    // Character Skills
-    this.dataService.addData(
-      this.characterName,
-      {
-        acrobatics: ['', false],
-        animalHandling: ['', false],
-        arcana: ['', false],
-        athletics: ['', false],
-        deception: ['', false],
-        history: ['', false],
-        insight: ['', false],
-        intimidation: ['', false],
-        investigation: ['', false],
-        medicine: ['', false],
-        nature: ['', false],
-        perception: ['', false],
-        performance: ['', false],
-        persuasion: ['', false],
-        religion: ['', false],
-        sleightOfHand: ['', false],
-        stealth: ['', false],
-        survival: ['', false],
-      },
-      'skill'
-    );
-    this.dataService.addData(
-      this.characterName,
-      {
-        armorClass: '',
-        initiative: '',
-        speed: '',
-        hitPointMaximum: '',
-        currentHitPoints: '',
-        temporaryHitPoints: '',
-        hitDice: '',
-        deathSaveSuccesses: '',
-        deathSaveFailures: '',
-      },
-      'combatStats'
-    );
-    this.dataService.addData(
-      this.characterName,
-      {
-        age: '',
-        height: '',
-        weight: '',
-        eyes: '',
-        skin: '',
-        hair: '',
-      },
-      'appearance'
-    );
-    this.dataService.addData(
-      this.characterName,
-      {
-        personalityTraits: '',
-        ideals: '',
-        bonds: '',
-        flaws: '',
-      },
-      'personality'
-    );
-    this.dataService.addData(
-      this.characterName,
-      {
-        name: '',
-        attackBonus: '',
-        damage: '',
-        type: '',
-        range: '',
-        description: '',
-      },
-      'weapons'
-    );
+      // Inventory
 
-    // Inventory
+      // Weapons
 
-    // Weapons
+      // Spells
 
-    // Spells
+      // Notes
 
-    // Notes
+      // Maps
 
-    // Maps
+      // NPCs
 
-    // NPCs
-
-    // Quests
+      // Quests
+    ]).then(() => {});
   }
 }

+ 16 - 6
src/services/data/data.service.ts

@@ -11,16 +11,25 @@ export class DataService {
 
   constructor(private Router: Router) {
     this.db = new Localbase('myDatabase');
-    // TODO: Fetch all data from database and write it to a character object
   }
 
   public character: any;
 
-  public addData(collection: string, data: any, key?: string): void {
+  public async addData(
+    collection: string,
+    data: any,
+    key?: string
+  ): Promise<void> {
     if (key) {
-      this.db.collection(collection).add(data, key);
+      return this.db
+        .collection(collection)
+        .add(data, key)
+        .then(() => {});
     } else {
-      this.db.collection(collection).add(data);
+      return this.db
+        .collection(collection)
+        .add(data)
+        .then(() => {});
     }
   }
 
@@ -41,14 +50,14 @@ export class DataService {
   }
 
   public async selectCharacter(character: string) {
+    console.log('selectCharacter ausgewählt');
     const characterData = await this.getCollectionWithKeys(character);
     this.character = this.getcurrentCharacterData(characterData);
     this.Router.navigate(['journal']);
   }
 
   private getcurrentCharacterData(currentCharacterData: any) {
-    // let [appearanceData, attributesData, characterData, combatStatsData, personalityData, skillsData, weaponsData];
-
+    console.log(currentCharacterData);
     const [
       appearanceData,
       attributesData,
@@ -59,6 +68,7 @@ export class DataService {
       weaponsData,
     ] = currentCharacterData.map((entry: any) => entry.data);
 
+    console.log(appearanceData);
     const appearance = {
       age: appearanceData.age,
       height: appearanceData.height,