nextcloud / nextcloud/richdocuments
Migrate off the OCA.Viewer global before Nextcloud 36
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 453
- Forks
- 147
- Avg merge
- 14h 54m
- Merged PRs (30d)
- 83
Description
richdocuments is the heaviest user of the global, and the only one that both registers a handler
and drives the viewer:
src/viewer.js:16:OCA.Viewer.registerHandler({ ... })src/file-actions.js:38:OCA.Viewer.openWith('richdocuments', { path })src/public.js:27,29:openWith()/open()on public share pagessrc/mixins/openLocal.js:67:window.OCA.Viewer.open({ path })
The handler is the part that needs real work: handlers are custom elements now, not Vue
components handed to the viewer. You define the element on window.customElements and register
its tagname, which is what lets a handler be written in any framework. The
registration walkthrough
covers it, and enabled(nodes) replaces the mimes array.
openWith(id, { … }) becomes getViewer().open(nodes, file, options, id), with the handler id
as the fourth argument.
[!WARNING]
Without this, office files stop opening in the viewer entirely, rather than degrading.
OCA.Viewer is gone in Viewer 7.0.0. The viewer ships as the
@nextcloud/viewer library rather than a
bundled app, and nextcloud/server#63954 removes the viewer app from Nextcloud 36 altogether.
Roughly what it looks like:
import { canView, getViewer } from '@nextcloud/viewer'
// OCA.Viewer.open({ path }) / ({ fileInfo, list })
getViewer().open(nodes, file) // @nextcloud/files nodes
getViewer().openFolder(folder, file) // when a path is all you have, let it fetch
// OCA.Viewer.mimetypes.includes(mime) / availableHandlers
canView(node)
The part that is not a rename is that the viewer takes @nextcloud/files nodes now, not
fileinfo objects or path strings. Importing the package is also all it takes to get the viewer
onto the page: no LoadViewer event to dispatch, and nothing to check about whether the app is
enabled.
[!IMPORTANT]
There is no compatibility shim, which was a deliberate call, so this is a real port rather
than a rename. Nothing breaks until the server PR lands; after that these calls throw on
Nextcloud 36.
[!TIP]
The developer manual covers the migration under
Critical changes
(being added in nextcloud/documentation#15597), and the
README
has the full before/after table. Happy to help with the port, just ping me.
👾 This issue was written with the help of Claude Code.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/viewer.js, src/file-actions.js, src/public.js, and src/mixins/openLocal.js, then read the linked @nextcloud/viewer migration walkthrough. Port the handler and viewer calls to the current custom-element and node-based APIs, replacing the old global and load checks. Done means office files still open through local and public-share paths on Viewer 7 and Nextcloud 36.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- frontend
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100