feat: Grundriss-Feature, Listenansicht mit Bildern, Gewerbe-Label, Image-Pool
- Grundriss (FloorPlanSection): PropertyUnit.floorPlanUrl?, Property.floorPlanUrl?; FloorPlanSection in MatchDetail + PropertyDetail; FloorPlanUrlSection in NewListing-Formular - Listenansicht (MatchCardCompact): horizontales Layout mit 120px Bildstreifen, Score-Badge, Asset-Label-Overlay, alle 3 grünen Punkte, Anfrage-Button - Light Industrial → "Gewerbe" überall (NeedInput, NeedCardPreview, CriteriaReviewPanel, newListingConstants, MyListings, propertyHelpers) - "Zum Originalinserat"-Button nur bei Maison-Work-Objekten - Image-Pool: propertyImageResolver mit sequentiellem Pool-Index (keine doppelten Bilder), nur Innenaufnahmen, rotate()-Trick für Sub-Pools - Overlay-Labels (Objekttyp + Stadtteil) in LocationPreview + IntelligenceMatchCard Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,7 @@ import type { Property } from '../../domain/property'
|
||||
const ASSET_LABELS: Record<string, string> = {
|
||||
OFFICE: 'Büro',
|
||||
RETAIL: 'Einzelhandel',
|
||||
LIGHT_INDUSTRIAL: 'Leichtindustrie',
|
||||
LIGHT_INDUSTRIAL: 'Gewerbe',
|
||||
LOGISTICS: 'Logistik',
|
||||
PRODUCTION: 'Produktion',
|
||||
MIXED: 'Gemischt',
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
SoftFactorsSection,
|
||||
TechnicalDetailsSection,
|
||||
ImageUrlSection,
|
||||
FloorPlanUrlSection,
|
||||
ContactSection,
|
||||
CreatedScreen,
|
||||
} from '../../components/new-listing'
|
||||
@@ -92,6 +93,11 @@ export default function NewListing() {
|
||||
onRemove={form.removeImage}
|
||||
/>
|
||||
|
||||
<FloorPlanUrlSection
|
||||
floorPlanUrl={form.floorPlanUrl}
|
||||
onFloorPlanUrlChange={form.setFloorPlanUrl}
|
||||
/>
|
||||
|
||||
<ContactSection
|
||||
name={form.contactName} onNameChange={form.setContactName}
|
||||
email={form.contactEmail} onEmailChange={form.setContactEmail}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export const ASSET_TYPE_LABELS: Record<string, string> = {
|
||||
OFFICE: 'Büro',
|
||||
RETAIL: 'Einzelhandel',
|
||||
LIGHT_INDUSTRIAL: 'Leichtindustrie',
|
||||
LIGHT_INDUSTRIAL: 'Gewerbe',
|
||||
LOGISTICS: 'Logistik',
|
||||
PRODUCTION: 'Produktion',
|
||||
MIXED: 'Gemischt',
|
||||
|
||||
@@ -18,11 +18,12 @@ export function buildCreatePropertyInput(fields: {
|
||||
parking: string
|
||||
ceilingHeight: string
|
||||
images: string[]
|
||||
floorPlanUrl: string
|
||||
}): CreatePropertyInput {
|
||||
const {
|
||||
assetType, street, houseNumber, postalCode, city,
|
||||
areaSqm, rentPerSqm, availableFrom, description,
|
||||
softLevels, floor, fitOut, parking, ceilingHeight, images,
|
||||
softLevels, floor, fitOut, parking, ceilingHeight, images, floorPlanUrl,
|
||||
} = fields
|
||||
|
||||
const sf = {
|
||||
@@ -66,6 +67,7 @@ export function buildCreatePropertyInput(fields: {
|
||||
softFactors: sf,
|
||||
hardFacts: hf,
|
||||
images: images.length > 0 ? images : undefined,
|
||||
floorPlanUrl: floorPlanUrl.trim() || undefined,
|
||||
dataQuality: {
|
||||
score: 1.0,
|
||||
missingCriticalFields: [],
|
||||
|
||||
Reference in New Issue
Block a user