wrongmove/frontend/tsconfig.app.tsbuildinfo
Viktor Barzin 0b5308200e wrongmove: guard property cards against null backend fields (fix BUY crash)
BUY listings can come back from the API with null `total_price`, `qm`,
`qmprice`, `rooms`, and `last_seen` even though the TypeScript types
declare them non-nullable. The cards called `.toLocaleString()` and
`.split('T')` on those values, throwing TypeError and tripping the
ErrorBoundary — which is the "BUY part of the page crashes" symptom.

Coerce numeric fields via a `safeNum` helper (0 fallback), gate the
"Nd ago" line on a finite last_seen, and apply the same guards in
PropertyCard, PropertyCardCompact, SwipeCard, and the price-history
section of ListingDetail. Added regression tests asserting both card
variants render with all-null backend fields without throwing.
2026-05-10 21:17:41 +00:00

1 line
No EOL
2.9 KiB
Text

{"root":["./src/App.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/auth/authService.ts","./src/auth/config.ts","./src/auth/errors.ts","./src/auth/passkeyService.ts","./src/auth/types.ts","./src/components/AlertError.tsx","./src/components/AuthCallback.tsx","./src/components/ErrorBoundary.tsx","./src/components/FavoritesView.tsx","./src/components/FilterBar.tsx","./src/components/FilterChips.tsx","./src/components/FilterPanel.tsx","./src/components/Header.tsx","./src/components/HealthIndicator.tsx","./src/components/ListView.tsx","./src/components/ListingDetail.tsx","./src/components/ListingDetailSheet.tsx","./src/components/LoginModal.tsx","./src/components/Map.tsx","./src/components/MobileBottomSheet.tsx","./src/components/MobileMenu.tsx","./src/components/POIManager.tsx","./src/components/PhotoCarousel.tsx","./src/components/PropertyCard.tsx","./src/components/PropertyCardCompact.tsx","./src/components/Spinner.tsx","./src/components/StatsBar.tsx","./src/components/StreamingProgressBar.tsx","./src/components/SwipeCard.tsx","./src/components/SwipeReviewMode.tsx","./src/components/SwipeableCardRow.tsx","./src/components/SwipeablePropertyCard.tsx","./src/components/TaskIndicator.tsx","./src/components/TaskProgressDrawer.tsx","./src/components/VisualizationCard.tsx","./src/components/ui/DatePicker.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/dialog.tsx","./src/components/ui/form.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/range-slider-field.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/tabs.tsx","./src/components/ui/tooltip.tsx","./src/constants/colorSchemes.ts","./src/constants/index.ts","./src/hooks/use-mobile.ts","./src/hooks/useDecisions.ts","./src/hooks/useFilterParams.ts","./src/hooks/useListingDetail.ts","./src/hooks/useTaskProgress.ts","./src/lib/utils.ts","./src/services/apiClient.ts","./src/services/decisionService.ts","./src/services/healthService.ts","./src/services/index.ts","./src/services/listingCache.ts","./src/services/listingDetailService.ts","./src/services/listingService.ts","./src/services/perfCollector.ts","./src/services/poiService.ts","./src/services/streamingService.ts","./src/services/taskService.ts","./src/types/index.ts","./src/utils/format.ts","./src/utils/mapUtils.ts","./src/utils/poiUtils.ts","./src/utils/taskUtils.ts","./src/workers/HexgridHeatmapClient.ts","./src/workers/hexgrid.worker.ts","./src/workers/types.ts"],"version":"5.8.3"}