Fix contest QSO DX target updates#833
Conversation
Weekly Merge to Main
hot fix issues
version bump
weird map issues with edge
fix: PluginLayer error boundary and map safety checks
fix: replace OSM/OpenTopoMap tiles blocked by usage policy
fix: azimuthal tile globe misaligned on Retina/HiDPI displays
bump version to 26.1.3, add recent fixes to WhatsNew
perf: cache NOAA solar data for propagation heatmap
fix: use DXpedition entity coordinates for active DXpedition spots
fix: built-in propagation model was severely underestimating MUF
fix: ITURHFProp service IS alive — was being killed by tight timeouts
fix: DXpedition spots randomly appearing at wrong locations
fix: NaN coordinates crash — Invalid LatLng object: (NaN, NaN)
accius
left a comment
There was a problem hiding this comment.
Thanks for the fix — the approach of threading DX props through the plugin layer plumbing is sound and follows the existing pattern.
A few things to consider:
Substantive
-
DX props now go to every plugin — The PluginLayer change passes
dxLocation,onDXChange, anddxLockedto all plugin hooks, but onlyuseContestQsosconsumes them. Not a bug (unused props are harmless in JS), but worth noting. -
dxLocationin the useEffect dependency array causes unnecessary re-runs — Every time the DX target moves (map click, spot click, etc.), the auto-target effect re-evaluates even when there are no new QSOs. It bails early viaalreadySelected, but the effect really only needs to fire whenqsoschanges. Consider using a ref fordxLocationinstead of including it in deps. -
[...qsos].reverse().find(...)runs more often than needed — With up to 200 QSOs, this fires every time the effect triggers (which per point 2 is more often than necessary). MovingdxLocationto a ref would tighten this up. -
The
alreadySelectedepsilon check is redundant — ThetargetKeydedup on the line above already prevents duplicateonDXChangewrites. The floating-point comparison (1e-6) across different parse paths is fragile and could be removed to simplify.
Unrelated changes
The formatting-only changes to aprs_newsfeed.user.js, N1MM-SETUP.md, and dxspider-proxy/server.js are fine on their own but add noise to a PR titled "Fix contest QSO DX target updates." Consider splitting those into a separate formatting PR to keep this one focused.
|
also please point this at the staging branch not main |
|
Addressed the review feedback in this branch update:
Verification:
|
Summary
Fixes the contest QSO map layer so the latest located contest contact updates the main DX target marker instead of only drawing overlay geometry.
Fixes #832.
Problem
/api/contest/qsosdata was being rendered by theContest QSOslayer, but that plugin only drew markers/arcs. It did not have access to the shared DX target update callback, so the main DX target state stayed stale even when new QSOs were plotted successfully.Changes
onDXChangethrough the plugin layer plumbingVerification
npm run buildNotes
DX lock is still enforced by the existing app-level
onDXChangehandler. This PR only addresses the DX target update behavior. It does not change/api/contest/qsoscaching.