seems alright
This commit is contained in:
parent
ebe7bbb51d
commit
eac1bd0d13
58 changed files with 23125 additions and 153505 deletions
|
|
@ -45,31 +45,46 @@ export function useListingLayers({
|
|||
}: UseListingLayersProps) {
|
||||
const [popupInfo, setPopupInfo] = useState<ListingPopupInfo | null>(null);
|
||||
|
||||
const visibleListings = useMemo(() => {
|
||||
if (listings.length === 0) return listings;
|
||||
if (usePostcodeView) {
|
||||
const allowed = new Set<string>();
|
||||
for (const feature of postcodeData) {
|
||||
if (feature.properties.count > 0) {
|
||||
allowed.add(normalizePostcode(feature.properties.postcode));
|
||||
}
|
||||
}
|
||||
if (allowed.size === 0) return [];
|
||||
return listings.filter((listing) => allowed.has(normalizePostcode(listing.postcode)));
|
||||
}
|
||||
// Split into two memos so the inactive view's data changes don't invalidate
|
||||
// the active filtered list. (e.g. in postcode view, hexagonData updates must
|
||||
// not retrigger filtering / downstream layer rebuilds.)
|
||||
const postcodeFilteredListings = useMemo(() => {
|
||||
if (!usePostcodeView || listings.length === 0) return null;
|
||||
const allowed = new Set<string>();
|
||||
for (const cell of hexagonData) {
|
||||
if (cell.count > 0) allowed.add(cell.h3);
|
||||
for (const feature of postcodeData) {
|
||||
if (feature.properties.count > 0) {
|
||||
allowed.add(normalizePostcode(feature.properties.postcode));
|
||||
}
|
||||
}
|
||||
if (allowed.size === 0) return [];
|
||||
return listings.filter((listing) => allowed.has(normalizePostcode(listing.postcode)));
|
||||
}, [listings, postcodeData, usePostcodeView]);
|
||||
|
||||
const hexFilteredListings = useMemo(() => {
|
||||
if (usePostcodeView || listings.length === 0) return null;
|
||||
const allowed = new Set<string>();
|
||||
let cellResolution: number | null = null;
|
||||
for (const cell of hexagonData) {
|
||||
if (cell.count > 0) {
|
||||
allowed.add(cell.h3);
|
||||
if (cellResolution == null) cellResolution = getResolution(cell.h3);
|
||||
}
|
||||
}
|
||||
if (allowed.size === 0 || cellResolution == null) return [];
|
||||
const resolutionForLookup = cellResolution;
|
||||
return listings.filter((listing) => {
|
||||
try {
|
||||
return allowed.has(latLngToCell(listing.lat, listing.lon, resolution));
|
||||
return allowed.has(latLngToCell(listing.lat, listing.lon, resolutionForLookup));
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}, [listings, hexagonData, postcodeData, resolution, usePostcodeView]);
|
||||
}, [listings, hexagonData, usePostcodeView]);
|
||||
|
||||
const visibleListings = useMemo(() => {
|
||||
if (listings.length === 0) return listings;
|
||||
return (usePostcodeView ? postcodeFilteredListings : hexFilteredListings) ?? [];
|
||||
}, [listings, usePostcodeView, postcodeFilteredListings, hexFilteredListings]);
|
||||
|
||||
const handleHover = useCallback((info: PickingInfo<ActualListing>) => {
|
||||
if (info.object && info.x !== undefined && info.y !== undefined) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue