@atlaskit/dropdown-menu
Version:
A dropdown menu displays a list of actions or options to a user.
62 lines (61 loc) • 2.64 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.SelectionStoreContext = void 0;
var _react = _interopRequireWildcard(require("react"));
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/**
*
* SelectionStoreContext maintains the state of the selected items
* and getter setters.
*
*/
var SelectionStoreContext = exports.SelectionStoreContext = /*#__PURE__*/(0, _react.createContext)({
setItemState: _noop.default,
getItemState: function getItemState() {
return undefined;
},
setGroupState: _noop.default,
getGroupState: function getGroupState() {
return {};
}
});
/**
* Selection store will persist data as long as it remains mounted.
* It handles the uncontrolled story for dropdown menu when the menu
* items can be mounted/unmounted depending if the menu is open or closed.
*/
var SelectionStore = function SelectionStore(props) {
var children = props.children;
var store = (0, _react.useRef)({});
var context = (0, _react.useMemo)(function () {
return {
setItemState: function setItemState(group, id, value) {
if (!store.current[group]) {
store.current[group] = {};
}
store.current[group][id] = value;
},
getItemState: function getItemState(group, id) {
if (!store.current[group]) {
return undefined;
}
return store.current[group][id];
},
setGroupState: function setGroupState(group, value) {
store.current[group] = value;
},
getGroupState: function getGroupState(group) {
return store.current[group] || {};
}
};
}, []);
return /*#__PURE__*/_react.default.createElement(SelectionStoreContext.Provider, {
value: context
}, children);
};
var _default = exports.default = SelectionStore;