Navigation.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { useContext, useEffect } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { navContext } from '@/context';
  4. import { ALL_ROUTER_TYPES, NavInfo } from '@/router/Types';
  5. export const useNavigationHook = (
  6. type: ALL_ROUTER_TYPES,
  7. extraParam?: {
  8. databaseName?: string;
  9. collectionName?: string;
  10. title?: string;
  11. extra?: React.ReactNode;
  12. }
  13. ) => {
  14. const { t: navTrans } = useTranslation('nav');
  15. const { setNavInfo } = useContext(navContext);
  16. const {
  17. databaseName = '',
  18. collectionName = '',
  19. extra,
  20. } = extraParam || {
  21. collectionName: '',
  22. databaseName: '',
  23. };
  24. useEffect(() => {
  25. switch (type) {
  26. case ALL_ROUTER_TYPES.HOME: {
  27. const navInfo: NavInfo = {
  28. navTitle: navTrans('welcome'),
  29. backPath: '',
  30. showDatabaseSelector: false,
  31. };
  32. setNavInfo(navInfo);
  33. break;
  34. }
  35. case ALL_ROUTER_TYPES.DATABASES: {
  36. const navInfo: NavInfo = {
  37. navTitle: collectionName,
  38. backPath: '',
  39. showDatabaseSelector: true,
  40. };
  41. if (collectionName) {
  42. navInfo.extra = extra;
  43. }
  44. setNavInfo(navInfo);
  45. break;
  46. }
  47. case ALL_ROUTER_TYPES.SEARCH: {
  48. const navInfo: NavInfo = {
  49. navTitle: navTrans('search'),
  50. backPath: '',
  51. showDatabaseSelector: true,
  52. };
  53. setNavInfo(navInfo);
  54. break;
  55. }
  56. case ALL_ROUTER_TYPES.SYSTEM: {
  57. const navInfo: NavInfo = {
  58. navTitle: navTrans('system'),
  59. backPath: '',
  60. showDatabaseSelector: false,
  61. };
  62. setNavInfo(navInfo);
  63. break;
  64. }
  65. case ALL_ROUTER_TYPES.USER: {
  66. const navInfo: NavInfo = {
  67. navTitle: navTrans('user'),
  68. backPath: '',
  69. showDatabaseSelector: true,
  70. };
  71. setNavInfo(navInfo);
  72. break;
  73. }
  74. default:
  75. break;
  76. }
  77. }, [type, navTrans, setNavInfo, databaseName, collectionName]);
  78. };