Browse Source

fix: banner de dados de pagamento apenas no primeiro acesso do cliente

Gustavo Zanatta 2 weeks ago
parent
commit
e42e6a47a1
2 changed files with 16 additions and 1 deletions
  1. 11 1
      src/pages/dashboard/DashboardPage.vue
  2. 5 0
      src/stores/user.js

+ 11 - 1
src/pages/dashboard/DashboardPage.vue

@@ -13,7 +13,7 @@
         />
         <DashboardRegistrationIncomplete v-if="!registrationComplete" />
         <DashboardSummaryInfos v-else :data="summaryInfos" />
-        <DashboardPaymentIncomplete v-if="!hasPaymentMethods" />
+        <DashboardPaymentIncomplete v-if="showPaymentBanner" />
         <DashboardPendingSchedules
           v-if="pendingServicePackages.length > 0"
           :data="pendingServicePackages"
@@ -62,6 +62,7 @@ import { onMounted, ref, computed } from 'vue';
 import { useI18n } from 'vue-i18n';
 import { LocalStorage, useQuasar } from 'quasar';
 import { dadosDashboard } from 'src/api/dashboard';
+import { updateMe } from 'src/api/user';
 import { userStore } from 'src/stores/user';
 import NextSchedulesDetailsDialog from 'src/components/dashboard/NextSchedulesDetailsDialog.vue';
 import ScheduleRatingDialog from 'src/components/dashboard/ScheduleRatingDialog.vue';
@@ -87,6 +88,7 @@ const todaySchedules = ref([]);
 const notifications = ref([]);
 const loading = ref(true);
 const registrationComplete = computed(() => store.user?.registration_complete ?? true);
+const showPaymentBanner = ref(false);
 
 const successModalKey = ref(
   route.query.success ??
@@ -239,6 +241,14 @@ const openRatingDialog = (schedule) => {
 onMounted(async () => {
   await reloadDashboard();
   maybeOpenSuccessModal();
+
+  const isFirstAccess = store.user?.client?.first_access ?? false;
+  showPaymentBanner.value = isFirstAccess && !hasPaymentMethods.value;
+
+  if (isFirstAccess) {
+    updateMe({ first_access: false }).catch(() => {});
+    store.markFirstAccessSeen();
+  }
 });
 </script>
 

+ 5 - 0
src/stores/user.js

@@ -28,6 +28,10 @@ export const userStore = defineStore("user", () => {
     isAdmin.value = normalized?.type === "admin";
   };
 
+  const markFirstAccessSeen = () => {
+    if (user.value?.client) user.value.client.first_access = false;
+  };
+
   const resetUser = () => {
     user.value = null;
     isAdmin.value = false;
@@ -45,6 +49,7 @@ export const userStore = defineStore("user", () => {
     setUser,
     resetUser,
     fetchUser,
+    markFirstAccessSeen,
     accessToken,
   };
 });