Skip to content

Commit 614b302

Browse files
committed
useSupportCreateSuggestion story
1 parent f0483ea commit 614b302

File tree

1 file changed

+155
-0
lines changed

1 file changed

+155
-0
lines changed
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import * as React from 'react';
2+
import {
3+
SupportCreateSuggestionOptions,
4+
useSupportCreateSuggestion,
5+
useCreateSuggestionContext,
6+
} from './useSupportCreateSuggestion';
7+
import { CreateBase } from '../create/CreateBase';
8+
import { SimpleForm, TextInput } from '../../test-ui';
9+
import { CoreAdminContext } from '../../core/CoreAdminContext';
10+
import { DataProvider } from '../../types';
11+
12+
export default { title: 'ra-core/controller/input/useSupportCreateSuggestion' };
13+
14+
const CreateElement = () => {
15+
const { filter, onCancel, onCreate } = useCreateSuggestionContext();
16+
17+
return (
18+
<CreateBase
19+
redirect={false}
20+
resource="authors"
21+
mutationOptions={{
22+
onSuccess: onCreate,
23+
}}
24+
>
25+
<SimpleForm defaultValues={{ foo: filter }}>
26+
<TextInput source="foo" />
27+
<TextInput source="bar" />
28+
<button type="button" onClick={onCancel}>
29+
Cancel
30+
</button>
31+
</SimpleForm>
32+
</CreateBase>
33+
);
34+
};
35+
36+
export const UseSupportCreateSuggestion = (
37+
options: Pick<
38+
SupportCreateSuggestionOptions,
39+
| 'createLabel'
40+
| 'createItemLabel'
41+
| 'createValue'
42+
| 'createHintValue'
43+
| 'optionText'
44+
> & { withCreateElement?: boolean }
45+
) => {
46+
const [value, setValue] = React.useState<string>('');
47+
const [filter, setFilter] = React.useState<string>('');
48+
const [createParams, setCreateParams] = React.useState<any>(null);
49+
const [onCreateParams, setOnCreateParams] = React.useState<any>(null);
50+
51+
const { withCreateElement, ...rest } = options;
52+
53+
const {
54+
createId,
55+
createHintId,
56+
getCreateItem,
57+
handleChange,
58+
createElement,
59+
getOptionDisabled,
60+
} = useSupportCreateSuggestion({
61+
filter,
62+
handleChange: eventOrValue => {
63+
setValue(eventOrValue?.target?.value ?? eventOrValue.id);
64+
},
65+
onCreate: withCreateElement
66+
? undefined
67+
: arg => {
68+
setOnCreateParams(arg);
69+
return { id: 'new_id_from_onCreate' };
70+
},
71+
create: withCreateElement ? <CreateElement /> : undefined,
72+
...rest,
73+
});
74+
75+
const createItem = getCreateItem(filter);
76+
const disabled = getOptionDisabled(createItem);
77+
78+
const dataProvider = {
79+
create: async (_, args) => {
80+
setCreateParams(args);
81+
return { data: { id: 'new_id_from_create' } };
82+
},
83+
} as unknown as DataProvider;
84+
85+
return (
86+
<CoreAdminContext dataProvider={dataProvider}>
87+
<fieldset>
88+
<legend>Return values</legend>
89+
<pre>{JSON.stringify({ createId, createHintId }, null, 2)}</pre>
90+
</fieldset>
91+
<fieldset>
92+
<legend>Create Item</legend>
93+
<pre>{JSON.stringify({ createItem, disabled }, null, 2)}</pre>
94+
</fieldset>
95+
<form>
96+
<fieldset>
97+
<legend>Inputs</legend>
98+
<label htmlFor="autocomplete-value">
99+
Autocomplete value
100+
</label>
101+
&nbsp;
102+
<input
103+
id="autocomplete-value"
104+
value={value || ''}
105+
onChange={handleChange}
106+
/>
107+
<button
108+
type="button"
109+
onClick={() => {
110+
handleChange(createItem.id);
111+
}}
112+
disabled={disabled}
113+
>
114+
Simulate click on create
115+
</button>
116+
<br />
117+
<label htmlFor="autocomplete-filter">
118+
Autocomplete filter
119+
</label>
120+
&nbsp;
121+
<input
122+
id="autocomplete-filter"
123+
value={filter || ''}
124+
onChange={e => setFilter(e.target.value)}
125+
/>
126+
</fieldset>
127+
</form>
128+
{withCreateElement ? (
129+
<>
130+
<fieldset>
131+
<legend>Create Element</legend>
132+
{createElement}
133+
</fieldset>
134+
<fieldset>
135+
<legend>Called create with</legend>
136+
<pre>{JSON.stringify(createParams, null, 2)}</pre>
137+
</fieldset>
138+
</>
139+
) : (
140+
<fieldset>
141+
<legend>Called onCreate with</legend>
142+
<pre>{JSON.stringify(onCreateParams, null, 2)}</pre>
143+
</fieldset>
144+
)}
145+
</CoreAdminContext>
146+
);
147+
};
148+
UseSupportCreateSuggestion.argTypes = {
149+
createLabel: { control: 'text' },
150+
createItemLabel: { control: 'text' },
151+
createValue: { control: 'text' },
152+
createHintValue: { control: 'text' },
153+
optionText: { control: 'text' },
154+
withCreateElement: { control: 'boolean' },
155+
};

0 commit comments

Comments
 (0)