diff options
author | John Molakvoæ <skjnldsv@protonmail.com> | 2021-09-17 09:52:02 +0200 |
---|---|---|
committer | John Molakvoæ <skjnldsv@protonmail.com> | 2021-09-17 10:08:32 +0200 |
commit | ed8aacf415d89859a1cf0b53189bc1a7b4de72bc (patch) | |
tree | e2fa7f8de68f4422982d579e09501a15b7912d7a /apps/files/src | |
parent | 62a814f4fbdec485e97e6b55a8320a02ced488bb (diff) | |
download | nextcloud-server-ed8aacf415d89859a1cf0b53189bc1a7b4de72bc.tar.gz nextcloud-server-ed8aacf415d89859a1cf0b53189bc1a7b4de72bc.zip |
Fix file creation from template without ext
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
Diffstat (limited to 'apps/files/src')
-rw-r--r-- | apps/files/src/services/Templates.js | 16 | ||||
-rw-r--r-- | apps/files/src/views/TemplatePicker.vue | 27 |
2 files changed, 32 insertions, 11 deletions
diff --git a/apps/files/src/services/Templates.js b/apps/files/src/services/Templates.js index f92747b7282..b466def408f 100644 --- a/apps/files/src/services/Templates.js +++ b/apps/files/src/services/Templates.js @@ -27,3 +27,19 @@ export const getTemplates = async function() { const response = await axios.get(generateOcsUrl('apps/files/api/v1/templates')) return response.data.ocs.data } + +/** + * Create a new file from a specified template + * + * @param {string} filePath The new file destination path + * @param {string} templatePath The template source path + * @param {string} templateType The template type e.g 'user' + */ +export const createFromTemplate = async function(filePath, templatePath, templateType) { + const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), { + filePath, + templatePath, + templateType, + }) + return response.data.ocs.data +} diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue index e19c206aad6..7c866db8a58 100644 --- a/apps/files/src/views/TemplatePicker.vue +++ b/apps/files/src/views/TemplatePicker.vue @@ -66,14 +66,13 @@ </template> <script> -import { generateOcsUrl } from '@nextcloud/router' +import { normalize } from 'path' import { showError } from '@nextcloud/dialogs' -import axios from '@nextcloud/axios' import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent' import Modal from '@nextcloud/vue/dist/Components/Modal' import { getCurrentDirectory } from '../utils/davUtils' -import { getTemplates } from '../services/Templates' +import { createFromTemplate, getTemplates } from '../services/Templates' import TemplatePreview from '../components/TemplatePreview' const border = 2 @@ -113,7 +112,9 @@ export default { * @returns {string} */ nameWithoutExt() { - return this.name.indexOf('.') > -1 ? this.name.split('.').slice(0, -1).join('.') : this.name + return this.name.indexOf('.') > -1 + ? this.name.split('.').slice(0, -1).join('.') + : this.name }, emptyTemplate() { @@ -198,14 +199,18 @@ export default { const currentDirectory = getCurrentDirectory() const fileList = OCA?.Files?.App?.currentFileList - try { - const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), { - filePath: `${currentDirectory}/${this.name}`, - templatePath: this.selectedTemplate?.filename, - templateType: this.selectedTemplate?.templateType, - }) + // If the file doesn't have an extension, add the default one + if (this.nameWithoutExt === this.name) { + this.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension }) + this.name = this.name + this.provider?.extension + } - const fileInfo = response.data.ocs.data + try { + const fileInfo = await createFromTemplate( + normalize(`${currentDirectory}/${this.name}`), + this.selectedTemplate?.filename, + this.selectedTemplate?.templateType, + ) this.logger.debug('Created new file', fileInfo) await fileList?.addAndFetchFileInfo(this.name) |