fix: Phase 2 QA — all 25 remaining HIGH/MEDIUM/LOW issues

HIGH fixes (7):
- H1: VNCdirectory admin i18n — 30+ translation keys added
- H2: handleSave try/catch with error toast
- H3: Free/busy accountId scoping
- H4: cancelEventBookings filter by eventId
- H5: Resource picker static apiFetch import
- H6: Sharing-store toast messages via lastMessage state
- H7: roleLabel for all resource types

MEDIUM fixes (11):
- M1: identitySignatureMap cleanup on delete
- M2: Now-line relative positioning
- M3: Radial menu disabled item keyboard nav
- M4: Radial menu stable event listener via refs
- M5: cancelBooking error on missing booking
- M6: PasswordRow isMasked state flag
- M7: Extract shared rights into lib/sharing-rights.ts
- M8: VNCtalk client server-side guard
- M9: Collabora configManager instead of process.env
- M10: CONFIG_ENV_MAP VNCdirectory fields
- M11: SENSITIVE_CONFIG_KEYS field name unification

LOW fixes (7):
- L1-L3: Unused imports removed
- L4: aria-labels on close, clear, search, spinner
- L5-L7: Comments for intentional patterns, null guard
This commit is contained in:
Bernd Rodler
2026-08-07 14:21:07 +02:00
parent 2e29af50d6
commit b98ab59f0d
24 changed files with 662 additions and 487 deletions
+9 -4
View File
@@ -121,7 +121,11 @@ export const useResourceStore = create<ResourceState>()((set, get) => ({
cancelBooking: async (bookingId: string) => {
const { bookings } = get();
const booking = bookings.find((b) => b.id === bookingId);
if (!booking) return;
if (!booking) {
console.error(`cancelBooking: booking with id "${bookingId}" not found`);
set({ bookingError: `Booking ${bookingId} not found` });
return;
}
try {
const res = await apiFetch(
@@ -136,9 +140,10 @@ export const useResourceStore = create<ResourceState>()((set, get) => ({
}
},
cancelEventBookings: async (_eventId: string) => {
cancelEventBookings: async (eventId: string) => {
const { bookings } = get();
for (const booking of bookings) {
const eventBookings = bookings.filter((b) => b.eventId === eventId);
for (const booking of eventBookings) {
try {
const res = await apiFetch(
`/api/resources/${booking.resourceId}/book/${booking.id}`,
@@ -149,6 +154,6 @@ export const useResourceStore = create<ResourceState>()((set, get) => ({
// silently fail
}
}
set({ bookings: [] });
set({ bookings: bookings.filter((b) => b.eventId !== eventId) });
},
}));