This commit is contained in:
@@ -205,6 +205,13 @@
|
||||
@edit="editMember"
|
||||
/>
|
||||
|
||||
<!-- Create Portal Account Dialog -->
|
||||
<CreatePortalAccountDialog
|
||||
v-model="showCreatePortalAccountDialog"
|
||||
:member="selectedMemberForPortalAccount"
|
||||
@account-created="handlePortalAccountCreated"
|
||||
/>
|
||||
|
||||
<!-- Delete Confirmation Dialog -->
|
||||
<v-dialog v-model="showDeleteDialog" max-width="400">
|
||||
<v-card>
|
||||
@@ -285,7 +292,9 @@ const showAddDialog = ref(false);
|
||||
const showEditDialog = ref(false);
|
||||
const showViewDialog = ref(false);
|
||||
const showDeleteDialog = ref(false);
|
||||
const showCreatePortalAccountDialog = ref(false);
|
||||
const selectedMember = ref<Member | null>(null);
|
||||
const selectedMemberForPortalAccount = ref<Member | null>(null);
|
||||
const deleteLoading = ref(false);
|
||||
|
||||
// Success handling
|
||||
@@ -512,55 +521,20 @@ const handleMemberUpdated = (updatedMember: Member) => {
|
||||
successMessage.value = `${updatedMember.FullName} has been updated successfully.`;
|
||||
};
|
||||
|
||||
const createPortalAccount = async (member: Member) => {
|
||||
if (!member.Id || creatingPortalAccountIds.value.includes(member.Id)) return;
|
||||
|
||||
// Add to creating array to show loading state
|
||||
creatingPortalAccountIds.value.push(member.Id);
|
||||
|
||||
try {
|
||||
const response = await $fetch<any>(`/api/members/${member.Id}/create-portal-account`, {
|
||||
method: 'POST'
|
||||
});
|
||||
const createPortalAccount = (member: Member) => {
|
||||
selectedMemberForPortalAccount.value = member;
|
||||
showCreatePortalAccountDialog.value = true;
|
||||
};
|
||||
|
||||
if (response?.success) {
|
||||
// Update the member in the local array to reflect the new keycloak_id
|
||||
const index = members.value.findIndex(m => m.Id === member.Id);
|
||||
if (index !== -1) {
|
||||
// Get keycloak_id from response.data
|
||||
members.value[index] = { ...members.value[index], keycloak_id: response.data?.keycloak_id };
|
||||
}
|
||||
|
||||
showSuccess.value = true;
|
||||
successMessage.value = response.message || `Portal account created successfully for ${member.FullName}.`;
|
||||
} else {
|
||||
throw new Error(response?.message || 'Failed to create portal account');
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.error('Error creating portal account:', err);
|
||||
|
||||
// Better error handling
|
||||
let errorMessage = 'Failed to create portal account. Please try again.';
|
||||
if (err.statusCode === 409) {
|
||||
errorMessage = 'This member already has a portal account or a user with this email already exists.';
|
||||
} else if (err.statusCode === 400) {
|
||||
errorMessage = 'Member must have email, first name, and last name to create a portal account.';
|
||||
} else if (err.data?.message) {
|
||||
errorMessage = err.data.message;
|
||||
} else if (err.message) {
|
||||
errorMessage = err.message;
|
||||
}
|
||||
|
||||
// Show error in snackbar
|
||||
showSuccess.value = true; // Reuse success snackbar for errors
|
||||
successMessage.value = errorMessage;
|
||||
} finally {
|
||||
// Remove from creating array
|
||||
const index = creatingPortalAccountIds.value.indexOf(member.Id);
|
||||
if (index > -1) {
|
||||
creatingPortalAccountIds.value.splice(index, 1);
|
||||
}
|
||||
const handlePortalAccountCreated = (updatedMember: Member) => {
|
||||
// Update the member in the local array to reflect the new keycloak_id
|
||||
const index = members.value.findIndex(m => m.Id === updatedMember.Id);
|
||||
if (index !== -1) {
|
||||
members.value[index] = updatedMember;
|
||||
}
|
||||
|
||||
showSuccess.value = true;
|
||||
successMessage.value = `Portal account created successfully for ${updatedMember.FullName}.`;
|
||||
};
|
||||
|
||||
// Overdue dues handlers
|
||||
|
||||
Reference in New Issue
Block a user