fix: maplibre reactive signal bugs and stale signal re-push #3

Merged
ryan merged 3 commits from worktree-datastar-research into main 2026-02-20 18:31:27 +00:00
2 changed files with 7 additions and 3 deletions
Showing only changes of commit 3c3ce57055 - Show all commits

View File

@@ -291,6 +291,7 @@ func (c *Context) prepareSignalsForPatch() map[string]any {
} }
if sig.changed { if sig.changed {
updatedSigs[sigID.(string)] = fmt.Sprintf("%v", sig.val) updatedSigs[sigID.(string)] = fmt.Sprintf("%v", sig.val)
sig.changed = false
} }
case *computedSignal: case *computedSignal:
sig.recompute() sig.recompute()

View File

@@ -233,12 +233,15 @@ func dragendHandlerJS(mapID, markerID string, mk Marker) string {
// markerEffectExpr generates a data-effect expression that moves a signal-backed marker // markerEffectExpr generates a data-effect expression that moves a signal-backed marker
// when its signals change. // when its signals change.
func markerEffectExpr(mapID, markerID string, mk Marker) string { func markerEffectExpr(mapID, markerID string, mk Marker) string {
// Read signals before the guard so Datastar tracks them as dependencies
// even when the map/marker hasn't loaded yet on first evaluation.
return fmt.Sprintf( return fmt.Sprintf(
`var lng=$%s,lat=$%s;`+
`var m=window.__via_maps&&window.__via_maps[%s];`+ `var m=window.__via_maps&&window.__via_maps[%s];`+
`if(m&&m._via_markers[%s]){`+ `if(m&&m._via_markers[%s]){`+
`m._via_markers[%s].setLngLat([$%s,$%s])}`, `m._via_markers[%s].setLngLat([lng,lat])}`,
jsonStr(mapID), jsonStr(markerID), jsonStr(markerID),
mk.LngSignal.ID(), mk.LatSignal.ID(), mk.LngSignal.ID(), mk.LatSignal.ID(),
jsonStr(mapID), jsonStr(markerID), jsonStr(markerID),
) )
} }