-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(form): radio input with radio group component
- Loading branch information
1 parent
8e4fdc1
commit 944db6b
Showing
8 changed files
with
196 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
packages/core/src/modules/form/src/components/fields/radio/radio.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { FC } from 'react'; | ||
|
||
import { FormControlLabel, Radio as MuiRadio } from '@mui/material'; | ||
|
||
import { RadioProps } from './radio.types'; | ||
|
||
import useRadio from './useRadio'; | ||
|
||
const Radio: FC<RadioProps> = (props) => { | ||
const { getFormControlLabelProps, getRadioInputProps } = useRadio(props); | ||
|
||
return ( | ||
<FormControlLabel | ||
{...getFormControlLabelProps()} | ||
control={<MuiRadio {...getRadioInputProps()} />} | ||
/> | ||
); | ||
}; | ||
|
||
export default Radio; |
27 changes: 27 additions & 0 deletions
27
packages/core/src/modules/form/src/components/fields/radio/radio.types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import { | ||
FormControlLabelProps, | ||
RadioGroupProps as MuiRadioGroupProps, | ||
RadioProps as MuiRadioProps, | ||
} from '@mui/material'; | ||
|
||
import { Api } from '@mui-builder/types/api.types'; | ||
import { Script } from '@mui-builder/types/script.types'; | ||
|
||
import { Dependesies, FormId, Id } from '../../../types/public.types'; | ||
import { Rule } from '../../../types/validation.types'; | ||
|
||
export type RadioProps = Omit<FormControlLabelProps, 'control'> & { | ||
radioInputProps?: MuiRadioProps; | ||
}; | ||
|
||
export type RadioGroupProps = MuiRadioGroupProps & { | ||
id: Id; | ||
formId: FormId; | ||
script?: Script; | ||
dependesies?: Dependesies; | ||
propsController?: Record<string, any>; | ||
api?: Api; | ||
rule?: Rule; | ||
show?: boolean; | ||
radioInputsList: RadioProps[]; | ||
}; |
22 changes: 22 additions & 0 deletions
22
packages/core/src/modules/form/src/components/fields/radio/radioGroup.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
import { FC } from 'react'; | ||
|
||
import { RadioGroup as MuiRadioGroup } from '@mui/material'; | ||
|
||
import { RadioGroupProps } from './radio.types'; | ||
|
||
import Radio from './radio'; | ||
import useRadioGroup from './useRadioGroup'; | ||
|
||
const RadioGroup: FC<RadioGroupProps> = (props) => { | ||
const { getRadioGroupProps, radioInputsList } = useRadioGroup(props); | ||
|
||
return ( | ||
<MuiRadioGroup {...getRadioGroupProps()}> | ||
{radioInputsList.map((radio) => ( | ||
<Radio key={radio.id} {...radio} /> | ||
))} | ||
</MuiRadioGroup> | ||
); | ||
}; | ||
|
||
export default RadioGroup; |
13 changes: 13 additions & 0 deletions
13
packages/core/src/modules/form/src/components/fields/radio/useRadio.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import { RadioProps } from './radio.types'; | ||
|
||
const useRadio = (props: RadioProps) => { | ||
const { radioInputProps, ...restRadioProps } = props; | ||
|
||
const getRadioInputProps = () => ({ ...radioInputProps }); | ||
|
||
const getFormControlLabelProps = () => ({ ...restRadioProps }); | ||
|
||
return { getRadioInputProps, getFormControlLabelProps }; | ||
}; | ||
|
||
export default useRadio; |
84 changes: 84 additions & 0 deletions
84
packages/core/src/modules/form/src/components/fields/radio/useRadioGroup.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
import { useController, useWatch } from 'react-hook-form'; | ||
|
||
import useQueryBuilder from '@mui-builder/utils/useQueryBuilder/useQueryBuilder'; | ||
import UseScript from '@mui-builder/utils/useScript/useScript'; | ||
|
||
import axios from 'axios'; | ||
|
||
import { RadioGroupProps } from './radio.types'; | ||
|
||
import useForms from '../../../hooks/useForms/useForms'; | ||
import usePropsController from '../../../hooks/usePropsController/usePropsController'; | ||
import useRule from '../../../hooks/useRule/useRule'; | ||
|
||
const useRadioGroup = (props: RadioGroupProps) => { | ||
const { | ||
id, | ||
api, | ||
script, | ||
formId, | ||
show = true, | ||
dependesies, | ||
defaultValue, | ||
radioInputsList, | ||
...restRadioGroupProps | ||
} = props; | ||
|
||
const { configs, queries } = api || {}; | ||
|
||
const { forms } = useForms(); | ||
const formMethod = forms?.[formId]; | ||
|
||
const { setProps, propsController } = usePropsController(); | ||
const newProps = propsController?.[id] || {}; | ||
|
||
useQueryBuilder({ | ||
apiInstance: axios, | ||
apiConfigs: configs ?? {}, | ||
apiQuery: queries ?? {}, | ||
formMethod, | ||
formId, | ||
forms, | ||
}); | ||
|
||
// Handle Wtach Fields | ||
useWatch({ | ||
control: formMethod.control, | ||
name: dependesies ?? [], | ||
}); | ||
|
||
// Controller | ||
const { | ||
field, | ||
formState: { errors }, | ||
} = useController({ | ||
name: id, | ||
control: formMethod.control, | ||
// disabled: restRadioGroupProps.disabled, | ||
rules: useRule(restRadioGroupProps?.rule), | ||
defaultValue, | ||
}); | ||
|
||
const error = errors?.[id]; | ||
|
||
// Handle Script | ||
const { scriptResult } = UseScript({ | ||
script, | ||
formMethod, | ||
forms, | ||
formId, | ||
setProps, | ||
}); | ||
|
||
const getRadioGroupProps = () => ({ | ||
...field, | ||
...restRadioGroupProps, | ||
error, | ||
...scriptResult, | ||
...newProps, | ||
}); | ||
|
||
return { getRadioGroupProps, radioInputsList }; | ||
}; | ||
|
||
export default useRadioGroup; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters