Skip to content

Commit 1652ae9

Browse files
committed
Wrap up the event methods in our uppy service
1 parent 1d829cb commit 1652ae9

File tree

5 files changed

+45
-30
lines changed

5 files changed

+45
-30
lines changed

packages/web-app-files/src/components/AppBar/CreateAndUpload.vue

+10-11
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,9 @@ import { DavProperties, DavProperty } from 'web-pkg/src/constants'
115115
// TODO: Simplify to one UploadButton component and fill from here
116116
import FileUpload from './Upload/FileUpload.vue'
117117
import FolderUpload from './Upload/FolderUpload.vue'
118-
import { defineComponent, getCurrentInstance, onMounted, onUnmounted } from '@vue/composition-api'
118+
import { defineComponent, getCurrentInstance, onMounted } from '@vue/composition-api'
119119
import { UppyResource, useUpload } from 'web-runtime/src/composables/upload'
120120
import { useUploadHelpers } from '../../composables/upload'
121-
import { bus } from 'web-pkg/src/instance'
122121
123122
export default defineComponent({
124123
components: {
@@ -131,21 +130,21 @@ export default defineComponent({
131130
const uppyService = instance.$uppyService
132131
133132
onMounted(() => {
134-
bus.subscribe('filesSelected', instance.onFilesSelected)
135-
bus.subscribe('uploadSuccess', instance.onFileSuccess)
136-
bus.subscribe('uploadError', instance.onFileError)
133+
const filesSelectedSub = uppyService.subscribe('filesSelected', instance.onFilesSelected)
134+
const uploadSuccessSub = uppyService.subscribe('uploadSuccess', instance.onFileSuccess)
135+
const uploadErrorSub = uppyService.subscribe('uploadError', instance.onFileError)
137136
138137
uppyService.useDropTarget({
139138
targetSelector: '#files-view',
140139
uppyService
141140
})
142-
})
143141
144-
onUnmounted(() => {
145-
bus.unsubscribe('filesSelected', instance.onFilesSelected)
146-
bus.unsubscribe('uploadSuccess', instance.onFileSuccess)
147-
bus.unsubscribe('uploadError', instance.onFileError)
148-
uppyService.removeDropTarget()
142+
instance.$on('beforeDestroy', () => {
143+
uppyService.unsubscribe('filesSelected', filesSelectedSub)
144+
uppyService.unsubscribe('uploadSuccess', uploadSuccessSub)
145+
uppyService.unsubscribe('uploadError', uploadErrorSub)
146+
uppyService.removeDropTarget()
147+
})
149148
})
150149
151150
return {

packages/web-app-files/src/views/FilesDrop.vue

+8-12
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,8 @@ import { linkRoleUploaderFolder } from '../helpers/share'
4040
import { createLocationOperations, createLocationPublic } from '../router'
4141
4242
import FileUpload from '../components/AppBar/Upload/FileUpload.vue'
43-
import {
44-
getCurrentInstance,
45-
onMounted,
46-
onUnmounted
47-
} from '@vue/composition-api/dist/vue-composition-api'
43+
import { getCurrentInstance, onMounted } from '@vue/composition-api/dist/vue-composition-api'
4844
import { useUpload } from 'web-runtime/src/composables/upload'
49-
import { bus } from 'web-pkg/src/instance'
5045
5146
export default {
5247
components: {
@@ -57,18 +52,19 @@ export default {
5752
const uppyService = instance.$uppyService
5853
5954
onMounted(() => {
60-
bus.subscribe('filesSelected', instance.onFilesSelected)
61-
bus.subscribe('uploadError', instance.onFileError)
55+
const filesSelectedSub = uppyService.subscribe('filesSelected', instance.onFilesSelected)
56+
const uploadErrorSub = uppyService.subscribe('uploadError', instance.onFileError)
6257
6358
uppyService.useDropTarget({
6459
targetSelector: '#files-drop-container',
6560
uppyService
6661
})
67-
})
6862
69-
onUnmounted(() => {
70-
bus.unsubscribe('filesSelected', instance.onFilesSelected)
71-
bus.unsubscribe('uploadError', instance.onFileError)
63+
instance.$on('beforeDestroy', () => {
64+
uppyService.unsubscribe('filesSelected', filesSelectedSub)
65+
uppyService.unsubscribe('uploadError', uploadErrorSub)
66+
uppyService.removeDropTarget()
67+
})
7268
})
7369
7470
return {

packages/web-runtime/src/components/UploadInfo.vue

+4-5
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import '@uppy/status-bar/dist/style.css'
5757
import path from 'path'
5858
import { useCapabilitySpacesEnabled } from 'web-pkg/src/composables'
5959
import { mapGetters } from 'vuex'
60-
import { bus } from 'web-pkg/src/instance'
6160
6261
export default {
6362
setup() {
@@ -106,22 +105,22 @@ export default {
106105
})
107106
},
108107
created() {
109-
bus.subscribe('uploadStarted', () => {
108+
this.$uppyService.subscribe('uploadStarted', () => {
110109
this.showInfo = true
111110
this.filesUploading = this.filesUploading + 1
112111
this.uploadCancelled = false
113112
})
114-
bus.subscribe('uploadCompleted', () => {
113+
this.$uppyService.subscribe('uploadCompleted', () => {
115114
this.filesUploading = this.filesUploading - 1
116115
})
117-
bus.subscribe('uploadCancelled', () => {
116+
this.$uppyService.subscribe('uploadCancelled', () => {
118117
this.filesUploading = 0
119118
this.uploadCancelled = true
120119
if (!this.successfulUploads.length) {
121120
this.closeInfo()
122121
}
123122
})
124-
bus.subscribe('uploadSuccess', (file) => {
123+
this.$uppyService.subscribe('uploadSuccess', (file) => {
125124
// @TODO we need the storage ID here... maybe fetch the file via DAV and call buildResources()?
126125
127126
let path = file.meta.currentFolder

packages/web-runtime/src/composables/upload/uppyPlugins/customDropTarget.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import DropTarget from '@uppy/drop-target'
2-
import { bus } from 'web-pkg/src/instance'
32

43
/**
54
* Custom Drop Target plugin
@@ -13,7 +12,7 @@ export class CustomDropTarget extends DropTarget {
1312
if (this.opts.uppyService) {
1413
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
1514
// @ts-ignore
16-
bus.publish('filesSelected', files)
15+
this.opts.uppyService.publish('filesSelected', files)
1716
return
1817
}
1918

packages/web-runtime/src/services/uppyService.ts

+22
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import StatusBar from '@uppy/status-bar'
66
import { UppyResource } from '../composables/upload'
77
import { bus } from 'web-pkg/src/instance'
88

9+
type UppyServiceTopics =
10+
| 'uploadStarted'
11+
| 'uploadCancelled'
12+
| 'uploadCompleted'
13+
| 'uploadRemoved'
14+
| 'uploadSuccess'
15+
| 'uploadError'
16+
| 'fileAdded'
17+
| 'filesSelected'
18+
919
export class UppyService {
1020
uppy: Uppy
1121
uploadInputs: HTMLInputElement[] = []
@@ -163,6 +173,18 @@ export class UppyService {
163173
})
164174
}
165175

176+
subscribe(topic: UppyServiceTopics, callback: (data?: unknown) => void): void {
177+
bus.subscribe(topic, callback)
178+
}
179+
180+
unsubscribe(topic: UppyServiceTopics, token: string): void {
181+
bus.unsubscribe(topic, token)
182+
}
183+
184+
publish(topic: UppyServiceTopics, data?: unknown): void {
185+
bus.publish(topic, data)
186+
}
187+
166188
private setUpEvents() {
167189
this.uppy.on('upload', () => {
168190
bus.publish('uploadStarted')

0 commit comments

Comments
 (0)