From 65b8da2210a12bb73e9881b02b50e9d9a542ef0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Suwi=C5=84ski?= Date: Wed, 21 May 2025 12:40:30 +0200 Subject: [PATCH 1/5] ListGuesserProps extends with UseResourceDefinitionOptions to fix missing props --- src/list/ListGuesser.spec.tsx | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/list/ListGuesser.spec.tsx diff --git a/src/list/ListGuesser.spec.tsx b/src/list/ListGuesser.spec.tsx new file mode 100644 index 00000000..bf9e3253 --- /dev/null +++ b/src/list/ListGuesser.spec.tsx @@ -0,0 +1,61 @@ +import * as React from 'react'; +import { Resource } from '@api-platform/api-doc-parser'; +import { render } from '@testing-library/react'; +import { AdminContext } from 'react-admin'; +import type { GetListResult, GetManyResult } from 'react-admin'; +import ListGuesser from './ListGuesser'; +import SchemaAnalyzerContext from '../introspection/SchemaAnalyzerContext.js'; +import schemaAnalyzer from '../hydra/schemaAnalyzer.js'; +import type { + ApiPlatformAdminDataProvider, + ApiPlatformAdminRecord, +} from '../types.js'; +import { API_FIELDS_DATA } from '../__fixtures__/parsedData.js'; + +const dataProvider: ApiPlatformAdminDataProvider = { + getList: () => + Promise.resolve({ data: [], total: 0 } as GetListResult), + getMany: () => + Promise.resolve({ data: [] } as GetManyResult), + getManyReference: () => + Promise.resolve({ data: [], total: 0 } as GetManyResult), + update: () => + Promise.resolve({ data: { id: 'id' } } as { data: RecordType }), + updateMany: () => Promise.resolve({ data: [] }), + create: () => + Promise.resolve({ data: { id: 'id' } } as { data: RecordType }), + delete: () => + Promise.resolve({ data: { id: 'id' } } as { data: RecordType }), + deleteMany: () => Promise.resolve({ data: [] }), + getOne: () => + Promise.resolve({ data: { id: 'id' } } as { data: RecordType }), + introspect: () => + Promise.resolve({ + data: { + entrypoint: 'entrypoint', + resources: [ + new Resource('books', '/books', { + fields: API_FIELDS_DATA, + readableFields: API_FIELDS_DATA, + writableFields: API_FIELDS_DATA, + parameters: [], + }), + ], + }, + }), + subscribe: () => Promise.resolve({ data: null }), + unsubscribe: () => Promise.resolve({ data: null }), +}; + +// eslint-disable-next-line tree-shaking/no-side-effects-in-initialization +describe('ListGuesser', () => { + it('passing hasEdit and hasShow props are allowed', async () => { + render( + + + + + , + ); + }); +}); From ac626372482e81ce072b83ca9d1a6c1dd632fc12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Suwi=C5=84ski?= Date: Mon, 25 May 2026 11:58:44 +0200 Subject: [PATCH 2/5] ListGuesser - passing list empty prop --- src/list/ListGuesser.spec.tsx | 16 ++++++++++++++++ src/list/ListGuesser.tsx | 3 ++- src/types.ts | 4 +++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/list/ListGuesser.spec.tsx b/src/list/ListGuesser.spec.tsx index bf9e3253..6ab83db2 100644 --- a/src/list/ListGuesser.spec.tsx +++ b/src/list/ListGuesser.spec.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { Resource } from '@api-platform/api-doc-parser'; import { render } from '@testing-library/react'; +import '@testing-library/jest-dom'; import { AdminContext } from 'react-admin'; import type { GetListResult, GetManyResult } from 'react-admin'; import ListGuesser from './ListGuesser'; @@ -58,4 +59,19 @@ describe('ListGuesser', () => { , ); }); + + it('renders datagrid empty on empty data and no filters', async () => { + const { findByText } = render( + + + No results} + /> + + , + ); + expect(await findByText('No results')).toBeInTheDocument(); + }); }); diff --git a/src/list/ListGuesser.tsx b/src/list/ListGuesser.tsx index 64a67602..04923384 100644 --- a/src/list/ListGuesser.tsx +++ b/src/list/ListGuesser.tsx @@ -75,6 +75,7 @@ export const IntrospectedListGuesser = ({ isRowExpandable, body = DatagridBodyWithMercure, header, + listEmpty, empty, hover, expand, @@ -119,7 +120,7 @@ export const IntrospectedListGuesser = ({ } return ( - + , - 'children' + 'children' | 'empty' > & { datagridSx?: SxProps; + listEmpty?: ListProps['empty']; + empty?: DatagridProps['empty']; children?: ReactNode; }; From ead6ce66fa9640da90c6864bd8fdbf3b599eeced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Suwi=C5=84ski?= Date: Mon, 25 May 2026 12:32:08 +0200 Subject: [PATCH 3/5] removing dropped test --- src/list/ListGuesser.spec.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/list/ListGuesser.spec.tsx b/src/list/ListGuesser.spec.tsx index 6ab83db2..64c061dc 100644 --- a/src/list/ListGuesser.spec.tsx +++ b/src/list/ListGuesser.spec.tsx @@ -50,16 +50,6 @@ const dataProvider: ApiPlatformAdminDataProvider = { // eslint-disable-next-line tree-shaking/no-side-effects-in-initialization describe('ListGuesser', () => { - it('passing hasEdit and hasShow props are allowed', async () => { - render( - - - - - , - ); - }); - it('renders datagrid empty on empty data and no filters', async () => { const { findByText } = render( From dd9ebb5a3cdeb6b745311e91de96a842906d82eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Suwi=C5=84ski?= Date: Mon, 25 May 2026 12:34:05 +0200 Subject: [PATCH 4/5] redundant eslint ignore --- src/list/ListGuesser.spec.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/list/ListGuesser.spec.tsx b/src/list/ListGuesser.spec.tsx index 64c061dc..becc5a24 100644 --- a/src/list/ListGuesser.spec.tsx +++ b/src/list/ListGuesser.spec.tsx @@ -48,7 +48,6 @@ const dataProvider: ApiPlatformAdminDataProvider = { unsubscribe: () => Promise.resolve({ data: null }), }; -// eslint-disable-next-line tree-shaking/no-side-effects-in-initialization describe('ListGuesser', () => { it('renders datagrid empty on empty data and no filters', async () => { const { findByText } = render( From d78dea871468c8439773a9157432038c4b45422a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Suwi=C5=84ski?= Date: Mon, 25 May 2026 12:42:44 +0200 Subject: [PATCH 5/5] ignore eslint tree-shaking/no-side-effects-in-initialization --- src/list/ListGuesser.spec.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/list/ListGuesser.spec.tsx b/src/list/ListGuesser.spec.tsx index becc5a24..64c061dc 100644 --- a/src/list/ListGuesser.spec.tsx +++ b/src/list/ListGuesser.spec.tsx @@ -48,6 +48,7 @@ const dataProvider: ApiPlatformAdminDataProvider = { unsubscribe: () => Promise.resolve({ data: null }), }; +// eslint-disable-next-line tree-shaking/no-side-effects-in-initialization describe('ListGuesser', () => { it('renders datagrid empty on empty data and no filters', async () => { const { findByText } = render(