Skip to content

Commit a102333

Browse files
authored
Merge pull request #28871 from nextcloud/fix/template-create-without-extension
Fix file creation from template without ext
2 parents b033d57 + ed8aacf commit a102333

File tree

10 files changed

+64
-44
lines changed

10 files changed

+64
-44
lines changed

apps/files/js/dist/files-app-settings.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/files-app-settings.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/personal-settings.js

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/personal-settings.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/sidebar.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/sidebar.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/templates.js

Lines changed: 9 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/js/dist/templates.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files/src/services/Templates.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,19 @@ export const getTemplates = async function() {
2727
const response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))
2828
return response.data.ocs.data
2929
}
30+
31+
/**
32+
* Create a new file from a specified template
33+
*
34+
* @param {string} filePath The new file destination path
35+
* @param {string} templatePath The template source path
36+
* @param {string} templateType The template type e.g 'user'
37+
*/
38+
export const createFromTemplate = async function(filePath, templatePath, templateType) {
39+
const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {
40+
filePath,
41+
templatePath,
42+
templateType,
43+
})
44+
return response.data.ocs.data
45+
}

apps/files/src/views/TemplatePicker.vue

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,13 @@
6666
</template>
6767

6868
<script>
69-
import { generateOcsUrl } from '@nextcloud/router'
69+
import { normalize } from 'path'
7070
import { showError } from '@nextcloud/dialogs'
71-
import axios from '@nextcloud/axios'
7271
import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'
7372
import Modal from '@nextcloud/vue/dist/Components/Modal'
7473
7574
import { getCurrentDirectory } from '../utils/davUtils'
76-
import { getTemplates } from '../services/Templates'
75+
import { createFromTemplate, getTemplates } from '../services/Templates'
7776
import TemplatePreview from '../components/TemplatePreview'
7877
7978
const border = 2
@@ -113,7 +112,9 @@ export default {
113112
* @returns {string}
114113
*/
115114
nameWithoutExt() {
116-
return this.name.indexOf('.') > -1 ? this.name.split('.').slice(0, -1).join('.') : this.name
115+
return this.name.indexOf('.') > -1
116+
? this.name.split('.').slice(0, -1).join('.')
117+
: this.name
117118
},
118119
119120
emptyTemplate() {
@@ -198,14 +199,18 @@ export default {
198199
const currentDirectory = getCurrentDirectory()
199200
const fileList = OCA?.Files?.App?.currentFileList
200201
201-
try {
202-
const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {
203-
filePath: `${currentDirectory}/${this.name}`,
204-
templatePath: this.selectedTemplate?.filename,
205-
templateType: this.selectedTemplate?.templateType,
206-
})
202+
// If the file doesn't have an extension, add the default one
203+
if (this.nameWithoutExt === this.name) {
204+
this.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
205+
this.name = this.name + this.provider?.extension
206+
}
207207
208-
const fileInfo = response.data.ocs.data
208+
try {
209+
const fileInfo = await createFromTemplate(
210+
normalize(`${currentDirectory}/${this.name}`),
211+
this.selectedTemplate?.filename,
212+
this.selectedTemplate?.templateType,
213+
)
209214
this.logger.debug('Created new file', fileInfo)
210215
211216
await fileList?.addAndFetchFileInfo(this.name)

0 commit comments

Comments
 (0)