From 36ce5481698ee34df1432b41775954845df429ea Mon Sep 17 00:00:00 2001 From: Benjamin Sutter Date: Mon, 3 Aug 2026 16:55:19 +0200 Subject: [PATCH] =?UTF-8?q?fix:=2016=20vorbestehende=20Typfehler=20beheben?= =?UTF-8?q?,=20Typecheck=20wieder=20gr=C3=BCn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `npx tsc -b` brach mit 16 Fehlern ab. Neue Fehler wären darin untergegangen. Echte Defekte: - LatentInquiriesTab: OwnPropertyMatchList wurde verwendet, aber nie importiert — der Zweig "Eigene Objekte" auf Mobil hätte zur Laufzeit geworfen - unitService: throwServiceError nimmt ein Argument, nicht zwei - SavedNeedDetail: MUI v9 kennt kein `inputProps` mehr, ersetzt durch slotProps - Review{Status,Priority}Badge: `showBorder` existiert an GenericBadge nicht; die Default-Variante "outlined" zeichnet den Rand ohnehin, Darstellung unverändert - UnifiedResultFeed: die Ternärkette verglich theme.text gegen zwei Werte, die SCORE_THEME seit einer Palettenumstellung nicht mehr führt — sie lief immer in denselben Zweig. Auf diesen einen Wert zusammengezogen, Darstellung unverändert, nebenbei zwei rohe Hex-Werte weniger Der Rest waren ungenutzte Importe und Bindings (noUnusedLocals). Co-Authored-By: Claude Opus 5 (1M context) --- src/components/anfragencenter/InquiryDetailPanel.tsx | 2 +- src/components/anfragencenter/LatentInquiriesTab.tsx | 1 + src/components/demand/PropertyMatchRow.tsx | 1 - src/components/demand/SavedNeedDetail.tsx | 5 ++--- src/components/demand/SavedProfilesTab.tsx | 1 - src/components/match-detail/MatchDetailPropertySections.tsx | 2 +- src/components/results/UnifiedResultFeed.tsx | 4 +++- src/components/review/ReviewPriorityBadge.tsx | 2 +- src/components/review/ReviewStatusBadge.tsx | 2 +- src/components/supply/PreMarketPriceAdvisor.tsx | 2 +- src/pages/supply/Properties.tsx | 2 +- src/services/unitService.ts | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/components/anfragencenter/InquiryDetailPanel.tsx b/src/components/anfragencenter/InquiryDetailPanel.tsx index 2c197fc..1253a6e 100644 --- a/src/components/anfragencenter/InquiryDetailPanel.tsx +++ b/src/components/anfragencenter/InquiryDetailPanel.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { Box, Button, CircularProgress, Typography } from '@mui/material' -import { ArrowRight, Building2, ClipboardList, MapPin, Ruler } from 'lucide-react' +import { ArrowRight, Building2, ClipboardList, MapPin } from 'lucide-react' import { useNavigate } from 'react-router' import { useInquiryById, useMarkThreadAsRead } from '../../hooks/useInquiries' import { usePropertyById } from '../../hooks/useProperties' diff --git a/src/components/anfragencenter/LatentInquiriesTab.tsx b/src/components/anfragencenter/LatentInquiriesTab.tsx index dcb5fa5..644869d 100644 --- a/src/components/anfragencenter/LatentInquiriesTab.tsx +++ b/src/components/anfragencenter/LatentInquiriesTab.tsx @@ -5,6 +5,7 @@ import { usePublicNeeds, useLatentNeedById } from '../../hooks/useLatentNeeds' import { EmptyState } from '../ui' import { PublicNeedList } from './PublicNeedList' import { PublicNeedDetail } from './PublicNeedDetail' +import { OwnPropertyMatchList } from './OwnPropertyMatchList' type MobileView = 'list' | 'detail' | 'properties' diff --git a/src/components/demand/PropertyMatchRow.tsx b/src/components/demand/PropertyMatchRow.tsx index 84f95c1..735c4bf 100644 --- a/src/components/demand/PropertyMatchRow.tsx +++ b/src/components/demand/PropertyMatchRow.tsx @@ -2,7 +2,6 @@ import { memo } from 'react' import { Box, Button, Typography } from '@mui/material' import { Ruler } from 'lucide-react' import { useNavigate } from 'react-router' -import { ROUTES } from '../../lib/constants' import type { Property } from '../../domain/property' import type { VerifiedPortfolioResult } from '../../domain/unifiedResult' import type { Match } from '../../domain/match' diff --git a/src/components/demand/SavedNeedDetail.tsx b/src/components/demand/SavedNeedDetail.tsx index ea93016..2da54a9 100644 --- a/src/components/demand/SavedNeedDetail.tsx +++ b/src/components/demand/SavedNeedDetail.tsx @@ -32,7 +32,7 @@ interface Props { onUpdate: (data: UpdateNeedInput) => void } -export const SavedNeedDetail = memo(function SavedNeedDetail({ need, properties, onStart, onEdit, onArchive, onUpdate }: Props) { +export const SavedNeedDetail = memo(function SavedNeedDetail({ need, properties, onStart, onEdit, onUpdate }: Props) { const statusCfg = statusConfig(need.status) const conf = need.confidenceInCriteria ?? 0 const confColor = confidenceHex(conf) @@ -69,7 +69,6 @@ export const SavedNeedDetail = memo(function SavedNeedDetail({ need, properties, return true }) }, [matches, properties]) - const topScore = scoredProperties.length > 0 ? scoredProperties[0].score : 0 const topProperties = scoredProperties.slice(0, 3) const topWeights = useMemo( @@ -235,7 +234,7 @@ export const SavedNeedDetail = memo(function SavedNeedDetail({ need, properties, placeholder="name@firma.ch" value={notif.emailAddress ?? ''} onChange={e => handleNotifChange({ emailAddress: e.target.value || undefined })} - inputProps={{ type: 'email' }} + slotProps={{ htmlInput: { type: 'email' } }} sx={{ '& .MuiOutlinedInput-root': { fontSize: '0.85rem' } }} helperText="Im Produktivsystem wird bei neuen Treffern eine E-Mail ausgelöst" /> diff --git a/src/components/demand/SavedProfilesTab.tsx b/src/components/demand/SavedProfilesTab.tsx index 2acab85..7b0af07 100644 --- a/src/components/demand/SavedProfilesTab.tsx +++ b/src/components/demand/SavedProfilesTab.tsx @@ -10,7 +10,6 @@ import { ROUTES } from '../../lib/constants' import { EmptyState } from '../ui' import { SavedNeedCard } from './SavedNeedCard' import { SavedNeedDetail } from './SavedNeedDetail' -import { needToParsedCriteria } from '../../services/aiSearch/needSearchMapper' interface Props { onNewSearch: (prefillNeedId?: string) => void diff --git a/src/components/match-detail/MatchDetailPropertySections.tsx b/src/components/match-detail/MatchDetailPropertySections.tsx index 991444a..8311567 100644 --- a/src/components/match-detail/MatchDetailPropertySections.tsx +++ b/src/components/match-detail/MatchDetailPropertySections.tsx @@ -1,5 +1,5 @@ import { Box, Button, Chip, Paper, Typography } from '@mui/material' -import { Building2, Clock, ExternalLink, HardHat, Info, Layers, Tag, Train, TrendingUp } from 'lucide-react' +import { Building2, Clock, ExternalLink, Info, Layers, Tag, Train, TrendingUp } from 'lucide-react' import { useMatchDetail } from '../../hooks/useMatches' import { ResultType } from '../../domain/enums' import type { Property } from '../../domain/property' diff --git a/src/components/results/UnifiedResultFeed.tsx b/src/components/results/UnifiedResultFeed.tsx index 5047934..dec139f 100644 --- a/src/components/results/UnifiedResultFeed.tsx +++ b/src/components/results/UnifiedResultFeed.tsx @@ -52,7 +52,9 @@ function TierHeader({ label, sublabel, tierKey, count, isFirst }: TierHeaderProp }} /> - + {/* SCORE_THEME.text is '#ffffff' for every tier, so the former ternary always + resolved to this one value — collapsed, rendering is unchanged. */} + {label} {sublabel} diff --git a/src/components/review/ReviewPriorityBadge.tsx b/src/components/review/ReviewPriorityBadge.tsx index b349472..7b5f717 100644 --- a/src/components/review/ReviewPriorityBadge.tsx +++ b/src/components/review/ReviewPriorityBadge.tsx @@ -15,5 +15,5 @@ interface Props { export function ReviewPriorityBadge({ priority, size = 'small' }: Props) { const { label, color } = CONFIG[priority] ?? CONFIG.MEDIUM - return + return } diff --git a/src/components/review/ReviewStatusBadge.tsx b/src/components/review/ReviewStatusBadge.tsx index 84fb96e..94f7a18 100644 --- a/src/components/review/ReviewStatusBadge.tsx +++ b/src/components/review/ReviewStatusBadge.tsx @@ -17,5 +17,5 @@ interface Props { export function ReviewStatusBadge({ status, size = 'small' }: Props) { const { label, color } = CONFIG[status] ?? CONFIG.PENDING - return + return } diff --git a/src/components/supply/PreMarketPriceAdvisor.tsx b/src/components/supply/PreMarketPriceAdvisor.tsx index 52cdf6d..43c9a76 100644 --- a/src/components/supply/PreMarketPriceAdvisor.tsx +++ b/src/components/supply/PreMarketPriceAdvisor.tsx @@ -6,7 +6,7 @@ import { usePreMarketRentRecommendation } from '../../hooks/useAI' import { useUpdateUnit } from '../../hooks/useProperties' import { resolveUnitFacts } from '../../lib/unitFacts' import { FIT_OUT_LABELS } from '../../lib/constants' -import { DS_BORDER, DS_PRE_MARKET, DS_SURFACE, DS_TEXT } from '../../lib/ds' +import { DS_PRE_MARKET, DS_SURFACE, DS_TEXT } from '../../lib/ds' const NEEDS_BUILD = new Set(['SHELL', 'BASIC']) const VERDICT_META: Record = { diff --git a/src/pages/supply/Properties.tsx b/src/pages/supply/Properties.tsx index fb3b6a3..1c29ebb 100644 --- a/src/pages/supply/Properties.tsx +++ b/src/pages/supply/Properties.tsx @@ -78,7 +78,7 @@ export default function Properties() { const filtered = useMemo(() => applyFilters(properties, filters), [properties, filters]) // Decision-relevant aggregates — single pass over the full list - const { matchReady, criticalGaps, lowConfidence, staleOrOutdated, allMissingFields } = useMemo(() => { + const { matchReady, criticalGaps, staleOrOutdated } = useMemo(() => { const matchReady: typeof properties = [] const criticalGaps: typeof properties = [] const lowConfidence: typeof properties = [] diff --git a/src/services/unitService.ts b/src/services/unitService.ts index 05f9363..3a06aca 100644 --- a/src/services/unitService.ts +++ b/src/services/unitService.ts @@ -9,7 +9,7 @@ export const unitService = { const unit = await MockupUnitProvider.update(unitId, data) return { data: unit } } catch (err) { - throwServiceError('unitService.update', err) + throwServiceError(err) } }, }