@braineet/ui
Version:
Braineet design system
110 lines (109 loc) • 4.17 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"];
/* eslint-disable react/prop-types */
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
var AccordionContext = exports.AccordionContext = /*#__PURE__*/_react.default.createContext({});
var AccordionItemContext = exports.AccordionItemContext = /*#__PURE__*/_react.default.createContext({});
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 = exports.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));
};
var useAccordion = exports.useAccordion = function useAccordion() {
var context = _react.default.useContext(AccordionContext);
if (context === undefined) {
throw new Error('Besoin de context AccordionContext');
}
return context;
};
var AccordionItemProvider = exports.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));
};
var useAccordionItem = exports.useAccordionItem = function useAccordionItem() {
var context = _react.default.useContext(AccordionItemContext);
if (context === undefined) {
throw new Error('Besoin de context AccordionItemContext');
}
return context;
};