Use async import for vue component on collections entrypoint

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2021-07-08 10:35:42 +02:00
parent 92ace35f79
commit 7119137a75
3 changed files with 14 additions and 12 deletions

View File

@@ -25,9 +25,8 @@ const buildSelector = (selector, propsData = {}) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const container = document.createElement('div') const container = document.createElement('div')
document.getElementById('body-user').append(container) document.getElementById('body-user').append(container)
const View = Vue.extend(selector) const ComponentVM = new Vue({
const ComponentVM = new View({ render: (h) => h(selector, propsData),
propsData,
}).$mount(container) }).$mount(container)
ComponentVM.$root.$on('close', () => { ComponentVM.$root.$on('close', () => {
ComponentVM.$el.remove() ComponentVM.$el.remove()

View File

@@ -22,8 +22,6 @@
import Vue from 'vue' import Vue from 'vue'
import BoardSelector from './BoardSelector'
import CardSelector from './CardSelector'
import './../css/collections.css' import './../css/collections.css'
import FileSharingPicker from './views/FileSharingPicker' import FileSharingPicker from './views/FileSharingPicker'
import { buildSelector } from './helpers/selector' import { buildSelector } from './helpers/selector'
@@ -45,13 +43,19 @@ window.addEventListener('DOMContentLoaded', () => {
} }
window.OCP.Collaboration.registerType('deck', { window.OCP.Collaboration.registerType('deck', {
action: () => buildSelector(BoardSelector), action: () => {
const BoardSelector = () => import('./BoardSelector')
buildSelector(BoardSelector)
},
typeString: t('deck', 'Link to a board'), typeString: t('deck', 'Link to a board'),
typeIconClass: 'icon-deck', typeIconClass: 'icon-deck',
}) })
window.OCP.Collaboration.registerType('deck-card', { window.OCP.Collaboration.registerType('deck-card', {
action: () => buildSelector(CardSelector), action: () => {
const CardSelector = () => import('./CardSelector')
buildSelector(CardSelector)
},
typeString: t('deck', 'Link to a card'), typeString: t('deck', 'Link to a card'),
typeIconClass: 'icon-deck', typeIconClass: 'icon-deck',
}) })

View File

@@ -21,7 +21,6 @@
*/ */
import Vue from 'vue' import Vue from 'vue'
import CardSelector from '../CardSelector'
import { createShare } from '../services/SharingApi' import { createShare } from '../services/SharingApi'
export default { export default {
@@ -34,12 +33,12 @@ export default {
container.id = 'deck-board-select' container.id = 'deck-board-select'
const body = document.getElementById('body-user') const body = document.getElementById('body-user')
body.append(container) body.append(container)
const SelectorView = Vue.extend(CardSelector) const CardSelector = () => import('./../CardSelector')
const ComponentVM = new SelectorView({ const ComponentVM = new Vue({
propsData: { render: (h) => h(CardSelector, {
title: t('deck', 'Share {file} with a Deck card', { file: decodeURIComponent(self.fileInfo.name) }), title: t('deck', 'Share {file} with a Deck card', { file: decodeURIComponent(self.fileInfo.name) }),
action: t('deck', 'Share'), action: t('deck', 'Share'),
}, }),
}) })
ComponentVM.$mount(container) ComponentVM.$mount(container)
ComponentVM.$root.$on('close', () => { ComponentVM.$root.$on('close', () => {