diff --git a/packages/radio-group/src/Component.tsx b/packages/radio-group/src/Component.tsx index e6341ed1ad..ced49340e7 100644 --- a/packages/radio-group/src/Component.tsx +++ b/packages/radio-group/src/Component.tsx @@ -134,7 +134,7 @@ export const RadioGroup = forwardRef( }; const clone = cloneElement(child, { - onClick: handleChange, + onChange: handleChange, disabled, ...child.props, checked, diff --git a/packages/tag/src/Component.tsx b/packages/tag/src/Component.tsx index 121cb4ea15..c9833f2b75 100644 --- a/packages/tag/src/Component.tsx +++ b/packages/tag/src/Component.tsx @@ -51,6 +51,17 @@ export type TagProps = Omit & { }, ) => void; + /** + * Обработчик переключения + */ + onChange?: ( + event?: Event, + payload?: { + checked: boolean; + name?: string; + }, + ) => void; + /** * Набор цветов для компонента */ @@ -69,6 +80,8 @@ export const Tag = forwardRef( dataTestId, name, colors = 'default', + value, + onChange, onClick, ...restProps }, @@ -97,8 +110,22 @@ export const Tag = forwardRef( }; const handleClick = (event: React.MouseEvent) => { + const payload = { name, checked: !checked }; + if (onClick) { - onClick(event, { name, checked: !checked }); + onClick(event, payload); + } + + if (onChange) { + const input = document.createElement('input'); + + if (typeof checked !== 'undefined') input.checked = payload.checked; + if (typeof value !== 'undefined') input.value = value.toString(); + + input.onchange = e => onChange(e, payload); + + const changeEvent = new Event('change'); + input.dispatchEvent(changeEvent); } };