Navigation.tsx 2.3 KB

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