From 8bb6ff7ab33e70390a3f242d80bb7991d16ff4de Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Sat, 24 Jun 2023 18:31:12 +0300 Subject: [PATCH] optimize webpack bundles --- app/javascript/application.js | 16 ++++++---- app/javascript/elements/file_dropzone.js | 6 ++-- app/javascript/submission_form/completed.vue | 5 +-- app/javascript/submission_form/dropzone.vue | 6 +++- .../submission_form/signature_step.vue | 11 ++++--- app/javascript/template_builder/upload.vue | 6 +++- app/views/icons/_device_floppy.html.erb | 6 ++++ app/views/icons/_users_plus.html.erb | 8 +++++ app/views/templates/show.html.erb | 32 ++++++++++++++++++- config/webpack/webpack.config.js | 13 +++++++- 10 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 app/views/icons/_device_floppy.html.erb create mode 100644 app/views/icons/_users_plus.html.erb diff --git a/app/javascript/application.js b/app/javascript/application.js index aca2d2c0..08b51dce 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -1,14 +1,11 @@ import '@hotwired/turbo-rails' -import { createApp, reactive } from 'vue' - import ToggleVisible from './elements/toggle_visible' import DisableHidden from './elements/disable_hidden' import TurboModal from './elements/turbo_modal' import FileDropzone from './elements/file_dropzone' import MenuActive from './elements/menu_active' import ClipboardCopy from './elements/clipboard_copy' -import TemplateBuilder from './template_builder/builder' import DynamicList from './elements/dynamic_list' import DownloadButton from './elements/download_button' import SetOriginUrl from './elements/set_origin_url' @@ -34,8 +31,16 @@ window.customElements.define('download-button', DownloadButton) window.customElements.define('set-origin-url', SetOriginUrl) window.customElements.define('template-builder', class extends HTMLElement { - connectedCallback () { - this.appElem = document.createElement('div') + async connectedCallback () { + const [ + { createApp, reactive }, + { default: TemplateBuilder } + ] = await Promise.all([ + import('vue'), + import('./template_builder/builder') + ]) + + this.appElem = this.children[0] this.app = createApp(TemplateBuilder, { template: reactive(JSON.parse(this.dataset.template)) @@ -50,6 +55,5 @@ window.customElements.define('template-builder', class extends HTMLElement { disconnectedCallback () { this.app?.unmount() - this.appElem?.remove() } }) diff --git a/app/javascript/elements/file_dropzone.js b/app/javascript/elements/file_dropzone.js index e6010337..bdba05ce 100644 --- a/app/javascript/elements/file_dropzone.js +++ b/app/javascript/elements/file_dropzone.js @@ -1,5 +1,3 @@ -import { DirectUpload } from '@rails/activestorage' - import { actionable } from '@github/catalyst/lib/actionable' import { target, targetable } from '@github/catalyst/lib/targetable' @@ -11,6 +9,8 @@ export default actionable(targetable(class extends HTMLElement { ] connectedCallback () { + import('@rails/activestorage') + this.addEventListener('drop', this.onDrop) this.addEventListener('dragover', (e) => e.preventDefault()) @@ -39,6 +39,8 @@ export default actionable(targetable(class extends HTMLElement { async uploadFiles (files) { this.toggleLoading() + const { DirectUpload } = await import('@rails/activestorage') + await Promise.all( Array.from(files).map(async (file) => { const upload = new DirectUpload( diff --git a/app/javascript/submission_form/completed.vue b/app/javascript/submission_form/completed.vue index 1969be30..37d23dbc 100644 --- a/app/javascript/submission_form/completed.vue +++ b/app/javascript/submission_form/completed.vue @@ -45,7 +45,6 @@