From 3fb0265d2d0bd172b37e2053d1e3cadf6b358abe Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Mon, 29 Nov 2021 09:50:26 +0100
Subject: [PATCH] Refresh loggeduser information before the final step of
 onboarding

Otherwise we endup in a loop

Closes #964

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 js/src/components/NavBar.vue          | 5 +++++
 js/src/views/Home.vue                 | 3 ++-
 js/src/views/User/SettingsOnboard.vue | 9 ++++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue
index 8034e3f1c..e0bfbe69c 100644
--- a/js/src/components/NavBar.vue
+++ b/js/src/components/NavBar.vue
@@ -272,6 +272,11 @@ export default class NavBar extends Vue {
       // If we don't have any identities, the user has validated their account,
       // is logging for the first time but didn't create an identity somehow
       if (this.identities.length === 0) {
+        console.debug(
+          "We have no identities listed for current user",
+          this.identities
+        );
+        console.debug("Pushing route to REGISTER_PROFILE");
         try {
           await this.$router.push({
             name: RouteName.REGISTER_PROFILE,
diff --git a/js/src/views/Home.vue b/js/src/views/Home.vue
index 7af4b9dcd..49a0eff56 100644
--- a/js/src/views/Home.vue
+++ b/js/src/views/Home.vue
@@ -406,7 +406,6 @@ import Subtitle from "../components/Utils/Subtitle.vue";
     DateComponent,
     EventParticipationCard,
     MultiCard,
-    "settings-onboard": () => import("./User/SettingsOnboard.vue"),
   },
   metaInfo() {
     return {
@@ -569,7 +568,9 @@ export default class Home extends Vue {
 
   @Watch("loggedUser")
   detectEmptyUserSettings(loggedUser: IUser): void {
+    console.debug("Try to detect empty user settings", loggedUser);
     if (loggedUser?.id && loggedUser?.settings === null) {
+      console.debug("No user settings, pushing to onboarding assistant");
       this.$router.push({
         name: RouteName.WELCOME_SCREEN,
         params: { step: "1" },
diff --git a/js/src/views/User/SettingsOnboard.vue b/js/src/views/User/SettingsOnboard.vue
index d0920768d..f5ef580b6 100644
--- a/js/src/views/User/SettingsOnboard.vue
+++ b/js/src/views/User/SettingsOnboard.vue
@@ -49,7 +49,8 @@
   </div>
 </template>
 <script lang="ts">
-import { Component, Prop, Vue } from "vue-property-decorator";
+import { USER_SETTINGS } from "@/graphql/user";
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 import { TIMEZONES } from "../../graphql/config";
 import RouteName from "../../router/name";
 import { IConfig } from "../../types/config.model";
@@ -65,6 +66,7 @@ import { IConfig } from "../../types/config.model";
   },
   apollo: {
     config: TIMEZONES,
+    loggedUser: USER_SETTINGS,
   },
   metaInfo() {
     return {
@@ -82,6 +84,11 @@ export default class SettingsOnboard extends Vue {
   get stepIndex(): number {
     return this.step - 1;
   }
+
+  @Watch("stepIndex")
+  refetchUserSettings() {
+    this.$apollo.queries.loggedUser.refetch();
+  }
 }
 </script>
 <style scoped lang="scss">