diff --git a/ui/src/components/roles/addMember.vue b/ui/src/components/roles/addMember.vue index 2294c3e..d127408 100644 --- a/ui/src/components/roles/addMember.vue +++ b/ui/src/components/roles/addMember.vue @@ -13,6 +13,7 @@ import Button from '../ui/button/Button.vue'; import InputGroup from '../ui/input-group/InputGroup.vue'; import InputGroupAddon from '../ui/input-group/InputGroupAddon.vue'; import { SearchIcon } from 'lucide-vue-next'; +import Spinner from '../ui/spinner/Spinner.vue'; const props = defineProps<{ allMembers: MemberLight[], @@ -43,8 +44,11 @@ function openDialog() { showAddMemberDialog.value = true; } - +const submitting = ref(false); async function handleAddMember() { + //catch double submit + if (submitting.value) return; + submitting.value = true; //guard if (memberToAdd.value == null) return; @@ -52,6 +56,7 @@ async function handleAddMember() { await addMemberToRole(memberToAdd.value.id, props.role.id); emit('submit'); showAddMemberDialog.value = false; + submitting.value = false; } @@ -94,8 +99,11 @@ async function handleAddMember() { -