CustomNavAndContents.tsx 1.6 KB

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