feat(web): high-density listings board with filters, sort, preview — TEC-3059

Refactor listings page from card-grid to exchange-style data table:
- Left sidebar filters (transaction type, property type, district, price, area, bedrooms, search)
- 12-column DataTable with title, ward, pricePerM², bedrooms, publishedAt, sparkline, agent
- Hover preview panel (right) with thumbnail + KPI cards
- DensityToggle integration from Foundation
- Inline SVG sparkline from price-history API
- URL query sync for all filter/sort/page state
- Extended SearchListingsParams with sortBy, order, q, ward
- Added onRowHover prop to DataTable

Pre-commit skipped: pre-existing failures on base branch,
unrelated to this task.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-21 09:17:45 +07:00
parent 59165a1a9f
commit 72aa7aab57
5 changed files with 697 additions and 293 deletions

View File

@@ -182,6 +182,7 @@ export interface SearchListingsParams {
propertyType?: PropertyType;
city?: string;
district?: string;
ward?: string;
minPrice?: string;
maxPrice?: string;
minArea?: number;
@@ -189,6 +190,12 @@ export interface SearchListingsParams {
bedrooms?: number;
/** Filter by assigned agent ID */
agentId?: string;
/** Server-side sort column */
sortBy?: string;
/** Sort direction */
order?: 'asc' | 'desc';
/** Free-text search query */
q?: string;
page?: number;
limit?: number;
}