Skip to content

Commit

Permalink
fix: handle create from template via different editors (#11923)
Browse files Browse the repository at this point in the history
* fix: handle create from template via different editors

* Add changelog item
  • Loading branch information
AlexAndBear authored and Jannik Stehle committed Nov 19, 2024
1 parent 54c72d0 commit 2a66c46
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Bugfix: Allow create template with different editors

We've fixed a bug where it was not possible to create a template with different editors.

https://github.com/owncloud/web/pull/11923
https://github.com/owncloud/web/issues/11873
27 changes: 15 additions & 12 deletions packages/web-app-external/src/extensions/createFromTemplate.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
ActionExtension,
ApplicationInformation,
contextRouteNameKey,
contextRouteParamsKey,
contextRouteQueryKey,
Expand All @@ -19,7 +20,9 @@ import { extractNameWithoutExtension, Resource } from '@ownclouders/web-client'
import { useCreateFileHandler } from '../composables'
import { useGettext } from 'vue3-gettext'

export const useActionExtensionCreateFromTemplate = (): ActionExtension => {
export const useActionExtensionCreateFromTemplate = (
appInfo: ApplicationInformation
): ActionExtension => {
const appProviderService = useAppProviderService()
const spacesStore = useSpacesStore()
const clientService = useClientService()
Expand All @@ -32,7 +35,7 @@ export const useActionExtensionCreateFromTemplate = (): ActionExtension => {
const action: FileAction = {
name: 'create-from-template',
category: 'context',
label: () => $gettext('Create from template'),
label: () => $gettext('Create from template via %{ name }', { name: appInfo.name }),
icon: 'swap-box',
hasPriority: true,
isVisible: ({ resources }) => {
Expand All @@ -52,7 +55,11 @@ export const useActionExtensionCreateFromTemplate = (): ActionExtension => {
}

return appProviderService.templateMimeTypes.some(
(mimeType) => mimeType.mime_type === template.mimeType
(mimeType) =>
mimeType.mime_type === template.mimeType &&
mimeType.app_providers.some(
(appProvider) => appProvider.name == appInfo.name && !!appProvider.target_ext
)
)
},
handler: async ({ resources }) => {
Expand All @@ -63,25 +70,21 @@ export const useActionExtensionCreateFromTemplate = (): ActionExtension => {
const templateMimeType = appProviderService.templateMimeTypes.find(
(mimeType) => mimeType.mime_type === template.mimeType
)
const firstApp = templateMimeType.app_providers.find(
(appProvider) => !!appProvider.target_ext
const app = templateMimeType.app_providers.find(
(appProvider) => !!appProvider.target_ext && appProvider.name === appInfo.name
)

let fileName =
extractNameWithoutExtension({
name: template.name,
extension: template.extension
} as Resource) + `.${firstApp.target_ext}`
} as Resource) + `.${app.target_ext}`

try {
const { resource: personalSpaceRoot, children: existingResources } =
await existingResourcesPromise
if (existingResources.some((f) => f.name === fileName)) {
fileName = resolveFileNameDuplicate(
fileName,
firstApp.target_ext,
unref(existingResources)
)
fileName = resolveFileNameDuplicate(fileName, app.target_ext, unref(existingResources))
}

const createdFile = await createFileHandler({
Expand All @@ -90,7 +93,7 @@ export const useActionExtensionCreateFromTemplate = (): ActionExtension => {
currentFolder: personalSpaceRoot
})

const routeName = `external-${firstApp.name.toLowerCase()}-apps`
const routeName = `external-${app.name.toLowerCase()}-apps`
const routeOptions = getEditorRouteOpts(
routeName,
spacesStore.personalSpace,
Expand Down
2 changes: 1 addition & 1 deletion packages/web-app-external/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export default defineWebApplication({
}
]

const actionCreateFromTemplate = useActionExtensionCreateFromTemplate()
const actionCreateFromTemplate = useActionExtensionCreateFromTemplate(appInfo)
const extensions = computed<Extension[]>(() => {
return [actionCreateFromTemplate]
})
Expand Down

0 comments on commit 2a66c46

Please sign in to comment.