Skip to content

Commit

Permalink
Fix button display logic
Browse files Browse the repository at this point in the history
  • Loading branch information
fzaninotto committed Sep 9, 2024
1 parent f172633 commit 199fbae
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 19 deletions.
2 changes: 2 additions & 0 deletions packages/ra-core/src/i18n/TranslationMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ export interface TranslationMessages extends StringMap {
navigation: {
[key: string]: StringMap | string;
no_results: string;
no_filtered_results: string;
clear_filters: string;
no_more_results: string;
page_out_of_boundaries: string;
page_out_from_end: string;
Expand Down
4 changes: 2 additions & 2 deletions packages/ra-language-english/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ const englishMessages: TranslationMessages = {
"Some of your changes weren't saved. Are you sure you want to ignore them?",
},
navigation: {
clear_filters: 'Clear filters.',
no_filtred_results:
clear_filters: 'Clear filters',
no_filtered_results:
'No %{resource} found using the current filters.',
no_results: 'No %{resource} found',
no_more_results:
Expand Down
4 changes: 2 additions & 2 deletions packages/ra-language-french/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ const frenchMessages: TranslationMessages = {
"Certains changements n'ont pas été enregistrés. Êtes-vous sûr(e) de vouloir quitter cette page ?",
},
navigation: {
clear_filters: 'Effacer les filtres.',
no_filtred_results:
clear_filters: 'Effacer les filtres',
no_filtered_results:
'Aucun résultat trouvé avec les filtres actuels.',
no_results: 'Aucun résultat',
no_more_results:
Expand Down
17 changes: 17 additions & 0 deletions packages/ra-ui-materialui/src/list/ListNoResults.spec.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import * as React from 'react';
import { render, screen } from '@testing-library/react';
import { NoFilter, WithFilter } from './ListNoResults.stories';

describe('List?oResults', () => {
it('should display no results found message when no filter', async () => {
render(<NoFilter />);
await screen.findByText('No results found.');
});

it('should display no results found message and a clear filter link when there is a filter', async () => {
render(<WithFilter />);
await screen.findByText('No results found with the current filters.');
screen.getByText('Clear filters').click();
await screen.findByText('{"id":1}');
});
});
33 changes: 33 additions & 0 deletions packages/ra-ui-materialui/src/list/ListNoResults.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import * as React from 'react';
import { useList, ListContextProvider } from 'ra-core';
import { ListNoResults } from './ListNoResults';

export default {
title: 'ra-ui-materialui/list/ListNoResults',
};

export const NoFilter = () => {
const context = useList<any>({ data: [] });
return (
<ListContextProvider value={context}>
{context.data?.length === 0 && <ListNoResults />}
</ListContextProvider>
);
};

export const WithFilter = () => {
const context = useList<any>({ data: [{ id: 1 }], filter: { id: 2 } });
return (
<ListContextProvider value={context}>
{context.data?.length === 0 ? (
<ListNoResults />
) : (
<ul>
{context.data?.map(record => (
<li key={record.id}>{JSON.stringify(record)}</li>
))}
</ul>
)}
</ListContextProvider>
);
};
33 changes: 18 additions & 15 deletions packages/ra-ui-materialui/src/list/ListNoResults.tsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
import * as React from 'react';
import { memo } from 'react';
import CardContent from '@mui/material/CardContent';
import Typography from '@mui/material/Typography';
import { useListController, useResourceContext, useTranslate } from 'ra-core';
import { Link } from '@mui/material';
import { CardContent, Typography } from '@mui/material';
import { useListContext, useResourceContext, useTranslate } from 'ra-core';

export const ListNoResults = memo(() => {
import { Button } from '../button';

export const ListNoResults = () => {
const translate = useTranslate();
const resource = useResourceContext();
const { filterValues, setFilters } = useListController({ resource });
const { filterValues, setFilters } = useListContext();
return (
<CardContent>
<Typography variant="body2">
{filterValues && Object.keys(filterValues).length > 0 ? (
<>
{translate('ra.navigation.no_filtred_results', {
{translate('ra.navigation.no_filtered_results', {
resource,
_: 'No results found with the current filters.',
})}{' '}
<Link
component="button"
<Button
onClick={() => setFilters({}, [])}
>
{translate('ra.navigation.clear_filters')}
</Link>
label={translate('ra.navigation.clear_filters', {
_: 'Clear filters',
})}
/>
</>
) : (
translate('ra.navigation.no_results', { resource })
translate('ra.navigation.no_results', {
resource,
_: 'No results found.',
})
)}
</Typography>
</CardContent>
);
});
};

0 comments on commit 199fbae

Please sign in to comment.