From 5538d1fea1294655a8966b9c49baebee70eaef42 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Thu, 13 Nov 2025 16:23:56 +0100 Subject: [PATCH 1/2] feat: share links and passwords in embed mode --- .../src/components/CreateLinkModal.vue | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/packages/web-pkg/src/components/CreateLinkModal.vue b/packages/web-pkg/src/components/CreateLinkModal.vue index 4c9acb3ea5..2b82e4f2fc 100644 --- a/packages/web-pkg/src/components/CreateLinkModal.vue +++ b/packages/web-pkg/src/components/CreateLinkModal.vue @@ -94,7 +94,7 @@ justify-content="left" @click="$emit('confirm', { copyPassword: true })" > - {{ $gettext('Copy link and password') }} + {{ confirmPasswordButtonText }} @@ -170,6 +170,14 @@ const confirmButtonText = computed(() => { return $gettext('Copy link') }) +const confirmPasswordButtonText = computed(() => { + if (unref(isEmbedEnabled)) { + return $gettext('Share link(s) and password(s)') + } + + return $gettext('Copy link and password') +}) + const passwordInputKey = ref(uuidV4()) const roleRefs = ref>({}) @@ -233,14 +241,6 @@ const confirmButtonDisabled = computed(() => { const createLinkHandler = async () => { const result = await createLinks() - const succeeded = result.filter(({ status }) => status === 'fulfilled') - if (succeeded.length && unref(isEmbedEnabled)) { - postMessage( - 'opencloud-embed:share', - (succeeded as PromiseFulfilledResult[]).map(({ value }) => value.webUrl) - ) - } - const userFacingErrors: Error[] = [] const failed = result.filter(({ status }) => status === 'rejected') if (failed.length) { @@ -266,6 +266,29 @@ const createLinkHandler = async () => { } const onConfirm = async (options: { copyPassword?: boolean } = {}) => { + if (unref(isEmbedEnabled)) { + const result = await createLinkHandler() + const succeeded = result.filter(({ status }) => status === 'fulfilled') + if (succeeded.length) { + // **DEPRECATED**: Always emit the share url for backwards compatibility + postMessage( + 'opencloud-embed:share', + (succeeded as PromiseFulfilledResult[]).map(({ value }) => value.webUrl) + ) + + // Always emit new event with objects, include password only when copyPassword is enabled + postMessage>( + 'owncloud-embed:share-links', + (succeeded as PromiseFulfilledResult[]).map(({ value }) => ({ + url: value.webUrl, + ...(options.copyPassword && { password: unref(password).value }) + })) + ) + } + removeModal(modal.id) + return + } + await copyLink({ createLinkHandler, password: options.copyPassword ? unref(password).value : undefined From 805580e34a37c876291801fa99a16ecee56ecf88 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Fri, 14 Nov 2025 08:31:33 +0100 Subject: [PATCH 2/2] Update packages/web-pkg/src/components/CreateLinkModal.vue Co-authored-by: Jannik Stehle <50302941+JammingBen@users.noreply.github.com> --- packages/web-pkg/src/components/CreateLinkModal.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-pkg/src/components/CreateLinkModal.vue b/packages/web-pkg/src/components/CreateLinkModal.vue index 2b82e4f2fc..deda6d72f4 100644 --- a/packages/web-pkg/src/components/CreateLinkModal.vue +++ b/packages/web-pkg/src/components/CreateLinkModal.vue @@ -270,7 +270,7 @@ const onConfirm = async (options: { copyPassword?: boolean } = {}) => { const result = await createLinkHandler() const succeeded = result.filter(({ status }) => status === 'fulfilled') if (succeeded.length) { - // **DEPRECATED**: Always emit the share url for backwards compatibility + /** @deprecated Always emit the share url for backwards compatibility */ postMessage( 'opencloud-embed:share', (succeeded as PromiseFulfilledResult[]).map(({ value }) => value.webUrl)