react-dyn-tabs
Version:
React dynamic tabs with full API
98 lines (97 loc) • 4.95 kB
JavaScript
exports.__esModule = true;
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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); } /* eslint react/prop-types: 0 */
function useDynamicTabs(getDeps, options, modules) {
if (options === void 0) {
options = {};
}
var _getDeps = getDeps(),
reducer = _getDeps.reducer,
getApiInstance = _getDeps.getApiInstance,
ApiContext = _getDeps.ApiContext,
StateContext = _getDeps.StateContext,
ForceUpdateContext = _getDeps.ForceUpdateContext,
Components = _getDeps.Components;
var ref = (0, _react.useRef)(null);
if (ref.current === null) {
ref.current = {
Components: _extends({}, Components),
TabListComponent: null,
PanelListComponent: null
};
ref.current.api = getApiInstance(options, modules, ref.current.Components);
}
var api = ref.current.api,
_ref = ref.current,
_useReducer = (0, _react.useReducer)(reducer, api.optionsManager.initialState),
state = _useReducer[0],
dispatch = _useReducer[1],
_useState = (0, _react.useState)({}),
flushState = _useState[0],
setFlushState = _useState[1];
api.updateStateRef(state, dispatch).updateFlushState(setFlushState);
(0, _react.useLayoutEffect)(function () {
api.updateState(state);
}, [state]);
(0, _react.useLayoutEffect)(function () {
api.trigger('onLoad', api.userProxy);
return function () {
api.trigger('onDestroy', api.userProxy);
};
}, []);
(0, _react.useLayoutEffect)(function () {
api.trigger('onInit', api.userProxy);
});
(0, _react.useLayoutEffect)(function () {
api.trigger('_onReady', api.userProxy);
}, []);
(0, _react.useLayoutEffect)(function () {
var oldState = api.previousState,
_api$helper$getArrays = api.helper.getArraysDiff(state.openTabIDs, oldState.openTabIDs),
openedTabIDs = _api$helper$getArrays[0],
closedTabIDs = _api$helper$getArrays[1],
isSwitched = oldState.selectedTabID !== state.selectedTabID;
api.onChange({
newState: state,
oldState: oldState,
closedTabIDs: closedTabIDs,
openedTabIDs: openedTabIDs,
isSwitched: isSwitched
});
}, [state]);
(0, _react.useLayoutEffect)(function () {
api.trigger('_onFlushEffects', api.userProxy, function () {
return [{
currentData: api.getData(),
instance: api.userProxy
}];
});
}, [flushState]);
if (!_ref.TabListComponent) _ref.TabListComponent = function TabListComponent(props) {
if (props === void 0) {
props = {};
}
return /*#__PURE__*/_react["default"].createElement(ApiContext.Provider, {
value: api
}, /*#__PURE__*/_react["default"].createElement(StateContext.Provider, {
value: api.stateRef
}, /*#__PURE__*/_react["default"].createElement(ForceUpdateContext.Provider, {
value: api.forceUpdateState
}, /*#__PURE__*/_react["default"].createElement(_ref.Components.TablistView, null, /*#__PURE__*/_react["default"].createElement(_ref.Components.TablistContainer, null, /*#__PURE__*/_react["default"].createElement(_ref.Components.TablistOverflow, null, /*#__PURE__*/_react["default"].createElement(_ref.Components.TabList, props))), props.children))));
};
if (!_ref.PanelListCompoent) _ref.PanelListCompoent = function PanelListCompoent(props) {
return /*#__PURE__*/_react["default"].createElement(ApiContext.Provider, {
value: api
}, /*#__PURE__*/_react["default"].createElement(StateContext.Provider, {
value: api.stateRef
}, /*#__PURE__*/_react["default"].createElement(ForceUpdateContext.Provider, {
value: api.forceUpdateState
}, /*#__PURE__*/_react["default"].createElement(Components.PanelList, props, "props.children"))));
};
return [_ref.TabListComponent, _ref.PanelListCompoent, api.ready];
}
var _default = exports["default"] = useDynamicTabs;
;