From 2e2b7760852ab37eb4b62c4f2f487a3471466ed9 Mon Sep 17 00:00:00 2001 From: akash Date: Thu, 11 Dec 2025 23:01:02 +0530 Subject: [PATCH] loading issue fixed new structure updayed --- src/app/about/page.tsx | 2 - .../property-for-sale-in-bengaluru/page.tsx | 16 + src/app/contact/page.tsx | 2 - src/app/layout.tsx | 2 + src/app/lifestyle/page.tsx | 2 - src/app/page.tsx | 2 - src/app/privacy-policy/page.tsx | 4 - src/app/projects/page.tsx | 2 - src/app/terms-of-service/page.tsx | 2 - src/components/BengaluruHeader.tsx | 65 ++++ .../BengaluruPropertiesClientWrapper.tsx | 12 + src/components/CompareClient.tsx | 2 - src/components/HeaderWrapper.tsx | 6 + src/components/PropertiesClient.tsx | 73 ++++- src/components/PropertyDetailClient.tsx | 302 ++++++++++-------- src/components/PropertyFilters.tsx | 15 +- src/data/properties.ts | 47 +-- 17 files changed, 354 insertions(+), 202 deletions(-) create mode 100644 src/app/buy/property-for-sale-in-bengaluru/page.tsx create mode 100644 src/components/BengaluruHeader.tsx create mode 100644 src/components/BengaluruPropertiesClientWrapper.tsx create mode 100644 src/components/HeaderWrapper.tsx diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index 820c533..12fddd1 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -1,4 +1,3 @@ -import Header from "@/components/Header"; import InnerBanner from "@/components/InnerBanner"; import About from "@/components/About"; import WhyChooseUs from "@/components/WhyChooseUs"; @@ -14,7 +13,6 @@ export const metadata: Metadata = { export default function AboutPage() { return (
-
Loading...}> + + + ); +} diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx index a35f335..c1b2ab7 100644 --- a/src/app/contact/page.tsx +++ b/src/app/contact/page.tsx @@ -1,4 +1,3 @@ -import Header from "@/components/Header"; import InnerBanner from "@/components/InnerBanner"; import ContactCTA from "@/components/ContactCTA"; import Footer from "@/components/Footer"; @@ -12,7 +11,6 @@ export const metadata: Metadata = { export default function ContactPage() { return (
-
+ {children} {/* */} diff --git a/src/app/lifestyle/page.tsx b/src/app/lifestyle/page.tsx index ad19cfe..78690c4 100644 --- a/src/app/lifestyle/page.tsx +++ b/src/app/lifestyle/page.tsx @@ -1,4 +1,3 @@ -import Header from "@/components/Header"; import InnerBanner from "@/components/InnerBanner"; import Lifestyle from "@/components/Lifestyle"; import Footer from "@/components/Footer"; @@ -12,7 +11,6 @@ export const metadata: Metadata = { export default function LifestylePage() { return (
-
-
diff --git a/src/app/privacy-policy/page.tsx b/src/app/privacy-policy/page.tsx index 0e46843..fb14b2a 100644 --- a/src/app/privacy-policy/page.tsx +++ b/src/app/privacy-policy/page.tsx @@ -1,5 +1,4 @@ import Link from "next/link"; -import Header from "@/components/Header"; import Footer from "@/components/Footer"; import InnerBanner from "@/components/InnerBanner"; import { Metadata } from "next"; @@ -12,9 +11,6 @@ export const metadata: Metadata = { export default function PrivacyPolicy() { return (
- {/* Header */} -
- {/* Inner Banner */} -
-
setIsExpanded(!isExpanded); + + const handleModernSpaacesClick = () => { + // Toggle: if already selected, clear it (optional, but good UX). Or just set it. + // User asked for "click that button morden this ... show morden space preprtis only filter" + router.push("?search=Modern+Spaaces", { scroll: false }); + }; + + const isModernSpaacesActive = currentSearch === "Modern Spaaces"; + + return ( +
+
+

+ Property for Sale in Bengaluru +

+
+ Showing 1-{filteredCount} of {totalCount} Properties | Last Updated: {new Date().toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' })} +
+
+ +
+

+ {isExpanded ? fullText : `${fullText.substring(0, 230)}...`} +

+ +
+ +
+ +
+
+ ); +} diff --git a/src/components/BengaluruPropertiesClientWrapper.tsx b/src/components/BengaluruPropertiesClientWrapper.tsx new file mode 100644 index 0000000..a47069b --- /dev/null +++ b/src/components/BengaluruPropertiesClientWrapper.tsx @@ -0,0 +1,12 @@ +"use client"; + +import PropertiesClient from "@/components/PropertiesClient"; +import BengaluruHeader from "@/components/BengaluruHeader"; + +export default function BengaluruPropertiesClientWrapper() { + return ( + } + /> + ); +} diff --git a/src/components/CompareClient.tsx b/src/components/CompareClient.tsx index 75ab88f..a626110 100644 --- a/src/components/CompareClient.tsx +++ b/src/components/CompareClient.tsx @@ -2,7 +2,6 @@ import { useCompare } from "@/context/CompareContext"; import { properties } from "@/data/properties"; -import Header from "@/components/Header"; import Footer from "@/components/Footer"; import InnerBanner from "@/components/InnerBanner"; import Image from "next/image"; @@ -25,7 +24,6 @@ export default function CompareClient() { return (
-
; +} diff --git a/src/components/PropertiesClient.tsx b/src/components/PropertiesClient.tsx index 5b35322..0eeb076 100644 --- a/src/components/PropertiesClient.tsx +++ b/src/components/PropertiesClient.tsx @@ -1,7 +1,7 @@ "use client"; -import { useState } from "react"; -import Header from "@/components/Header"; +import { useState, useEffect } from "react"; +import { useSearchParams } from "next/navigation"; import Footer from "@/components/Footer"; import InnerBanner from "@/components/InnerBanner"; import PropertyFilters, { FilterState } from "@/components/PropertyFilters"; @@ -9,8 +9,45 @@ import PropertyCard from "@/components/PropertyCard"; import { properties } from "@/data/properties"; import { motion } from "framer-motion"; -export default function PropertiesClient() { +interface PropertiesClientProps { + initialFilters?: Partial; + headerRenderer?: (props: { filteredCount: number; totalCount: number }) => React.ReactNode; +} + +export default function PropertiesClient({ initialFilters, headerRenderer }: PropertiesClientProps = {}) { + const searchParams = useSearchParams(); const [filteredProperties, setFilteredProperties] = useState(properties); + const [initializedFilters, setInitializedFilters] = useState | undefined>(undefined); + const [isInitialized, setIsInitialized] = useState(false); + + useEffect(() => { + const search = searchParams.get("search") || ""; + const type = searchParams.get("type") || "all"; + + const initial: Partial = { + search, + type, + budgetMin: "", + budgetMax: "", + bhk: "all", + sortBy: "popularity" + }; + + setInitializedFilters(initial); + + // Initial filter run + const filters = { + search, + type, + budgetMin: "", + budgetMax: "", + bhk: "all", + sortBy: "popularity" + }; + + handleFilterChange(filters); + setIsInitialized(true); + }, [searchParams]); const handleFilterChange = (filters: FilterState) => { let filtered = [...properties]; @@ -19,7 +56,8 @@ export default function PropertiesClient() { if (filters.search) { filtered = filtered.filter(p => p.title.toLowerCase().includes(filters.search.toLowerCase()) || - p.location.toLowerCase().includes(filters.search.toLowerCase()) + p.location.toLowerCase().includes(filters.search.toLowerCase()) || + p.builder?.name.toLowerCase().includes(filters.search.toLowerCase()) ); } @@ -62,9 +100,10 @@ export default function PropertiesClient() { setFilteredProperties(filtered); }; + if (!isInitialized) return null; // Logic to wait for params + return (
-
- +
- - Browse Our Properties - + {headerRenderer ? ( + headerRenderer({ filteredCount: filteredProperties.length, totalCount: properties.length }) + ) : ( + + Browse Our Properties + + )} {/* Property Grid */} {filteredProperties.length > 0 ? ( diff --git a/src/components/PropertyDetailClient.tsx b/src/components/PropertyDetailClient.tsx index aaea28a..35c68bc 100644 --- a/src/components/PropertyDetailClient.tsx +++ b/src/components/PropertyDetailClient.tsx @@ -4,8 +4,6 @@ import { useState, ChangeEvent, FormEvent, useEffect } from "react"; -import Header from "@/components/Header"; - import Footer from "@/components/Footer"; import PropertyGallery from "@/components/PropertyGallery"; @@ -21,6 +19,7 @@ import axios from "axios"; import { useCompare } from "@/context/CompareContext"; import dynamic from 'next/dynamic'; +import Link from 'next/link'; import { motion } from "framer-motion"; const AnimateSection = ({ children, className, id, direction = "left" }: { children: React.ReactNode, className?: string, id?: string, direction?: "left" | "right" | "up" | "down" }) => { @@ -504,8 +503,6 @@ export default function PropertyDetailClient({ property }: { property: Property
-
- -
-
- -
- -
- -

{property.title}

- - - - {property.status} - - - -
- -
- - - - - - - - {property.location} - -
- -
- -
- -
Starting from
- -
- - {property.price} - -
- -
- -
- - - - {/* Quick Stats */} - -
- -
-
{property.overview.bhk}
-
Configuration
-
- -
-
{property.overview.size}
-
Area
-
- -
-
{property.overview.possession}
-
Possession
-
- -
-
{property.overview.totalUnits}
-
Total Units
-
- -
- -
+ {/* Main Content */}
{/* Property Header */} +
+ + {/* Title and Price Row */} +
+ {/* Title */} +

+ {property.title} +

+ + {/* Location and Price */} +
+
+ + + + {property.location} +
+ +
+ {property.price} +
+
+
+ + {/* Stats Row with Icons */} +
+ + {/* Possession */} +
+ + + +
+ Possession: + {property.overview.possession} +
+
+ + {/* Area/Plot */} +
+ + + +
+ {property.category === "Plots" ? "Plot" : property.overview.bhk} - + {property.overview.size} +
+
+ + {/* Sky&Soil Score */} +
+ + + +
+ Sky&Soil Score: +
+ {[1, 2, 3, 4, 5].map((star) => { + const score = property.skyAndSoilScore || 4; + const isFilled = star <= Math.floor(score); + const isHalf = !isFilled && star === Math.ceil(score) && score % 1 !== 0; + + return ( + + {isHalf ? ( + <> + + + + + + + + + ) : ( + + )} + + ); + })} +
+
+
+ +
+ +
@@ -644,48 +673,43 @@ export default function PropertyDetailClient({ property }: { property: Property - {/* Header with title and badges */} - -
- -
- -

Overview

+ {/* Header Row: Title Left, Badges Right, Subtitle Right */} +
+ {/* Left Side: Title and Builder */} +
+

Overview

- {property.title} by {property.builder?.name || "Builder"} -

-
-
- {property.overview.badges?.map((badge, index) => ( - - {badge} - - ))} + {/* Right Side: Badges and Subtitle */} +
+ {/* Badges Row */} +
+ {property.overview.badges?.map((badge, index) => ( + + {badge} + + ))} +
+ {/* Subtitle Text */} +

+ Average is based on comparable projects in {property.locality?.name || "this area"} +

- {/* Subtitle */} - -

- - Average is based on comparable projects in {property.locality?.name || "this area"} - -

- - - {/* Info Grid - 2 rows x 3 columns */}
@@ -742,7 +766,7 @@ export default function PropertyDetailClient({ property }: { property: Property

- {property.connectivity?.description || `${property.title} is located in ${property.location}.`} + {property.overview.description || property.connectivity?.description || `${property.title} is located in ${property.location}.`}

{!isConnectivityExpanded && ( @@ -1083,8 +1107,6 @@ export default function PropertyDetailClient({ property }: { property: Property 300+ families found safer homes with Sky & Soil. You could be next - ☝️ -

@@ -1095,7 +1117,7 @@ export default function PropertyDetailClient({ property }: { property: Property {/* Card 1: Compare */} -
+
{/* Decorative Circle */} @@ -1125,7 +1147,7 @@ export default function PropertyDetailClient({ property }: { property: Property

Like this project?

-

Compare it with the rest

+

Compare it with the rest

@@ -1149,12 +1171,12 @@ export default function PropertyDetailClient({ property }: { property: Property {/* Card 2: Negotiate (Green) */} -
+
{/* Trusted Badge */}
- TRUSTED BY {property.skyandsoilClarity?.familiesHelped || "300+"} FAMILIES WITH SKY & SOIL + {property.skyandsoilClarity?.familiesHelped}
@@ -1173,12 +1195,8 @@ export default function PropertyDetailClient({ property }: { property: Property {/* Trophy Icon */} - - - - - - + +
@@ -1187,7 +1205,7 @@ export default function PropertyDetailClient({ property }: { property: Property

Pay less. Get more.

-

Let us negotiate for you.

+

Let us negotiate for you.

@@ -1211,7 +1229,7 @@ export default function PropertyDetailClient({ property }: { property: Property {/* Card 3: Report (Purple) */} -
+
{/* Decorative Triangle */} @@ -1241,7 +1259,7 @@ export default function PropertyDetailClient({ property }: { property: Property

Almost convinced?

-

See what we uncovered

+

See what we uncovered

@@ -1606,22 +1624,16 @@ export default function PropertyDetailClient({ property }: { property: Property - {/* Approvals List - Two Columns */} + {/* Approvals List - Two Column Grid */} -
+
    {property.approvals?.map((approval, index) => ( -
    -
    - - - -
    -
    -

    {approval.name}

    -
    -
    +
  • + + {approval.name} +
  • ))} -
+ @@ -1637,7 +1649,13 @@ export default function PropertyDetailClient({ property }: { property: Property
{property.documents?.map((doc, index) => ( - @@ -1681,11 +1699,11 @@ export default function PropertyDetailClient({ property }: { property: Property {property.builder?.description}

- + See all properties by {property.builder?.name || "this builder"} - +
diff --git a/src/components/PropertyFilters.tsx b/src/components/PropertyFilters.tsx index 351bf2b..b415e96 100644 --- a/src/components/PropertyFilters.tsx +++ b/src/components/PropertyFilters.tsx @@ -4,6 +4,7 @@ import { useState } from "react"; interface PropertyFiltersProps { onFilterChange: (filters: FilterState) => void; + initialFilters?: Partial; } export interface FilterState { @@ -15,14 +16,14 @@ export interface FilterState { sortBy: string; } -export default function PropertyFilters({ onFilterChange }: PropertyFiltersProps) { +export default function PropertyFilters({ onFilterChange, initialFilters }: PropertyFiltersProps) { const [filters, setFilters] = useState({ - search: "", - type: "all", - budgetMin: "", - budgetMax: "", - bhk: "all", - sortBy: "popularity" + search: initialFilters?.search || "", + type: initialFilters?.type || "all", + budgetMin: initialFilters?.budgetMin || "", + budgetMax: initialFilters?.budgetMax || "", + bhk: initialFilters?.bhk || "all", + sortBy: initialFilters?.sortBy || "popularity" }); const [showFilters, setShowFilters] = useState(false); diff --git a/src/data/properties.ts b/src/data/properties.ts index 58755f9..abbe698 100644 --- a/src/data/properties.ts +++ b/src/data/properties.ts @@ -47,6 +47,7 @@ export type Property = { amenities: string[]; // Keep for backward compatibility if needed, or deprecate // New dynamic fields + skyAndSoilScore?: number; // Score from 0-5 for the property rating detailedOverview?: { landArea: string; landAreaAvg: string; @@ -87,6 +88,7 @@ export type Property = { documents?: { title: string; description: string; + pdfUrl?: string; // PDF URL to open in new tab }[]; builder?: { name: string; @@ -130,7 +132,7 @@ export const properties: Property[] = [ metaDescription: "Experience luxury living at BARCA, Godrej MSR City. These 3 BHK apartments blend modern architecture with natural serenity for a truly refined lifestyle.", category: "Apartments", location: "Shettigere Road, Bangalore", - price: "₹ 1.9 CR*", + price: "₹ 1.9 CR - ₹ 2.5 CR", description: "Experience the pinnacle of luxury living at BARCA, Godrej MSR City. These 3 BHK apartments are designed for those who appreciate the finer things in life, offering a perfect blend of modern architecture and natural serenity.", status: "New Launch", image: "/assets/images/projects/barca.webp", @@ -140,7 +142,7 @@ export const properties: Property[] = [ size: "1500 - 2200 Sq.Ft", possession: "Dec 2027", totalUnits: "400", - badges: ["Better", "Average", "Subpar"], + badges: ["Better", "Average", "Badge"], stats: [ { label: "Land Area", value: "50.00 Acres", subtext: "Avg is 50.00 acres", icon: "land" }, { label: "Closest Metro", value: "3.62 kms", subtext: "Avg is 0.00 kms", icon: "metro" }, @@ -167,7 +169,7 @@ export const properties: Property[] = [ landType: "Residential" }, skyandsoilClarity: { - familiesHelped: "300+", + familiesHelped: "Trusted by 300+ Families", }, pricingUpdateDate: "03 Nov 2025", reraInfo: { @@ -191,7 +193,8 @@ export const properties: Property[] = [ { id: "50 x 60", price: "₹3.10 Crores", area: "3000 sqft", direction: "North" }, ], approvals: [ - { name: "Approved by BDA", available: true }, + { name: "Approved by BBMP", available: true }, + { name: "Approved by BDA", available: false }, { name: "Approved by BWSSB", available: false }, { name: "Approved by MOEF", available: false }, ], @@ -285,7 +288,7 @@ export const properties: Property[] = [ metaDescription: "Godrej Woods offers premium 2 & 3 BHK apartments in Thanisandra. Enjoy a forest-themed lifestyle with world-class amenities and excellent connectivity.", category: "Premium Homes", location: "Thanisandra, North Bangalore", - price: "₹ 1.62 CR*", + price: "₹ 1.62 CR - ₹ 2.5 CR", description: "Godrej Woods offers premium 2 & 3 BHK apartments nestled in the lush greenery of Thanisandra. Enjoy a forest-themed lifestyle with world-class amenities and excellent connectivity to the airport and tech parks.", status: "Best Seller", image: "/assets/images/projects/godrej-woods.webp", @@ -295,7 +298,7 @@ export const properties: Property[] = [ size: "1500 - 2200 Sq.Ft", possession: "Dec 2027", totalUnits: "400", - badges: ["Better", "Average", "Subpar"], + badges: ["Better", "Average", "Badge"], stats: [ { label: "Land Area", value: "50.00 Acres", subtext: "Avg is 50.00 acres", icon: "land" }, { label: "Closest Metro", value: "3.62 kms", subtext: "Avg is 0.00 kms", icon: "metro" }, @@ -322,7 +325,7 @@ export const properties: Property[] = [ landType: "Residential" }, skyandsoilClarity: { - familiesHelped: "300+", + familiesHelped: "Trusted by 300+ Families", }, pricingUpdateDate: "15 Oct 2025", reraInfo: { @@ -346,7 +349,8 @@ export const properties: Property[] = [ { id: "50 x 60", price: "₹3.10 Crores", area: "3000 sqft", direction: "North" }, ], approvals: [ - { name: "Approved by BDA", available: true }, + { name: "Approved by BBMP", available: true }, + { name: "Approved by BDA", available: false }, { name: "Approved by BWSSB", available: false }, { name: "Approved by MOEF", available: false }, ], @@ -437,7 +441,7 @@ export const properties: Property[] = [ metaDescription: "Discover community living at Godrej Hoskote. Premium 2 & 3 BHK homes designed for comfort and convenience, with easy access to industrial hubs and schools.", category: "Apartments", location: "Hoskote, Soukya Road Ext", - price: "₹ 1.17 Cr*", + price: "₹ 1.17 CR - ₹ 1.5 CR", description: "Discover the joy of community living at Godrej Hoskote. These premium 2 & 3 BHK homes are designed to provide a comfortable and convenient lifestyle, with easy access to industrial hubs and educational institutions.", status: "New Launch", image: "/assets/images/projects/godrej-hoskote.webp", @@ -447,7 +451,7 @@ export const properties: Property[] = [ size: "1500 - 2200 Sq.Ft", possession: "Dec 2027", totalUnits: "400", - badges: ["Better", "Average", "Subpar"], + badges: ["Better", "Average", "Badge"], stats: [ { label: "Land Area", value: "50.00 Acres", subtext: "Avg is 50.00 acres", icon: "land" }, { label: "Closest Metro", value: "3.62 kms", subtext: "Avg is 0.00 kms", icon: "metro" }, @@ -474,7 +478,7 @@ export const properties: Property[] = [ landType: "Residential" }, skyandsoilClarity: { - familiesHelped: "300+", + familiesHelped: "Trusted by 300+ Families", }, pricingUpdateDate: "20 Oct 2025", reraInfo: { @@ -498,7 +502,8 @@ export const properties: Property[] = [ { id: "50 x 60", price: "₹3.10 Crores", area: "3000 sqft", direction: "North" }, ], approvals: [ - { name: "Approved by BDA", available: true }, + { name: "Approved by BBMP", available: true }, + { name: "Approved by BDA", available: false }, { name: "Approved by BWSSB", available: false }, { name: "Approved by MOEF", available: false }, ], @@ -589,7 +594,7 @@ export const properties: Property[] = [ metaDescription: "Wake up to serene lake views at Godrej Lakeside Orchard. Luxury 2, 3, 3.5 & 4.5 BHK apartments offer a resort-like living experience on Sarjapur Road.", category: "Luxury", location: "Sarjapur Road, Bangalore", - price: "₹ 1.89 Cr*", + price: "₹ 1.89 CR - ₹ 2.5 CR", description: "Wake up to the serene views of a lake and orchard at Godrej Lakeside Orchard. These luxury 2, 3, 3.5 & 4.5 BHK apartments offer a resort-like living experience on Sarjapur Road.", status: "Trending", image: "/assets/images/projects/godrej-lakeside.webp", @@ -599,7 +604,7 @@ export const properties: Property[] = [ size: "1500 - 2200 Sq.Ft", possession: "Dec 2027", totalUnits: "400", - badges: ["Better", "Average", "Subpar"], + badges: ["Better", "Average", "Badge"], stats: [ { label: "Land Area", value: "50.00 Acres", subtext: "Avg is 50.00 acres", icon: "land" }, { label: "Closest Metro", value: "3.62 kms", subtext: "Avg is 0.00 kms", icon: "metro" }, @@ -626,7 +631,7 @@ export const properties: Property[] = [ landType: "Residential" }, skyandsoilClarity: { - familiesHelped: "300+", + familiesHelped: "Trusted by 300+ Families", }, pricingUpdateDate: "25 Oct 2025", reraInfo: { @@ -650,7 +655,8 @@ export const properties: Property[] = [ { id: "50 x 60", price: "₹3.10 Crores", area: "3000 sqft", direction: "North" }, ], approvals: [ - { name: "Approved by BDA", available: true }, + { name: "Approved by BBMP", available: true }, + { name: "Approved by BDA", available: false }, { name: "Approved by BWSSB", available: false }, { name: "Approved by MOEF", available: false }, ], @@ -741,7 +747,7 @@ export const properties: Property[] = [ metaDescription: "Godrej Tiara presents exclusive 3 & 4 BHK apartments in Yeshwanthpur. Experience unmatched luxury, sophisticated design, and panoramic city skyline views.", category: "Luxury", location: "Yeshwanthpur, Bangalore", - price: "₹ 1.89 Cr*", + price: "₹ 1.89 CR - ₹ 2.5 CR", description: "Godrej Tiara presents exclusive 3 & 4 BHK apartments in the heart of Yeshwanthpur. Experience unmatched luxury, sophisticated design, and panoramic views of the city skyline.", status: "Premium", image: "/assets/images/projects/godrej-tiara.webp", @@ -751,7 +757,7 @@ export const properties: Property[] = [ size: "1500 - 2200 Sq.Ft", possession: "Dec 2027", totalUnits: "400", - badges: ["Better", "Average", "Subpar"], + badges: ["Better", "Average", "Badge"], stats: [ { label: "Land Area", value: "50.00 Acres", subtext: "Avg is 50.00 acres", icon: "land" }, { label: "Closest Metro", value: "3.62 kms", subtext: "Avg is 0.00 kms", icon: "metro" }, @@ -778,7 +784,7 @@ export const properties: Property[] = [ landType: "Residential" }, skyandsoilClarity: { - familiesHelped: "300+", + familiesHelped: "Trusted by 300+ Families", }, pricingUpdateDate: "01 Nov 2025", reraInfo: { @@ -802,7 +808,8 @@ export const properties: Property[] = [ { id: "50 x 60", price: "₹3.10 Crores", area: "3000 sqft", direction: "North" }, ], approvals: [ - { name: "Approved by BDA", available: true }, + { name: "Approved by BBMP", available: true }, + { name: "Approved by BDA", available: false }, { name: "Approved by BWSSB", available: false }, { name: "Approved by MOEF", available: false }, ],