{{-- Property detail — ported from the legacy property.php, which was a single hardcoded document describing one listing. Only the Chingford property has recovered detail data, so every spec block below is conditional: a section with nothing to show is omitted rather than rendered with empty values. --}} @php $gallery = $property->images; $hero = $property->primaryImage; // The legacy address line was "Meridian House, 62 Station Road, North // Chingford, E4 7BA" — street through to postcode, with no county. // // `county` is a filing field here ("London", "Essex"), not part of a UK // address line, and `town` carries the listing-page filter value, which // address_line_1 usually already spells out in full ("North Chingford" // vs "Chingford"). Including both unconditionally produced a line that // said Chingford twice, so a component already present in what has been // built so far is dropped. $addressLine = collect([$property->address_line_1, $property->town, $property->postcode]) ->filter() ->reduce(function (array $parts, string $part): array { $line = implode(', ', $parts); return str_contains(Str::lower($line), Str::lower($part)) ? $parts : [...$parts, $part]; }, []); $addressLine = implode(', ', $addressLine) ?: $property->title; // The legacy crumb was "Station Road, Chingford" — the street off the // headline plus the town, not the full postcoded title. Taking the first // comma segment reproduces that for any listing titled the same way. $breadcrumbLabel = collect([ Str::before($property->title, ','), $property->town, ])->filter()->unique()->implode(', '); // Which tabs have content to jump to. $tabs = array_filter([ 'pd-overview' => filled($property->description) ? 'Overview' : null, 'pd-features' => $property->features->isNotEmpty() ? 'Features' : null, 'pd-details' => filled($property->property_type) ? 'Details' : null, 'pd-tenancy' => filled($property->tenure) || $property->available_from ? 'Tenancy' : null, 'pd-location' => filled($property->map_embed_url) || $property->nearbyPlaces->isNotEmpty() ? 'Location' : null, 'pd-epc' => filled($property->epc_rating) ? 'EPC' : null, 'pd-floorplan' => filled($property->floorplan_image) ? 'Floorplan' : null, ]); @endphp
@if ($gallery->isNotEmpty()) @endif
{{ $property->status->label() }} @if ($property->price)

{{ $property->price }} {{ $property->pricePeriodLabel() }}

@endif

{{ $property->pageHeadline() }}

{{ $addressLine }}

    @if ($property->bedrooms !== null) @endif @if ($property->bathrooms !== null) @endif @if ($property->receptions !== null) @endif @if ($property->furnishing) @endif @if ($property->available_from) @endif @if ($property->epc_rating) {{ $property->epc_rating }} @endif
@if (count($tabs) > 1) @endif @if (filled($property->description))

Overview

{{ $property->description }}

{{-- The is required: main.js:887 swaps its class between bx-chevron-down / bx-chevron-up and throws on a null query if it is absent. --}}
@if ($property->virtual_tour_thumbnail) @endif
@endif @if ($property->features->isNotEmpty())

Key Features

    @foreach ($property->features as $feature)
  • {{ $feature->label }}
  • @endforeach
@endif

Property Details

@if ($property->bedrooms !== null) @endif @if ($property->bathrooms !== null) @endif @if ($property->receptions !== null) @endif @if ($property->furnishing) @endif @if ($property->garden) @endif @if ($property->parking) @endif @if ($property->council_tax_band) @endif @if ($property->epc_rating) @endif @if ($property->pets) @endif @if ($property->max_occupants !== null) @endif @if ($property->smoking) @endif
@if ($property->tenure || $property->available_from || $property->deposit_pence !== null)

Tenancy Information

@if ($property->tenure) @endif @if ($property->tenancy_length) @endif @if ($property->available_from) @endif @if ($property->price) {{ $property->price }} {{ $property->pricePeriodLabel() }} @endif @if ($property->deposit_pence !== null) @endif @if ($property->holding_deposit_pence !== null) @endif @if ($property->current_tenants) @endif @if ($property->lease_renewal) @endif
@endif @if ($property->map_embed_url || $property->nearbyPlaces->isNotEmpty())

Location

@if ($property->map_embed_url)
@endif @if ($property->nearbyPlaces->isNotEmpty())

What's Nearby

    @foreach ($property->nearbyPlaces as $place) @endforeach
@endif
@endif @if ($property->epc_rating)

Energy performance certificate (EPC)

{{ $addressLine }}

@if ($property->epc_certificate_url) View EPC Certificate @endif

Energy rating

{{ $property->epc_rating }}
@if ($property->epc_valid_until)
Valid until {{ $property->epc_valid_until->format('j F Y') }}
@endif @if ($property->epc_certificate_number)
Certificate number {{ $property->epc_certificate_number }}
@endif
@endif @if ($property->floorplan_image)

Floor Plan

View larger
Floor plan
@endif
@if ($similar->isNotEmpty())

Similar Properties

@foreach ($similar as $other) @endforeach
@endif @include('partials.property-register')
{{-- Sticky quick-action bar. property-pages.css keeps it display:none until the mobile breakpoint, so it costs desktop nothing and is the only CTA in view once a phone user has scrolled past the sidebar. --}}
{{ $property->status->label() }} @if ($property->price) {{ $property->price }} {{ $property->pricePeriodLabel() }} @endif
@if ($property->negotiator) @endif Arrange Viewing