Skip to content

feat(live): bump @conduction/nextcloud-vue to 1.0.0-beta.6, replace LiveMeeting polling with subscriptions#161

Merged
rubenvdlinde merged 2 commits into
developmentfrom
chore/bump-nextcloud-vue-beta-6
May 9, 2026
Merged

feat(live): bump @conduction/nextcloud-vue to 1.0.0-beta.6, replace LiveMeeting polling with subscriptions#161
rubenvdlinde merged 2 commits into
developmentfrom
chore/bump-nextcloud-vue-beta-6

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Brings the live-updates plugin to decidesk and ports the most visible polling surface — LiveMeeting.vue — onto it.

What changes

  • @conduction/nextcloud-vue 0.1.0-beta.171.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.vue swaps the 30-second setInterval for three objectStore.subscribe() calls:
    • subscribe('meeting', this.id) — chair advances active agenda item / changes status → page re-renders within ms
    • subscribe('agenda-item') — vote starts/ends, item reordered/removed mid-meeting → list refreshes
    • subscribe('participant') — late joiners, drop-offs surface immediately
  • All subscription handles are unsubscribed in beforeDestroy so refcount drops to 0 and the underlying notify_push listeners are torn down.
  • A graceful fallback path (try/catch around subscribe, refreshInterval re-instated on failure) keeps the page working if the plugin is missing — same 30s polling as before.

Compatibility adjustments (mirroring procest #319)

  • @nextcloud/axios pinned to ~2.5.2 via overrides + direct dep. v2.6.0 dropped its CJS exports condition; @nextcloud/vue's CJS bundle requires axios via CJS and breaks otherwise.
  • webpack.config.js gains 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 + sass added as devDeps (required by the SCSS rule).

Verification

  • npm run build — 2 informational bundle-size warnings, 0 errors
  • All decidesk webpack entry points produce dist (main, settings, MeetingLifecycle, etc.)
  • The live transport is opt-in by event-name; pages that don't call subscribe() 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.

…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.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Quality Report — ConductionNL/decidesk @ d65d437

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.

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
@rubenvdlinde rubenvdlinde merged commit 15dc208 into development May 9, 2026
9 of 14 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Quality Report — ConductionNL/decidesk @ ef22434

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant