refactor(members): consolidate Platform Admin + Org members into shared useMembers
- useMembers.ts gains a scope param ('organisation' | 'platform') on list,
invite, update-role, and remove; endpoints branch accordingly.
- Platform Admin's [id].vue now consumes useMembers via scope='platform';
deleted the duplicated useInviteOrganisationMember / useRemoveOrganisationMember
/ useUpdateOrganisationMemberRole helpers from useAdmin.ts.
- Deduplicated InviteMemberPayload / UpdateMemberRolePayload / AdminOrganisationMember
from types/admin.ts; Member is now the canonical type.
- SettingsMembers.vue and EditMemberRoleDialog.vue removed (no remaining imports).
- InviteMemberDialog accepts an optional scope prop and is restricted to the
two organisation-level roles matching the /members UX.
This commit is contained in:
@@ -3,13 +3,16 @@ import {
|
||||
useAdminOrganisation,
|
||||
useUpdateAdminOrganisation,
|
||||
useDeleteAdminOrganisation,
|
||||
useInviteOrganisationMember,
|
||||
useRemoveOrganisationMember,
|
||||
useUpdateOrganisationMemberRole,
|
||||
} from '@/composables/api/useAdmin'
|
||||
import {
|
||||
useInviteMember,
|
||||
useRemoveMember,
|
||||
useUpdateMemberRole,
|
||||
} from '@/composables/api/useMembers'
|
||||
import { useAuthStore } from '@/stores/useAuthStore'
|
||||
import { useOrganisationStore } from '@/stores/useOrganisationStore'
|
||||
import type { BillingStatus, InviteMemberPayload, UpdateAdminOrganisationPayload } from '@/types/admin'
|
||||
import type { BillingStatus, UpdateAdminOrganisationPayload } from '@/types/admin'
|
||||
import type { InviteMemberPayload, OrganisationRole } from '@/types/member'
|
||||
|
||||
definePage({
|
||||
meta: {
|
||||
@@ -166,7 +169,7 @@ function openAsOrganiser() {
|
||||
const isInviteDialogOpen = ref(false)
|
||||
const inviteForm = ref<InviteMemberPayload>({ email: '', role: 'org_member' })
|
||||
const inviteError = ref('')
|
||||
const { mutate: inviteMember, isPending: isInviting } = useInviteOrganisationMember()
|
||||
const { mutate: inviteMember, isPending: isInviting } = useInviteMember('platform', orgId)
|
||||
|
||||
function openInviteDialog() {
|
||||
inviteForm.value = { email: '', role: 'org_member' }
|
||||
@@ -177,11 +180,11 @@ function openInviteDialog() {
|
||||
function submitInvite() {
|
||||
inviteError.value = ''
|
||||
inviteMember(
|
||||
{ organisationId: orgId.value, payload: inviteForm.value },
|
||||
inviteForm.value,
|
||||
{
|
||||
onSuccess: (data) => {
|
||||
onSuccess: () => {
|
||||
isInviteDialogOpen.value = false
|
||||
showSnackbar(data.message ?? 'Uitnodiging verstuurd', 'success')
|
||||
showSnackbar('Uitnodiging verstuurd', 'success')
|
||||
},
|
||||
onError: (err: unknown) => {
|
||||
const error = err as { response?: { data?: { message?: string } } }
|
||||
@@ -194,7 +197,7 @@ function submitInvite() {
|
||||
// ─── Remove Member ─────────────────────────────────────────
|
||||
const isRemoveDialogOpen = ref(false)
|
||||
const memberToRemove = ref<{ id: string; full_name: string } | null>(null)
|
||||
const { mutate: removeMember, isPending: isRemoving } = useRemoveOrganisationMember()
|
||||
const { mutate: removeMember, isPending: isRemoving } = useRemoveMember('platform', orgId)
|
||||
|
||||
function openRemoveDialog(member: { id: string; full_name: string }) {
|
||||
memberToRemove.value = member
|
||||
@@ -203,24 +206,21 @@ function openRemoveDialog(member: { id: string; full_name: string }) {
|
||||
|
||||
function confirmRemove() {
|
||||
if (!memberToRemove.value) return
|
||||
removeMember(
|
||||
{ organisationId: orgId.value, userId: memberToRemove.value.id },
|
||||
{
|
||||
onSuccess: () => {
|
||||
isRemoveDialogOpen.value = false
|
||||
memberToRemove.value = null
|
||||
showSnackbar('Lid verwijderd', 'success')
|
||||
},
|
||||
removeMember(memberToRemove.value.id, {
|
||||
onSuccess: () => {
|
||||
isRemoveDialogOpen.value = false
|
||||
memberToRemove.value = null
|
||||
showSnackbar('Lid verwijderd', 'success')
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
// ─── Update Member Role ────────────────────────────────────
|
||||
const { mutate: updateMemberRole } = useUpdateOrganisationMemberRole()
|
||||
const { mutate: updateMemberRole } = useUpdateMemberRole('platform', orgId)
|
||||
|
||||
function onRoleChange(userId: string, newRole: string) {
|
||||
updateMemberRole(
|
||||
{ organisationId: orgId.value, userId, payload: { role: newRole } },
|
||||
{ userId, role: newRole as OrganisationRole },
|
||||
{
|
||||
onSuccess: () => {
|
||||
showSnackbar('Rol bijgewerkt', 'success')
|
||||
|
||||
Reference in New Issue
Block a user