UNPKG

@braineet/ui

Version:

Braineet design system

45 lines 1.48 kB
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;