@razorpay/blade
Version:
The Design System that powers Razorpay
70 lines (67 loc) • 2.75 kB
JavaScript
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import React__default from 'react';
import { jsx } from 'react/jsx-runtime';
var BottomSheetStackContext = /*#__PURE__*/React__default.createContext({
stack: [],
addBottomSheetToStack: function addBottomSheetToStack() {},
removeBottomSheetFromStack: function removeBottomSheetFromStack() {},
getTopOfTheStack: function getTopOfTheStack() {
return null;
},
getCurrentStackIndexById: function getCurrentStackIndexById() {
return -1;
}
});
var BottomSheetStackProvider = function BottomSheetStackProvider(_ref) {
var children = _ref.children;
var _React$useState = React__default.useState([]),
_React$useState2 = _slicedToArray(_React$useState, 2),
stack = _React$useState2[0],
setStack = _React$useState2[1];
var getTopOfTheStack = React__default.useCallback(function () {
return stack[0] || null;
}, [stack]);
var addBottomSheetToStack = React__default.useCallback(function (id) {
// id can be undefined since useId returns `undefined` on first render,
// if we push undefined to the stack the `removeBottomSheetFromStack` will break
// since it will try to match top of the stack with undefined
if (id === undefined) return;
setStack(function (prev) {
return [id].concat(_toConsumableArray(prev));
});
}, []);
var removeBottomSheetFromStack = React__default.useCallback(function (id) {
setStack(function (prev) {
var newStack = _toConsumableArray(prev);
var popped = newStack.shift();
// only pop the stack if the passed in id is matched to the top of the stack
if (popped === id) return newStack;
return newStack;
});
}, []);
var getCurrentStackIndexById = React__default.useCallback(function (id) {
return stack.findIndex(function (stackId) {
return stackId === id;
});
}, [stack]);
var value = React__default.useMemo(function () {
return {
stack: stack,
addBottomSheetToStack: addBottomSheetToStack,
removeBottomSheetFromStack: removeBottomSheetFromStack,
getTopOfTheStack: getTopOfTheStack,
getCurrentStackIndexById: getCurrentStackIndexById
};
}, [addBottomSheetToStack, getCurrentStackIndexById, getTopOfTheStack, removeBottomSheetFromStack, stack]);
return /*#__PURE__*/jsx(BottomSheetStackContext.Provider, {
value: value,
children: children
});
};
var useBottomSheetStack = function useBottomSheetStack() {
var context = React__default.useContext(BottomSheetStackContext);
return context;
};
export { BottomSheetStackProvider, useBottomSheetStack };
//# sourceMappingURL=BottomSheetStack.js.map