Skip to content

Commit 635b920

Browse files
committed
reproduce StackFilters issue
1 parent 0466f7d commit 635b920

File tree

1 file changed

+96
-2
lines changed

1 file changed

+96
-2
lines changed

packages/ra-ui-materialui/src/form/FormDataConsumer.stories.tsx

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
import * as React from 'react';
2-
import { FormDataConsumer, required, ResourceContextProvider } from 'ra-core';
2+
import {
3+
FilterLiveForm,
4+
FormDataConsumer,
5+
required,
6+
ResourceContextProvider,
7+
useListContext,
8+
} from 'ra-core';
39
import fakeRestDataProvider from 'ra-data-fakerest';
410
import { AdminContext } from '../AdminContext';
5-
import { AutocompleteInput, ReferenceInput, TextInput } from '../input';
11+
import {
12+
ArrayInput,
13+
AutocompleteInput,
14+
ReferenceInput,
15+
SelectInput,
16+
SimpleFormIterator,
17+
TextInput,
18+
} from '../input';
619
import { SimpleForm } from './SimpleForm';
720
import { Create } from '../detail';
21+
import { Datagrid, List } from '../list';
22+
import { TextField } from '../field';
823

924
// We keep this test in ra-ui-materialui because we need heavy components to reproduce the issue https://github.com/marmelab/react-admin/issues/10415
1025
export default { title: 'ra-core/form/FormDataConsumer' };
@@ -49,6 +64,85 @@ export const Basic = () => (
4964
</AdminContext>
5065
);
5166

67+
const config = {
68+
name: {
69+
operators: [
70+
{ id: 'eq', name: 'Equals' },
71+
{ id: 'ne', name: 'Not equals' },
72+
],
73+
},
74+
id: {
75+
operators: [
76+
{ id: 'eq', name: 'Equals' },
77+
{ id: 'ne', name: 'Not equals' },
78+
],
79+
},
80+
};
81+
82+
const StackedFiltersForm = () => (
83+
<FilterLiveForm>
84+
<ArrayInput source="filters">
85+
<SimpleFormIterator inline disableReordering disableClear>
86+
<AutocompleteInput
87+
source="source"
88+
choices={[
89+
{ id: 'name', name: 'Name' },
90+
{ id: 'id', name: 'Id' },
91+
]}
92+
/>
93+
<FormDataConsumer>
94+
{({ scopedFormData }) => {
95+
if (!scopedFormData) return null;
96+
const source = scopedFormData.source;
97+
const operators = config[source]?.operators ?? [];
98+
return (
99+
<SelectInput
100+
source="operator"
101+
choices={operators}
102+
disabled={!operators.length}
103+
/>
104+
);
105+
}}
106+
</FormDataConsumer>
107+
<FormDataConsumer>
108+
{({ scopedFormData }) => {
109+
if (!scopedFormData) return null;
110+
const source = scopedFormData.source;
111+
const operators = config[source]?.operators ?? [];
112+
return (
113+
<TextInput
114+
helperText={false}
115+
source="value"
116+
disabled={!operators.length}
117+
/>
118+
);
119+
}}
120+
</FormDataConsumer>
121+
</SimpleFormIterator>
122+
</ArrayInput>
123+
</FilterLiveForm>
124+
);
125+
126+
const FiltersDebugger = () => {
127+
const { filterValues } = useListContext();
128+
return <pre>{JSON.stringify(filterValues, null, 2)}</pre>;
129+
};
130+
131+
export const StackedFilters = () => (
132+
<AdminContext dataProvider={dataProvider}>
133+
<ResourceContextProvider value="users">
134+
<List>
135+
<StackedFiltersForm />
136+
<FiltersDebugger />
137+
<Datagrid>
138+
<TextField source="id" />
139+
<TextField source="name" />
140+
</Datagrid>
141+
</List>
142+
</ResourceContextProvider>
143+
</AdminContext>
144+
);
145+
52146
const dataProvider = fakeRestDataProvider({
53147
users: [
54148
{

0 commit comments

Comments
 (0)