diff options
Diffstat (limited to 'apps/files')
-rw-r--r-- | apps/files/lib/ResponseDefinitions.php | 1 | ||||
-rw-r--r-- | apps/files/src/services/Templates.js | 5 | ||||
-rw-r--r-- | apps/files/src/views/TemplatePicker.vue | 31 |
3 files changed, 31 insertions, 6 deletions
diff --git a/apps/files/lib/ResponseDefinitions.php b/apps/files/lib/ResponseDefinitions.php index c5d094e7bd8..f10edd3216c 100644 --- a/apps/files/lib/ResponseDefinitions.php +++ b/apps/files/lib/ResponseDefinitions.php @@ -46,6 +46,7 @@ namespace OCA\Files; * hasPreview: bool, * previewUrl: ?string, * fields: list<FilesTemplateField>, + * fieldsUrl: ?string, * } * * @psalm-type FilesTemplateFileCreator = array{ diff --git a/apps/files/src/services/Templates.js b/apps/files/src/services/Templates.js index 3a0a0fdb809..cd75d105fd5 100644 --- a/apps/files/src/services/Templates.js +++ b/apps/files/src/services/Templates.js @@ -11,6 +11,11 @@ export const getTemplates = async function() { return response.data.ocs.data } +export const getTemplateFields = async function(fieldsUrl) { + const response = await axios.get(fieldsUrl) + return response.data.ocs.data +} + /** * Create a new file from a specified template * diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue index 15286a220e9..12226e7b07b 100644 --- a/apps/files/src/views/TemplatePicker.vue +++ b/apps/files/src/views/TemplatePicker.vue @@ -57,7 +57,7 @@ import { translate as t } from '@nextcloud/l10n' import { generateRemoteUrl } from '@nextcloud/router' import { normalize, extname, join } from 'path' import { defineComponent } from 'vue' -import { createFromTemplate, getTemplates } from '../services/Templates.js' +import { createFromTemplate, getTemplates, getTemplateFields } from '../services/Templates.js' import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent' import NcModal from '@nextcloud/vue/components/NcModal' @@ -215,7 +215,7 @@ export default defineComponent({ } }, - async createFile(templateFields) { + async createFile(templateFields = []) { const currentDirectory = new URL(window.location.href).searchParams.get('dir') || '/' // If the file doesn't have an extension, add the default one @@ -274,14 +274,33 @@ export default defineComponent({ }, async onSubmit() { - if (this.selectedTemplate?.fields?.length > 0) { + const fieldsUrl = this.selectedTemplate?.fieldsUrl + + if (!fieldsUrl) { + this.loading = true + return await this.createFile() + } + + try { + const fields = await getTemplateFields(fieldsUrl) + + if (fields.length < 1) { + this.loading = true + return await this.createFile() + } + spawnDialog(TemplateFiller, { - fields: this.selectedTemplate.fields, onSubmit: this.createFile, + fields, }) - } else { + } catch (error) { + logger.error('Error while extracting fields from template', { error }) + showError(t('files', 'Could not extract fields from template')) + + // If fetching the template fields fails, we can create + // a file anyway without any fields filled this.loading = true - await this.createFile() + await this.createFile([]) } }, }, |