UNPKG

@atlaskit/dropdown-menu

Version:

A dropdown menu displays a list of actions or options to a user.

69 lines (66 loc) 3.56 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _dropdownItemRadioGroup = require("../../radio/dropdown-item-radio-group"); var _selectionStore = require("../context/selection-store"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function useRadioState(_ref) { var id = _ref.id, isSelected = _ref.isSelected, defaultSelected = _ref.defaultSelected; var _useContext = (0, _react.useContext)(_selectionStore.SelectionStoreContext), setGroupState = _useContext.setGroupState, getGroupState = _useContext.getGroupState; var _useContext2 = (0, _react.useContext)(_dropdownItemRadioGroup.RadioGroupContext), group = _useContext2.id, radioGroupState = _useContext2.radioGroupState, selectRadioItem = _useContext2.selectRadioItem; var persistedIsSelected = radioGroupState[id]; var _useState = (0, _react.useState)(function () { return persistedIsSelected !== undefined ? persistedIsSelected : defaultSelected || false; }), _useState2 = (0, _slicedToArray2.default)(_useState, 2), localIsSelected = _useState2[0], setLocalIsSelected = _useState2[1]; var setLocalState = (0, _react.useCallback)(function (newValue) { if (!persistedIsSelected) { var nextValue = newValue(persistedIsSelected); selectRadioItem(id, nextValue); setLocalIsSelected(nextValue); } }, [persistedIsSelected, id, selectRadioItem]); /** * - radio state changes any time a radio child is changed * - when it changes we want all radio buttons to update their local state * - it takes the value from radio group state and applies it locally if it exists which it will only exist, if it is selected */ (0, _react.useEffect)(function () { setLocalIsSelected(function () { var existing = radioGroupState[id]; return existing !== undefined ? existing : defaultSelected || false; }); }, [radioGroupState, group, id, defaultSelected]); if (typeof isSelected === 'boolean') { return [isSelected, function () { return false; }]; } /** * Set the initial state of the context provider's store, * if it doesn't already have a persisted value for this id. */ if (persistedIsSelected === undefined) { var existing = getGroupState(group); var newGroupState = _objectSpread(_objectSpread({}, existing), {}, (0, _defineProperty2.default)({}, id, defaultSelected || false)); setGroupState(group, newGroupState); } return [localIsSelected, setLocalState]; } var _default = exports.default = useRadioState;