Skip to content

Customizable engine-type combobox for vehicles#72

Merged
TheAngryRaven merged 1 commit into
BETAfrom
claude/vehicle-engine-customization-746Sp-beta
May 27, 2026
Merged

Customizable engine-type combobox for vehicles#72
TheAngryRaven merged 1 commit into
BETAfrom
claude/vehicle-engine-customization-746Sp-beta

Conversation

@TheAngryRaven
Copy link
Copy Markdown
Owner

Summary

Replaces the vehicle form's plain free-text Engine input with a searchable combobox backed by a reusable, per-user engine list:

  • Type to search previously saved engines; create inline when the typed name isn't found.
  • Auto-imports engine names already saved on existing vehicles, so the list is populated immediately (no manual migration).
  • A small "manage" link beside the Engine label opens a delete-only menu. Engines currently in use by a vehicle are protected from deletion (per request).
  • Engines persist in a new IndexedDB store (engines, DB v10) and emit garage change events, so they ride along with the rest of the garage over cloud sync (added to syncStores).

Pure search / dedup / create-offer logic lives in engineUtils.ts with full Vitest coverage. The combobox lands in the lazy FileManagerDrawer chunk, keeping it off the initial bundle path.

Files

  • lib/dbUtils.ts — bump DB version 9→10, new engines store
  • lib/engineStorage.ts (new) — IndexedDB CRUD + garage events
  • lib/engineUtils.ts (new) + engineUtils.test.ts (new) — pure helpers + tests
  • hooks/useEngineManager.ts (new) — list/add/import/remove
  • components/drawer/EngineCombobox.tsx (new) — searchable field + manage dialog
  • components/drawer/VehiclesTab.tsx — wire in the combobox + auto-import
  • plugins/cloud-sync/syncStores.ts — sync the engines store
  • CHANGELOG.md, CLAUDE.md — docs

Test plan

  • npm run lint — clean
  • npm run typecheck — clean
  • npm run test:run — 706 passing (incl. new engineUtils tests)
  • npm run build — succeeds
  • Manual UI: open file-manager drawer → Vehicles → type an engine, confirm filter + inline "Create", confirm "manage" deletes unused engines and blocks in-use ones. (No browser/Chromium available in the remote container, so this was not exercised interactively.)

https://claude.ai/code/session_014aFrVH8nLTmVuRHhAU4gmt


Generated by Claude Code

Replace the vehicle form's free-text Engine input with a searchable
combobox backed by a reusable, per-user engine list. Users type to
filter previously saved engines and create new ones inline when no
match exists. Existing vehicles' engine names are auto-imported, and a
"manage" link opens a small delete-only menu (engines in use by a
vehicle are protected from deletion).

Engines persist in a new IndexedDB store (db v10) and emit garage
change events so they ride along with the rest of the garage over
cloud sync. Pure search/dedup logic lives in engineUtils with tests.

https://claude.ai/code/session_014aFrVH8nLTmVuRHhAU4gmt
@github-actions
Copy link
Copy Markdown

Coverage Summary

Lines: 37.12% (2333/6284) · Statements: 36.07% · Functions: 30.31% · Branches: 37.83%

Per-file coverage
File Lines Functions Branches
src/components/video-overlays/dataSourceResolver.ts 84.12% 70% 79.41%
src/components/video-overlays/overlayUtils.ts 100% 100% 100%
src/components/video-overlays/registry.ts 100% 100% 100%
src/components/video-overlays/sectorUtils.ts 94.73% 100% 84.37%
src/components/video-overlays/themes.ts 100% 100% 100%
src/components/video-overlays/types.ts 0% 100% 100%
src/hooks/use-mobile.tsx 0% 0% 100%
src/hooks/use-toast.ts 0% 0% 0%
src/hooks/useAuth.ts 100% 100% 100%
src/hooks/useDataLoader.ts 0% 0% 0%
src/hooks/useDocumentHead.ts 0% 0% 0%
src/hooks/useEngineManager.ts 0% 0% 0%
src/hooks/useFileManager.ts 0% 0% 0%
src/hooks/useKartManager.ts 100% 100% 100%
src/hooks/useLapManagement.ts 0% 0% 0%
src/hooks/useNoteManager.ts 0% 0% 0%
src/hooks/useOnlineStatus.ts 0% 0% 0%
src/hooks/usePlayback.ts 0% 0% 0%
src/hooks/useReferenceLap.ts 0% 0% 0%
src/hooks/useSessionData.ts 0% 0% 0%
src/hooks/useSessionMetadata.ts 0% 0% 0%
src/hooks/useSettings.ts 0% 0% 0%
src/hooks/useSetupManager.ts 0% 0% 100%
src/hooks/useSubscription.ts 0% 0% 0%
src/hooks/useTemplateManager.ts 0% 0% 0%
src/hooks/useTrackEditorForm.ts 0% 0% 0%
src/hooks/useVehicleManager.ts 0% 0% 100%
src/hooks/useVideoSync.ts 0% 0% 0%
src/integrations/lovable/index.ts 0% 0% 0%
src/lib/aimParser.ts 87.96% 100% 69.13%
src/lib/alfanoParser.ts 80.46% 100% 57.48%
src/lib/billing.ts 100% 100% 100%
src/lib/billingClient.ts 0% 0% 0%
src/lib/ble/test/mockBle.ts 100% 100% 50%
src/lib/ble/battery.ts 93.33% 100% 87.5%
src/lib/ble/connection.ts 0% 0% 0%
src/lib/ble/fileTransfer.ts 90.69% 95% 72.91%
src/lib/ble/format.ts 50% 100% 72.22%
src/lib/ble/index.ts 100% 100% 100%
src/lib/ble/internal.ts 100% 100% 50%
src/lib/ble/settings.ts 93.6% 100% 85.29%
src/lib/ble/trackSync.ts 89.69% 90.9% 70.96%
src/lib/ble/types.ts 100% 100% 100%
src/lib/bleDatalogger.ts 100% 100% 100%
src/lib/brakingZones.ts 97.14% 100% 86.11%
src/lib/browserCompat.ts 0% 0% 0%
src/lib/channels.ts 100% 100% 84.61%
src/lib/chartColors.ts 100% 100% 100%
src/lib/chartUtils.ts 0% 0% 0%
src/lib/courseDetection.ts 99.01% 100% 84.14%
src/lib/datalogParser.ts 18.51% 50% 17.39%
src/lib/db/index.ts 0% 0% 0%
src/lib/db/supabaseAdapter.ts 0% 0% 0%
src/lib/db/types.ts 100% 100% 100%
src/lib/dbUtils.ts 3.26% 0% 0%
src/lib/deviceSettingsSchema.ts 93.33% 100% 96.42%
src/lib/deviceTrackSync.ts 100% 100% 90%
src/lib/doveParser.ts 89.6% 72.72% 73.63%
src/lib/dovexParser.ts 76.56% 76.92% 47.27%
src/lib/emailValidation.ts 100% 100% 100%
src/lib/engineStorage.ts 0% 0% 100%
src/lib/engineUtils.ts 100% 100% 91.66%
src/lib/fieldResolver.ts 100% 100% 83.33%
src/lib/fileStorage.ts 0% 0% 0%
src/lib/garageEvents.ts 100% 100% 100%
src/lib/gforceCalculation.ts 100% 100% 100%
src/lib/graphPrefsStorage.ts 0% 0% 0%
src/lib/kartStorage.ts 0% 0% 0%
src/lib/lapCalculation.ts 96.12% 100% 90.32%
src/lib/lapDelta.ts 98.96% 100% 82.35%
src/lib/motecParser.ts 4.29% 3.44% 0.69%
src/lib/nmeaParser.ts 85.62% 92.85% 71.22%
src/lib/noteStorage.ts 0% 0% 100%
src/lib/overlayCanvasRenderer.ts 0% 0% 0%
src/lib/parserUtils.ts 100% 100% 98.52%
src/lib/referenceUtils.ts 100% 100% 89.28%
src/lib/setupStorage.ts 0% 0% 0%
src/lib/speedBounds.ts 94.11% 66.66% 89.18%
src/lib/speedEvents.ts 86.56% 100% 76%
src/lib/templateStorage.ts 0% 0% 0%
src/lib/trackStorage.ts 3.33% 0% 0%
src/lib/trackUtils.ts 100% 100% 100%
src/lib/ubxParser.ts 5% 0% 0%
src/lib/utils.ts 100% 100% 100%
src/lib/vboParser.ts 83.2% 100% 60.97%
src/lib/vehicleStorage.ts 0% 0% 0%
src/lib/videoExport.ts 0% 0% 0%
src/lib/videoFileStorage.ts 0% 0% 0%
src/lib/videoStorage.ts 0% 0% 0%
src/lib/weatherService.ts 0% 0% 0%
src/plugins/cloud-sync/autoSync.ts 0% 0% 0%
src/plugins/cloud-sync/cloudClient.ts 0% 0% 0%
src/plugins/cloud-sync/CloudFilesSection.tsx 0% 0% 0%
src/plugins/cloud-sync/CloudLogsPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/CloudSyncPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/DownloadAllCloudLogs.tsx 0% 0% 0%
src/plugins/cloud-sync/FileDeleteToggle.tsx 0% 0% 0%
src/plugins/cloud-sync/fileSync.ts 68.42% 38.46% 100%
src/plugins/cloud-sync/FileSyncToggle.tsx 0% 0% 0%
src/plugins/cloud-sync/index.ts 0% 0% 0%
src/plugins/cloud-sync/merge.ts 90.9% 66.66% 100%
src/plugins/cloud-sync/pendingSync.ts 0% 0% 0%
src/plugins/cloud-sync/profile.ts 0% 0% 0%
src/plugins/cloud-sync/StoragePanel.tsx 0% 0% 0%
src/plugins/cloud-sync/storageTypes.ts 100% 100% 100%
src/plugins/cloud-sync/storeAccessors.ts 0% 0% 0%
src/plugins/cloud-sync/syncEngine.ts 0% 0% 0%
src/plugins/cloud-sync/syncStores.ts 100% 100% 100%
src/plugins/index.ts 0% 0% 0%
src/plugins/mounts.ts 100% 100% 100%
src/plugins/panels.ts 100% 100% 100%
src/plugins/PluginMount.tsx 0% 0% 0%
src/plugins/PluginPanelHost.tsx 0% 0% 0%
src/plugins/registry.ts 100% 100% 100%
src/plugins/storage.ts 32.25% 8.33% 33.33%
src/plugins/types.ts 100% 100% 100%
src/types/racing.ts 100% 100% 100%

@TheAngryRaven TheAngryRaven merged commit c305a0f into BETA May 27, 2026
5 checks passed
@TheAngryRaven TheAngryRaven deleted the claude/vehicle-engine-customization-746Sp-beta branch May 27, 2026 02:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants