feat(live): bump @conduction/nextcloud-vue to 1.0.0-beta.6, replace LiveMeeting polling with subscriptions#161
Merged
Conversation
…iveMeeting polling with subscriptions
Brings the live-updates plugin to decidesk. The most visible payoff is
LiveMeeting.vue, which previously polled refreshItems() every 30 seconds
to keep the chair's view in sync with the meeting state. Replaced with
three store subscriptions:
store.subscribe('meeting', this.id) // active agenda item, status
store.subscribe('agenda-item') // votes started/ended, reordered
store.subscribe('participant') // late joiners, drop-offs
When the OpenRegister backend publishes a notify_custom event for the
meeting/agenda-item/participant register, the store auto-refetches the
affected resource and Vue's reactivity surfaces the change. No more
30-second lag between the chair clicking 'next item' and attendees
seeing the new active item highlight.
Plugin transparently falls back to coalesced polling (30s collections /
60s objects, visibility-gated) when notify_push isn't installed on the
NC instance — so the page works the same on stacks without the
WebSocket sidecar, just with the original lag.
Compatibility adjustments required by the bump (mirroring procest #319):
- @nextcloud/axios pinned to ~2.5.2 via overrides + direct dep. v2.6.0
dropped its CJS exports condition, breaking @nextcloud/vue's CJS bundle.
- webpack.config.js gains an explicit SCSS rule. The library now ships
components with <style lang="scss"> blocks (CnCard, CnDataTable, etc).
- sass-loader + sass added as devDependencies (now required by the SCSS
rule above; npm install picked them up automatically).
Build green: 2 informational bundle-size warnings, 0 errors.
Contributor
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-09 14:01 UTC
Download the full PDF report from the workflow artifacts.
4 tasks
rubenvdlinde
added a commit
that referenced
this pull request
May 9, 2026
Pulls in the Vue.extend frozen-component fix (ConductionNL/nextcloud-vue#164, closes #161). With this version the manifest-driven shell mounts cleanly in the browser — the previous 1.0.0-beta.5 crashed at `Vue.extend` with "Cannot add property _Ctor, object is not extensible" because `pageTypes.js` and `CnPropertyValueCell` both routed dynamic-import component resolution through frozen namespace wrappers. The fix unwraps `m.default` before Vue receives the component. End-to-end verified at localhost:8080: - Decidesk shell mounts (CnAppRoot reads manifest) - Sidebar nav (CnAppNav) renders manifest.menu — Dashboard / Minutes / Decisions / Action items / Motions / Meetings / Documentation / Settings - Dashboard page renders 3 widget cards via CnDashboardPage async dispatch - Clicking Decisions navigates to /apps/decidesk/decisions and renders CnIndexPage (Cards/Table toggle, Add Item, Actions, sidebar Search + Columns tabs) - Vue Router resolves route components without _Ctor crash - i18n: Dutch labels render (Notulen ter goedkeuring, Gepubliceerde besluiten, Open actiepunten)
…tcloud-vue-beta-6 # Conflicts: # package-lock.json # package.json
Contributor
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-09 16:00 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the live-updates plugin to decidesk and ports the most visible polling surface —
LiveMeeting.vue— onto it.What changes
@conduction/nextcloud-vue0.1.0-beta.17→1.0.0-beta.6— pulls the live-updates plugin (subscribe / unsubscribe via notify_push, polling fallback, refcounted listeners, in-flight fetch dedup) plus everything that landed since beta.17.LiveMeeting.vueswaps the 30-secondsetIntervalfor threeobjectStore.subscribe()calls:subscribe('meeting', this.id)— chair advances active agenda item / changes status → page re-renders within mssubscribe('agenda-item')— vote starts/ends, item reordered/removed mid-meeting → list refreshessubscribe('participant')— late joiners, drop-offs surface immediatelybeforeDestroyso refcount drops to 0 and the underlying notify_push listeners are torn down.try/catcharoundsubscribe,refreshIntervalre-instated on failure) keeps the page working if the plugin is missing — same 30s polling as before.Compatibility adjustments (mirroring procest #319)
@nextcloud/axiospinned to~2.5.2viaoverrides+ direct dep. v2.6.0 dropped its CJS exports condition;@nextcloud/vue's CJS bundle requires axios via CJS and breaks otherwise.webpack.config.jsgains an explicit SCSS rule. The library now ships components with<style lang="scss">(CnCard, CnDataTable, etc.); decidesk's webpack module.rules override didn't include sass-loader.sass-loader+sassadded as devDeps (required by the SCSS rule).Verification
npm run build— 2 informational bundle-size warnings, 0 errorssubscribe()see zero behavioural change.Why now
Companion to OR PR #1453 (live-updates backend, soon to merge) and the published
@conduction/nextcloud-vue@1.0.0-beta.6. Once OR's backend lands, decidesk's live meeting page is the headline demo of why this work matters — chair clicks 'next item', attendees see it move within milliseconds.