CustomNavAndContents.jsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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, navRightElement,
  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. navRightElement={navRightElement}
  30. />
  31. <CustomTabContent activeTab={activeTab} navTabMapping={navTabMapping} additionalClassNames={tabContentClasses} />
  32. </>
  33. );
  34. };
  35. CustomNavAndContents.propTypes = {
  36. navTabMapping: PropTypes.object.isRequired,
  37. defaultTabIndex: PropTypes.number,
  38. navigationMode: PropTypes.oneOf(['both', 'tab', 'dropdown']),
  39. tabContentClasses: PropTypes.arrayOf(PropTypes.string),
  40. breakpointToHideInactiveTabsDown: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),
  41. navRightElement: PropTypes.node,
  42. };
  43. CustomNavAndContents.defaultProps = {
  44. navigationMode: 'tab',
  45. tabContentClasses: ['p-4'],
  46. };
  47. export default CustomNavAndContents;