feat: Future Availability Intelligence — rebrand & card redesign
Replaces "Schattenmarkt" branding with professional Future Availability Intelligence throughout the UI. Two distinct card types: Pre-Market (LEASE_EXPIRY + verified, green accent) and Market Signal (probabilistic, blue accent). Professioneller Data-Header replaces dark purple gradient. New detail panel sections: Erkannte Marktindikatoren, Strategische Interpretation, Bestätigt/Nicht bestätigt. All 15 mock signals enriched with concrete Swiss CRE market indicators and strategic interpretations. Signal quality shown as 4-dot indicator (Hoch/Mittel/Niedrig). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,7 +38,7 @@ export default function Results() {
|
||||
const { currentUser } = useSessionStore()
|
||||
const [filterSource, setFilterSource] = useState<FilterSource>('ALL')
|
||||
const [sortBy, setSortBy] = useState<SortBy>('score')
|
||||
const [showSchattenmarkt, setShowSchattenmarkt] = useState(true)
|
||||
const [showFutureAvailability, setShowFutureAvailability] = useState(true)
|
||||
const [showOwnProperties, setShowOwnProperties] = useState(false)
|
||||
const [view, setView] = useState<'list' | 'grid'>(() =>
|
||||
(localStorage.getItem('view-results') as 'list' | 'grid') ?? 'list'
|
||||
@@ -73,8 +73,8 @@ export default function Results() {
|
||||
|
||||
const filtered = results.filter(r => {
|
||||
if (r.resultType === 'VERIFIED_PORTFOLIO') return showOwnProperties && currentUser?.role === 'PROPERTY_MANAGER'
|
||||
// Schattenmarkt toggle is independent of the source filter
|
||||
if (r.resultType === 'FUTURE_AVAILABILITY') return showSchattenmarkt
|
||||
// Future Availability toggle is independent of the source filter
|
||||
if (r.resultType === 'FUTURE_AVAILABILITY') return showFutureAvailability
|
||||
return filterSource === 'ALL' || r.resultType === filterSource
|
||||
})
|
||||
|
||||
@@ -176,8 +176,8 @@ export default function Results() {
|
||||
onFilterChange={setFilterSource}
|
||||
sortBy={sortBy}
|
||||
onSortChange={setSortBy}
|
||||
showSchattenmarkt={showSchattenmarkt}
|
||||
onShowSchattenmarktChange={setShowSchattenmarkt}
|
||||
showFutureAvailability={showFutureAvailability}
|
||||
onShowFutureAvailabilityChange={setShowFutureAvailability}
|
||||
showOwnProperties={showOwnProperties}
|
||||
onShowOwnPropertiesChange={setShowOwnProperties}
|
||||
isPropertyManager={currentUser?.role === 'PROPERTY_MANAGER'}
|
||||
@@ -186,7 +186,7 @@ export default function Results() {
|
||||
{isLoading ? (
|
||||
<FeedSkeleton />
|
||||
) : sorted.length === 0 ? (
|
||||
<FeedEmptyState filtered={filterSource !== 'ALL' || !showSchattenmarkt || !showOwnProperties} />
|
||||
<FeedEmptyState filtered={filterSource !== 'ALL' || !showFutureAvailability || !showOwnProperties} />
|
||||
) : (
|
||||
<UnifiedResultFeed results={sorted} view={view} />
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user