diff --git a/src/common/types/core.js b/src/common/types/core.js index 6d61696d2b..d8a960ba15 100644 --- a/src/common/types/core.js +++ b/src/common/types/core.js @@ -296,6 +296,7 @@ type SharedLink = { type SharedLinkFeatures = { download_url: boolean, + expiration: boolean, password: boolean, vanity_name: boolean, }; diff --git a/src/elements/content-sharing/types.js b/src/elements/content-sharing/types.js index 5e7c796536..b9ac34b50e 100644 --- a/src/elements/content-sharing/types.js +++ b/src/elements/content-sharing/types.js @@ -86,6 +86,7 @@ export type ContentSharingItemAPIResponse = { shared_link?: APISharedLink, shared_link_features: { download_url: boolean, + expiration: boolean, password: boolean, vanity_name: boolean, }, diff --git a/src/elements/content-sharing/utils/__mocks__/ContentSharingV2Mocks.js b/src/elements/content-sharing/utils/__mocks__/ContentSharingV2Mocks.js index e2d1043975..d39432a037 100644 --- a/src/elements/content-sharing/utils/__mocks__/ContentSharingV2Mocks.js +++ b/src/elements/content-sharing/utils/__mocks__/ContentSharingV2Mocks.js @@ -115,7 +115,7 @@ export const DEFAULT_ITEM_API_RESPONSE = { owned_by: mockOwner, permissions: MOCK_PERMISSIONS, shared_link: null, - shared_link_features: { download_url: true, password: true, vanity_name: true }, + shared_link_features: { download_url: true, expiration: true, password: true, vanity_name: true }, shared_link_permission_options: ['can_edit', 'can_download', 'can_preview'], type: MOCK_ITEM.type, }; diff --git a/src/elements/content-sharing/utils/__tests__/convertItemResponse.test.ts b/src/elements/content-sharing/utils/__tests__/convertItemResponse.test.ts index b0165408dd..1d975d525e 100644 --- a/src/elements/content-sharing/utils/__tests__/convertItemResponse.test.ts +++ b/src/elements/content-sharing/utils/__tests__/convertItemResponse.test.ts @@ -127,7 +127,7 @@ describe('convertItemResponse', () => { const result = convertItemResponse(MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK_WITH_PERMISSIONS); expect(result.sharedLink.settings.canChangeDownload).toEqual(false); expect(result.sharedLink.settings.canChangePassword).toEqual(false); - expect(result.sharedLink.settings.canChangeExpiration).toEqual(false); + expect(result.sharedLink.settings.canChangeExpiration).toEqual(true); }); test('should convert shared link settings correctly if user does not have permissions', () => { @@ -138,7 +138,7 @@ describe('convertItemResponse', () => { ...MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK.shared_link, effective_access: 'collaborators', }, - shared_link_features: { download_url: false, password: false, vanity_name: false }, + shared_link_features: { download_url: false, expiration: false, password: false, vanity_name: false }, permissions: { ...MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK.permissions, }, @@ -150,6 +150,20 @@ describe('convertItemResponse', () => { expect(result.sharedLink.settings.isDirectLinkAvailable).toEqual(false); expect(result.sharedLink.settings.isVanityNameAvailable).toEqual(false); }); + + test.each([ + ['expiration false greys the switch', false, false], + ['expiration true leaves the switch on', true, true], + ])('%s', (_name, expiration, expected) => { + const result = convertItemResponse({ + ...MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK, + shared_link_features: { + ...MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK.shared_link_features, + expiration, + }, + }); + expect(result.sharedLink.settings.canChangeExpiration).toEqual(expected); + }); }); describe('direct link availability', () => { @@ -166,7 +180,7 @@ describe('convertItemResponse', () => { ...MOCK_ITEM_API_RESPONSE_WITH_SHARED_LINK.shared_link, download_url: undefined, }, - shared_link_features: { download_url: false, password: true, vanity_name: true }, + shared_link_features: { download_url: false, expiration: false, password: true, vanity_name: true }, }; const result = convertItemResponse(mockItemWithoutDirectLink); expect(result.sharedLink.settings.isDirectLinkAvailable).toEqual(false); diff --git a/src/elements/content-sharing/utils/convertItemResponse.ts b/src/elements/content-sharing/utils/convertItemResponse.ts index 16ca39e463..fb9d6a3978 100644 --- a/src/elements/content-sharing/utils/convertItemResponse.ts +++ b/src/elements/content-sharing/utils/convertItemResponse.ts @@ -25,6 +25,7 @@ export const convertItemResponse = (itemApiData: ContentSharingItemAPIResponse): const { download_url: isDirectLinkAvailable, + expiration: canChangeExpirationFromServer, password: isPasswordAvailable, vanity_name: isVanityNameAvailable, } = shared_link_features; @@ -47,8 +48,6 @@ export const convertItemResponse = (itemApiData: ContentSharingItemAPIResponse): }; } - const isEditAllowed = allowed_invitee_roles.includes(INVITEE_ROLE_EDITOR); - let sharedLink; if (shared_link) { const { @@ -65,7 +64,7 @@ export const convertItemResponse = (itemApiData: ContentSharingItemAPIResponse): const isDownloadAllowed = permission === PERMISSION_CAN_DOWNLOAD || permission === PERMISSION_CAN_EDIT; const canChangeDownload = canChangeAccessLevel && isDownloadSettingAvailable && access !== ACCESS_COLLAB; // access must be "company" or "open" const canChangePassword = canChangeAccessLevel && isPasswordAvailable; - const canChangeExpiration = canChangeAccessLevel && isEditAllowed; + const canChangeExpiration = canChangeExpirationFromServer; sharedLink = { access,