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> 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> 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>