Sync property list with map viewport

Major changes:
- Property list now updates when map pans/zooms
- Properties sorted by distance from map center (closest first)
- Shows "X properties in view" when viewport filtering active
- Min 30 properties required before grouping kicks in
- Added rule to CLAUDE.md: no commits unless asked

Backend:
- MLS_Query: Added bounds filtering and distance-based sorting
- AJAX handler: Accepts bounds/center, sorts by distance when provided

Frontend:
- Map move triggers property list refresh with same viewport
- Loop prevention flag to avoid map->filter->map recursion
- Resets to page 1 when viewport changes

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hanson.xyz Dev
2025-12-16 01:27:44 -06:00
parent 9337a3cbc7
commit acd606bb03
6 changed files with 151 additions and 37 deletions
@@ -39,6 +39,12 @@ class MLS_Cluster {
*/
const MAX_INDIVIDUAL_MARKERS = 500;
/**
* Minimum properties before any grouping kicks in
* Below this, always show individual markers
*/
const MIN_FOR_GROUPING = 30;
/**
* Zoom thresholds for visualization modes
*/
@@ -270,6 +276,11 @@ class MLS_Cluster {
$total = (int) $wpdb->get_var($count_sql);
}
// If very few properties, always show individual markers (no grouping)
if ($total < self::MIN_FOR_GROUPING) {
return $this->get_individual_markers($where_sql, $values, $total);
}
// Calculate center latitude for Mercator adjustment
$center_lat = 45.0; // Default Minnesota
if ($args['bounds'] && count($args['bounds']) === 4) {