CustomNavAndContents.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import type { ReactNode } from 'react';
  2. import React, { useState, type JSX } from 'react';
  3. import CustomNav, { CustomNavTab, CustomNavDropdown } 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 = (props: CustomNavAndContentsProps): JSX.Element => {
  14. const {
  15. navTabMapping, defaultTabIndex, navigationMode = 'tab', tabContentClasses = ['p-4'], breakpointToHideInactiveTabsDown, navRightElement,
  16. } = props;
  17. const [activeTab, setActiveTab] = useState(Object.keys(props.navTabMapping)[defaultTabIndex || 0]);
  18. let SelectedNav;
  19. switch (navigationMode) {
  20. case 'tab':
  21. SelectedNav = CustomNavTab;
  22. break;
  23. case 'dropdown':
  24. SelectedNav = CustomNavDropdown;
  25. break;
  26. case 'both':
  27. SelectedNav = CustomNav;
  28. break;
  29. }
  30. return (
  31. <>
  32. <SelectedNav
  33. activeTab={activeTab}
  34. navTabMapping={navTabMapping}
  35. onNavSelected={setActiveTab}
  36. breakpointToHideInactiveTabsDown={breakpointToHideInactiveTabsDown}
  37. navRightElement={navRightElement}
  38. />
  39. <CustomTabContent activeTab={activeTab} navTabMapping={navTabMapping} additionalClassNames={tabContentClasses} />
  40. </>
  41. );
  42. };
  43. export default CustomNavAndContents;