From 93831c372a8c9a9056c8541f6eae734b5fe7e33c Mon Sep 17 00:00:00 2001
From: Trent Larson <trent@trentlarson.com>
Date: Wed, 5 Feb 2025 19:03:54 -0700
Subject: [PATCH] fix problem with you-are-missing message and refactor other
 messages in onboard meeting

---
 src/components/MembersList.vue          | 59 ++++++++++++++++++++-----
 src/views/ContactsView.vue              | 59 +++++++++++++++++++++++--
 src/views/OnboardMeetingMembersView.vue |  9 ----
 src/views/OnboardMeetingSetupView.vue   |  2 +-
 4 files changed, 104 insertions(+), 25 deletions(-)

diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue
index aee282ea1..24983ca0d 100644
--- a/src/components/MembersList.vue
+++ b/src/components/MembersList.vue
@@ -6,11 +6,57 @@
     </div>
 
     <!-- Members List -->
+
+    <p
+      v-if="decryptedMembers.length < members.length"
+      class="text-center text-red-600 py-4"
+    >
+      {{
+        decryptFailureMessage ||
+        "Your password failed. Please go back and try again."
+      }}
+    </p>
+
     <div v-else class="space-y-4">
       <div v-if="missingMyself" class="py-4">
         You are not yet admitted. The organizer will admit you.
       </div>
 
+      <div>
+        <span
+          v-if="showOrganizerTools && isOrganizer"
+          class="inline-flex items-center flex-wrap"
+        >
+          <span>Use these next to each person to add/remove them to/from the</span>
+          <span class="inline-flex items-center whitespace-nowrap">
+            <span>&nbsp;meeting:</span>
+            <span
+              class="ml-2 w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors"
+            >
+              <fa icon="plus" class="text-sm" />
+            </span>
+            <span
+              class="ml-2 w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors"
+            >
+              <fa icon="minus" class="text-sm" />
+            </span>
+          </span>
+        </span>
+      </div>
+      <div>
+        <span class="inline-flex items-center flex-wrap">
+          <span>Use this next to each person to add them to your</span>
+          <span class="inline-flex items-center whitespace-nowrap">
+            <span>&nbsp;contacts:</span>
+            <span
+              class="ml-2 w-8 h-8 flex items-center justify-center rounded-full bg-green-100 text-green-600"
+            >
+              <fa icon="circle-user" class="text-xl" />
+            </span>
+          </span>
+        </span>
+      </div>
+
       <div v-if="members.length > 0" class="flex justify-end">
         <button
           @click="fetchMembers"
@@ -90,15 +136,6 @@
       <p v-if="members.length === 0" class="text-gray-500 py-4">
         No members have joined this meeting yet
       </p>
-      <p
-        v-if="decryptedMembers.length < members.length"
-        class="text-center text-red-600 py-4"
-      >
-        {{
-          decryptFailureMessage ||
-          "Your password failed. Please go back and try again."
-        }}
-      </p>
     </div>
   </div>
 </template>
@@ -287,9 +324,7 @@ export default class MembersList extends Vue {
       }
       isFirstEntry = false;
     }
-    if (!foundMyself) {
-      this.missingMyself = true;
-    }
+    this.missingMyself = !foundMyself;
   }
 
   informAboutAdmission() {
diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue
index 772805278..a9074f4a4 100644
--- a/src/views/ContactsView.vue
+++ b/src/views/ContactsView.vue
@@ -30,12 +30,13 @@
         >
           <fa icon="envelope-open-text" class="fa-fw text-2xl" />
         </router-link>
-        <router-link
-          :to="{ name: 'onboard-meeting-setup' }"
+
+        <button
+          @click="showOnboardMeetingDialog()"
           class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
         >
           <fa icon="chair" class="fa-fw text-2xl" />
-        </router-link>
+        </button>
       </span>
       <span v-else class="flex">
         <span
@@ -1398,5 +1399,57 @@ export default class ContactsView extends Vue {
       5000,
     );
   }
+
+  private async showOnboardMeetingDialog() {
+    try {
+      // First check if they're in a meeting
+      const headers = await getHeaders(this.activeDid);
+      const memberResponse = await this.axios.get(
+        this.apiServer + "/api/partner/groupOnboardMember",
+        { headers }
+      );
+
+      if (memberResponse.data.data) {
+        // They're in a meeting, check if they're the host
+        const hostResponse = await this.axios.get(
+          this.apiServer + "/api/partner/groupOnboard",
+          { headers }
+        );
+
+        if (hostResponse.data.data) {
+          // They're the host, take them to setup
+          (this.$router as Router).push({ name: "onboard-meeting-setup" });
+        } else {
+          // They're not the host, take them to list
+          (this.$router as Router).push({ name: "onboard-meeting-list" });
+        }
+      } else {
+        // They're not in a meeting, show the dialog
+        this.$notify(
+          {
+            group: "modal",
+            type: "confirm",
+            title: "Onboarding Meeting",
+            text: "Would you like to start a new meeting?",
+            onYes: () => {
+              (this.$router as Router).push({ name: "onboard-meeting-setup" });
+            },
+            yesText: "Start New Meeting",
+            onNo: () => {
+              (this.$router as Router).push({ name: "onboard-meeting-list" });
+            },
+            noText: "Join Existing Meeting"
+          },
+          -1
+        );
+      }
+    } catch (error) {
+      logConsoleAndDb("Error checking meeting status:" + errorStringForLog(error));
+      this.danger(
+        "There was an error checking your meeting status.",
+        "Meeting Error"
+      );
+    }
+  }
 }
 </script>
diff --git a/src/views/OnboardMeetingMembersView.vue b/src/views/OnboardMeetingMembersView.vue
index d80e5e04c..6618fc357 100644
--- a/src/views/OnboardMeetingMembersView.vue
+++ b/src/views/OnboardMeetingMembersView.vue
@@ -8,15 +8,6 @@
       Meeting Members
     </h1>
 
-    <!-- Back Button -->
-    <button
-      @click="$router.back()"
-      class="mb-6 flex items-center text-blue-600 hover:text-blue-800"
-    >
-      <fa icon="arrow-left" class="mr-2" />
-      Back to Meetings
-    </button>
-
     <!-- Error State -->
     <div v-if="errorMessage">
       <div class="text-center text-red-600 py-8">
diff --git a/src/views/OnboardMeetingSetupView.vue b/src/views/OnboardMeetingSetupView.vue
index 5d3011c27..d6af370ed 100644
--- a/src/views/OnboardMeetingSetupView.vue
+++ b/src/views/OnboardMeetingSetupView.vue
@@ -211,7 +211,7 @@
         :decrypt-failure-message="DECRYPT_FAILURE_MESSAGE"
         :show-organizer-tools="true"
         @error="handleMembersError"
-        class="mt-8"
+        class="mt-4"
       />
     </div>