react-dyn-tabs
Version:
React dynamic tabs with full API
37 lines • 1.48 kB
JavaScript
function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
import React, { memo } from 'react';
import { ApiContext, ForceUpdateContext } from '../context.js';
import panelPropsManager from './panelPropsManager.js';
import PropTypes from 'prop-types';
var PanelComponent = function PanelComponent(props) {
React.useContext(ForceUpdateContext);
var id = props.id,
selectedTabID = props.selectedTabID,
api = React.useContext(ApiContext),
isSelected = id === selectedTabID,
panelProps = panelPropsManager({
isSelected: isSelected,
api: api,
id: id
}),
previousSelectedTabID = api.state.selectedTabID,
_api$getTab = api.getTab(id),
PanelComponent = _api$getTab.panelComponent,
lazy = _api$getTab.lazy;
var hasBeenSelected = false;
if (!lazy || isSelected || previousSelectedTabID === id || api.activedTabsHistory.tabsId.indexOf(id) >= 0) {
hasBeenSelected = true;
}
return /*#__PURE__*/React.createElement("div", panelProps, hasBeenSelected ? PanelComponent ? /*#__PURE__*/React.createElement(PanelComponent, {
id: id,
isSelected: isSelected,
api: api.userProxy
}) : null : null);
};
var Panel = /*#__PURE__*/memo(PanelComponent, function (oldProps, newProps) {
var id = oldProps.id,
oldActiveId = oldProps.selectedTabID,
newActiveId = newProps.selectedTabID;
return oldActiveId === newActiveId || id !== oldActiveId && id !== newActiveId;
});
export default Panel;