feat: admin Visas tab — table + edit dialog + visibility toggle

Activates the previously-disabled Visas tab on /admin/logistics.

VisasTab renders a flat table joined per attendee per project, sorted
by status priority. Status filter pills mirror the Confirmations tab.
The header carries a "Visible to teams" Switch backed by a new
logistics.getVisaVisibility query and the existing setVisaVisibility
mutation; toggling it controls whether members see their own status.

VisaEditDialog is a per-row editor with a status dropdown,
nationality input, three native date inputs (invitation / appointment
/ decision), and a notes textarea. No file uploads — the platform
deliberately holds zero document artifacts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt
2026-04-28 19:37:55 +02:00
parent 7c86e42413
commit fe630e0e2d
5 changed files with 506 additions and 3 deletions

View File

@@ -113,7 +113,11 @@ describe('logistics.listVisaApplications', () => {
expect(result).toHaveLength(3)
// REQUESTED (0) → APPOINTMENT_BOOKED (2) → GRANTED (3)
expect(result.map((r) => r.status)).toEqual(['REQUESTED', 'APPOINTMENT_BOOKED', 'GRANTED'])
expect(result.map((r: (typeof result)[number]) => r.status)).toEqual([
'REQUESTED',
'APPOINTMENT_BOOKED',
'GRANTED',
])
expect(result[0].id).toBe(app.id)
})
})