fix(live-meeting): bind page to shared store cache for live reactivity#166
fix(live-meeting): bind page to shared store cache for live reactivity#166rubenvdlinde wants to merge 1 commit into
Conversation
…activity Pre-migration LiveMeeting.fetchData() copied results into local data fields, which made the page non-reactive to live updates: the liveUpdatesPlugin updated the store cache on `or-object-*` events, but the local copy never re-read. Promote `meeting`, `allItems`, and `participants` to computed getters reading straight from objectStore; fetchData() now just triggers initial fetches to seed the cache. The canonical e2e (PUT meeting via API → page rerenders without reload) now works against the OR + notify_push backend chain. Also call setActivePinia(pinia) before initializeStores() in main.js; without it, useObjectStore() invoked from non-Vue context throws "Cannot read properties of undefined (reading '_s')" because the PiniaVuePlugin only auto-activates when Vue itself is constructed.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-10 11:56 UTC
Download the full PDF report from the workflow artifacts.
Review — fix(live-meeting): bind page to shared store cache for live reactivityVerdict: 🔴 REQUEST_CHANGES — Core reactivity fix is correct (computed getters + setActivePinia), maar branch is 11 commits achter op development en mist daardoor de ERESOLVE-fix voor de lockfile — 5 CI-checks (lint, eslint, stylelint, npm-security, npm-license) zijn rood door Wat goed gaatDe Pinia-store binding via computed getters is exact de juiste manier om Vue 2 Options API aan een gedeelde store te koppelen — geen per-component watcher-boilerplate, liveUpdatesPlugin refetches komen vanzelf in de UI. Memory management is netjes: Findings1. 🔴 Blocker — Branch 11 commits achter op development — npm ci faalt —
|
MWest2020
left a comment
There was a problem hiding this comment.
Zie consolidated review comment voor complimenten, findings en suggested fixes.
Summary
meeting/allItems/participantsfrom local data to computed getters reading the shared store cache, soliveUpdatesPluginre-fetches onor-object-*/or-collection-*events flow into the rendered UI.setActivePinia(pinia)beforeinitializeStores()insrc/main.js; the bootstrap callsuseObjectStore()outside any Vue component, where PiniaVuePlugin's auto-activation hasn't run yet.Why
End-to-end live updates only worked through the WS push chain (OR backend → notify_push → plugin → store). The page itself didn't reactively re-render because LiveMeeting copied store results into local state once at mount. Two-browser test (PUT meeting via API → other browser shows new title in seconds without reload) is now passing.
Test plan