Skip to content

Commit 49733fd

Browse files
committed
fix(mui): use mui select instead of react select
1 parent 74a959d commit 49733fd

File tree

10 files changed

+342
-527
lines changed

10 files changed

+342
-527
lines changed

packages/common/babel.config.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,25 @@ const createSuirCJSTransform = (env = 'commonjs') => [
5858
`semantic-ui-react-${env}`
5959
];
6060

61+
const createMuiLabTransform = (env) => [
62+
'transform-imports',
63+
{
64+
'@material-ui/lab': {
65+
transform: (importName) => (env ? `@material-ui/lab/${env}/${importName}` : `@material-ui/lab/${importName}`),
66+
preventFullImport: false,
67+
skipDefaultConversion: false
68+
}
69+
},
70+
`MUI-LAB-${env || 'CJS'}`
71+
];
72+
6173
module.exports = {
6274
extends: '../../babel.config.js',
6375
env: {
6476
cjs: {
6577
plugins: [
6678
createSuirCJSTransform('commonjs'),
79+
createMuiLabTransform(),
6780
[
6881
'transform-imports',
6982
{
@@ -155,6 +168,7 @@ module.exports = {
155168
esm: {
156169
plugins: [
157170
createSuirCJSTransform('es'),
171+
createMuiLabTransform('esm'),
158172
[
159173
'transform-imports',
160174
{

packages/common/src/select/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ const Select = ({
101101
{...props}
102102
classNamePrefix={classNamePrefix}
103103
isDisabled={true}
104+
isFetching={true}
104105
placeholder={loadingMessage}
105106
options={state.options}
106107
onChange={() => {}}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Parses internal select value based on isMulti attribute
3+
* @param {Array} value value of the ddf internal select implementaion
4+
* @param {Boolean} isMulti if true, select is multi value
5+
* @returns {Array|String|Number|Boolean|Object|undefined|null}
6+
*/
7+
const parseInternalValue = (value, isMulti = false) => {
8+
let internalValue = value;
9+
if (isMulti && Array.isArray(internalValue)) {
10+
internalValue = value.map((item) => (typeof item === 'object' ? item.value : item));
11+
}
12+
13+
if (!isMulti && Array.isArray(internalValue) && internalValue[0]) {
14+
internalValue = typeof internalValue[0] === 'object' ? internalValue[0].value : internalValue[0];
15+
}
16+
17+
if (!isMulti && Array.isArray(internalValue) && !internalValue[0]) {
18+
internalValue = undefined;
19+
}
20+
21+
return internalValue;
22+
};
23+
24+
export default parseInternalValue;

packages/mui-component-mapper/demo/index.js

Lines changed: 120 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import fieldArraySchema from './demo-schemas/field-array-schema';
1212

1313
import Button from '@material-ui/core/Button';
1414
import wizardSchema from './demo-schemas/wizard-schema';
15+
import validatorTypes from '@data-driven-forms/react-form-renderer/dist/cjs/validator-types';
1516

1617
const theme = createMuiTheme({
1718
typography: {
@@ -29,6 +30,117 @@ const compositeMapper = {
2930
}
3031
};
3132

33+
const options = [
34+
{
35+
label: 'One',
36+
value: 1
37+
},
38+
{
39+
label: 'Two',
40+
value: 2
41+
},
42+
{
43+
label: 'Three',
44+
value: 3
45+
},
46+
{
47+
label: 'Four',
48+
value: 4
49+
},
50+
{
51+
label: 'Five',
52+
value: 5
53+
},
54+
{
55+
label: 'Six',
56+
value: 6
57+
},
58+
{
59+
label: 'Seven',
60+
value: 7
61+
},
62+
{
63+
label: 'Eight',
64+
value: 8
65+
},
66+
{
67+
label: 'Nine',
68+
value: 9
69+
},
70+
{
71+
label: 'Ten',
72+
value: 10
73+
}
74+
];
75+
76+
const loadOptions = (filter) =>
77+
new Promise((res) =>
78+
setTimeout(() => {
79+
console.log('filter', filter);
80+
if (filter && filter.length > 0) {
81+
return res(options.filter(({ label }) => label.toLocaleLowerCase().includes(filter.toLocaleLowerCase())));
82+
}
83+
84+
return res(options.slice(0, 3));
85+
}, 1500)
86+
);
87+
88+
const selectSchema = {
89+
fields: [
90+
{
91+
name: 'searchable-async-select',
92+
component: componentTypes.SELECT,
93+
label: 'Searchable async select',
94+
loadOptions,
95+
isSearchable: true,
96+
isRequired: true,
97+
validate: [{ type: validatorTypes.REQUIRED }],
98+
closeMenuOnSelect: false
99+
},
100+
{
101+
name: 'default-select',
102+
component: componentTypes.SELECT,
103+
label: 'Default select',
104+
options,
105+
placeholder: 'Select'
106+
},
107+
{
108+
name: 'disabled-select',
109+
component: componentTypes.SELECT,
110+
label: 'Disabled select',
111+
options,
112+
isDisabled: true
113+
},
114+
{
115+
name: 'clearable-select',
116+
component: componentTypes.SELECT,
117+
label: 'Clearable select',
118+
options,
119+
isClearable: true
120+
},
121+
{
122+
name: 'multi-select',
123+
component: componentTypes.SELECT,
124+
label: 'Multi select',
125+
options,
126+
isMulti: true
127+
},
128+
{
129+
name: 'searchable-select',
130+
component: componentTypes.SELECT,
131+
label: 'Searchable select',
132+
options,
133+
isSearchable: true
134+
},
135+
{
136+
name: 'async-select',
137+
component: componentTypes.SELECT,
138+
label: 'Async select',
139+
loadOptions
140+
}
141+
]
142+
};
143+
32144
const App = () => {
33145
const [schema, setSchema] = useState(wizardSchema);
34146

@@ -42,16 +154,15 @@ const App = () => {
42154
<Button onClick={() => setSchema(demoSchema)}>Demo schema</Button>
43155
<Button onClick={() => setSchema(fieldArraySchema)}>Field array</Button>
44156
<Button onClick={() => setSchema(wizardSchema)}>Wizard</Button>
157+
<Button onClick={() => setSchema(selectSchema)}>Select</Button>
45158
</Grid>
46-
<Grid item xs={12}>
47-
<FormRenderer
48-
onSubmit={console.log}
49-
componentMapper={compositeMapper}
50-
FormTemplate={(props) => <FormTemplate {...props} />}
51-
schema={schema}
52-
onCancel={() => console.log('canceling')}
53-
/>
54-
</Grid>
159+
<FormRenderer
160+
onSubmit={console.log}
161+
componentMapper={compositeMapper}
162+
FormTemplate={(props) => <FormTemplate {...props} />}
163+
schema={schema}
164+
onCancel={() => console.log('canceling')}
165+
/>
55166
</Grid>
56167
</ThemeProvider>
57168
);

packages/mui-component-mapper/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,11 @@
7171
"dependencies": {
7272
"@date-io/date-fns": "^1.0.1",
7373
"@date-io/moment": "^1.0.1",
74-
"classnames": "^2.2.6",
7574
"clsx": "^1.0.4",
7675
"date-fns": "^1.30.1",
7776
"material-ui-pickers": "^2.2.4",
7877
"moment": "^2.23.0",
79-
"react-select": "^2.2.0"
78+
"@material-ui/lab": "^4.0.0-alpha.53"
8079
},
8180
"postpublish": "export RELEASE_DEMO=true"
8281
}

0 commit comments

Comments
 (0)