fix: carry all unit data into + Inserat prefill

When clicking + Inserat in UnitStructurePanel, the new listing form
now pre-populates: floor label, fit-out standard, parking, ceiling
height, Mieterausbaubeitrag, Teilbar toggle, min lettable sqm, and
availability date from the unit and its parent property.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-06-09 21:32:54 +02:00
parent 87ea4c4dfc
commit 96a2507979
3 changed files with 49 additions and 21 deletions
+31 -12
View File
@@ -143,21 +143,30 @@ export function UnitStructurePanel({ p }: { p: Property }) {
</Box>
</Tooltip>
{/* 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)) && (
<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
<TextField
size="small"
type="number"
placeholder="Min m²"
autoFocus={!u.minLettableSqm}
placeholder="Min m² *"
value={flexDraft[u.id] ?? ''}
onChange={e => 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 } }}
/>
<Button
size="small"
variant="contained"
disabled={!flexDraft[u.id]}
sx={{ fontSize: '0.58rem', py: 0.25, px: 0.75, minWidth: 0, bgcolor: '#1d4ed8', '&:hover': { bgcolor: '#1e40af' } }}
onClick={() => {
updateUnit.mutate({ unitId: u.id, data: { isFlexible: true, minLettableSqm: flexDraft[u.id] } })
@@ -166,14 +175,16 @@ export function UnitStructurePanel({ p }: { p: Property }) {
>
</Button>
<Button
size="small"
variant="text"
sx={{ fontSize: '0.58rem', py: 0.25, px: 0.5, minWidth: 0, color: DS_TEXT.muted }}
onClick={() => setEditingFlexUnit(null)}
>
</Button>
{editingFlexUnit === u.id && u.minLettableSqm && (
<Button
size="small"
variant="text"
sx={{ fontSize: '0.58rem', py: 0.25, px: 0.5, minWidth: 0, color: DS_TEXT.muted }}
onClick={() => setEditingFlexUnit(null)}
>
</Button>
)}
</Box>
)}
@@ -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,
},
},
})}