diff --git a/apps/web/app/[locale]/(public)/khu-cong-nghiep/page.tsx b/apps/web/app/[locale]/(public)/khu-cong-nghiep/page.tsx index 51451a6..6508d3b 100644 --- a/apps/web/app/[locale]/(public)/khu-cong-nghiep/page.tsx +++ b/apps/web/app/[locale]/(public)/khu-cong-nghiep/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Factory, Map } from 'lucide-react'; +import { Factory, Map as MapIcon, List, Columns } from 'lucide-react'; import * as React from 'react'; import { ParkCard } from '@/components/khu-cong-nghiep/park-card'; import { ParkFilterBar } from '@/components/khu-cong-nghiep/park-filter-bar'; @@ -11,12 +11,14 @@ import type { SearchIndustrialParksParams } from '@/lib/khu-cong-nghiep-api'; const PAGE_SIZE = 12; +type ViewMode = 'list' | 'map' | 'split'; + export default function KhuCongNghiepPage() { const [filters, setFilters] = React.useState({ page: 1, limit: PAGE_SIZE, }); - const [showMap, setShowMap] = React.useState(false); + const [viewMode, setViewMode] = React.useState('split'); const { data, isLoading, isError } = useIndustrialParksSearch(filters); @@ -43,28 +45,44 @@ export default function KhuCongNghiepPage() { {/* Filters */} - {/* Map toggle */} + {/* View mode toggle */}
- +
+ + + +
- {/* Park Map */} - {showMap && data && data.data.length > 0 && ( -
- -
- )} - {/* Results */} -
+
{isLoading ? (
{Array.from({ length: 6 }).map((_, i) => ( @@ -93,14 +111,41 @@ export default function KhuCongNghiepPage() { {data.total} khu công nghiệp được tìm thấy

-
- {data.data.map((park) => ( - - ))} -
+ {/* Map-only view */} + {viewMode === 'map' && ( + + )} - {/* Pagination */} - {data.totalPages > 1 && ( + {/* Split view: list left, sticky map right (lg+ only) */} + {viewMode === 'split' && ( +
+
+
+ {data.data.map((park) => ( + + ))} +
+
+
+ +
+
+ )} + + {/* List-only view */} + {viewMode === 'list' && ( +
+ {data.data.map((park) => ( + + ))} +
+ )} + + {/* Pagination — show in list/split mode only */} + {viewMode !== 'map' && data.totalPages > 1 && (