Skip to content

Commit abc0ba9

Browse files
committed
refactor: move file uploads dialog to root
Signed-off-by: Pedro Lamas <[email protected]>
1 parent 456a156 commit abc0ba9

File tree

4 files changed

+41
-50
lines changed

4 files changed

+41
-50
lines changed

src/App.vue

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
/>
8080

8181
<file-system-download-dialog />
82+
<file-system-upload-dialog />
8283
<updating-dialog />
8384
<spool-selection-dialog />
8485
<action-command-prompt-dialog />
@@ -106,13 +107,14 @@ import FilesMixin from '@/mixins/files'
106107
import BrowserMixin from '@/mixins/browser'
107108
import type { LinkPropertyHref, MetaPropertyName } from 'vue-meta'
108109
import FileSystemDownloadDialog from '@/components/widgets/filesystem/FileSystemDownloadDialog.vue'
110+
import FileSystemUploadDialog from '@/components/widgets/filesystem/FileSystemUploadDialog.vue'
109111
import SpoolSelectionDialog from '@/components/widgets/spoolman/SpoolSelectionDialog.vue'
110112
import type { FlashMessage } from '@/types'
111-
import { getFilesFromDataTransfer, hasFilesInDataTransfer } from './util/file-system-entry'
113+
import { getFilesFromDataTransfer, hasFilesInDataTransfer } from '@/util/file-system-entry'
112114
import type { ThemeConfig } from '@/store/config/types'
113-
import ActionCommandPromptDialog from './components/common/ActionCommandPromptDialog.vue'
114-
import KeyboardShortcutsDialog from './components/common/KeyboardShortcutsDialog.vue'
115-
import { eventTargetIsContentEditable, keyboardEventToKeyboardShortcut } from './util/event-helpers'
115+
import ActionCommandPromptDialog from '@/components/common/ActionCommandPromptDialog.vue'
116+
import KeyboardShortcutsDialog from '@/components/common/KeyboardShortcutsDialog.vue'
117+
import { eventTargetIsContentEditable, keyboardEventToKeyboardShortcut } from '@/util/event-helpers'
116118
117119
@Component<App>({
118120
metaInfo () {
@@ -125,6 +127,7 @@ import { eventTargetIsContentEditable, keyboardEventToKeyboardShortcut } from '.
125127
components: {
126128
SpoolSelectionDialog,
127129
FileSystemDownloadDialog,
130+
FileSystemUploadDialog,
128131
ActionCommandPromptDialog,
129132
KeyboardShortcutsDialog
130133
}

src/components/ui/AppDialog.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<v-dialog
33
v-model="open"
44
:scrollable="scrollable"
5+
:persistent="persistent"
56
v-bind="$attrs"
67
:fullscreen="isMobileViewport"
78
:transition="isMobileViewport ? 'dialog-bottom-transition' : undefined"
@@ -52,6 +53,7 @@
5253
</v-col>
5354

5455
<v-col
56+
v-if="!persistent"
5557
cols="auto"
5658
align-self="center"
5759
>
@@ -157,6 +159,9 @@ export default class AppDialog extends Mixins(BrowserMixin) {
157159
@Prop({ type: Boolean, default: true })
158160
readonly scrollable?: boolean
159161
162+
@Prop({ type: Boolean })
163+
readonly persistent?: boolean
164+
160165
@Prop({ type: Boolean })
161166
readonly noActions?: boolean
162167

src/components/widgets/filesystem/FileSystem.vue

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,6 @@
109109
absolute
110110
/>
111111

112-
<file-system-upload-dialog
113-
v-if="currentUploads.length > 0"
114-
:value="currentUploads.length > 0"
115-
:files="currentUploads"
116-
@cancel="handleCancelUpload"
117-
/>
118-
119112
<file-preview-dialog
120113
v-if="filePreviewState.open"
121114
v-model="filePreviewState.open"
@@ -143,7 +136,7 @@
143136
<script lang="ts">
144137
import { Component, Prop, Mixins, Watch } from 'vue-property-decorator'
145138
import { SocketActions } from '@/api/socketActions'
146-
import type { AppDirectory, AppFile, AppFileWithMeta, FileUpload, FileFilterType, FileBrowserEntry, RootProperties } from '@/store/files/types'
139+
import type { AppDirectory, AppFile, AppFileWithMeta, FileFilterType, FileBrowserEntry, RootProperties } from '@/store/files/types'
147140
import StateMixin from '@/mixins/state'
148141
import FilesMixin from '@/mixins/files'
149142
import ServicesMixin from '@/mixins/services'
@@ -153,7 +146,6 @@ import FileSystemBrowser from './FileSystemBrowser.vue'
153146
import FileSystemContextMenu from './FileSystemContextMenu.vue'
154147
import FileEditorDialog from './FileEditorDialog.vue'
155148
import FileNameDialog from './FileNameDialog.vue'
156-
import FileSystemUploadDialog from './FileSystemUploadDialog.vue'
157149
import FileSystemGoToFileDialog from './FileSystemGoToFileDialog.vue'
158150
import FilePreviewDialog from './FilePreviewDialog.vue'
159151
import type { AppDataTableHeader, FileWithPath } from '@/types'
@@ -176,7 +168,6 @@ import type { DataTableHeader } from 'vuetify'
176168
FileSystemContextMenu,
177169
FileEditorDialog,
178170
FileNameDialog,
179-
FileSystemUploadDialog,
180171
FileSystemGoToFileDialog,
181172
FilePreviewDialog
182173
}
@@ -557,11 +548,6 @@ export default class FileSystem extends Mixins(StateMixin, FilesMixin, ServicesM
557548
return this.hasWaitsBy(`${this.$waits.onFileSystem}/${this.currentRoot}/`)
558549
}
559550
560-
// Get a list of currently active uploads.
561-
get currentUploads (): FileUpload[] {
562-
return this.$store.state.files.uploads
563-
}
564-
565551
get fileDropRoot () {
566552
return this.$route.meta?.fileDropRoot
567553
}
@@ -1006,23 +992,6 @@ export default class FileSystem extends Mixins(StateMixin, FilesMixin, ServicesM
1006992
this.$store.dispatch('wait/removeWait', wait)
1007993
}
1008994
1009-
handleCancelUpload (file: FileUpload) {
1010-
if (!file.complete) {
1011-
// Hasn't started uploading...
1012-
if (file.loaded === 0) {
1013-
this.$store.dispatch('files/updateFileUpload', {
1014-
uid: file.uid,
1015-
cancelled: true
1016-
})
1017-
}
1018-
1019-
// Started uploading, but not complete.
1020-
if (file.loaded > 0 && file.loaded < file.size) {
1021-
file.abortController.abort()
1022-
}
1023-
}
1024-
}
1025-
1026995
handleAddDir (name: string) {
1027996
SocketActions.serverFilesPostDirectory(`${this.currentPath}/${name}`)
1028997
}

src/components/widgets/filesystem/FileSystemUploadDialog.vue

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
<template>
22
<app-dialog
3-
v-model="value"
4-
:title="$tc('app.file_system.title.upload_file', files.length)"
3+
:value="uploads.length > 0"
4+
:title="$tc('app.file_system.title.upload_file', uploads.length)"
55
max-width="500"
66
persistent
77
no-actions
88
>
99
<v-card-text>
10-
<template v-for="(file, i) in files">
10+
<template v-for="(file, i) in uploads">
1111
<v-row
12-
v-if="(file.percent !== 100 || !file.complete) && !file.cancelled"
1312
:key="file.filepath"
1413
class="py-2"
1514
>
@@ -52,18 +51,15 @@
5251
color="error"
5352
icon
5453
:disabled="file.complete || file.percent === 100 || file.cancelled"
55-
@click="$emit('cancel', file)"
54+
@click="handleCancelUpload(file)"
5655
>
5756
<v-icon>$close</v-icon>
5857
</app-btn>
5958
</v-col>
6059
</v-row>
6160

6261
<v-divider
63-
v-if="
64-
(file.percent !== 100 || !file.complete) &&
65-
i < files.length - 1
66-
"
62+
v-if="i < uploads.length - 1"
6763
:key="`divider-${file.filepath}`"
6864
/>
6965
</template>
@@ -72,17 +68,35 @@
7268
</template>
7369

7470
<script lang="ts">
75-
import { Component, Prop, Mixins } from 'vue-property-decorator'
71+
import { Component, Mixins } from 'vue-property-decorator'
7672
import StateMixin from '@/mixins/state'
7773
import type { FileUpload } from '@/store/files/types'
7874
7975
@Component({})
8076
export default class FileSystemUploadDialog extends Mixins(StateMixin) {
81-
@Prop({ type: Boolean })
82-
readonly value?: boolean
77+
get uploads (): FileUpload[] {
78+
const uploads: FileUpload[] = this.$store.state.files.uploads
8379
84-
@Prop({ type: Array<FileUpload>, required: true })
85-
readonly files!: FileUpload[]
80+
return uploads
81+
.filter(file => !file.cancelled && (file.percent !== 100 || !file.complete))
82+
}
83+
84+
handleCancelUpload (file: FileUpload) {
85+
if (!file.complete) {
86+
// Hasn't started uploading...
87+
if (file.loaded === 0) {
88+
this.$store.dispatch('files/updateFileUpload', {
89+
uid: file.uid,
90+
cancelled: true
91+
})
92+
}
93+
94+
// Started uploading, but not complete.
95+
if (file.loaded > 0 && file.loaded < file.size) {
96+
file.abortController.abort()
97+
}
98+
}
99+
}
86100
}
87101
</script>
88102

0 commit comments

Comments
 (0)