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 committed Aug 8, 2023
1 parent 596f67b commit e80e8b1
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.EditorInstance) {
if (window.EditorInstanceImporting) {
return await new Promise((resolve) => {
const intervalId = setInterval(() => {
if (!window.EditorInstance) {
return
}
resolve(window.EditorInstance)
clearInterval(intervalId)
}, 200)
})
} else {
window.EditorInstanceImporting = true
}
const Editor = await import(/* webpackChunkName: "editor" */'./Editor.vue')
window.EditorInstance = Editor.default
}
return window.EditorInstance
}
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 @@ -46,6 +46,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 @@ -54,7 +55,7 @@ export default {
name: 'RichWorkspace',
components: {
SkeletonLoading,
Editor: () => import(/* webpackChunkName: "editor" */'./../components/Editor.vue'),
Editor: getEditorInstance,
},
props: {
path: {
Expand Down

0 comments on commit e80e8b1

Please sign in to comment.