From b1f043fbdb914f17d0c928ebc213d8bd5c58668f Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 9 Sep 2024 15:59:00 +0200 Subject: [PATCH] feat: remove internal link type Removes the internal link type since the permanent link makes it obsolete. Existing internal links still resolve correctly to ensure backwards compatibility. --- .../enhancement-internal-link-removal | 6 +++ .../components/SideBar/Shares/FileLinks.vue | 22 +++++---- .../SideBar/Shares/Links/DetailsAndEdit.vue | 2 - .../SideBar/Shares/FileLinks.spec.ts | 16 ++---- .../src/components/CreateLinkModal.vue | 42 ++-------------- .../files/useFileActionsCopyQuicklink.ts | 21 +++++++- .../actions/files/useFileActionsCreateLink.ts | 3 +- .../src/composables/links/useLinkTypes.ts | 19 ++----- .../unit/components/CreateLinkModal.spec.ts | 30 +++--------- .../files/useFileActionsCopyQuicklink.spec.ts | 26 +++++++++- .../composables/links/useLinkTypes.spec.ts | 35 ++----------- .../features/shares/internalLink.feature | 10 ++-- .../features/spaces/internalLink.feature | 49 ------------------- 13 files changed, 90 insertions(+), 191 deletions(-) create mode 100644 changelog/unreleased/enhancement-internal-link-removal delete mode 100644 tests/e2e/cucumber/features/spaces/internalLink.feature diff --git a/changelog/unreleased/enhancement-internal-link-removal b/changelog/unreleased/enhancement-internal-link-removal new file mode 100644 index 00000000000..9d30e255e4c --- /dev/null +++ b/changelog/unreleased/enhancement-internal-link-removal @@ -0,0 +1,6 @@ +Enhancement: Internal link removal + +The internal link type has been removed because the permanent link makes it obsolete. Existing internal links still resolve correctly to ensure backwards compatibility. + +https://github.com/owncloud/web/pull/11553 +https://github.com/owncloud/web/issues/11544 diff --git a/packages/web-app-files/src/components/SideBar/Shares/FileLinks.vue b/packages/web-app-files/src/components/SideBar/Shares/FileLinks.vue index 5858f3d6992..e7dbcc6bde3 100644 --- a/packages/web-app-files/src/components/SideBar/Shares/FileLinks.vue +++ b/packages/web-app-files/src/components/SideBar/Shares/FileLinks.vue @@ -5,17 +5,14 @@

-

+
- +
{ + if (!ability.can('create-all', 'PublicLink')) { + return false + } + return canShare({ space: unref(space), resource: unref(resource) }) + }) const sharesStore = useSharesStore() const { updateLink, deleteLink } = sharesStore @@ -182,7 +186,7 @@ export default defineComponent({ const canEditLink = (linkShare: LinkShare) => { return ( - canCreateLinks({ space: unref(space), resource: unref(resource) }) && + unref(canCreateLinks) && (can('create-all', 'PublicLink') || linkShare.type === SharingLinkType.Internal) ) } diff --git a/packages/web-app-files/src/components/SideBar/Shares/Links/DetailsAndEdit.vue b/packages/web-app-files/src/components/SideBar/Shares/Links/DetailsAndEdit.vue index ff6267ad783..97458a48a5a 100644 --- a/packages/web-app-files/src/components/SideBar/Shares/Links/DetailsAndEdit.vue +++ b/packages/web-app-files/src/components/SideBar/Shares/Links/DetailsAndEdit.vue @@ -149,7 +149,6 @@ import { OcDrop } from 'design-system/src/components' import { usePasswordPolicyService } from '@ownclouders/web-pkg' import { useGettext } from 'vue3-gettext' import SetLinkPasswordModal from '../../../Modals/SetLinkPasswordModal.vue' -import { storeToRefs } from 'pinia' import { SharingLinkType } from '@ownclouders/web-client/graph/generated' import DatePickerModal from '../../../Modals/DatePickerModal.vue' import ExpirationDateIndicator from '../ExpirationDateIndicator.vue' @@ -204,7 +203,6 @@ export default defineComponent({ useLinkTypes() const resourcesStore = useResourcesStore() - const { ancestorMetaData } = storeToRefs(resourcesStore) const space = inject>('space') const resource = inject>('resource') diff --git a/packages/web-app-files/tests/unit/components/SideBar/Shares/FileLinks.spec.ts b/packages/web-app-files/tests/unit/components/SideBar/Shares/FileLinks.spec.ts index c7c04f63f93..052546a9e52 100644 --- a/packages/web-app-files/tests/unit/components/SideBar/Shares/FileLinks.spec.ts +++ b/packages/web-app-files/tests/unit/components/SideBar/Shares/FileLinks.spec.ts @@ -108,7 +108,7 @@ describe('FileLinks', () => { describe('when the add-new-link button is clicked', () => { it('should call createLink', async () => { - const { wrapper, mocks } = getWrapper({ abilities: [] }) + const { wrapper, mocks } = getWrapper() await wrapper.find(selectors.linkAddButton).trigger('click') expect(mocks.createLinkMock).toHaveBeenCalledTimes(1) }) @@ -129,7 +129,7 @@ describe('FileLinks', () => { canShare: () => true }) - it('existing viewer link is not modifiable', () => { + it('existing link is not modifiable', () => { const viewerLink = defaultLinksList[0] viewerLink.type = SharingLinkType.View const { wrapper } = getWrapper({ resource, abilities: [], links: [viewerLink] }) @@ -139,15 +139,9 @@ describe('FileLinks', () => { const isModifiable = detailsAndEdit.props('isModifiable') expect(isModifiable).toBeFalsy() }) - it('existing internal link is modifiable', () => { - const internalLink = defaultLinksList[0] - internalLink.type = SharingLinkType.Internal - const { wrapper } = getWrapper({ resource, abilities: [], links: [internalLink] }) - const detailsAndEdit = wrapper.findComponent( - linkListItemDetailsAndEdit - ) - const isModifiable = detailsAndEdit.props('isModifiable') - expect(isModifiable).toBeTruthy() + it('new links cannot be created', () => { + const { wrapper } = getWrapper({ resource, abilities: [] }) + expect(wrapper.find(selectors.linkAddButton).exists()).toBeFalsy() }) }) }) diff --git a/packages/web-pkg/src/components/CreateLinkModal.vue b/packages/web-pkg/src/components/CreateLinkModal.vue index 16be10a2d5e..f57db2fb548 100644 --- a/packages/web-pkg/src/components/CreateLinkModal.vue +++ b/packages/web-pkg/src/components/CreateLinkModal.vue @@ -24,23 +24,17 @@
-