UNPKG

@audira/carbon-react-native

Version:

Build React Native apps with component and shared patterns using Carbon

52 lines (51 loc) 1.56 kB
"use strict"; import { forwardRef, useCallback, useContext, useImperativeHandle, useRef } from 'react'; import { RadioButton } from "../radio-button/index.js"; import { ItemContext } from "./_item-context.js"; import { jsx as _jsx } from "react/jsx-runtime"; export const Item = /*#__PURE__*/forwardRef(function Item({ value: valueProp, onPress, ...props }, forwardedRef) { const { controlled, value, setValue, setOnChangeGroupEffect, onChangeGroup } = useContext(ItemContext), radioButtonRef = useRef(null), pressHandler = useCallback(event => { onPress?.(event); if (!controlled) { setOnChangeGroupEffect?.(true); setValue?.(valueProp); } else { onChangeGroup?.(valueProp); } }, [controlled, valueProp, setValue, setOnChangeGroupEffect, onChangeGroup, onPress]); useImperativeHandle(forwardedRef, () => { return Object.assign(radioButtonRef.current ?? {}, { setChecked(checkedParam) { if (!controlled) { let checked; if (typeof checkedParam === 'boolean') { checked = checkedParam; } else { checked = checkedParam(!!radioButtonRef.current?.checked); } setValue?.(checked ? valueProp : undefined); } } }); }, [controlled, valueProp, setValue]); return /*#__PURE__*/_jsx(RadioButton, { ...props, value: value, checked: value === valueProp, onPress: pressHandler, ref: radioButtonRef }); }); //# sourceMappingURL=_Item.js.map