@braineet/ui
Version:
Braineet design system
115 lines (114 loc) • 4.42 kB
JavaScript
;
exports.__esModule = true;
exports.useAccordionItem = exports.useAccordion = exports.AccordionProvider = exports.AccordionItemProvider = exports.AccordionItemContext = exports.AccordionContext = void 0;
var _react = _interopRequireDefault(require("react"));
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["index", "allowMultiple"],
_excluded2 = ["index", "label"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var AccordionContext = /*#__PURE__*/_react.default.createContext({});
exports.AccordionContext = AccordionContext;
var AccordionItemContext = /*#__PURE__*/_react.default.createContext({});
exports.AccordionItemContext = AccordionItemContext;
var initialState = function initialState(p) {
if (p.allowMultiple) {
if (Array.isArray(p.index)) {
return p.index ? [].concat(p.index) : [];
}
return p.index !== undefined ? [p.index] : [];
}
if (Array.isArray(p.index)) {
return;
}
return p.index;
};
var AccordionProvider = function AccordionProvider(_ref) {
var index = _ref.index,
allowMultiple = _ref.allowMultiple,
restProps = _objectWithoutPropertiesLoose(_ref, _excluded);
var _React$useState = _react.default.useState(function () {
return initialState({
allowMultiple: allowMultiple,
index: index
});
}),
indexes = _React$useState[0],
setIndexes = _React$useState[1];
_react.default.useEffect(function () {
setIndexes(initialState({
allowMultiple: allowMultiple,
index: index
}));
}, [allowMultiple]);
_react.default.useEffect(function () {
if (index !== undefined || index !== null) {
setIndexes(initialState({
allowMultiple: allowMultiple,
index: index
}));
}
}, [index]);
var setIndex = function setIndex(i) {
setIndexes(function (curr) {
if (allowMultiple) {
if (!curr.some(function (ind) {
return ind === i;
})) {
return [].concat(curr, [i]);
}
return curr.filter(function (ind) {
return ind !== i;
});
}
return curr === i ? 0 : i;
});
};
var ctx = _react.default.useMemo(function () {
return {
indexes: indexes,
setIndex: setIndex,
allowMultiple: allowMultiple
};
}, [allowMultiple, indexes]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionContext.Provider, _extends({
value: ctx
}, restProps));
};
exports.AccordionProvider = AccordionProvider;
var useAccordion = function useAccordion() {
var context = _react.default.useContext(AccordionContext);
if (context === undefined) {
throw new Error('Besoin de context AccordionContext');
}
return context;
};
exports.useAccordion = useAccordion;
var AccordionItemProvider = function AccordionItemProvider(_ref2) {
var index = _ref2.index,
label = _ref2.label,
restProps = _objectWithoutPropertiesLoose(_ref2, _excluded2);
var _useAccordion = useAccordion(),
indexes = _useAccordion.indexes,
allowMultiple = _useAccordion.allowMultiple;
var ctx = _react.default.useMemo(function () {
return {
label: label,
index: index,
isExpanded: allowMultiple ? indexes.includes(index) : indexes === index
};
}, [indexes, index]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionItemContext.Provider, _extends({
value: ctx
}, restProps));
};
exports.AccordionItemProvider = AccordionItemProvider;
var useAccordionItem = function useAccordionItem() {
var context = _react.default.useContext(AccordionItemContext);
if (context === undefined) {
throw new Error('Besoin de context AccordionItemContext');
}
return context;
};
exports.useAccordionItem = useAccordionItem;