CustomNavAndContents.tsx 1.5 KB

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