CustomNavAndContents.jsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { useState } from 'react';
  2. import PropTypes from 'prop-types';
  3. import CustomNav, { CustomNavTab, CustomNavDropdown } from './CustomNav';
  4. import CustomTabContent from './CustomTabContent';
  5. const CustomNavAndContents = (props) => {
  6. const {
  7. navTabMapping, defaultTabIndex, navigationMode, tabContentClasses, breakpointToHideInactiveTabsDown,
  8. } = props;
  9. const [activeTab, setActiveTab] = useState(Object.keys(props.navTabMapping)[defaultTabIndex || 0]);
  10. let SelectedNav;
  11. switch (navigationMode) {
  12. case 'tab':
  13. SelectedNav = CustomNavTab;
  14. break;
  15. case 'dropdown':
  16. SelectedNav = CustomNavDropdown;
  17. break;
  18. case 'both':
  19. SelectedNav = CustomNav;
  20. break;
  21. }
  22. return (
  23. <>
  24. <SelectedNav
  25. activeTab={activeTab}
  26. navTabMapping={navTabMapping}
  27. onNavSelected={setActiveTab}
  28. breakpointToHideInactiveTabsDown={breakpointToHideInactiveTabsDown}
  29. />
  30. <CustomTabContent activeTab={activeTab} navTabMapping={navTabMapping} additionalClassNames={tabContentClasses} />
  31. </>
  32. );
  33. };
  34. CustomNavAndContents.propTypes = {
  35. navTabMapping: PropTypes.object.isRequired,
  36. defaultTabIndex: PropTypes.number,
  37. navigationMode: PropTypes.oneOf(['both', 'tab', 'dropdown']),
  38. tabContentClasses: PropTypes.arrayOf(PropTypes.string),
  39. breakpointToHideInactiveTabsDown: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),
  40. };
  41. CustomNavAndContents.defaultProps = {
  42. navigationMode: 'tab',
  43. tabContentClasses: ['p-4'],
  44. };
  45. export default CustomNavAndContents;