From a099f84d1b008a54a7d05d48d01f32b0d3902e12 Mon Sep 17 00:00:00 2001 From: Stephen Adamson Date: Thu, 25 Jun 2026 15:10:07 +0100 Subject: [PATCH] style: fix no-unused-vars -- prefix unused catch bindings, remove dead code, suppress template-use false positives --- .../account/EditRequestModal.svelte | 1 - .../lib/components/admin/ApprovalModal.svelte | 8 +- .../admin/BookingCreateModal.svelte | 15 +-- .../lib/components/admin/BookingModal.svelte | 4 +- .../lib/components/admin/BookingsCard.svelte | 1 - .../admin/DiscountsManagement.svelte | 24 ---- .../components/admin/EditRequestModal.svelte | 2 +- .../admin/GiftCardsManagement.svelte | 48 ++++---- .../lib/components/admin/ImageUpload.svelte | 4 +- .../admin/ServicesManagement.svelte | 1 - .../lib/components/admin/WalkInBooking.svelte | 26 ++-- .../components/admin/WalkInCreateModal.svelte | 11 +- .../lib/components/booking/BookingFlow.svelte | 115 +++++------------- .../components/payments/PaymentModal.svelte | 22 ++-- .../payments/TillPaymentModal.svelte | 12 +- .../payments/UserPaymentModal.svelte | 24 ++-- .../ui/phone-input/PhoneInput.svelte | 6 +- .../routes/admin/notifications/+page.svelte | 3 +- 18 files changed, 121 insertions(+), 206 deletions(-) diff --git a/frontend/src/lib/components/account/EditRequestModal.svelte b/frontend/src/lib/components/account/EditRequestModal.svelte index a1c0070..ecc21ea 100644 --- a/frontend/src/lib/components/account/EditRequestModal.svelte +++ b/frontend/src/lib/components/account/EditRequestModal.svelte @@ -11,7 +11,6 @@ import PolicyPopover from '$lib/components/ui/policyPopover.svelte'; import type { Booking, - BookingDiscount, Service, WorkingHoursDay, AvailableHoursDay diff --git a/frontend/src/lib/components/admin/ApprovalModal.svelte b/frontend/src/lib/components/admin/ApprovalModal.svelte index c147102..b09e8fe 100644 --- a/frontend/src/lib/components/admin/ApprovalModal.svelte +++ b/frontend/src/lib/components/admin/ApprovalModal.svelte @@ -3,7 +3,7 @@ import { authStore } from '$lib/stores/auth.svelte'; import { toast } from 'svelte-sonner'; import { sanitizeText } from '$lib/utils/toast-safe'; - import { formatDateTime, formatDuration, calculateAge } from '$lib/utils/format'; + import { formatDateTime, formatDuration } from '$lib/utils/format'; import { formatUserName } from '$lib/utils/nameDisplay'; import { parseWallClockDate } from '$lib/utils/timeSlots'; import * as Modal from '$lib/components/ui/dialog'; @@ -151,7 +151,7 @@ const data = await response.json(); overlappingBookings = data.bookings || []; } - } catch (err) { + } catch (_err) { // Silently handle - overlapping bookings couldn't be fetched } finally { loadingOverlaps = false; @@ -339,7 +339,7 @@ const text = await response.text(); toast.error('Failed to confirm: ' + sanitizeText(text), { id: loadingToast }); } - } catch (err) { + } catch (_err) { toast.error('Network error confirming booking', { id: loadingToast }); } finally { submitting = false; @@ -368,7 +368,7 @@ const text = await response.text(); toast.error('Failed to decline: ' + sanitizeText(text), { id: loadingToast }); } - } catch (err) { + } catch (_err) { toast.error('Network error declining booking', { id: loadingToast }); } finally { submitting = false; diff --git a/frontend/src/lib/components/admin/BookingCreateModal.svelte b/frontend/src/lib/components/admin/BookingCreateModal.svelte index 0d87a92..ec11f5a 100644 --- a/frontend/src/lib/components/admin/BookingCreateModal.svelte +++ b/frontend/src/lib/components/admin/BookingCreateModal.svelte @@ -146,8 +146,6 @@ !customServiceErrors.minimum_age_required ); - function toggleCustomForm(show: boolean) { - showCustomCreateForm = show; if (show) { newCustomService = { name: '', @@ -326,7 +324,6 @@ : !!(guestName.trim() && guestPhone.trim() && isValidUKPhone(guestPhone)) ); const canProceedStep2 = $derived(selectedServices.length > 0); - const canProceedStep3 = $derived(true); // Overrides are optional const canProceedStep4 = $derived(!!(selectedDate && selectedTime)); /** Whether the currently selected time slot is out-of-hours */ @@ -487,7 +484,7 @@ (user: { account_role: string }) => !excludedRoles.includes(user.account_role) ); } - } catch (err) { + } catch (_err) { toast.error('Failed to load users'); } finally { loadingUsers = false; @@ -508,7 +505,7 @@ if (response.ok) { services = await response.json(); } - } catch (err) { + } catch (_err) { toast.error('Failed to load services'); } finally { loadingServices = false; @@ -582,7 +579,7 @@ workingHours = { ...workingHours, ...whMap }; availableHours = { ...availableHours, ...ahMap }; } - } catch (err) { + } catch (_err) { toast.error('Failed to load availability'); } finally { _loadingWorkingHours = false; @@ -652,7 +649,7 @@ workingHours = { ...workingHours, ...whMap }; availableHours = { ...availableHours, ...ahMap }; } - } catch (err) { + } catch (_err) { toast.error('Failed to load availability'); } finally { _loadingWorkingHours = false; @@ -742,7 +739,7 @@ toast.error(`Failed to reserve slot: ${errorText}`); return false; } - } catch (err) { + } catch (_err) { toast.error('Failed to reserve slot'); return false; } finally { @@ -1042,7 +1039,7 @@ const errorText = await res.text(); toast.error(`Failed to create booking: ${errorText}`); } - } catch (err) { + } catch (_err) { toast.error('An error occurred while creating booking'); } finally { submitting = false; diff --git a/frontend/src/lib/components/admin/BookingModal.svelte b/frontend/src/lib/components/admin/BookingModal.svelte index bd4080a..f0b15a0 100644 --- a/frontend/src/lib/components/admin/BookingModal.svelte +++ b/frontend/src/lib/components/admin/BookingModal.svelte @@ -86,7 +86,7 @@ const text = await response.text(); toast.error('Failed to cancel: ' + text); } - } catch (err) { + } catch (_err) { toast.error('Network error'); } finally { cancelling = false; @@ -213,7 +213,7 @@ const text = await response.text(); toast.error('Failed to load booking details: ' + text); } - } catch (err) { + } catch (_err) { console.error('Error fetching booking details:', err); toast.error('Network error loading booking details'); } diff --git a/frontend/src/lib/components/admin/BookingsCard.svelte b/frontend/src/lib/components/admin/BookingsCard.svelte index c10b6cd..086a69f 100644 --- a/frontend/src/lib/components/admin/BookingsCard.svelte +++ b/frontend/src/lib/components/admin/BookingsCard.svelte @@ -7,7 +7,6 @@ import { Button } from '$lib/components/ui/button'; import * as Card from '$lib/components/ui/card'; import { Input } from '$lib/components/ui/input'; - import { Skeleton } from '$lib/components/ui/skeleton'; import type { Booking } from '$lib/types/booking'; import { formatUserName } from '$lib/utils/nameDisplay'; diff --git a/frontend/src/lib/components/admin/DiscountsManagement.svelte b/frontend/src/lib/components/admin/DiscountsManagement.svelte index a115fbd..12fc160 100644 --- a/frontend/src/lib/components/admin/DiscountsManagement.svelte +++ b/frontend/src/lib/components/admin/DiscountsManagement.svelte @@ -9,7 +9,6 @@ import * as Textarea from '$lib/components/ui/textarea'; import { Skeleton } from '$lib/components/ui/skeleton'; import * as Modal from '$lib/components/ui/dialog'; - import { Badge } from '$lib/components/ui/badge'; import StatusBadge from '$lib/components/ui/StatusBadge.svelte'; type Campaign = { @@ -49,11 +48,6 @@ anniversary: 'Anniversary' }; - const SCOPE_LABELS: Record = { - all_bookings: 'All bookings', - first_booking_only: 'First booking only', - new_customers_only: 'New customers only' - }; let campaigns = $state([]); let loading = $state(true); @@ -139,24 +133,6 @@ showModal = true; } - function openEditModal(c: Campaign) { - editingCampaign = c; - form = { - name: c.name, - description: c.description || '', - campaign_type: c.campaign_type, - discount_percent: c.discount_percent, - scope: c.scope || 'all_bookings', - start_date: c.start_date ? c.start_date.slice(0, 10) : '', - end_date: c.end_date ? c.end_date.slice(0, 10) : '', - milestone_type: c.milestone_type || 'per_user_booking_count', - milestone_value: c.milestone_value || 0, - milestone_unit: c.milestone_unit || 'bookings', - max_redemptions: c.max_redemptions || 0 - }; - errors = {}; - showModal = true; - } async function submitForm() { errors = {}; diff --git a/frontend/src/lib/components/admin/EditRequestModal.svelte b/frontend/src/lib/components/admin/EditRequestModal.svelte index 6e13e04..aac9d92 100644 --- a/frontend/src/lib/components/admin/EditRequestModal.svelte +++ b/frontend/src/lib/components/admin/EditRequestModal.svelte @@ -1,5 +1,5 @@
diff --git a/frontend/src/lib/components/payments/PaymentModal.svelte b/frontend/src/lib/components/payments/PaymentModal.svelte index 474e982..4ae051a 100644 --- a/frontend/src/lib/components/payments/PaymentModal.svelte +++ b/frontend/src/lib/components/payments/PaymentModal.svelte @@ -62,7 +62,7 @@ ); let customerBalance = $state(0); - let loadingCustomerBalance = $state(false); + let _loadingCustomerBalance = $state(false); let giftCardPaymentAmount = $state(''); let savedCardList = $state< Array<{ @@ -73,12 +73,12 @@ cardholder_name?: string; }> >([]); - let loadingSavedCardList = $state(false); + let _loadingSavedCardList = $state(false); async function fetchCustomerGiftCardBalance() { const targetUserId = booking.user_id ?? booking.user?.id; if (!targetUserId) return; - loadingCustomerBalance = true; + _loadingCustomerBalance = true; try { const res = await fetch(`/api/admin/users/${targetUserId}/giftcard-balance`, { headers: { Authorization: `Bearer ${authStore.currentToken}` } @@ -94,14 +94,14 @@ } catch { // ignore } finally { - loadingCustomerBalance = false; + _loadingCustomerBalance = false; } } async function fetchSavedCardList() { const targetUserId = booking.user_id ?? booking.user?.id; if (!targetUserId) return; - loadingSavedCardList = true; + _loadingSavedCardList = true; try { const res = await fetch(`/api/admin/users/${targetUserId}/payment-methods`, { headers: { Authorization: `Bearer ${authStore.currentToken}` } @@ -112,7 +112,7 @@ } catch { // ignore } finally { - loadingSavedCardList = false; + _loadingSavedCardList = false; } } @@ -297,7 +297,7 @@ checkoutId = data.checkout_id; status = 'card-polling'; startPolling(); - } catch (err) { + } catch (_err) { status = 'error'; error = err instanceof Error ? err.message : 'Failed to initiate payment'; toast.error(error ?? 'Unknown error'); @@ -344,7 +344,7 @@ error = data.error_message || 'Payment failed'; toast.error(error as string); } - } catch (err) { + } catch (_err) { stopPolling(); status = 'error'; error = 'Failed to check payment status'; @@ -450,7 +450,7 @@ }; toast.success('Cash payment recorded'); onComplete(paymentResult); - } catch (err) { + } catch (_err) { status = 'error'; error = err instanceof Error ? err.message : 'Failed to process payment'; toast.error(error ?? 'Unknown error'); @@ -575,7 +575,7 @@ }; toast.success('Gift card payment recorded'); onComplete(paymentResult); - } catch (err) { + } catch (_err) { status = 'error'; error = err instanceof Error ? err.message : 'Failed to process gift card'; toast.error(error ?? 'Unknown error'); @@ -657,7 +657,7 @@ }; toast.success('Saved card payment successful'); onComplete(paymentResult); - } catch (err) { + } catch (_err) { status = 'error'; error = err instanceof Error ? err.message : 'Failed to process saved card payment'; toast.error(error ?? 'Unknown error'); diff --git a/frontend/src/lib/components/payments/TillPaymentModal.svelte b/frontend/src/lib/components/payments/TillPaymentModal.svelte index 0d68509..1ae968d 100644 --- a/frontend/src/lib/components/payments/TillPaymentModal.svelte +++ b/frontend/src/lib/components/payments/TillPaymentModal.svelte @@ -107,7 +107,7 @@ let cashTendered = $state(0); // Card Machine - let checkoutId = $state(null); + let _checkoutId = $state(null); // Preserve the item_id from the card machine initial response (polling overwrites result) let cardMachineItemID = $state(null); @@ -264,7 +264,7 @@ step = 'customer-selection'; error = null; cashAmount = ''; - checkoutId = null; + _checkoutId = null; cardMachineItemID = null; selectedCustomer = null; isGuest = false; @@ -477,7 +477,7 @@ error = await res.text(); step = 'error'; } - } catch (err) { + } catch (_err) { error = 'Network error processing cash payment'; step = 'error'; } @@ -509,7 +509,7 @@ const data = await res.json(); cardMachineItemID = data.item_id || null; if (data.status === 'pending' && data.checkout_id) { - checkoutId = data.checkout_id; + _checkoutId = data.checkout_id; step = 'card-polling'; pollCheckout(data.checkout_id); } else { @@ -520,7 +520,7 @@ error = await res.text(); step = 'error'; } - } catch (err) { + } catch (_err) { error = 'Network error initiating card machine payment'; step = 'error'; } @@ -603,7 +603,7 @@ error = await res.text(); step = 'error'; } - } catch (err) { + } catch (_err) { error = 'Network error processing card payment'; step = 'error'; } finally { diff --git a/frontend/src/lib/components/payments/UserPaymentModal.svelte b/frontend/src/lib/components/payments/UserPaymentModal.svelte index cd2697f..2fb8424 100644 --- a/frontend/src/lib/components/payments/UserPaymentModal.svelte +++ b/frontend/src/lib/components/payments/UserPaymentModal.svelte @@ -103,7 +103,7 @@ return groups ? groups.join(' ') : digits; } - function handleCardNumberInput(e: Event) { + function _handleCardNumberInput(e: Event) { const input = e.target as HTMLInputElement; const formatted = formatAndPreserveCursor(input, formatCardNumber); newCardNumber = formatted; @@ -117,13 +117,13 @@ return digits; } - function handleExpiryInput(e: Event) { + function _handleExpiryInput(e: Event) { const input = e.target as HTMLInputElement; const formatted = formatAndPreserveCursor(input, formatExpiryDate); newCardExpiry = formatted; } - function handleCvcInput(e: Event) { + function _handleCvcInput(e: Event) { const input = e.target as HTMLInputElement; const formatted = formatAndPreserveCursor(input, (val) => val.replace(/\D/g, '').substring(0, 4) @@ -305,7 +305,7 @@ (booking.status === 'pending_release' && (lockTimer <= 0 || !lockAcquired)) ); - const payButtonError = $derived( + const _payButtonError = $derived( status === 'processing' ? null : !cardSelected @@ -357,7 +357,7 @@ lockAcquired = true; lockTimer = 300; } - } catch (err) { + } catch (_err) { console.error('Failed to acquire payment lock:', err); } } @@ -372,7 +372,7 @@ Authorization: `Bearer ${authStore.currentToken}` } }); - } catch (err) { + } catch (_err) { console.error('Failed to release payment lock:', err); } } @@ -396,7 +396,7 @@ lockTimer = 300; lockAcquired = true; } - } catch (err) { + } catch (_err) { console.error('Failed to renew payment lock:', err); } }, 60000); @@ -432,7 +432,7 @@ if (response.ok) { paymentMethods = await response.json(); } - } catch (err) { + } catch (_err) { console.error('Failed to fetch payment methods:', err); } finally { paymentMethodsLoading = false; @@ -451,7 +451,7 @@ const data = await response.json(); stamps = data.stamps ?? 0; } - } catch (err) { + } catch (_err) { console.error('Failed to fetch loyalty data:', err); } } @@ -505,7 +505,7 @@ const errData = await redemptionResponse.text(); throw new Error(errData || 'Failed to apply loyalty discount'); } - } catch (err) { + } catch (_err) { status = 'error'; const msg = err instanceof Error ? err.message : 'Failed to apply loyalty discount'; error = msg; @@ -568,7 +568,7 @@ fetchPaymentMethods(); onComplete(); releaseLock(); - } catch (err) { + } catch (_err) { status = 'error'; const msg = err instanceof Error ? err.message : 'Payment declined'; error = msg; @@ -642,7 +642,7 @@ if (resp.ok) { discountPreview = await resp.json(); } - } catch (err) { + } catch (_err) { console.error('Failed to fetch discount preview:', err); } }); diff --git a/frontend/src/lib/components/ui/phone-input/PhoneInput.svelte b/frontend/src/lib/components/ui/phone-input/PhoneInput.svelte index 5c85a01..418bc02 100644 --- a/frontend/src/lib/components/ui/phone-input/PhoneInput.svelte +++ b/frontend/src/lib/components/ui/phone-input/PhoneInput.svelte @@ -18,7 +18,7 @@ value = $bindable(''), error = $bindable(''), placeholder = '07123 456789 or +44 7123 456789', - required = false, + _required = false, disabled = false, class: className = '', id = 'phone', @@ -29,7 +29,7 @@ let touched = $state(false); function handleKeyDown(e: KeyboardEvent) { - const target = e.target as HTMLInputElement; + const _target = e.target as HTMLInputElement; const allowedKeys = [ 'Backspace', 'Delete', @@ -57,7 +57,7 @@ } function handleInput(e: Event) { - const target = e.target as HTMLInputElement; + const _target = e.target as HTMLInputElement; const formatted = formatPhoneDisplay(target.value); value = formatted; onvaluechange?.(formatted); diff --git a/frontend/src/routes/admin/notifications/+page.svelte b/frontend/src/routes/admin/notifications/+page.svelte index 1f858c8..b362e76 100644 --- a/frontend/src/routes/admin/notifications/+page.svelte +++ b/frontend/src/routes/admin/notifications/+page.svelte @@ -1,9 +1,8 @@