From 94e58eab2495fb01820e24ee85453579acbcea6c Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 08:27:57 -0800 Subject: [PATCH 1/9] fix(content-sharing): Add error handler --- package.json | 2 +- .../__tests__/sharingService.test.ts | 117 ++++++++++++++++-- .../__tests__/useInvites.test.js | 18 +-- .../content-sharing/hooks/useInvites.js | 24 ++-- .../content-sharing/sharingService.ts | 109 ++++++++++------ yarn.lock | 8 +- 6 files changed, 206 insertions(+), 72 deletions(-) diff --git a/package.json b/package.json index 5bcb22a7b7..be9c5c9d2d 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.7.1", + "@box/unified-share-modal": "^1.36.1", "@box/user-selector": "^1.23.25", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^4.0.1", diff --git a/src/elements/content-sharing/__tests__/sharingService.test.ts b/src/elements/content-sharing/__tests__/sharingService.test.ts index d0f8a539eb..1381d7262b 100644 --- a/src/elements/content-sharing/__tests__/sharingService.test.ts +++ b/src/elements/content-sharing/__tests__/sharingService.test.ts @@ -46,6 +46,10 @@ describe('elements/content-sharing/sharingService', () => { }); test('should call updateSharedLink with correct parameters when changeSharedLinkPermission is called', async () => { + mockItemApiInstance.updateSharedLink.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); const permissionLevel = PERMISSION_CAN_DOWNLOAD; const expectedPermissions = { @@ -58,8 +62,8 @@ describe('elements/content-sharing/sharingService', () => { expect(mockItemApiInstance.updateSharedLink).toHaveBeenCalledWith( options, { permissions: expectedPermissions }, - mockOnUpdateSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); @@ -75,14 +79,18 @@ describe('elements/content-sharing/sharingService', () => { test.each(['open', 'company', 'collaborators'])( 'should call share with correct parameters when changeSharedLinkAccess is called', async access => { + mockItemApiInstance.share.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); await service.changeSharedLinkAccess(access); expect(mockItemApiInstance.share).toHaveBeenCalledWith( options, access, - mockOnUpdateSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }, @@ -97,14 +105,18 @@ describe('elements/content-sharing/sharingService', () => { }); test('should call share with correct parameters when createSharedLink is called', async () => { + mockItemApiInstance.share.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); await service.createSharedLink(); expect(mockItemApiInstance.share).toHaveBeenCalledWith( options, undefined, - mockOnUpdateSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); @@ -118,14 +130,18 @@ describe('elements/content-sharing/sharingService', () => { }); test('should call share with ACCESS_NONE and onRemoveSharedLink when deleteSharedLink is called', async () => { + mockItemApiInstance.share.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); await service.deleteSharedLink(); expect(mockItemApiInstance.share).toHaveBeenCalledWith( options, ACCESS_NONE, - mockOnRemoveSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); @@ -140,6 +156,10 @@ describe('elements/content-sharing/sharingService', () => { }); test('should call updateSharedLink with basic shared link settings', async () => { + mockItemApiInstance.updateSharedLink.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); const sharedLinkSettings = { @@ -167,13 +187,17 @@ describe('elements/content-sharing/sharingService', () => { expect(mockItemApiInstance.updateSharedLink).toHaveBeenCalledWith( options, expectedConvertedSettings, - mockOnUpdateSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); test('should call updateSharedLink with options including access, isDownloadAvailable, and serverUrl', async () => { + mockItemApiInstance.updateSharedLink.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const mockConvertedSharedLinkSettings = { password: 'test-password', permissions: { can_download: false, can_preview: true }, @@ -215,13 +239,17 @@ describe('elements/content-sharing/sharingService', () => { expect(mockItemApiInstance.updateSharedLink).toHaveBeenCalledWith( options, mockConvertedSharedLinkSettings, - mockOnUpdateSharedLink, - {}, + expect.any(Function), + expect.any(Function), CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); test('should handle shared link settings correctly', async () => { + mockItemApiInstance.updateSharedLink.mockImplementation((_options, _access, successCallback) => { + successCallback({ id: '123', shared_link: null }); + }); + const service = createSharingServiceWrapper(); const expirationDate = new Date('2024-12-31T23:59:59Z'); @@ -239,4 +267,69 @@ describe('elements/content-sharing/sharingService', () => { expect(convertSharedLinkSettings).toHaveBeenCalledWith(sharedLinkSettings, undefined, undefined, undefined); }); }); + + describe('error handling', () => { + test('should reject when changeSharedLinkAccess fails', async () => { + const mockError = new Error('Failed to change access'); + mockItemApiInstance.share.mockImplementation((_options, _access, _successCallback, errorCallback) => { + errorCallback(mockError); + }); + + const service = createSharingServiceWrapper(); + await expect(service.changeSharedLinkAccess('open')).rejects.toEqual(mockError); + }); + + test('should reject when changeSharedLinkPermission fails', async () => { + const mockError = new Error('Failed to change permission'); + mockItemApiInstance.updateSharedLink.mockImplementation( + (_options, _settings, _successCallback, errorCallback) => { + errorCallback(mockError); + }, + ); + + const service = createSharingServiceWrapper(); + await expect(service.changeSharedLinkPermission(PERMISSION_CAN_DOWNLOAD)).rejects.toEqual(mockError); + }); + + test('should reject when createSharedLink fails', async () => { + const mockError = new Error('Failed to create shared link'); + mockItemApiInstance.share.mockImplementation((_options, _access, _successCallback, errorCallback) => { + errorCallback(mockError); + }); + + const service = createSharingServiceWrapper(); + await expect(service.createSharedLink()).rejects.toEqual(mockError); + }); + + test('should reject when deleteSharedLink fails', async () => { + const mockError = new Error('Failed to delete shared link'); + mockItemApiInstance.share.mockImplementation((_options, _access, _successCallback, errorCallback) => { + errorCallback(mockError); + }); + + const service = createSharingServiceWrapper(); + await expect(service.deleteSharedLink()).rejects.toEqual(mockError); + }); + + test('should reject when updateSharedLink fails', async () => { + const mockError = new Error('Failed to update shared link'); + mockItemApiInstance.updateSharedLink.mockImplementation( + (_options, _settings, _successCallback, errorCallback) => { + errorCallback(mockError); + }, + ); + + const service = createSharingServiceWrapper(); + const sharedLinkSettings = { + expiration: null, + isDownloadEnabled: true, + isExpirationEnabled: false, + isPasswordEnabled: false, + password: '', + vanityName: 'vanity-name', + }; + + await expect(service.updateSharedLink(sharedLinkSettings)).rejects.toEqual(mockError); + }); + }); }); diff --git a/src/elements/content-sharing/__tests__/useInvites.test.js b/src/elements/content-sharing/__tests__/useInvites.test.js index 80ef67c0e2..2facf261bf 100644 --- a/src/elements/content-sharing/__tests__/useInvites.test.js +++ b/src/elements/content-sharing/__tests__/useInvites.test.js @@ -51,8 +51,8 @@ describe('useInvites hook', () => { }), ); - act(() => { - result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); + await act(async () => { + await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); }); expect(mockHandleSuccess).toHaveBeenCalledWith({ id: 'collab123', role: 'editor' }); @@ -69,8 +69,8 @@ describe('useInvites hook', () => { }), ); - act(() => { - result.current({ users: [{ email: 'fail@example.com', role: 'editor' }] }); + await act(async () => { + await result.current({ users: [{ email: 'fail@example.com', role: 'editor' }] }).catch(() => {}); }); expect(mockHandleError).toHaveBeenCalled(); @@ -86,11 +86,11 @@ describe('useInvites hook', () => { ); let actionResult; - act(() => { - actionResult = result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); + await act(async () => { + actionResult = await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); }); - expect(actionResult).toEqual(Promise.resolve()); + expect(actionResult).toEqual(null); expect(mockHandleSuccess).not.toHaveBeenCalled(); expect(mockHandleError).not.toHaveBeenCalled(); }); @@ -108,8 +108,8 @@ describe('useInvites hook', () => { }), ); - act(() => { - result.current({ + await act(async () => { + await result.current({ users: [{ email: 'user@example.com', role: 'editor' }], groups: [{ id: 'group123', role: 'viewer' }], }); diff --git a/src/elements/content-sharing/hooks/useInvites.js b/src/elements/content-sharing/hooks/useInvites.js index 9b692c4ea6..bcc9309d12 100644 --- a/src/elements/content-sharing/hooks/useInvites.js +++ b/src/elements/content-sharing/hooks/useInvites.js @@ -34,17 +34,23 @@ function useInvites(api: API, itemID: string, itemType: ItemType, options: UseIn id: itemID, type: itemType, }; + const sendCollabRequest = collab => { setIsLoading(true); - return api.getCollaborationsAPI(false).addCollaboration( - itemData, - collab, - response => { - handleSuccess(response); - return transformResponse(response); - }, - handleError, - ); + return new Promise((resolve, reject) => { + api.getCollaborationsAPI(false).addCollaboration( + itemData, + collab, + response => { + handleSuccess(response); + resolve(transformResponse(response)); + }, + error => { + handleError(error); + reject(error); + }, + ); + }); }; const createPostCollaborationFn: SendInvitesFnType = diff --git a/src/elements/content-sharing/sharingService.ts b/src/elements/content-sharing/sharingService.ts index 2987e74453..03d6540474 100644 --- a/src/elements/content-sharing/sharingService.ts +++ b/src/elements/content-sharing/sharingService.ts @@ -34,56 +34,91 @@ export const createSharingService = ({ }: CreateSharingServiceArgs) => { const { id, permissions } = options; - const changeSharedLinkAccess = async (access: string) => { - return itemApiInstance.share( - { id, permissions }, - access, - onUpdateSharedLink, - {}, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); + const changeSharedLinkAccess = async (access: string): Promise => { + return new Promise((resolve, reject) => { + itemApiInstance.share( + { id, permissions }, + access, + data => { + onUpdateSharedLink(data); + resolve(); + }, + error => { + reject(error); + }, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); + }); }; - const changeSharedLinkPermission = async (permissionLevel: string) => { - return itemApiInstance.updateSharedLink( - { id, permissions }, - { permissions: convertSharedLinkPermissions(permissionLevel) }, - onUpdateSharedLink, - {}, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); + const changeSharedLinkPermission = async (permissionLevel: string): Promise => { + return new Promise((resolve, reject) => { + itemApiInstance.updateSharedLink( + { id, permissions }, + { permissions: convertSharedLinkPermissions(permissionLevel) }, + data => { + onUpdateSharedLink(data); + resolve(); + }, + error => { + reject(error); + }, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); + }); }; const updateSharedLink = async (sharedLinkSettings: SharedLinkSettings) => { const { access, isDownloadAvailable, serverUrl } = options; - return itemApiInstance.updateSharedLink( - { id, permissions }, - convertSharedLinkSettings(sharedLinkSettings, access, isDownloadAvailable, serverUrl), - onUpdateSharedLink, - {}, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); + return new Promise((resolve, reject) => { + itemApiInstance.updateSharedLink( + { id, permissions }, + convertSharedLinkSettings(sharedLinkSettings, access, isDownloadAvailable, serverUrl), + data => { + onUpdateSharedLink(data); + resolve(data); + }, + error => { + reject(error); + }, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); + }); }; const createSharedLink = async () => { - return itemApiInstance.share( - { id, permissions }, - undefined, // if "access" is undefined, the backend will set the default access level for the shared link - onUpdateSharedLink, - {}, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); + return new Promise((resolve, reject) => { + itemApiInstance.share( + { id, permissions }, + undefined, // if "access" is undefined, the backend will set the default access level for the shared link + data => { + onUpdateSharedLink(data); + resolve(data); + }, + error => { + reject(error); + }, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); + }); }; const deleteSharedLink = async () => { - return itemApiInstance.share( - { id, permissions }, - ACCESS_NONE, - onRemoveSharedLink, - {}, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); + return new Promise((resolve, reject) => { + itemApiInstance.share( + { id, permissions }, + ACCESS_NONE, + data => { + onRemoveSharedLink(data); + resolve(data); + }, + error => { + reject(error); + }, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); + }); }; return { diff --git a/yarn.lock b/yarn.lock index 522dd89fc5..6e1623319e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1554,10 +1554,10 @@ resolved "https://registry.yarnpkg.com/@box/types/-/types-0.2.1.tgz#cd0a3915b2306e4cf581f6091b95f5d2db75ea60" integrity sha512-wd6nRR9QxBl7lYKJ/Hix0AKg1PNC3leZWOJ9Nt+d4j45WxCYBiCemZAtY2ekL5BITpVw8vlLmquzSpPhDTeO5A== -"@box/unified-share-modal@^1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.7.1.tgz#f6220facfb008546352fb2dd7ec7533cfcfc6fb4" - integrity sha512-hVR37tiF/REfkQK62Xe0O+1/fHS4Uw2mutdwZhdFO3fFxEBgT8R4a861Co1pjtbWmTldGyciaI2UTStnLb/hzA== +"@box/unified-share-modal@^1.36.1": + version "1.36.2" + resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.36.2.tgz#4bcc326200a0d709b67c631b72b05cdd5d5a7f1e" + integrity sha512-ngcn9TjwtSarKLGGFSQCvKEm9eihO3Sp6B/wtcPOSLDGADq92ughbolabquoYZU6VpA0n7sy+B/k0OnHYek7hQ== "@box/user-selector@^1.23.25": version "1.23.25" From 5c68fac542cada35a5e90f169fe6cee980f2f3e3 Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 08:53:01 -0800 Subject: [PATCH 2/9] fix: SharingModal Test --- .../content-sharing/__tests__/SharingModal.test.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/elements/content-sharing/__tests__/SharingModal.test.js b/src/elements/content-sharing/__tests__/SharingModal.test.js index 6cdfdeb21f..8a2b10e8bc 100644 --- a/src/elements/content-sharing/__tests__/SharingModal.test.js +++ b/src/elements/content-sharing/__tests__/SharingModal.test.js @@ -1021,8 +1021,13 @@ describe('elements/content-sharing/SharingModal', () => { wrapper.update(); await act(async () => { - wrapper.find(UnifiedShareModal).invoke(`${usmFn}`)(); + try { + await wrapper.find(UnifiedShareModal).invoke(`${usmFn}`)(); + } catch (error) { + expect(error).toEqual(new Error({ status: '400' })); + } }); + wrapper.update(); expect(setIsVisibleMock).toHaveBeenCalledWith(false); const notification = wrapper.find(Notification); From ecd0b72f150a75020fb493973057decabce47f80 Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 09:17:14 -0800 Subject: [PATCH 3/9] fix: improve code --- package.json | 2 +- src/elements/content-sharing/SharingNotification.js | 2 -- src/elements/content-sharing/hooks/useInvites.js | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index be9c5c9d2d..811b3a99cf 100644 --- a/package.json +++ b/package.json @@ -310,7 +310,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.7.1", + "@box/unified-share-modal": "^1.36.1", "@box/user-selector": "^1.23.25", "@hapi/address": "^2.1.4", "@tanstack/react-virtual": "^3.13.12", diff --git a/src/elements/content-sharing/SharingNotification.js b/src/elements/content-sharing/SharingNotification.js index 926396003b..d0efcb0ee9 100644 --- a/src/elements/content-sharing/SharingNotification.js +++ b/src/elements/content-sharing/SharingNotification.js @@ -234,7 +234,6 @@ function SharingNotification({ const sendInvitesFn = useInvites(api, itemID, itemType, { handleSuccess: response => { createNotification(TYPE_INFO, contentSharingMessages.sendInvitesSuccess); - setIsLoading(false); setCollaboratorsList((prevList: collaboratorsListType | null) => { const newList = prevList ? { ...prevList } : { collaborators: [] }; const newCollab = convertCollab({ @@ -251,7 +250,6 @@ function SharingNotification({ }, handleError: () => { createNotification(TYPE_ERROR, contentSharingMessages.sendInvitesError); - setIsLoading(false); closeComponent(); }, setIsLoading, diff --git a/src/elements/content-sharing/hooks/useInvites.js b/src/elements/content-sharing/hooks/useInvites.js index bcc9309d12..5a73931f8b 100644 --- a/src/elements/content-sharing/hooks/useInvites.js +++ b/src/elements/content-sharing/hooks/useInvites.js @@ -50,7 +50,7 @@ function useInvites(api: API, itemID: string, itemType: ItemType, options: UseIn reject(error); }, ); - }); + }).finally(() => setIsLoading(false)); }; const createPostCollaborationFn: SendInvitesFnType = From bb78529d03fb461936cc4f847c0c9524d8912c59 Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 09:33:07 -0800 Subject: [PATCH 4/9] fix: rollback change permission and access callback changes --- .../__tests__/sharingService.test.ts | 38 ++--------------- .../content-sharing/sharingService.ts | 42 +++++++------------ 2 files changed, 18 insertions(+), 62 deletions(-) diff --git a/src/elements/content-sharing/__tests__/sharingService.test.ts b/src/elements/content-sharing/__tests__/sharingService.test.ts index 1381d7262b..cf8181fea3 100644 --- a/src/elements/content-sharing/__tests__/sharingService.test.ts +++ b/src/elements/content-sharing/__tests__/sharingService.test.ts @@ -46,10 +46,6 @@ describe('elements/content-sharing/sharingService', () => { }); test('should call updateSharedLink with correct parameters when changeSharedLinkPermission is called', async () => { - mockItemApiInstance.updateSharedLink.mockImplementation((_options, _access, successCallback) => { - successCallback({ id: '123', shared_link: null }); - }); - const service = createSharingServiceWrapper(); const permissionLevel = PERMISSION_CAN_DOWNLOAD; const expectedPermissions = { @@ -62,8 +58,8 @@ describe('elements/content-sharing/sharingService', () => { expect(mockItemApiInstance.updateSharedLink).toHaveBeenCalledWith( options, { permissions: expectedPermissions }, - expect.any(Function), - expect.any(Function), + mockOnUpdateSharedLink, + {}, CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }); @@ -79,18 +75,14 @@ describe('elements/content-sharing/sharingService', () => { test.each(['open', 'company', 'collaborators'])( 'should call share with correct parameters when changeSharedLinkAccess is called', async access => { - mockItemApiInstance.share.mockImplementation((_options, _access, successCallback) => { - successCallback({ id: '123', shared_link: null }); - }); - const service = createSharingServiceWrapper(); await service.changeSharedLinkAccess(access); expect(mockItemApiInstance.share).toHaveBeenCalledWith( options, access, - expect.any(Function), - expect.any(Function), + mockOnUpdateSharedLink, + {}, CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, ); }, @@ -269,28 +261,6 @@ describe('elements/content-sharing/sharingService', () => { }); describe('error handling', () => { - test('should reject when changeSharedLinkAccess fails', async () => { - const mockError = new Error('Failed to change access'); - mockItemApiInstance.share.mockImplementation((_options, _access, _successCallback, errorCallback) => { - errorCallback(mockError); - }); - - const service = createSharingServiceWrapper(); - await expect(service.changeSharedLinkAccess('open')).rejects.toEqual(mockError); - }); - - test('should reject when changeSharedLinkPermission fails', async () => { - const mockError = new Error('Failed to change permission'); - mockItemApiInstance.updateSharedLink.mockImplementation( - (_options, _settings, _successCallback, errorCallback) => { - errorCallback(mockError); - }, - ); - - const service = createSharingServiceWrapper(); - await expect(service.changeSharedLinkPermission(PERMISSION_CAN_DOWNLOAD)).rejects.toEqual(mockError); - }); - test('should reject when createSharedLink fails', async () => { const mockError = new Error('Failed to create shared link'); mockItemApiInstance.share.mockImplementation((_options, _access, _successCallback, errorCallback) => { diff --git a/src/elements/content-sharing/sharingService.ts b/src/elements/content-sharing/sharingService.ts index 03d6540474..683c394405 100644 --- a/src/elements/content-sharing/sharingService.ts +++ b/src/elements/content-sharing/sharingService.ts @@ -35,37 +35,23 @@ export const createSharingService = ({ const { id, permissions } = options; const changeSharedLinkAccess = async (access: string): Promise => { - return new Promise((resolve, reject) => { - itemApiInstance.share( - { id, permissions }, - access, - data => { - onUpdateSharedLink(data); - resolve(); - }, - error => { - reject(error); - }, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); - }); + return itemApiInstance.share( + { id, permissions }, + access, + onUpdateSharedLink, + {}, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); }; const changeSharedLinkPermission = async (permissionLevel: string): Promise => { - return new Promise((resolve, reject) => { - itemApiInstance.updateSharedLink( - { id, permissions }, - { permissions: convertSharedLinkPermissions(permissionLevel) }, - data => { - onUpdateSharedLink(data); - resolve(); - }, - error => { - reject(error); - }, - CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, - ); - }); + return itemApiInstance.updateSharedLink( + { id, permissions }, + { permissions: convertSharedLinkPermissions(permissionLevel) }, + onUpdateSharedLink, + {}, + CONTENT_SHARING_SHARED_LINK_UPDATE_PARAMS, + ); }; const updateSharedLink = async (sharedLinkSettings: SharedLinkSettings) => { From 080611baf6097e2bd42de50dd0f2046164c2739a Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 11:26:37 -0800 Subject: [PATCH 5/9] fix: test and package --- package.json | 16 +++---- .../__tests__/useInvites.test.js | 25 ++++------- yarn.lock | 42 +++++++++---------- 3 files changed, 36 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 811b3a99cf..869596435f 100644 --- a/package.json +++ b/package.json @@ -124,14 +124,14 @@ "@babel/preset-typescript": "^7.24.7", "@babel/template": "^7.24.7", "@babel/types": "^7.24.7", - "@box/blueprint-web": "^12.104.1", - "@box/blueprint-web-assets": "4.88.2", + "@box/blueprint-web": "^12.112.3", + "@box/blueprint-web-assets": "4.91.3", "@box/box-ai-agent-selector": "^0.53.0", "@box/box-ai-content-answers": "^0.139.0", "@box/box-item-type-selector": "^0.73.1", "@box/cldr-data": "^34.2.0", "@box/combobox-with-api": "^1.18.0", - "@box/copy-input": "^1.5.3", + "@box/copy-input": "^1.22.3", "@box/frontend": "^11.0.1", "@box/item-icon": "^0.27.1", "@box/languages": "^1.0.0", @@ -141,7 +141,7 @@ "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", "@box/unified-share-modal": "^1.36.1", - "@box/user-selector": "^1.23.25", + "@box/user-selector": "^1.55.3", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^4.0.1", "@commitlint/cli": "^19.8.0", @@ -296,14 +296,14 @@ "webpack-dev-server": "^5.2.1" }, "peerDependencies": { - "@box/blueprint-web": "^12.104.1", - "@box/blueprint-web-assets": "4.88.2", + "@box/blueprint-web": "^12.112.3", + "@box/blueprint-web-assets": "4.91.3", "@box/box-ai-agent-selector": "^0.53.0", "@box/box-ai-content-answers": "^0.139.0", "@box/box-item-type-selector": "^0.73.1", "@box/cldr-data": ">=34.2.0", "@box/combobox-with-api": "^1.18.0", - "@box/copy-input": "^1.5.3", + "@box/copy-input": "^1.22.3", "@box/item-icon": "^0.27.1", "@box/metadata-editor": "^1.18.0", "@box/metadata-filter": "^1.41.3", @@ -311,7 +311,7 @@ "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", "@box/unified-share-modal": "^1.36.1", - "@box/user-selector": "^1.23.25", + "@box/user-selector": "^1.55.3", "@hapi/address": "^2.1.4", "@tanstack/react-virtual": "^3.13.12", "axios": "^0.30.0", diff --git a/src/elements/content-sharing/__tests__/useInvites.test.js b/src/elements/content-sharing/__tests__/useInvites.test.js index 2facf261bf..b5efcae8ec 100644 --- a/src/elements/content-sharing/__tests__/useInvites.test.js +++ b/src/elements/content-sharing/__tests__/useInvites.test.js @@ -1,4 +1,4 @@ -import { renderHook, act } from '@testing-library/react'; +import { renderHook } from '@testing-library/react'; import useInvites from '../hooks/useInvites'; import API from '../../../api'; @@ -51,9 +51,7 @@ describe('useInvites hook', () => { }), ); - await act(async () => { - await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); - }); + await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); expect(mockHandleSuccess).toHaveBeenCalledWith({ id: 'collab123', role: 'editor' }); expect(mockTransformResponse).toHaveBeenCalledWith({ id: 'collab123', role: 'editor' }); @@ -69,10 +67,7 @@ describe('useInvites hook', () => { }), ); - await act(async () => { - await result.current({ users: [{ email: 'fail@example.com', role: 'editor' }] }).catch(() => {}); - }); - + await result.current({ users: [{ email: 'fail@example.com', role: 'editor' }] }).catch(() => {}); expect(mockHandleError).toHaveBeenCalled(); }); @@ -85,11 +80,7 @@ describe('useInvites hook', () => { }), ); - let actionResult; - await act(async () => { - actionResult = await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); - }); - + const actionResult = await result.current({ users: [{ email: 'user@example.com', role: 'editor' }] }); expect(actionResult).toEqual(null); expect(mockHandleSuccess).not.toHaveBeenCalled(); expect(mockHandleError).not.toHaveBeenCalled(); @@ -108,11 +99,9 @@ describe('useInvites hook', () => { }), ); - await act(async () => { - await result.current({ - users: [{ email: 'user@example.com', role: 'editor' }], - groups: [{ id: 'group123', role: 'viewer' }], - }); + await result.current({ + users: [{ email: 'user@example.com', role: 'editor' }], + groups: [{ id: 'group123', role: 'viewer' }], }); expect(mockHandleSuccess).toHaveBeenCalledTimes(2); diff --git a/yarn.lock b/yarn.lock index 6e1623319e..819a5237a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1419,24 +1419,24 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@box/blueprint-web-assets@4.88.2": - version "4.88.2" - resolved "https://registry.yarnpkg.com/@box/blueprint-web-assets/-/blueprint-web-assets-4.88.2.tgz#cb98f14dcd5a072d7c97be31030485cf9219478e" - integrity sha512-TAtiYWvudxj3i5GAa4NsiHzlF9WcIARBbp1dCxgwsFP652NEamo/3SH2wyhcc/5u1bJJLftxe5xsTv6a7dpj0w== +"@box/blueprint-web-assets@4.91.3": + version "4.91.3" + resolved "https://registry.yarnpkg.com/@box/blueprint-web-assets/-/blueprint-web-assets-4.91.3.tgz#ddb0127d502e4bc8b42d6af73659f0daf970fecb" + integrity sha512-Wd9TTD8Z1XhXeMaLFJ7dOjVOc+lARXDiP5U8VdLDaWmb1+bGiYm9vNCzetrBmYAJac+QaQgW5yhYpr3qGhWAGw== -"@box/blueprint-web-assets@^4.89.0": - version "4.89.0" - resolved "https://registry.yarnpkg.com/@box/blueprint-web-assets/-/blueprint-web-assets-4.89.0.tgz#fd19ea1e826b6af9db78fbddb89e052717e40f24" - integrity sha512-5pwvqUUJutlpVFjf8rZld0qegNwICyG1g63OEnhszVq+KqkMQPZJOWJ2rfK5Pr8SduH4ei5LQ3j6XkG8VJuFig== +"@box/blueprint-web-assets@^4.91.4": + version "4.91.4" + resolved "https://registry.yarnpkg.com/@box/blueprint-web-assets/-/blueprint-web-assets-4.91.4.tgz#91372cf30a5705085294ad5caa521df365995f2f" + integrity sha512-MbECaQ8rmxrBGs+GmkwgK7pwtL621UFIl4Lx38cZjy6rRYFIi9gKaPFfJUTdxln2zc17z3hPqz+clHNzgPRocw== -"@box/blueprint-web@^12.104.1": - version "12.108.1" - resolved "https://registry.yarnpkg.com/@box/blueprint-web/-/blueprint-web-12.108.1.tgz#7760d6a3c0635a3a28e8c15881c1b799cbda5fff" - integrity sha512-v3jBIc7zP2oz7qG5cuALW67D0V+/4PdB8tRoeXs7OcFgwjTIRpx9pNg6pagmTTD/VSm6sCawbUl6oRQfowOQOQ== +"@box/blueprint-web@^12.112.3": + version "12.113.0" + resolved "https://registry.yarnpkg.com/@box/blueprint-web/-/blueprint-web-12.113.0.tgz#106cf61669d51f96995354331c0178da4716ba3e" + integrity sha512-eXcVLhQ6JCXPgjFJdPqNzKk+PCAvpRONcGyz50yhEkvobMgXS2qLigg06xcugFHdA714iv7ikUE2CsVXOjf4Ig== dependencies: "@ariakit/react" "0.4.15" "@ariakit/react-core" "0.4.15" - "@box/blueprint-web-assets" "^4.89.0" + "@box/blueprint-web-assets" "^4.91.4" "@internationalized/date" "^3.7.0" "@radix-ui/react-accordion" "1.1.2" "@radix-ui/react-checkbox" "1.0.4" @@ -1493,10 +1493,10 @@ "@box/tree" "^1.18.1" react-accessible-treeview "2.9.0" -"@box/copy-input@^1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@box/copy-input/-/copy-input-1.5.3.tgz#7eeffbdbc40a2f8660fa06c4b740f9d504c8ddc0" - integrity sha512-EpT+gcIzgyb2MNmAFSIfFq2bfKFDF+5yZldBmU0H/lwHQ5/uowb14cBEC7ZFc9IIkNz7aazEm+HmBikoGyZj1g== +"@box/copy-input@^1.22.3": + version "1.22.4" + resolved "https://registry.yarnpkg.com/@box/copy-input/-/copy-input-1.22.4.tgz#059236421f44bcc92abde3bc835abc27d48ebd1d" + integrity sha512-tdWB/Xz+kQe8xD0fT0NdbUhVStJ5AXwXTHEeJX58yawZ9IEwjpJcCHC2S8N8WPr2OT06foE2kFepFkXWaEoCNA== "@box/frontend@^11.0.1": version "11.0.1" @@ -1559,10 +1559,10 @@ resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.36.2.tgz#4bcc326200a0d709b67c631b72b05cdd5d5a7f1e" integrity sha512-ngcn9TjwtSarKLGGFSQCvKEm9eihO3Sp6B/wtcPOSLDGADq92ughbolabquoYZU6VpA0n7sy+B/k0OnHYek7hQ== -"@box/user-selector@^1.23.25": - version "1.23.25" - resolved "https://registry.yarnpkg.com/@box/user-selector/-/user-selector-1.23.25.tgz#95c9e56d67b4f313cce5891c3a0b51b6152d0cc2" - integrity sha512-QXQ+tAaRY0KQzUZWL0hbNcYAkePwFeTcmqRDZnaBo8s5i0SVVuGO6vUA/Kt9LGLAJirp1ZPks8ECSZmSVvJlVg== +"@box/user-selector@^1.55.3": + version "1.55.4" + resolved "https://registry.yarnpkg.com/@box/user-selector/-/user-selector-1.55.4.tgz#46a160cf3e962c8949ca15f0d27a746491ff36f0" + integrity sha512-osXAFRlCuRTuFMtRFHMZ8xxa7SNweE9MJm1XZJEC1Y104QFH14B+ubyuZpHhOZ3Cyi3OQlGXEur9KNqGOFtlPg== "@bundled-es-modules/cookie@^2.0.1": version "2.0.1" From bed013ec11aa299788ccb3c86a1d6074947555ce Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Thu, 8 Jan 2026 15:04:07 -0800 Subject: [PATCH 6/9] fix: update usm version --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 869596435f..d051461362 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.36.1", + "@box/unified-share-modal": "^1.36.4", "@box/user-selector": "^1.55.3", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^4.0.1", @@ -310,7 +310,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.36.1", + "@box/unified-share-modal": "^1.36.4", "@box/user-selector": "^1.55.3", "@hapi/address": "^2.1.4", "@tanstack/react-virtual": "^3.13.12", diff --git a/yarn.lock b/yarn.lock index 819a5237a2..1dd860aa0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1554,10 +1554,10 @@ resolved "https://registry.yarnpkg.com/@box/types/-/types-0.2.1.tgz#cd0a3915b2306e4cf581f6091b95f5d2db75ea60" integrity sha512-wd6nRR9QxBl7lYKJ/Hix0AKg1PNC3leZWOJ9Nt+d4j45WxCYBiCemZAtY2ekL5BITpVw8vlLmquzSpPhDTeO5A== -"@box/unified-share-modal@^1.36.1": - version "1.36.2" - resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.36.2.tgz#4bcc326200a0d709b67c631b72b05cdd5d5a7f1e" - integrity sha512-ngcn9TjwtSarKLGGFSQCvKEm9eihO3Sp6B/wtcPOSLDGADq92ughbolabquoYZU6VpA0n7sy+B/k0OnHYek7hQ== +"@box/unified-share-modal@^1.36.4": + version "1.36.4" + resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.36.4.tgz#9cbfaa51a33d2259f7043dcaacfeaf80fa889538" + integrity sha512-5gKwetiMXhGsj0v7+Lug7uIWLgaH82n1lN+5ixM47fNT8Fr0JvuGp55lmKBHlBXUmPYbtha9Ns85GYjut5yDMA== "@box/user-selector@^1.55.3": version "1.55.4" From 99c56cb126b8305f0c33584b70165f381856cd2d Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Fri, 9 Jan 2026 11:56:00 -0800 Subject: [PATCH 7/9] fix: upgrade sass version --- package.json | 6 +++--- yarn.lock | 26 +++++++++++--------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index d051461362..cd053e3acc 100644 --- a/package.json +++ b/package.json @@ -271,8 +271,8 @@ "regenerator-runtime": "^0.14.1", "remarkable": "^2.0.1", "sanitize-html": "^2.14.0", - "sass": "1.45.0", - "sass-loader": "^8.0.2", + "sass": "1.56.0", + "sass-loader": "^16.0.6", "scroll-into-view-if-needed": "^2.2.20", "semantic-release": "^24.2.3", "sinon": "^2.3.7", @@ -352,7 +352,7 @@ "regenerator-runtime": "^0.13.2", "remarkable": "^2.0.1", "sanitize-html": "^2.14.0", - "sass": "1.45.0", + "sass": "1.56.0", "scroll-into-view-if-needed": "^2.2.20", "tabbable": "^1.1.2", "uuid": "^8.3.2" diff --git a/yarn.lock b/yarn.lock index 1dd860aa0e..4c08179846 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14364,7 +14364,7 @@ negotiator@^1.0.0: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== -neo-async@^2.6.1, neo-async@^2.6.2: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -17454,21 +17454,17 @@ sanitize-html@^2.14.0: parse-srcset "^1.0.2" postcss "^8.3.11" -sass-loader@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== +sass-loader@^16.0.6: + version "16.0.6" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.6.tgz#913b05607d06c386bc37870494e1e3a3e091fd3b" + integrity sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA== dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" + neo-async "^2.6.2" -sass@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.0.tgz#192ede1908324bb293a3e403d1841dbcaafdd323" - integrity sha512-ONy5bjppoohtNkFJRqdz1gscXamMzN3wQy1YH9qO2FiNpgjLhpz/IPRGg0PpCjyz/pWfCOaNEaiEGCcjOFAjqw== +sass@1.56.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.56.0.tgz#134032075a3223c8d49cb5c35e091e5ba1de8e0a" + integrity sha512-WFJ9XrpkcnqZcYuLRJh5qiV6ibQOR4AezleeEjTjMsCocYW59dEG19U3fwTTXxzi2Ed3yjPBp727hbbj53pHFw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -17498,7 +17494,7 @@ scheduler@^0.26.0: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== -schema-utils@^2.2.0, schema-utils@^2.6.1: +schema-utils@^2.2.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== From 6cb409267c013c4f662e7dd27ec51d0776468cf2 Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Fri, 9 Jan 2026 15:49:08 -0800 Subject: [PATCH 8/9] fix: update snapshot due to blueprint upgrade --- .../__tests__/__snapshots__/SidebarFileProperties.test.js.snap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap b/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap index 7416c09a94..5bc78ec6ab 100644 --- a/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap +++ b/src/elements/content-sidebar/__tests__/__snapshots__/SidebarFileProperties.test.js.snap @@ -130,8 +130,9 @@ exports[`elements/content-sidebar/SidebarFileProperties render() should render r

1 B

From 74e39589f80e900e161bee3f6d277df50b3aadc6 Mon Sep 17 00:00:00 2001 From: reneshen0328 Date: Mon, 12 Jan 2026 09:03:00 -0800 Subject: [PATCH 9/9] fix: state management and bump package --- package.json | 4 ++-- src/elements/content-sharing/hooks/useInvites.js | 16 ++++++++++------ yarn.lock | 8 ++++---- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index cd053e3acc..da57f752d8 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.36.4", + "@box/unified-share-modal": "^1.37.1", "@box/user-selector": "^1.55.3", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^4.0.1", @@ -310,7 +310,7 @@ "@box/metadata-view": "^1.10.0", "@box/react-virtualized": "^9.22.3-rc-box.10", "@box/types": "^0.2.1", - "@box/unified-share-modal": "^1.36.4", + "@box/unified-share-modal": "^1.37.1", "@box/user-selector": "^1.55.3", "@hapi/address": "^2.1.4", "@tanstack/react-virtual": "^3.13.12", diff --git a/src/elements/content-sharing/hooks/useInvites.js b/src/elements/content-sharing/hooks/useInvites.js index 5a73931f8b..c219c98945 100644 --- a/src/elements/content-sharing/hooks/useInvites.js +++ b/src/elements/content-sharing/hooks/useInvites.js @@ -36,7 +36,6 @@ function useInvites(api: API, itemID: string, itemType: ItemType, options: UseIn }; const sendCollabRequest = collab => { - setIsLoading(true); return new Promise((resolve, reject) => { api.getCollaborationsAPI(false).addCollaboration( itemData, @@ -50,7 +49,7 @@ function useInvites(api: API, itemID: string, itemType: ItemType, options: UseIn reject(error); }, ); - }).finally(() => setIsLoading(false)); + }); }; const createPostCollaborationFn: SendInvitesFnType = @@ -58,10 +57,15 @@ function useInvites(api: API, itemID: string, itemType: ItemType, options: UseIn if (!transformRequest) return Promise.resolve(null); const { users, groups } = transformRequest(collabRequest); - return Promise.all([ - ...users.map(user => sendCollabRequest(user)), - ...groups.map(group => sendCollabRequest(group)), - ]); + setIsLoading(true); + try { + return await Promise.all([ + ...users.map(user => sendCollabRequest(user)), + ...groups.map(group => sendCollabRequest(group)), + ]); + } finally { + setIsLoading(false); + } }; if (!sendInvites) { diff --git a/yarn.lock b/yarn.lock index 4c08179846..5390abf1f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1554,10 +1554,10 @@ resolved "https://registry.yarnpkg.com/@box/types/-/types-0.2.1.tgz#cd0a3915b2306e4cf581f6091b95f5d2db75ea60" integrity sha512-wd6nRR9QxBl7lYKJ/Hix0AKg1PNC3leZWOJ9Nt+d4j45WxCYBiCemZAtY2ekL5BITpVw8vlLmquzSpPhDTeO5A== -"@box/unified-share-modal@^1.36.4": - version "1.36.4" - resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.36.4.tgz#9cbfaa51a33d2259f7043dcaacfeaf80fa889538" - integrity sha512-5gKwetiMXhGsj0v7+Lug7uIWLgaH82n1lN+5ixM47fNT8Fr0JvuGp55lmKBHlBXUmPYbtha9Ns85GYjut5yDMA== +"@box/unified-share-modal@^1.37.1": + version "1.37.3" + resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-1.37.3.tgz#81b6eb51f624313006c4ae52603edd40446da2da" + integrity sha512-oIS+lrNj8LoQCiGlgYXz05rUaE5N9wlN1NFVH8qggS7Bb20iIvgcEsohkA1ypnENomgYZmStXDH06g3D7TeNrg== "@box/user-selector@^1.55.3": version "1.55.4"