diff --git a/src/components/supply/UnitStructurePanel.tsx b/src/components/supply/UnitStructurePanel.tsx
index 57f2a0c..2de6295 100644
--- a/src/components/supply/UnitStructurePanel.tsx
+++ b/src/components/supply/UnitStructurePanel.tsx
@@ -143,21 +143,30 @@ export function UnitStructurePanel({ p }: { p: Property }) {
- {/* Inline min-unit editor */}
- {editingFlexUnit === u.id && (
+ {/* Inline min-unit editor — show when actively editing OR when teilbar is on but min sqm not set */}
+ {(editingFlexUnit === u.id || (u.isFlexible && !u.minLettableSqm)) && (
setFlexDraft(d => ({ ...d, [u.id]: parseInt(e.target.value) || undefined }))}
- sx={{ width: 72, '& .MuiInputBase-input': { fontSize: '0.68rem', py: 0.375, px: 0.75 } }}
+ error={!flexDraft[u.id] && u.isFlexible && !u.minLettableSqm}
+ sx={{
+ width: 80,
+ '& .MuiInputBase-input': { fontSize: '0.68rem', py: 0.375, px: 0.75 },
+ '& .MuiOutlinedInput-root': {
+ '& fieldset': { borderColor: (!flexDraft[u.id] && u.isFlexible && !u.minLettableSqm) ? '#ef4444' : undefined },
+ },
+ }}
slotProps={{ htmlInput: { min: 10, max: u.areaSqm, step: 10 } }}
/>
-
+ {editingFlexUnit === u.id && u.minLettableSqm && (
+
+ )}
)}
@@ -193,6 +204,14 @@ export function UnitStructurePanel({ p }: { p: Property }) {
rentPricePerSqm: u.rentPricePerSqm ?? p.rentPricePerSqm,
unitLabel: u.unitLabel,
propertyId: p.id,
+ floor: floorLabel(u),
+ fitOut: p.hardFacts?.fitOut,
+ parking: p.hardFacts?.parking,
+ ceilingHeight: p.hardFacts?.ceilingHeightM,
+ mieterausbaubeitragPerSqm: p.hardFacts?.mieterausbaubeitragPerSqm,
+ isFlexible: u.isFlexible,
+ minLettableSqm: u.minLettableSqm,
+ availableFrom: u.listing?.availableFrom ?? p.availabilityDate,
},
},
})}
diff --git a/src/hooks/useNewListingForm.ts b/src/hooks/useNewListingForm.ts
index 08497d4..19cecd6 100644
--- a/src/hooks/useNewListingForm.ts
+++ b/src/hooks/useNewListingForm.ts
@@ -109,19 +109,19 @@ export function useNewListingForm(pre: Prefill): NewListingFormState & NewListin
const [city, setCity] = useState(pre.city ?? '')
const [areaSqm, setAreaSqm] = useState(pre.areaSqm ? String(pre.areaSqm) : '')
const [rentPerSqm, setRentPerSqm] = useState(pre.rentPricePerSqm ? String(pre.rentPricePerSqm) : '')
- const [availableFrom, setAvailableFrom] = useState('')
+ const [availableFrom, setAvailableFrom] = useState(pre.availableFrom ?? '')
const [description, setDescription] = useState('')
const [contactName, setContactName] = useState('')
const [contactEmail, setContactEmail] = useState('')
const [contactPhone, setContactPhone] = useState('')
- const [softLevels, setSoftLevels] = useState>(emptySoftLevels)
- const [floor, setFloor] = useState('')
- const [fitOut, setFitOut] = useState('')
- const [parking, setParking] = useState('')
- const [ceilingHeight, setCeilingHeight]= useState('')
- const [mieterausbaubeitrag, setMieterausbaubeitrag] = useState('')
- const [isFlexible, setIsFlexible] = useState(false)
- const [minLettableSqm, setMinLettableSqm] = useState('')
+ const [softLevels, setSoftLevels] = useState>(() => ({ ...emptySoftLevels(), ...pre.softLevels }))
+ const [floor, setFloor] = useState(pre.floor ?? '')
+ const [fitOut, setFitOut] = useState(pre.fitOut ?? '')
+ const [parking, setParking] = useState(pre.parking != null ? String(pre.parking) : '')
+ const [ceilingHeight, setCeilingHeight]= useState(pre.ceilingHeight != null ? String(pre.ceilingHeight) : '')
+ const [mieterausbaubeitrag, setMieterausbaubeitrag] = useState(pre.mieterausbaubeitragPerSqm != null ? String(pre.mieterausbaubeitragPerSqm) : '')
+ const [isFlexible, setIsFlexible] = useState(pre.isFlexible ?? false)
+ const [minLettableSqm, setMinLettableSqm] = useState(pre.minLettableSqm != null ? String(pre.minLettableSqm) : '')
const [images, setImages] = useState([])
const [imageInput, setImageInput] = useState('')
const [floorPlanUrl, setFloorPlanUrl] = useState('')
diff --git a/src/pages/supply/newListingConstants.ts b/src/pages/supply/newListingConstants.ts
index c00b59d..7c4945d 100644
--- a/src/pages/supply/newListingConstants.ts
+++ b/src/pages/supply/newListingConstants.ts
@@ -49,6 +49,15 @@ export interface LocationState {
rentPricePerSqm?: number
unitLabel?: string
propertyId?: string
+ floor?: string
+ fitOut?: string
+ parking?: number
+ ceilingHeight?: number
+ mieterausbaubeitragPerSqm?: number
+ isFlexible?: boolean
+ minLettableSqm?: number
+ availableFrom?: string
+ softLevels?: Record
}
}