diff --git a/packages/core/upload/admin/src/components/AssetDialog/DialogHeader.js b/packages/core/upload/admin/src/components/AssetDialog/DialogHeader.js index 6924d339ba..2c1726d011 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/DialogHeader.js +++ b/packages/core/upload/admin/src/components/AssetDialog/DialogHeader.js @@ -26,12 +26,15 @@ const BackIcon = styled(Icon)` } `; -export const DialogHeader = ({ currentFolder, onChangeFolder }) => { +export const DialogHeader = ({ currentFolder, onChangeFolder, canRead }) => { const { formatMessage } = useIntl(); - const { data, isLoading } = useFolderStructure(); + const { data, isLoading } = useFolderStructure({ + enabled: canRead, + }); - const folderMetadatas = !isLoading && findRecursiveFolderMetadatas(data[0], currentFolder); + const folderMetadatas = + !isLoading && Array.isArray(data) && findRecursiveFolderMetadatas(data[0], currentFolder); const folderLabel = folderMetadatas?.currentFolderLabel && (folderMetadatas.currentFolderLabel.length > 60 @@ -82,6 +85,7 @@ DialogHeader.defaultProps = { }; DialogHeader.propTypes = { + canRead: PropTypes.bool.isRequired, currentFolder: PropTypes.number, onChangeFolder: PropTypes.func, }; diff --git a/packages/core/upload/admin/src/components/AssetDialog/index.js b/packages/core/upload/admin/src/components/AssetDialog/index.js index 6983a144bc..b11567c659 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/index.js @@ -107,7 +107,7 @@ export const AssetDialog = ({ if (isLoading) { return ( - + {formatMessage({ @@ -124,7 +124,7 @@ export const AssetDialog = ({ if (hasError) { return ( - + @@ -134,7 +134,7 @@ export const AssetDialog = ({ if (!canRead) { return ( - + @@ -179,7 +179,11 @@ export const AssetDialog = ({ return ( - + { const withDefaults = { + canRead: true, currentFolder: null, onChangeFolder: jest.fn(), ...props, @@ -80,4 +81,16 @@ describe('Upload || components || DialogHeader', () => { expect(queryByText('Cats')).not.toBeInTheDocument(); expect(screen.queryByLabelText('Go back')).not.toBeInTheDocument(); }); + + it('should not attempt to fetch the folder structure, if the user does not have permissions', () => { + const spy = jest.fn().mockReturnValueOnce({ + isLoading: false, + error: null, + }); + useFolderStructure.mockImplementation(spy); + + setup({ canRead: false }); + + expect(spy).toHaveBeenCalledWith({ enabled: false }); + }); });