Add invitation frontend: invite modal, pending invitations, no-company view

Members Index:
- "Invite Member" button opens InviteMemberModal (email + role dropdown)
- Pending invitations section shows below members table with cancel buttons
- Members store gains inviteMember, fetchPendingInvitations, cancelInvitation

CompanySwitcher:
- Shows pending invitations greyed out below active companies
- Each with Accept/Decline mini-buttons
- Accepting refreshes bootstrap and switches to new company

NoCompanyView:
- Standalone page for users with zero accepted companies
- Shows pending invitations with Accept/Decline or "no companies" message
- Route: /admin/no-company

Invitation Pinia store:
- Manages user's own pending invitations (fetchPending, accept, decline)
- Bootstrap populates invitations from API response

Global store:
- Bootstrap action stores pending_invitations from response
This commit is contained in:
Darko Gjorgjijoski
2026-04-03 23:20:41 +02:00
parent 8a6c085288
commit 6343b4a17f
9 changed files with 491 additions and 2 deletions

View File

@@ -70,6 +70,13 @@ export const useGlobalStore = (useWindow = false) => {
moduleStore.apiToken = response.data.global_settings.api_token
moduleStore.enableModules = response.data.modules
// invitation store
if (response.data.pending_invitations) {
const { useInvitationStore } = await import('@/scripts/admin/stores/invitation')
const invitationStore = useInvitationStore()
invitationStore.setPendingInvitations(response.data.pending_invitations)
}
// company store
companyStore.companies = response.data.companies
companyStore.selectedCompany = response.data.current_company