Skip to content

Commit b9341c5

Browse files
authored
Merge pull request #12488 from nextcloud/backport/12467/stable29
[stable29] fix(viewer): fix creation of file from template
2 parents e21ef36 + 5c60e59 commit b9341c5

File tree

3 files changed

+42
-22
lines changed

3 files changed

+42
-22
lines changed

src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue

+4-7
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,11 @@ export default {
273273
emits: ['remove-file'],
274274

275275
setup() {
276-
const { openViewer, generateViewerObject } = useViewer()
276+
const { openViewer } = useViewer('talk')
277277
const sharedItemsStore = useSharedItemsStore()
278278

279279
return {
280280
openViewer,
281-
generateViewerObject,
282281
sharedItemsStore,
283282
}
284283
},
@@ -602,11 +601,9 @@ export default {
602601
event.stopPropagation()
603602
event.preventDefault()
604603

605-
const fileInfo = this.generateViewerObject(this)
606-
607604
if (this.itemType === SHARED_ITEM.TYPES.MEDIA) {
608605
const getRevertedList = (items) => Object.values(items).reverse()
609-
.map(item => this.generateViewerObject(item.messageParameters.file))
606+
.map(item => item.messageParameters.file)
610607

611608
// Get available media files from store and put them to the list to navigate through slides
612609
const mediaFiles = this.sharedItemsStore.sharedItems(this.token).media
@@ -616,9 +613,9 @@ export default {
616613
return getRevertedList(messages)
617614
}
618615

619-
this.openViewer(this.internalAbsolutePath, list, fileInfo, loadMore)
616+
this.openViewer(this.internalAbsolutePath, list, this, loadMore)
620617
} else {
621-
this.openViewer(this.internalAbsolutePath, [fileInfo], fileInfo)
618+
this.openViewer(this.internalAbsolutePath, [this], this)
622619

623620
}
624621
},

src/components/NewMessage/NewMessageNewFileDialog.vue

+12-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@
5858

5959
<div class="new-text-file__buttons">
6060
<NcButton type="primary"
61+
:disabled="loading"
6162
@click="handleCreateNewFile">
63+
<template v-if="loading" #icon>
64+
<NcLoadingIcon />
65+
</template>
6266
{{ t('spreed', 'Create file') }}
6367
</NcButton>
6468
</div>
@@ -71,6 +75,7 @@
7175
import { showError } from '@nextcloud/dialogs'
7276

7377
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
78+
import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
7479
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js'
7580
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
7681

@@ -84,9 +89,10 @@ export default {
8489

8590
components: {
8691
NcButton,
87-
NewMessageTemplatePreview,
92+
NcLoadingIcon,
8893
NcModal,
8994
NcTextField,
95+
NewMessageTemplatePreview,
9096
},
9197

9298
props: {
@@ -109,7 +115,7 @@ export default {
109115
emits: ['dismiss'],
110116

111117
setup() {
112-
const { openViewer } = useViewer()
118+
const { openViewer } = useViewer('files')
113119
return { openViewer }
114120
},
115121

@@ -118,6 +124,7 @@ export default {
118124
newFileTitle: t('spreed', 'New file'),
119125
newFileError: '',
120126
checked: -1,
127+
loading: false,
121128
}
122129
},
123130

@@ -201,6 +208,7 @@ export default {
201208

202209
// Create text file and share it to a conversation
203210
async handleCreateNewFile() {
211+
this.loading = true
204212
this.newFileError = ''
205213
let filePath = this.$store.getters.getAttachmentFolder() + '/' + this.newFileTitle.replace('/', '')
206214

@@ -226,10 +234,12 @@ export default {
226234
} else {
227235
showError(t('spreed', 'Error while creating file'))
228236
}
237+
this.loading = false
229238
return
230239
}
231240

232241
await shareFile(filePath, this.token, '', '')
242+
this.loading = false
233243

234244
this.openViewer(filePath, [fileData], fileData)
235245

src/composables/useViewer.js

+26-13
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,10 @@ const isViewerOpen = ref(false)
105105
/**
106106
* Composable with OCA.Viewer helpers
107107
*
108+
* @param {'files'|'talk'} fileAPI whether to treat file object as it comes from Files or Talk
108109
* @return {{ openViewer: OpenViewer, isViewerOpen: import('vue').Ref<boolean> }}
109110
*/
110-
export function useViewer() {
111+
export function useViewer(fileAPI) {
111112
const store = useStore()
112113
const isInCall = useIsInCall()
113114
const isFullscreen = computed(() => store.getters.isFullscreen())
@@ -118,15 +119,28 @@ export function useViewer() {
118119
}
119120
})
120121

121-
const generateViewerObject = (file) => ({
122-
fileid: parseInt(file.id, 10),
123-
filename: generateAbsolutePath(file.path),
124-
basename: file.name,
125-
mime: file.mimetype,
126-
hasPreview: file.previewAvailable === 'yes' || file['preview-available'] === 'yes',
127-
etag: file.etag,
128-
permissions: generatePermissions(file.permissions),
129-
})
122+
/**
123+
* Map object to be used by Viewer
124+
* @param {object} file file object (from Files API or Talk API)
125+
*/
126+
function generateViewerObject(file) {
127+
switch (fileAPI) {
128+
case 'files': return {
129+
...file,
130+
permissions: generatePermissions(file.permissions), // Viewer expects a String instead of Bitmask
131+
}
132+
case 'talk':
133+
default: return {
134+
fileid: parseInt(file.id, 10),
135+
filename: generateAbsolutePath(file.path),
136+
basename: file.name,
137+
mime: file.mimetype,
138+
hasPreview: (file.previewAvailable === 'yes' || file['preview-available'] === 'yes'),
139+
etag: file.etag,
140+
permissions: generatePermissions(file.permissions), // Viewer expects a String instead of Bitmask
141+
}
142+
}
143+
}
130144

131145
/**
132146
* @type {OpenViewer}
@@ -147,8 +161,8 @@ export function useViewer() {
147161

148162
OCA.Viewer.open({
149163
path,
150-
list,
151-
fileInfo,
164+
list: list.map(generateViewerObject),
165+
fileInfo: generateViewerObject(fileInfo),
152166
onClose: () => {
153167
isViewerOpen.value = false
154168
store.dispatch('setCallViewMode', { isViewerOverlay: false })
@@ -170,6 +184,5 @@ export function useViewer() {
170184
return {
171185
isViewerOpen,
172186
openViewer,
173-
generateViewerObject,
174187
}
175188
}

0 commit comments

Comments
 (0)