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'
6569import { File } from ' @nextcloud/files'
70+ import { translate as t } from ' @nextcloud/l10n'
6671import { generateRemoteUrl } from ' @nextcloud/router'
67- import { getCurrentUser } from ' @nextcloud/auth'
6872import { 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+
7076import NcEmptyContent from ' @nextcloud/vue/dist/Components/NcEmptyContent.js'
7177import NcModal from ' @nextcloud/vue/dist/Components/NcModal.js'
72- import Vue from ' vue'
73-
74- import { createFromTemplate , getTemplates } from ' ../services/Templates.js'
7578import TemplatePreview from ' ../components/TemplatePreview.vue'
79+ import logger from ' ../logger.js'
7680
7781const border = 2
7882const 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