Skip to content

Commit

Permalink
Merge pull request #8131 from matthieuMay/master
Browse files Browse the repository at this point in the history
fix: 🐛 return consistent data types from dataprovider on logout
  • Loading branch information
fzaninotto authored Sep 1, 2022
2 parents 3fcf88e + 4a0a759 commit ce28b93
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
63 changes: 63 additions & 0 deletions packages/ra-core/src/dataProvider/useDataProvider.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,67 @@ describe('useDataProvider', () => {

expect(customVerb).toHaveBeenCalledWith({ id: 1 }, ['something']);
});

it('should return array or object when 401', async () => {
const results = [] as any[];
const doSomethingWithResult = (arg: any) => results.push(arg);
const UseDataProvider = () => {
const dataProvider = useDataProvider();
useEffect(() => {
async function callDataProvider() {
doSomethingWithResult(
(await dataProvider.getList('posts', {
filter: { id: 1 },
})) as any
);
doSomethingWithResult(
(await dataProvider.getMany('posts', {
filter: { id: 1 },
})) as any
);
doSomethingWithResult(
(await dataProvider.getOne('posts', {
filter: { id: 1 },
})) as any
);
doSomethingWithResult(
(await dataProvider.getManyReference('posts', {
filter: { id: 1 },
})) as any
);
}
callDataProvider();
}, [dataProvider]);
return <div data-testid="loading">loading</div>;
};
const dataProvider = {
getMany: () => Promise.reject({ status: 401 }),
getList: () => Promise.reject({ status: 401 }),
getOne: () => Promise.reject({ status: 401 }),
getManyReference: () => Promise.reject({ status: 401 }),
};
render(
<CoreAdminContext
dataProvider={dataProvider}
authProvider={{
checkError: () => Promise.reject(true),
checkAuth: () => Promise.reject(true),
logout: () => Promise.resolve(false),
}}
>
<UseDataProvider />
</CoreAdminContext>
);
// waitFor for the dataProvider to return
await act(async () => {
await new Promise(resolve => setTimeout(resolve));
});

expect(results).toEqual([
{ data: [] },
{ data: [] },
{ data: {} },
{ data: [] },
]);
});
});
12 changes: 11 additions & 1 deletion packages/ra-core/src/dataProvider/useDataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ import useLogoutIfAccessDenied from '../auth/useLogoutIfAccessDenied';
* )
* }
*/

const arrayReturnTypes = ['getList', 'getMany', 'getManyReference'];

export const useDataProvider = <
TDataProvider extends DataProvider = DataProvider
>(): TDataProvider => {
Expand Down Expand Up @@ -109,7 +112,14 @@ export const useDataProvider = <
}
return logoutIfAccessDenied(error).then(
loggedOut => {
if (loggedOut) return { data: {} };
if (loggedOut)
return {
data: arrayReturnTypes.includes(
type
)
? []
: {},
};
throw error;
}
);
Expand Down

0 comments on commit ce28b93

Please sign in to comment.