Skip to content

Commit

Permalink
fix: yjs duplicated import issue
Browse files Browse the repository at this point in the history
Signed-off-by: Luka Trovic <[email protected]>
  • Loading branch information
luka-nextcloud authored and mejo- committed Sep 21, 2023
1 parent 7a506ff commit 5c116c9
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
25 changes: 25 additions & 0 deletions src/components/Editor.singleton.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Get instance of Editor component
* Using singleton approach here to avoid duplicate yjs import error
* @return {Promise<*>}
*/
export default async function getEditorInstance() {
if (!window._nc_text_editor_instance) {
if (window._nc_text_editor_importing) {
return await new Promise((resolve) => {
const intervalId = setInterval(() => {
if (!window._nc_text_editor_instance) {
return
}
resolve(window._nc_text_editor_instance)
clearInterval(intervalId)
}, 200)
})
} else {
window._nc_text_editor_importing = true
}
const Editor = await import(/* webpackChunkName: "editor" */'./Editor.vue')
window._nc_text_editor_instance = Editor.default
}
return window._nc_text_editor_instance
}
3 changes: 2 additions & 1 deletion src/components/ViewerComponent.vue
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ import PlainTextReader from './PlainTextReader.vue'
import RichTextReader from './RichTextReader.vue'

import { getSharingToken } from '../helpers/token.js'
import getEditorInstance from './Editor.singleton.js'

export default {
name: 'ViewerComponent',
components: {
RichTextReader,
PlainTextReader,
Editor: () => import(/* webpackChunkName: "editor" */'./Editor.vue'),
Editor: getEditorInstance,
},
props: {
filename: {
Expand Down
3 changes: 2 additions & 1 deletion src/views/RichWorkspace.vue
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router'
import { subscribe, unsubscribe } from '@nextcloud/event-bus'
import SkeletonLoading from '../components/SkeletonLoading.vue'
import getEditorInstance from '../components/Editor.singleton.js'

const IS_PUBLIC = !!(document.getElementById('isPublic'))
const WORKSPACE_URL = generateOcsUrl('apps/text' + (IS_PUBLIC ? '/public' : '') + '/workspace', 2)
Expand All @@ -57,7 +58,7 @@ export default {
name: 'RichWorkspace',
components: {
SkeletonLoading,
Editor: () => import(/* webpackChunkName: "editor" */'./../components/Editor.vue'),
Editor: getEditorInstance,
},
props: {
path: {
Expand Down

0 comments on commit 5c116c9

Please sign in to comment.