Skip to content

Commit 93a8047

Browse files
committed
fix(files): Fix some type errors in TemplatePicker
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
1 parent 3e77be8 commit 93a8047

2 files changed

Lines changed: 32 additions & 37 deletions

File tree

apps/files/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,5 @@ export interface TemplateFile {
119119
iconClass?: string
120120
mimetypes: string[]
121121
ratio?: number
122+
templates?: Record<string, unknown>[]
122123
}

apps/files/src/views/TemplatePicker.vue

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,27 @@
6161
</template>
6262

6363
<script lang="ts">
64-
import { emit, subscribe } from '@nextcloud/event-bus'
64+
import type { TemplateFile } from '../types.ts'
65+
66+
import { getCurrentUser } from '@nextcloud/auth'
67+
import { showError } from '@nextcloud/dialogs'
68+
import { emit } from '@nextcloud/event-bus'
6569
import { File } from '@nextcloud/files'
70+
import { translate as t } from '@nextcloud/l10n'
6671
import { generateRemoteUrl } from '@nextcloud/router'
67-
import { getCurrentUser } from '@nextcloud/auth'
6872
import { normalize, extname, join } from 'path'
69-
import { showError } from '@nextcloud/dialogs'
73+
import { defineComponent } from 'vue'
74+
import { createFromTemplate, getTemplates } from '../services/Templates.js'
75+
7076
import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
7177
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js'
72-
import Vue from 'vue'
73-
74-
import { createFromTemplate, getTemplates } from '../services/Templates.js'
7578
import TemplatePreview from '../components/TemplatePreview.vue'
79+
import logger from '../logger.js'
7680
7781
const border = 2
7882
const margin = 8
7983
80-
export default Vue.extend({
84+
export default defineComponent({
8185
name: 'TemplatePicker',
8286
8387
components: {
@@ -86,40 +90,34 @@ export default Vue.extend({
8690
TemplatePreview,
8791
},
8892
89-
props: {
90-
logger: {
91-
type: Object,
92-
required: true,
93-
},
94-
},
95-
9693
data() {
9794
return {
9895
// Check empty template by default
9996
checked: -1,
10097
loading: false,
101-
name: null,
98+
name: null as string|null,
10299
opened: false,
103-
provider: null,
100+
provider: null as TemplateFile|null,
104101
}
105102
},
106103
107104
computed: {
108105
extension() {
109-
return extname(this.name)
106+
return extname(this.name ?? '')
110107
},
108+
111109
nameWithoutExt() {
112110
// Strip extension from name if defined
113111
return !this.extension
114112
? this.name
115-
: this.name.slice(0, 0 - this.extension.length)
113+
: this.name!.slice(0, 0 - this.extension.length)
116114
},
117115
118116
emptyTemplate() {
119117
return {
120118
basename: t('files', 'Blank'),
121119
fileid: -1,
122-
filename: this.t('files', 'Blank'),
120+
filename: t('files', 'Blank'),
123121
hasPreview: false,
124122
mime: this.provider?.mimetypes[0] || this.provider?.mimetypes,
125123
}
@@ -130,7 +128,7 @@ export default Vue.extend({
130128
return null
131129
}
132130
133-
return this.provider.templates.find(template => template.fileid === this.checked)
131+
return this.provider.templates!.find((template) => template.fileid === this.checked)
134132
},
135133
136134
/**
@@ -159,6 +157,8 @@ export default Vue.extend({
159157
},
160158
161159
methods: {
160+
t,
161+
162162
/**
163163
* Open the picker
164164
*
@@ -201,9 +201,9 @@ export default Vue.extend({
201201
/**
202202
* Manages the radio template picker change
203203
*
204-
* @param {number} fileid the selected template file id
204+
* @param fileid the selected template file id
205205
*/
206-
onCheck(fileid) {
206+
onCheck(fileid: number) {
207207
this.checked = fileid
208208
},
209209
@@ -213,22 +213,22 @@ export default Vue.extend({
213213
214214
// If the file doesn't have an extension, add the default one
215215
if (this.nameWithoutExt === this.name) {
216-
this.logger.warn('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
217-
this.name = this.name + this.provider?.extension
216+
logger.warn('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
217+
this.name = `${this.name}${this.provider?.extension ?? ''}`
218218
}
219219
220220
try {
221221
const fileInfo = await createFromTemplate(
222222
normalize(`${currentDirectory}/${this.name}`),
223-
this.selectedTemplate?.filename,
224-
this.selectedTemplate?.templateType,
223+
this.selectedTemplate?.filename as string ?? '',
224+
this.selectedTemplate?.templateType as string ?? '',
225225
)
226-
this.logger.debug('Created new file', fileInfo)
226+
logger.debug('Created new file', fileInfo)
227227
228228
const owner = getCurrentUser()?.uid || null
229229
const node = new File({
230230
id: fileInfo.fileid,
231-
source: generateRemoteUrl(join('dav/files', owner, fileInfo.filename)),
231+
source: generateRemoteUrl(join(`dav/files/${owner}`, fileInfo.filename)),
232232
root: `/files/${owner}`,
233233
mime: fileInfo.mime,
234234
mtime: new Date(fileInfo.lastmod * 1000),
@@ -243,19 +243,13 @@ export default Vue.extend({
243243
244244
// Update files list
245245
emit('files:node:created', node)
246-
247-
// Open the new file
248-
window.OCP.Files.Router.goToRoute(
249-
null, // use default route
250-
{ view: 'files', fileid: node.fileid },
251-
{ dir: node.dirname, openfile: true },
252-
)
246+
emit('files:node:focus', node)
253247
254248
// Close the picker
255249
this.close()
256250
} catch (error) {
257-
this.logger.error('Error while creating the new file from template', { error })
258-
showError(this.t('files', 'Unable to create new file from template'))
251+
logger.error('Error while creating the new file from template', { error })
252+
showError(t('files', 'Unable to create new file from template'))
259253
} finally {
260254
this.loading = false
261255
}

0 commit comments

Comments
 (0)