From 5a0f31777a7df9d2b050026cc540396c4460f31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C3=ADbal=20Svarcas?= <WiXSL@users.noreply.github.com> Date: Thu, 30 Dec 2021 09:13:13 -0300 Subject: [PATCH 1/3] Fix loading indicator not updated on permissions error when logoutUser is false --- packages/ra-core/src/auth/useLogoutIfAccessDenied.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts b/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts index 5e9429dcae6..100ab650823 100644 --- a/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts +++ b/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts @@ -4,6 +4,8 @@ import useAuthProvider from './useAuthProvider'; import useLogout from './useLogout'; import { useNotify } from '../sideEffect'; import { useHistory } from 'react-router'; +import { fetchEnd } from '../actions'; +import { useDispatch } from 'react-redux'; let timer; @@ -43,6 +45,8 @@ const useLogoutIfAccessDenied = (): LogoutIfAccessDenied => { const logout = useLogout(); const notify = useNotify(); const history = useHistory(); + const dispatch = useDispatch(); + const logoutIfAccessDenied = useCallback( (error?: any, disableNotification?: boolean) => authProvider @@ -92,12 +96,13 @@ const useLogoutIfAccessDenied = (): LogoutIfAccessDenied => { if (logoutUser) { logout({}, redirectTo); } else { + dispatch(fetchEnd()); history.push(redirectTo); } return true; }), - [authProvider, logout, notify, history] + [authProvider, logout, notify, history, dispatch] ); return authProvider ? logoutIfAccessDenied From d6bc43b2ba4fee4b644ad746b8e62ecb9bb40812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C3=ADbal=20Svarcas?= <WiXSL@users.noreply.github.com> Date: Thu, 30 Dec 2021 10:12:57 -0300 Subject: [PATCH 2/3] Fix tests --- packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx b/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx index 9a04b224db0..335466d1531 100644 --- a/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx +++ b/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { useState, useEffect } from 'react'; import expect from 'expect'; -import { render, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; @@ -10,6 +10,7 @@ import AuthContext from './AuthContext'; import useLogout from './useLogout'; import useNotify from '../sideEffect/useNotify'; import { AuthProvider } from '../types'; +import { renderWithRedux } from 'ra-test'; let loggedIn = true; @@ -62,7 +63,7 @@ useNotify.mockImplementation(() => notify); function renderInRouter(children) { const history = createMemoryHistory(); - const api = render(<Router history={history}>{children}</Router>); + const api = renderWithRedux(<Router history={history}>{children}</Router>); return { ...api, From 2b18d0862f22cbdb14044286918118fbb5a898f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C3=ADbal=20Svarcas?= <WiXSL@users.noreply.github.com> Date: Mon, 3 Jan 2022 10:18:46 -0300 Subject: [PATCH 3/3] Improve fix --- packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx | 5 ++--- packages/ra-core/src/auth/useLogoutIfAccessDenied.ts | 6 +----- .../src/dataProvider/performQuery/performOptimisticQuery.ts | 5 ++++- .../dataProvider/performQuery/performPessimisticQuery.ts | 5 ++++- .../src/dataProvider/performQuery/performUndoableQuery.ts | 5 ++++- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx b/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx index 335466d1531..9a04b224db0 100644 --- a/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx +++ b/packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { useState, useEffect } from 'react'; import expect from 'expect'; -import { waitFor } from '@testing-library/react'; +import { render, waitFor } from '@testing-library/react'; import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; @@ -10,7 +10,6 @@ import AuthContext from './AuthContext'; import useLogout from './useLogout'; import useNotify from '../sideEffect/useNotify'; import { AuthProvider } from '../types'; -import { renderWithRedux } from 'ra-test'; let loggedIn = true; @@ -63,7 +62,7 @@ useNotify.mockImplementation(() => notify); function renderInRouter(children) { const history = createMemoryHistory(); - const api = renderWithRedux(<Router history={history}>{children}</Router>); + const api = render(<Router history={history}>{children}</Router>); return { ...api, diff --git a/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts b/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts index 100ab650823..d49e4ab4280 100644 --- a/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts +++ b/packages/ra-core/src/auth/useLogoutIfAccessDenied.ts @@ -4,8 +4,6 @@ import useAuthProvider from './useAuthProvider'; import useLogout from './useLogout'; import { useNotify } from '../sideEffect'; import { useHistory } from 'react-router'; -import { fetchEnd } from '../actions'; -import { useDispatch } from 'react-redux'; let timer; @@ -45,7 +43,6 @@ const useLogoutIfAccessDenied = (): LogoutIfAccessDenied => { const logout = useLogout(); const notify = useNotify(); const history = useHistory(); - const dispatch = useDispatch(); const logoutIfAccessDenied = useCallback( (error?: any, disableNotification?: boolean) => @@ -96,13 +93,12 @@ const useLogoutIfAccessDenied = (): LogoutIfAccessDenied => { if (logoutUser) { logout({}, redirectTo); } else { - dispatch(fetchEnd()); history.push(redirectTo); } return true; }), - [authProvider, logout, notify, history, dispatch] + [authProvider, logout, notify, history] ); return authProvider ? logoutIfAccessDenied diff --git a/packages/ra-core/src/dataProvider/performQuery/performOptimisticQuery.ts b/packages/ra-core/src/dataProvider/performQuery/performOptimisticQuery.ts index e016658de3b..c462c3bd0b9 100644 --- a/packages/ra-core/src/dataProvider/performQuery/performOptimisticQuery.ts +++ b/packages/ra-core/src/dataProvider/performQuery/performOptimisticQuery.ts @@ -89,7 +89,10 @@ export const performOptimisticQuery = ({ console.error(error); } return logoutIfAccessDenied(error).then(loggedOut => { - if (loggedOut) return; + if (loggedOut) { + dispatch({ type: FETCH_END }); + return; + } dispatch({ type: `${action}_FAILURE`, error: error.message ? error.message : error, diff --git a/packages/ra-core/src/dataProvider/performQuery/performPessimisticQuery.ts b/packages/ra-core/src/dataProvider/performQuery/performPessimisticQuery.ts index 9daeec1b245..214c4e34cc4 100644 --- a/packages/ra-core/src/dataProvider/performQuery/performPessimisticQuery.ts +++ b/packages/ra-core/src/dataProvider/performQuery/performPessimisticQuery.ts @@ -71,7 +71,10 @@ export const performPessimisticQuery = ({ console.error(error); } return logoutIfAccessDenied(error).then(loggedOut => { - if (loggedOut) return; + if (loggedOut) { + dispatch({ type: FETCH_END }); + return; + } dispatch({ type: `${action}_FAILURE`, error: error.message ? error.message : error, diff --git a/packages/ra-core/src/dataProvider/performQuery/performUndoableQuery.ts b/packages/ra-core/src/dataProvider/performQuery/performUndoableQuery.ts index 8716f80d64f..fae1f64dc3c 100644 --- a/packages/ra-core/src/dataProvider/performQuery/performUndoableQuery.ts +++ b/packages/ra-core/src/dataProvider/performQuery/performUndoableQuery.ts @@ -129,7 +129,10 @@ export const performUndoableQuery = ({ console.error(error); } return logoutIfAccessDenied(error).then(loggedOut => { - if (loggedOut) return; + if (loggedOut) { + dispatch({ type: FETCH_END }); + return; + } dispatch({ type: `${action}_FAILURE`, error: error.message ? error.message : error,