@braineet/ui
Version:
Braineet design system
45 lines • 1.48 kB
JavaScript
import React, { createContext, useState, useContext, useEffect } from 'react';
import { jsx as _jsx } from "react/jsx-runtime";
export var TabsContext = /*#__PURE__*/createContext([{}, function () {}]);
var TabsProvider = function TabsProvider(_ref) {
var children = _ref.children,
selected = _ref.selected,
focusOnChangeTab = _ref.focusOnChangeTab;
var _useState = useState(selected),
activeTab = _useState[0],
changeTab = _useState[1];
var _useState2 = useState(false),
haveChanged = _useState2[0],
setHaveChanged = _useState2[1];
useEffect(function () {
changeTab(selected);
}, [selected]);
var tabsContextValue = React.useMemo(function () {
return {
activeTab: activeTab,
changeTab: changeTab,
focusOnChangeTab: focusOnChangeTab,
haveChanged: haveChanged,
setHaveChanged: setHaveChanged
};
}, [activeTab, changeTab, focusOnChangeTab, haveChanged, setHaveChanged]);
return /*#__PURE__*/_jsx(TabsContext.Provider, {
value: tabsContextValue,
children: typeof children === 'function' ? children({
changeTab: changeTab,
activeTab: activeTab
}) : children
});
};
export var useTabs = function useTabs() {
var tabs = useContext(TabsContext);
if (typeof tabs === 'undefined') {
throw new Error('useTabs must be used within a TabsProvider');
}
return tabs;
};
TabsProvider.defaultProps = {
selected: 0,
focusOnChangeTab: false
};
export default TabsProvider;