diff options
author | fenn-cs <fenn25.fn@gmail.com> | 2024-07-11 14:20:58 +0100 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2024-07-31 10:12:23 +0000 |
commit | 4d9ba27142ff15d7372a6b5eed369acfc05d4fae (patch) | |
tree | 7d14f66f88e53f47f0af542e477caa538c8d76e8 /apps | |
parent | e12217a111d8cf326d0474518987291233b4da0a (diff) | |
download | nextcloud-server-4d9ba27142ff15d7372a6b5eed369acfc05d4fae.tar.gz nextcloud-server-4d9ba27142ff15d7372a6b5eed369acfc05d4fae.zip |
feat(editLocallyAction): Handle possible no local client scenario
Resolves: https://github.com/nextcloud/server/issues/46438
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/src/actions/editLocallyAction.ts | 57 |
1 files changed, 54 insertions, 3 deletions
diff --git a/apps/files/src/actions/editLocallyAction.ts b/apps/files/src/actions/editLocallyAction.ts index f52f8191df8..e6e847e2fec 100644 --- a/apps/files/src/actions/editLocallyAction.ts +++ b/apps/files/src/actions/editLocallyAction.ts @@ -23,11 +23,62 @@ import { encodePath } from '@nextcloud/paths' import { generateOcsUrl } from '@nextcloud/router' import { getCurrentUser } from '@nextcloud/auth' import { FileAction, Permission, type Node } from '@nextcloud/files' -import { showError } from '@nextcloud/dialogs' +import { showError, DialogBuilder } from '@nextcloud/dialogs' import { translate as t } from '@nextcloud/l10n' import axios from '@nextcloud/axios' - import LaptopSvg from '@mdi/svg/svg/laptop.svg?raw' +import IconCancel from '@mdi/svg/svg/cancel.svg?raw' +import IconCheck from '@mdi/svg/svg/check.svg?raw' + +const confirmLocalEditDialog = ( + localEditCallback: (openingLocally: boolean) => void = () => {}, +) => { + let callbackCalled = false + + return (new DialogBuilder()) + .setName(t('files', 'Edit file locally')) + .setText(t('files', 'The file should now open locally. If you don\'t see this happening, make sure that the desktop client is installed on your system.')) + .setButtons([ + { + label: t('files', 'Retry local edit'), + icon: IconCancel, + callback: () => { + callbackCalled = true + localEditCallback(false) + }, + }, + { + label: t('files', 'Edit online'), + icon: IconCheck, + type: 'primary', + callback: () => { + callbackCalled = true + localEditCallback(true) + }, + }, + ]) + .build() + .show() + .then(() => { + // Ensure the callback is called even if the dialog is dismissed in other ways + if (!callbackCalled) { + localEditCallback(true) + } + }) +} + +const attemptOpenLocalClient = async (path: string) => { + openLocalClient(path) + confirmLocalEditDialog( + (openLocally: boolean) => { + if (!openLocally) { + window.OCA.Viewer.open({ path }) + return + } + openLocalClient(path) + }, + ) +} const openLocalClient = async function(path: string) { const link = generateOcsUrl('apps/files/api/v1') + '/openlocaleditor?format=json' @@ -60,7 +111,7 @@ export const action = new FileAction({ }, async exec(node: Node) { - openLocalClient(node.path) + attemptOpenLocalClient(node.path) return null }, |